X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/933849e1079bf5389d6a38447d49cbe5cc65101d..3bb5446e9de29764eb8d739753c101cbb90a7b21:/docs/source/app_smpi.rst diff --git a/docs/source/app_smpi.rst b/docs/source/app_smpi.rst index 1a3a186f92..c5040da2bc 100644 --- a/docs/source/app_smpi.rst +++ b/docs/source/app_smpi.rst @@ -106,7 +106,7 @@ tracing during the simulation. You can get the full list by running Finally, you can pass :ref:`any valid SimGrid parameter ` to your program. In particular, you can pass ``--cfg=network/model:ns-3`` to -switch to use :ref:`model_ns3`. These parameters should be placed after +switch to use :ref:`models_ns3`. These parameters should be placed after the name of your binary on the command line. ............................... @@ -203,9 +203,11 @@ means that the selected algorithm will be used .. Warning:: Some collective may require specific conditions to be executed correctly (for instance having a communicator with a power of two number of nodes only), which are currently not enforced by - Simgrid. Some crashes can be expected while trying these algorithms + SimGrid. Some crashes can be expected while trying these algorithms with unusual sizes/parameters +To retrieve the full list of implemented algorithms in your version of SimGrid, simply use ``smpirun --help-coll``. + MPI_Alltoall ^^^^^^^^^^^^ @@ -453,12 +455,13 @@ Adding an algorithm ^^^^^^^^^^^^^^^^^^^ To add a new algorithm, one should check in the src/smpi/colls folder -how other algorithms are coded. Using plain MPI code inside Simgrid +how other algorithms are coded. Using plain MPI code inside SimGrid can't be done, so algorithms have to be changed to use smpi version of the calls instead (MPI_Send will become smpi_mpi_send). Some functions may have different signatures than their MPI counterpart, please check the other algorithms or contact us using the `>SimGrid -developers mailing list `_. +user mailing list `_, +or on `>Mattermost `_. Example: adding a "pair" version of the Alltoall collective. @@ -470,7 +473,7 @@ Example: adding a "pair" version of the Alltoall collective. - To register the new version of the algorithm, simply add a line to the corresponding macro in src/smpi/colls/cools.h ( add a "COLL_APPLY(action, COLL_ALLTOALL_SIG, pair)" to the COLL_ALLTOALLS macro ). The algorithm should now be compiled and be selected when using --cfg=smpi/alltoall:pair at runtime. - - To add a test for the algorithm inside Simgrid's test suite, juste add the new algorithm name in the ALLTOALL_COLL list found inside teshsuite/smpi/CMakeLists.txt . When running ctest, a test for the new algorithm should be generated and executed. If it does not pass, please check your code or contact us. + - To add a test for the algorithm inside SimGrid's test suite, juste add the new algorithm name in the ALLTOALL_COLL list found inside teshsuite/smpi/CMakeLists.txt . When running ctest, a test for the new algorithm should be generated and executed. If it does not pass, please check your code or contact us. - Please submit your patch for inclusion in SMPI, for example through a pull request on GitHub or directly per email. @@ -578,11 +581,11 @@ the exact same file several times, be it a library or a relocatable executable. It makes perfectly sense in the general case, but we need to circumvent this rule of thumb in our case. To that extend, the binary is copied in a temporary file before being re-linked against. -``dlmopen()`` cannot be used as it only allows 256 contextes, and as it -would also duplicate simgrid itself. +``dlmopen()`` cannot be used as it only allows 256 contexts, and as it +would also duplicate SimGrid itself. This approach greatly speeds up the context switching, down to about -40 CPU cycles with our raw contextes, instead of requesting several +40 CPU cycles with our raw contexts, instead of requesting several syscalls with the ``mmap()`` approach. Another advantage is that it permits one to run the SMPI contexts in parallel, which is obviously not possible with the ``mmap()`` approach. It was tricky to implement, but @@ -601,7 +604,7 @@ implementation leads.\n Also, currently, only the binary is copied and dlopen-ed for each MPI rank. We could probably extend this to external dependencies, but for now, any external dependencies must be statically linked into your -application. As usual, simgrid itself shall never be statically linked +application. As usual, SimGrid itself shall never be statically linked in your app. You don't want to give a copy of SimGrid to each MPI rank: that's ways too much for them to deal with. @@ -748,11 +751,11 @@ them on top of SMPI. Troubleshooting with SMPI ------------------------- -................................. -./configure refuses to use smpicc -................................. +......................................... +./configure or cmake refuse to use smpicc +......................................... -If your ``./configure`` reports that the compiler is not +If your configuration script (such as ``./configure`` or ``cmake``) reports that the compiler is not functional or that you are cross-compiling, try to define the ``SMPI_PRETEND_CC`` environment variable before running the configuration. @@ -771,20 +774,20 @@ fail without ``smpirun``. .. warning:: - Make sure that SMPI_PRETEND_CC is only set when calling ./configure, + Make sure that SMPI_PRETEND_CC is only set when calling the configuration script but not during the actual execution, or any program compiled with smpicc will stop before starting. -.............................................. -./configure does not pick smpicc as a compiler -.............................................. +..................................................... +./configure or cmake do not pick smpicc as a compiler +..................................................... In addition to the previous answers, some projects also need to be explicitly told what compiler to use, as follows: .. code-block:: console - $ SMPI_PRETEND_CC=1 ./configure CC=smpicc # here come the other configure parameters + $ SMPI_PRETEND_CC=1 cmake CC=smpicc # here come the other configure parameters $ make Maybe your configure is using another variable, such as ``cc`` (in