具有多个 Pthread 的 MPI
Posted
技术标签:
【中文标题】具有多个 Pthread 的 MPI【英文标题】:MPI with Multiple Pthreads 【发布时间】:2016-08-02 11:39:02 【问题描述】:我正在使用以下代码段为多个线程初始化 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"
在做
mpiexec --version and ompi_info
我得到这个输出:mpiexec (OpenRTE) 1.4.3 和 Open MPI: 1.4.3
我使用mpicc mpi_hello.c 编译,其中c 文件包含上述代码部分。任何想法为什么我的 mpi 库不支持多线程? 我想从不同的线程而不是进程发送和接收 mpi 消息。
谢谢
【问题讨论】:
【参考方案1】:您没有指定您正在使用哪个平台或发行版或构建。您使用的库很可能没有配置为多线程使用。从源代码构建时,您需要使用以下内容构建它:
$ ./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
了解重要详情,包括在此模式下运行的限制信息:
请注意,
MPI_THREAD_MULTIPLE
支持仅经过轻微测试。它可能不适用于线程密集型应用程序。另请注意,只有下面列出的 BTL 的 MPI 点对点通信功能被认为是线程安全的。其他支持功能(例如 MPI 属性)在被多个线程同时使用时尚未被证明是安全的。
请注意,您报告的版本(1.4)也很旧;当前的稳定版本是v1.10。
如果您想使用多线程,您可能需要重新考虑您的设计;有几个线程框架(例如Threaded Building Blocks)比 MPI 更适合,后者主要用于集群应用程序。一些替代方案:
【讨论】:
【参考方案2】:查看 MPI 关于线程支持的文档: 如果使用 --enable-mpi-thread-multiple 配置开关配置 Open MPI,则包括 MPI_THREAD_MULTIPLE 支持。您可以检查 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 输出,看看它是否受支持。
【讨论】:
这个答案虽然很老,但当然仍然是正确的。我只想补充一点,ompi_info | grep -i thread
的输出现在看起来不同了;例如使用 OpenMPI 3.1 版,我得到以下信息:Thread support: posix (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: no, ORTE progress: yes, Event lib: yes)
以上是关于具有多个 Pthread 的 MPI的主要内容,如果未能解决你的问题,请参考以下文章