X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/044a4173899942682beec27e6604144f4261b774..8f58249ee1e3d4fff121c049fc018bf6fa9555a8:/docs/source/app_smpi.rst diff --git a/docs/source/app_smpi.rst b/docs/source/app_smpi.rst index b6febf7c3e..801a244f1b 100644 --- a/docs/source/app_smpi.rst +++ b/docs/source/app_smpi.rst @@ -74,9 +74,9 @@ If you use cmake, set the variables ``MPI_C_COMPILER``, ``MPI_CXX_COMPILER`` and ``MPI_Fortran_COMPILER`` to the full path of smpicc, smpicxx and smpiff (or smpif90), respectively. Example: -.. code-block:: shell +.. code-block:: console - cmake -DMPI_C_COMPILER=/opt/simgrid/bin/smpicc -DMPI_CXX_COMPILER=/opt/simgrid/bin/smpicxx -DMPI_Fortran_COMPILER=/opt/simgrid/bin/smpiff . + $ cmake -DMPI_C_COMPILER=/opt/simgrid/bin/smpicc -DMPI_CXX_COMPILER=/opt/simgrid/bin/smpicxx -DMPI_Fortran_COMPILER=/opt/simgrid/bin/smpiff . .................... Simulating your Code @@ -84,9 +84,9 @@ Simulating your Code Use the ``smpirun`` script as follows: -.. code-block:: shell +.. code-block:: console - smpirun -hostfile my_hostfile.txt -platform my_platform.xml ./program -blah + $ smpirun -hostfile my_hostfile.txt -platform my_platform.xml ./program -blah - ``my_hostfile.txt`` is a classical MPI hostfile (that is, this file lists the machines on which the processes must be dispatched, one @@ -120,17 +120,17 @@ following commands. Once in GDB, each MPI ranks will be represented as a regular thread, and you can explore the state of each of them as usual. -.. code-block:: shell +.. code-block:: console - smpirun -wrapper valgrind ...other args... - smpirun -wrapper "gdb --args" --cfg=contexts/factory:thread ...other args... + $ smpirun -wrapper valgrind ...other args... + $ smpirun -wrapper "gdb --args" --cfg=contexts/factory:thread ...other args... Some shortcuts are available: - ``-gdb`` is equivalent to ``-wrapper "gdb --args" -keep-temps``, to run within gdb debugger - ``-lldb`` is equivalent to ``-wrapper "lldb --" -keep-temps``, to run within lldb debugger -- ``-vgdb`` is equivalent to ``-wrapper "valgrind --vgdb=yes --vgdb-error=0" --keep-temps``, to run within valgrind and allow to attach a debugger +- ``-vgdb`` is equivalent to ``-wrapper "valgrind --vgdb=yes --vgdb-error=0" -keep-temps``, + to run within valgrind and allow to attach a debugger To help locate bottlenecks and largest allocations in the simulated application, the -analyze flag can be passed to smpirun. It will activate @@ -298,7 +298,7 @@ MPI_Scatter - automatic (experimental): use an automatic self-benchmarking algorithm - ompi_basic_linear: basic linear scatter - ompi_binomial: binomial tree scatter - - mvapich2_two_level_direct: SMP aware algorithm, with an intra-node stage (default set to mpich selector), and then a basic linear inter node stage. Use mvapich2 selector to change these to tuned algorithms for Stampede cluster. + - mvapich2_two_level_direct: SMP aware algorithm, with an intra-node stage (default set to mpich selector), and then a basic linear inter node stage. Use mvapich2 selector to change these to tuned algorithms for Stampede cluster. - mvapich2_two_level_binomial: SMP aware algorithm, with an intra-node stage (default set to mpich selector), and then a binomial phase. Use mvapich2 selector to change these to tuned algorithms for Stampede cluster. MPI_Reduce @@ -688,12 +688,12 @@ iterations. These samples are done per processor with SMPI_SAMPLE_LOCAL, and shared between all processors with SMPI_SAMPLE_GLOBAL. Of course, none of this will work if the execution time of your loop iteration are not stable. If some parameters have an -incidence on the timing of a kernel, and if they are reused often -(same kernel launched with a few different sizes during the run, for example), -SMPI_SAMPLE_LOCAL_TAG and SMPI_SAMPLE_GLOBAL_TAG can be used, with a tag -as last parameter, to differentiate between calls. The tag is a character +incidence on the timing of a kernel, and if they are reused often +(same kernel launched with a few different sizes during the run, for example), +SMPI_SAMPLE_LOCAL_TAG and SMPI_SAMPLE_GLOBAL_TAG can be used, with a tag +as last parameter, to differentiate between calls. The tag is a character chain crafted by the user, with a maximum size of 128, and should include -what is necessary to group calls of a given size together. +what is necessary to group calls of a given size together. This feature is demoed by the example file `examples/smpi/NAS/ep.c `_ @@ -750,13 +750,13 @@ Some show how to simply run MPI code in SimGrid, how to use the tracing/replay mechanism or how to use plugins written in S4U to extend the simulator abilities. -Another source of examples lay in the SimGrid archive, under +Another source of examples lay in the SimGrid archive, under `teshsuite/smpi `_. They are not in the ``examples`` directory because they probably don't constitute pedagogical examples. Instead, they are intended to stress our implementation during the tests. Some of you may be interested anyway. - + But the best source of SMPI examples is certainly the `proxy app `_ external project. Proxy apps are scale models of real, massive HPC applications: each of @@ -783,10 +783,10 @@ functional or that you are cross-compiling, try to define the ``SMPI_PRETEND_CC`` environment variable before running the configuration. -.. code-block:: shell +.. code-block:: console - SMPI_PRETEND_CC=1 ./configure # here come the configure parameters - make + $ SMPI_PRETEND_CC=1 ./configure # here come the configure parameters + $ make Indeed, the programs compiled with ``smpicc`` cannot be executed without ``smpirun`` (they are shared libraries and do weird things on @@ -808,10 +808,10 @@ fail without ``smpirun``. In addition to the previous answers, some projects also need to be explicitly told what compiler to use, as follows: -.. code-block:: shell +.. code-block:: console - SMPI_PRETEND_CC=1 ./configure CC=smpicc # here come the other configure parameters - make + $ SMPI_PRETEND_CC=1 ./configure CC=smpicc # here come the other configure parameters + $ make Maybe your configure is using another variable, such as ``cc`` (in lower case) or similar. Just check the logs. @@ -847,7 +847,7 @@ SimGrid uses time-independent traces, in which each actor is given a script of the actions to do sequentially. These trace files can actually be captured with the online version of SMPI, as follows: -.. code-block:: shell +.. code-block:: console $ smpirun -trace-ti --cfg=tracing/filename:LU.A.32 -np 32 -platform ../cluster_backbone.xml bin/lu.A.32 @@ -860,12 +860,14 @@ To replay this with SMPI, you need to first compile the provided `simgrid/examples/smpi/replay `_. -.. code-block:: shell +.. code-block:: console $ smpicxx ../replay.cpp -O3 -o ../smpi_replay Afterward, you can replay your trace in SMPI as follows: +.. code-block:: console + $ smpirun -np 32 -platform ../cluster_torus.xml -ext smpi_replay ../smpi_replay LU.A.32 All the outputs are gone, as the application is not really simulated