
Hi Hicham,
On Tue, Dec 7, 2010 at 12:10 AM, Hicham Mouline
On a related note, I posted a question to the openmpi forum. MPI_INIT is identical MPI_INIT_THREAD(MPI_THREAD_SINGLE), but I couldn't see the utility of having MPI_THREAD_FUNNELED.
MPI_THREAD_SINGLE = no threads at all. MPI_THREAD_FUNNELED = you can have threads, but only the *main* thread (see below) issues MPI calls; you can think of this as: your application is multi-threaded, but it is single-threaded when it comes to MPI interaction. MPI_THREAD_SERIALIZED = your application uses threads, and they can issue independent MPI calls; however, you synchronize your threads so that no two MPI calls happen concurrently (i.e., the MPI implementation may be non-reentrant). MPI_THREAD_MULTIPLE = your application uses threads, and they call MPI functions concurrently. IIRC, both OpenMPI and MPICH support up to MPI_THREAD_MULTIPLE (if compiled with threading enabled).
I mean: if I mpirun a process, and then a thread that is not the main thread calls MPI_INIT only by ususal mpi::environment construction, would it work?
By definition the "main thread" is the one that calls MPI_Init or MPI_Init_thread. Hope this helps, Riccardo