gpt4 book ai didi

c++ - 序列化 mpi 线程

转载 作者:行者123 更新时间:2023-11-28 01:05:12 25 4
gpt4 key购买 nike

有没有办法序列化您的 MPI 代码的某个部分?例如,将信息打印到屏幕上时。如下所示:

MPI_SERIALIZE();

cerr << "THIS WILL BE PRINTED ";
cerr << "IN ORDER" << endl;

MPI_END_SERILIZE();

如果有两个 MPI 线程,则不会有 case :

THIS WILL BE PRINTED THIS WILL BE PRINTED IN ORDER 
IN ORDER

谢谢

最佳答案

我在演示程序中这样做的方式(注意 - 由于同步成本高,您只能在小演示程序中这样做;如果您试图控制数据文件的输出,你会使用 MPI-IO,如果你试图协调输出到终端,最简单的方法是将数据发送到任务 0 并让它完成所有输出)是循环遍历障碍,像这样:

#include <iostream>
#include <mpi.h>

using namespace std;

int main(int argc, char **argv) {

int rank, size;
int ierr;

ierr = MPI_Init(&argc, &argv);

ierr = MPI_Comm_size(MPI_COMM_WORLD, &size);
ierr = MPI_Comm_rank(MPI_COMM_WORLD, &rank);

for (int i=0; i<size; i++)
{
if (i == rank) {
cout << "Hello from task " << rank << " of "
<< size << " world!" << endl;
}
MPI_Barrier(MPI_COMM_WORLD);
}

MPI_Finalize();

return 0;
}

(作为一个更小的东西,MPI 没有线程,它有进程。这可能看起来像是一个小细节,但是如果你开始将 MPI 与 OpenMP 结合起来,例如,线程和进程之间的区别就变得很重要。 )

关于c++ - 序列化 mpi 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6579563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com