加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – MPI对cout的“原子”调用

发布时间:2020-12-16 05:03:03 所属栏目:百科 来源:网络整理
导读:我感兴趣的是OpenMPI中是否有命令或技术要进行原子调用以写入stdout(或者就此而言,任何流). 我注意到的是,在执行MPI程序期间,写入cout(或其他流)的调用可能会变得混乱,因为每当proc到达某段代码时,每个proc都可以写入.报告结果时,可以通过多个过程写入一行,
我感兴趣的是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和幻灯片10有一个解决方案.
(或“与M.P Pacheco的Mpi并行编程”一书的 chapter 8.1)

在排名为0的过程中使用cout执行所有I / O操作.如果要从其他进程输出一些数据,只需将带有此数据的MPI消息发送到排名0.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读