Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] Help!
From: guosong (guosong1079_at_[hidden])
Date: 2009-09-03 21:17:53

Thanks. I thought those threads will not interfere with each other since they have no common variables except std IO.

Date: Thu, 3 Sep 2009 09:01:28 -0700
From: Eugene.Loh_at_[hidden]
To: users_at_[hidden]
Subject: Re: [OMPI users] Help!

guosong wrote:

I am new to open MPI
I am not, but I'm not real familiar with thread-safe MPI programming. Still, I saw no other replies to your question, so I'll make an attempt to answer.

MPI does not guarantee thread safety. E.g., see and the ensuing pages.

To do what you want to do, you need to make sure you have thread safety. There is a standard MPI interface for doing so. I'm not good at C++, so here is a C example:

#include <stdio.h>
#include <mpi.h>

int main(int argc, char **argv) {
  int provided;

  /* start MPI, asking for support for multiple threads */

  /* report what level of support is actually provided */
  if ( MPI_THREAD_SINGLE == provided ) printf(" MPI_THREAD_SINGLE\n");
  if ( MPI_THREAD_FUNNELED == provided ) printf(" MPI_THREAD_FUNNELED\n");
  if ( MPI_THREAD_SERIALIZED == provided ) printf(" MPI_THREAD_SERIALIZED\n");
  if ( MPI_THREAD_MULTIPLE == provided ) printf(" MPI_THREAD_MULTIPLE\n");

  /* exit */

  return 0;

Run this program. If the program does not print out "MPI_THREAD_MULTIPLE", you're not getting the level of thread support you require and your program is not guaranteed to run properly. You have to make sure you're using a thread-safe MPI before you can expect your program to work.

The next question is whether Open MPI is thread safe, and I'll leave you with this:

Good luck. Again, I'm not experienced with thread-safe MPI programming (though I understand the general concepts).