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_FUNNELED
和 MPI_SERIALIZED
也可以工作。
【讨论】:
以上是关于MPI_Init() VS MPI_Init_thread()的主要内容,如果未能解决你的问题,请参考以下文章
MPI_Init() 之前的初始化变量和 MPI_Finanlize() 之后的 cout
vs2019运行mpi如何改变进程数, 运行结果总是一个进程,进程号为0; 如何改变VS2019进程数? return 0;