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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |