MPI_Init() VS MPI_Init_thread()

Posted

技术标签:

【中文标题】MPI_Init() VS MPI_Init_thread()【英文标题】: 【发布时间】:2016-04-23 10:58:33 【问题描述】:

有什么区别,应该实际使用哪一个?我找到了这个IBM 链接和这个问题MPI - one function for MPI_Init and MPI_Init_thread。如果这很重要,我只对 C 感兴趣。


两个函数的描述是一样的:

MPI_Init_thread 初始化MPI执行环境

正如您在他们的参考文献中看到的:MPI_Init() 和 MPI_Init_thread(),但是参数不同。

【问题讨论】:

【参考方案1】:

当你的程序使用线程时,你应该使用MPI_Init_thread()

这取决于您对线程的使用,您将通过哪个值required。 参考 OpenMPI 手册:

MPI_THREAD_SINGLE 只会执行一个线程。

MPI_THREAD_FUNNELED 如果进程是多线程的,只有调用 MPI_Init_thread 的线程才会调用 MPI。

MPI_THREAD_SERIALIZED 如果进程是多线程的,那么一次只有一个线程会调用 MPI 库。

MPI_THREAD_MULTIPLE 如果进程是多线程的,多个线程可以同时调用 MPI,没有任何限制。

通常,required 的唯一值被区别对待的是MPI_THREAD_MULTIPLE。如果更多线程可以同时调用 MPI 函数,则传递此值。不幸的是,在这种情况下,MPI 库的性能通常很差。

在 MPI 库中,其他人通常会受到同等对待。尽管如此,如果在构建 OpenMPI 时禁用了线程支持,它仍然会抱怨,唯一的 provided 值是 MPI_THREAD_SINGLE,即使 MPI_FUNNELEDMPI_SERIALIZED 也可以工作。

【讨论】:

以上是关于MPI_Init() VS MPI_Init_thread()的主要内容,如果未能解决你的问题,请参考以下文章

MPI_Init() 需要很长时间才能运行

MPI_Init() 之前的初始化变量和 MPI_Finanlize() 之后的 cout

win 10 在vs2017下对mpi的安装以及认识

vs2019运行mpi如何改变进程数, 运行结果总是一个进程,进程号为0; 如何改变VS2019进程数? return 0;

ms mpi 错误:无法分配启动块

MPI基础知识