MPI_Init()与MPI_Init_thread()的区别

8
1个回答

11
每当您的程序使用线程时,应使用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也能正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接