哪个是实际使用的差异?我找到了这个IBM链接和此问题MPI - one function for MPI_Init and MPI_Init_thread。如果重要的话,我只对C感兴趣。
两种功能的描述相同:
MPI_Init_thread 初始化MPI执行环境
正如您在其参考文献中看到的那样:MPI_Init()和MPI_Init_thread(),但参数不同。
答案 0 :(得分:5)
每当您的程序使用线程时,您应该使用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
也可行太