On 12/6/2010 3:16 AM, Hicham Mouline wrote:
Hello,
1. MPI_THREAD_SINGLE: Only one thread will execute.
Does this really mean the process cannot have any other threads at all, even if
they doen't deal with MPI at all?
I'm curious as to how this case affects the openmpi implementation?
Essentially, what is the difference between MPI_THREAD_SINGLE and
MPI_THREAD_FUNNELED?
2. In my case, I'm interested in MPI_THREAD_SERIALIZED. However if it's
available, I can use MPI_THREAD_FUNNELED.
What cmake flags do I need to enable to allow this mode?
3. Assume I assign only 1 thread in my program to deal with MPI. What is the
difference between
int MPI::Init_thread(MPI_THREAD_SINGLE)
int MPI::Init_thread(MPI_THREAD_FUNNELED)
int MPI::Init()
You're question is too broad; perhaps you didn't intend it that way.
Are you trying to do something which may work only with a specific
version of openmpi, or are you willing to adhere to portable practice?
I tend to believe what it says at
http://www.mcs.anl.gov/research/projects/mpi/mpi-standard/mpi-report-2.0/node165.htm
including:
A call to MPI_INIT has the same effect as a call to MPI_INIT_THREAD with
a required = MPI_THREAD_SINGLE
You would likely use one of those if all your MPI calls are from a
single thread, and you don't perform any threading inside MPI. MPI
implementations vary on the extent to which a higher level of threading
than what is declared can be used successfully (there's no guarantee of
bad results if you exceed what was set by MPI_INIT). There shouldn't
be any bad effect from setting a higher level of thread support which
you never use.
I would think your question about cmake flags would apply only once you
chose a compiler. I have never seen anyone try mixing
auto-parallelization with MPI; that would require MPI_THREAD_MULTIPLE
but still appears unpredictable. MPI_THREAD_FUNNELED is used often with
OpenMP parallelization inside MPI.
--
Tim Prince