我感兴趣的是 OpenMPI 中是否有命令或技术可以进行原子调用来写入 stdout(或者就此而言,任何流)。
我注意到,在 MPI 程序执行期间,写入 cout(或其他流)的调用可能会变得混乱,因为每个过程可能会在到达代码的某个部分时进行写入。报告结果时,一行可能会被多个进程写入,从而使问题变得混乱。所以两个不同的进程可能会做这样的事情:
//Proc 10 - results calculated somewhere above
// result1 = 10
// result2 = 11
cout << "My results are: " << result1 << " " << resul2 << endl;
and:
//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 http://www.csee.wvu.edu/~donm/classes/cs591x/notes/io1.ppt幻灯片 10 有一个解决方案。
(或者摘自 P. S. Pacheco 的《使用 Mpi 进行并行编程》一书)
在排名 0 的进程中使用 cout 执行所有 I/O。如果您想从其他进程输出一些数据,只需将包含此数据的 MPI 消息发送到排名 0 即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)