如何使用MPI混合串行和并行代码
How to mix serial and parallel code using MPI
在我的程序中,我只想并行运行一个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程序中没有串行或并行区域。
当你使用mpiexec
或mpirun
启动一个MPI程序时,你启动了一个固定数量的*相同的*串行程序的舰队,它们可以通过调用MPI库不时地在它们之间进行通信。这些单独的串行程序的运行最初只有*的秩不同,每个程序必须根据秩来决定如何运行。运行这些串行程序之一的每个进程只能看到自己的变量,并且必须以调用MPI函数的形式完成工作,以便在不同的进程之间通信这些值。
<一口> *> 一口>
相关文章:
- 对于openMP来说,有什么建议可以将以下代码与openMP并行
- 并行和顺序运行代码时会产生不同的结果
- R-使用RCPP时如何并行C 代码
- 使用 OPENMP 并行化 C++ 代码
- 有人能帮我把这个C++代码并行化吗
- 在C 程序中并行化C代码模块
- 从并行线程在主 Maya 线程上执行代码
- 用于并行化代码的 TBB 教程/文档
- 令人尴尬的并行代码的性能较低
- 如何制作更高级别的并行代码/脚本
- 使用 Boost::测试并行代码
- OpenMP并行代码运行速度较慢
- Visual Studio中的Cuda并行代码生成
- 如何使用MPI混合串行和并行代码
- 标量代码和并行代码的不同行为
- 没有多线程的c++套接字不同步/并行代码
- 为依赖于先前值的矩阵运行并行代码
- OpenMP -在并行代码中运行并行代码
- 并行代码故障排除
- 使用 OpenMP 并行C++代码不会即兴发挥性能