Intel MPI

mpiicc thread_support.c -mt_mpi

MVAPICH2

mpirun_rsh  -np 2 –env MV2_USE_CUDA=1 MV2_ENABLE_AFFINITY=0  ./mpi app

Cary MPICH2

Fine-grained Multi-threading Support
Cray-MPICH now offers improved support for multi-threaded applications
that perform MPI operations within threaded regions. Currently, this
feature is available as a separate version of the Cray-MPICH library
that is invoked by using a new compiler driver option, -craympich-mt.

This feature requires CLE release 5.1 or higher, CrayPE version 2.2.0
or higher, and supports both C/C++ and Fortran in the PrgEnv-cray,
PrgEnv-intel, PrgEnv-gnu, and PrgEnv-pgi programming environments.

At this time, this library supports only MPI point-to-point
operations. Applications that perform collective, one-sided, or MPI-
I/O operations within threaded regions will not see any benefits.
Single-threaded applications, or applications that do not currently
perform MPI operations within threaded regions, should continue to use
the default Cray-MPICH library. This feature does not alter the
thread-safety behavior of the default Cray-MPICH library.

Support for larger subsets of MPI operations will be provided in
future releases.

To use the fine-grained threading feature, follow these steps.

Step 1. Compile a multi-threaded MPI application using the
-craympich-mt compiler driver option.

If the code uses static linking:

cc -craympich-mt -o mpi_mt_test.x mpi_mt_test.c

If the code uses dynamic linking:

cc -dynamic -craympich-mt -o mpi_mt_test.x mpi_mt_test.c

Note: The -craympich-mt and -default64 compiler command line
options are mutually exclusive. If both of these options are
specified on a command line, the compiler will ignore the first
one specified and use the second one.

Step 2. Set the environment variables.

export MPICH_MAX_THREAD_SAFETY=multiple

export MPICH_VERSION_DISPLAY=1

Step 3. Run the executable.

aprun arguments ./executable_name

The MPICH_VERSION_DISPLAY environment variable is set in order to
display the version string and verify that the desired library has
been used. The default threading library displays this version string:

BUILD INFO : Built Date Time Year (svn rev rev) MT-G CPR-R

Where MT-G corresponds to the default Multi-threaded MPI library with
global locks.

The new fine-grained threading library displays this version string:

BUILD INFO : Built Date Time Year (svn rev rev) MT-O CPR-R

Where MT-O corresponds to the fine-grained Multi-threaded MPI library
with per-object locks.

Multithreading MPI