如何使用MPI混合串行和并行代码

How to mix serial and parallel code using MPI

本文关键字:并行 代码 何使用 MPI 混合      更新时间:2023-10-16

在我的程序中,我只想并行运行一个for循环。其余的代码应该连续运行。尽管这可能不是最好的方法,但我想使用这里描述的方法(参见Chris的回答):

链接

简而言之,我让序号为0的部分来做。

现在的问题是我有几个循环,包括一个while循环。结构如下:

# serial part
# start of while loop {
     # parallel part
# end of while loop
# end of serial part

代码结构如下:

boost::mpi::environment env;
boost::mpi::communicator comm;
if(comm.rank()==0)
{
while(...)
{
} // !!!! end the if loop here?
// start parallel for loop here
for(....){}

// continue serial part
 if(comm.rank()==0)
 {
 //...
} // end of while loop
} // end of if loop

在while循环打开后直接关闭串行部分(if循环)是否正确?
其次,我如何告诉其他等级等待第0等级完成?

This:

# serial part
# start of while loop 
     # parallel part
# end of while loop
# end of serial part

不是MPI的工作原理。在MPI程序中没有串行或并行区域。

当你使用mpiexecmpirun启动一个MPI程序时,你启动了一个固定数量的*相同的*串行程序的舰队,它们可以通过调用MPI库不时地在它们之间进行通信。这些单独的串行程序的运行最初只有*的秩不同,每个程序必须根据秩来决定如何运行。运行这些串行程序之一的每个进程只能看到自己的变量,并且必须以调用MPI函数的形式完成工作,以便在不同的进程之间通信这些值。


<一口> *>