具有多个 Pthread 的 MPI

MPI with Multiple Pthreads

我正在使用以下代码段为多线程初始化 mpi 库。但是我总是得到以下输出说 This MPI implementation does not support 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"
}

正在做

mpiexec --version and ompi_info

我得到这个输出:mpiexec (OpenRTE) 1.4.3 和 Open MPI: 1.4.3

我使用mpicc编译mpi_hello.c,其中c文件包含上述代码段。知道为什么我的 mpi 库不支持多线程吗? 我想从不同的线程而不是进程发送和接收 mpi 消息。

谢谢

查看 MPI 关于线程支持的文档: MPI_THREAD_MULTIPLE 如果使用 --enable-mpi-thread-multiple 配置开关配置了 Open MPI,则包含支持。您可以检查 ompi_info(1) 的输出以查看 Open MPI 是否具有 MPI_THREAD_MULTIPLE 支持:

shell$ ompi_info | grep -i thread
      Thread support: posix (mpi: yes, progress: no)

以上输出的 "mpi: yes" 部分表明 Open MPI 是在 MPI_THREAD_MULTIPLE 支持下编译的。

因此请检查您系统上的 ompi_info 输出,看看它是否受支持。

您没有指定您使用的是哪个平台、发行版或构建版本。您正在使用的库很可能没有针对多线程使用进行配置。从源代码构建时,您需要使用以下内容构建它:

$ ./configure --enable-mpi-thread-multiple

您可以通过 运行:

测试您的二进制文件具有哪些功能
$ ompi_info | grep -i thread
          Thread support: posix (mpi: yes, progress: no)

如果不支持,您可能需要 build from source

请查阅 OpenMPI documentation on MPI_Init_Thread 以了解重要的详细信息,包括有关此模式中限制的信息 运行:

Note that MPI_THREAD_MULTIPLE support is only lightly tested. It likely does not work for thread-intensive applications. Also note that only the MPI point-to-point communication functions for the BTL’s listed below are considered thread safe. Other support functions (e.g., MPI attributes) have not been certified as safe when simultaneously used by multiple threads.

请注意,您报告的版本(1.4)也很旧;当前的稳定版本是 v1.10.

如果你想使用多线程,你可能需要重新考虑你的设计;有几个线程框架(例如 Threaded Building Blocks)比 MPI 更适合,它主要用于集群应用程序。一些备选方案: