One of the promises of the MPI standard is that it is possible to implement MPI so that it is thread-safe. This does not mean that MPI is automatically thread-safe, but that an implementor can make it thread-safe. Despite this potential, there have been until recently no thread-safe commercial implementations of MPI. Both Sun and IBM plan to release thread-safe versions of MPI in the late 1997 time frame.
In both implementations, users will specify at link time which version (regular or thread-safe) of the library to use. Applications using the thread-safe version will be able to call MPI routines concurrently from separate threads. A blocked MPI call in one thread will not obstruct MPI operations in other threads. However, in the Sun implementation, the user must make sure there are enough lightweight processes (LWPs). It is not clear how the user should determine the correct number, and it is arguable whether this is the right behavior. In the end, whether these implementations are effective (i.e., solve user problems) will be determined by details of thread scheduling and MPI polling policies.
In the IBM MPI implementation, an MPI process that is single-threaded from the user's point of view will use multiple threads under the covers, allowing greater concurrency (e.g. overlap of communication and computation). These new features will be useful for multithreaded applications or applications running on SMPs. Single-threaded applications on uniprocessors will usually get better performance from the single-threaded MPI.
In the Sun implementation, the implementation itself is not multithreaded. All single-threaded programs will run more efficiently with the non-threadsafe MPI.
In both implementations, the behavior of the multithreaded MPI is consistent with behavior specified in the MPI-2 standard, though extra MPI-2 calls to enable run-time requests are not provided.