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

时间:2015-10-21 12:00:41

标签: c++ boost parallel-processing mpi

在我的程序中,我只希望并行运行for循环。其余代码应该以串行方式运行。尽管这可能不是最佳方式,但我想使用此处描述的方法(请参阅Chris的回答):

link

所以简而言之,我让等级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-loop)是否正确? 其次,我如何告诉其他等级等待0级完成?

1 个答案:

答案 0 :(得分:1)

此:

pushd C:\users\<user>\Desktop
$File = '.\data.csv'
Analyze $File -Min -Max -Top
popd

不是MPI的工作方式。 MPI程序中没有串行或并行区域。

当您使用# serial part # start of while loop # parallel part # end of while loop # end of serial part mpiexec启动MPI程序时,您将启动具有相同 * 序列的固定数量 * 的机群可以使用对MPI库的调用不时地在它们之间进行通信的程序。这些单独的串行程序的运行最初只在它们的排名上有 * ,每个程序必须根据它来决定如何运行。运行其中一个串行程序的每个进程只能看到自己的变量,必须以调用MPI函数的形式完成工作,以便在不同进程之间传递这些值。

通常

*