MPI_Init()VS MPI_Init_thread()

gsa*_*ras 7 c parallel-processing multithreading distributed-computing mpi

哪个是实际使用的差异?我找到了这个IBM链接和这个问题MPI - MPI_Init和MPI_Init_thread的一个函数.如果重要的话,我只对C感兴趣.


两个功能的描述相同:

MPI_Init_thread初始化MPI执行环境

正如你在他们的refs中看到的那样:MPI_Init()MPI_Init_thread(),参数不同.

Vla*_*r F 6

每当您的程序使用线程时,您应该使用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也会起作用.