gpt4 book ai didi

c++ - 在 MPI 中对 cout 的 "atomic"调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:18 26 4
gpt4 key购买 nike

我感兴趣的是 OpenMPI 中是否有命令或技术来进行原子调用以写入 stdout(或者就此而言,任何流)。

我注意到,在 MPI 程序的执行过程中,写入 cout(或其他流)的调用可能会变得困惑,因为每个 proc 都可能在到达特定代码段时写入。报告结果时,一行可以被多个 proc 写入,混淆了问题。所以 2 个不同的过程可能会做这样的事情:

//Proc 10 - results calculated somewhere above
// result1 = 10
// result2 = 11
cout << "My results are: " << result1 << " " << resul2 << endl;

和:

//Proc 20 - results calculated somewhere above
// result1 = 20
// result2 = 21
cout << "My results are: " << result1 << " " << resul2 << endl;

但结果可能是:

My results are: 20 My results are: 10 11 21

我正在寻找的是类似于“阻塞”或原子 cout 的东西(以及可能写入其他流,例如文件流)。所以一旦我开始写一个 cout,它就会阻塞直到语句结束,或者直到发出 endl 或对流的刷新。如果是这样的话,我可以保证这两行是分开的(但是,当然,我仍然不知道哪一行先来):

My results are: 20 21
My results are: 10 11

最佳答案

使用标准 i/o 流(C 语言中的 stdout 和 stdin 或 C++ 中的 cout 和 cin)并不是 MPI 的最佳部分(OpenMPI 实现了 MPI)。有一些关于此的幻灯片:http://www.csee.wvu.edu/~donm/classes/cs591x/notes/io1.ppt Slide 10 有一个解决方案。(或“PS Pacheco 使用 Mpi 进行并行编程”一书的 chapter 8.1)

在 rank 0 的进程中使用 cout 执行所有 I/O。如果你想从其他进程输出一些数据,只需将包含此数据的 MPI 消息发送到 rank 0。

关于c++ - 在 MPI 中对 cout 的 "atomic"调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15901226/

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