在我的程序中,我只希望并行运行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-loop)是否正确? 其次,我如何告诉其他等级等待0级完成?
答案 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函数的形式完成工作,以便在不同进程之间传递这些值。
*