mas*_*sab 3 c multithreading mpi openmpi
我正在使用以下代码段来初始化多个线程的mpi库.但是我总是得到以下输出,说明此MPI实现不支持MPI_THREAD_MULTIPLE.
MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); 
if(provided != MPI_THREAD_MULTIPLE) 
{
   fprintf(stderr, "This MPI implementation does not support MPI_THREAD_MULTIPLE.\n"
}
Run Code Online (Sandbox Code Playgroud)
在做
mpiexec --version and ompi_info
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:mpiexec(OpenRTE)1.4.3和Open MPI:1.4.3
我使用mpicc mpi_hello.c编译,其中c文件包含上面的代码部分.我的mpi库不支持多线程的任何想法?我想从不同的线程发送和接收mpi消息,而不是进程.
谢谢
您没有指定您正在使用的平台或分发或构建.您使用的库很可能没有配置为多线程使用.从源代码构建时,您需要使用以下内容构建它:
$ ./configure --enable-mpi-thread-multiple
Run Code Online (Sandbox Code Playgroud)
您可以通过运行来测试二进制文件具有哪些功能:
$ ompi_info | grep -i thread
          Thread support: posix (mpi: yes, progress: no)
Run Code Online (Sandbox Code Playgroud)
如果不支持,您可能需要从源代码构建.
有关MPI_Init_Thread重要的详细信息,请参阅OpenMPI文档,包括有关在此模式下运行的限制的信息:
请注意,
MPI_THREAD_MULTIPLE只需轻微测试支持.它可能不适用于线程密集型应用程序.另请注意,只有下面列出的BTL的MPI点对点通信功能才被认为是线程安全的.当多个线程同时使用时,其他支持功能(例如,MPI属性)未被认证为安全的.
请注意,您报告的版本(1.4)也很旧; 目前的稳定版本是v1.10.
如果你想使用多个线程,你可能想重新考虑你的设计; 有几个线程框架(如线程构建块)比MPI更合适,MPI主要用于集群应用程序.一些替代品: