MPI_Init()VS MPI_Init_thread()

时间:2016-01-18 10:01:11

标签: c multithreading parallel-processing mpi distributed-computing

哪个是实际使用的差异?我找到了这个IBM链接和此问题MPI - one function for MPI_Init and MPI_Init_thread。如果重要的话,我只对C感兴趣。

两种功能的描述相同:

  

MPI_Init_thread   初始化MPI执行环境

正如您在其参考文献中看到的那样:MPI_Init()MPI_Init_thread()参数不同。

1 个答案:

答案 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_FUNNELEDMPI_SERIALIZED也可行太