首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPI_Barrier()的行为?

MPI_Barrier()的行为?
EN

Stack Overflow用户
提问于 2013-07-11 03:50:55
回答 1查看 1.2K关注 0票数 1

据我所知,这是用来使所有进程处于同一级别。我需要找出openMPI程序的总体处理时间(所有进程完成的时间),所以我认为将MPI_Barrier()放在最后,然后在最后打印MPI_Wtime()-t将打印所有进程完成的时间。

代码语言:javascript
复制
        MPI_stuff;//whatever i want my program to do
        MPI_Barrier(MPI_COMM_WORLD);
        cout << "final time ::: :: " << MPI_Wtime()-t << rank  << endl;
        MPI_Finalize();

但是我使用MPI_Barrier()的时间与使用单个进程MPI_Wtime()-t的情况有很大的不同

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-11 22:49:43

对于MPI过程来说,很容易在时间上变得不同步,特别是如果MPI_stuff中涉及的算法不是全局同步的。对于大多数集群MPI实现来说,由于不同的启动时间和MPI_Init()可能需要不同的时间,进程从一开始就完全不同步是非常典型的。另一个不同步的来源是操作系统噪声,即其他进程偶尔与MPI作业中的一些进程共享CPU时间。

这就是为什么测量并行算法执行时间的正确方法是在之前设置障碍,在之后设置

代码语言:javascript
复制
MPI_Barrier(MPI_COMM_WORLD); // Bring all processes in sync
t = -MPI_Wtime();
MPI_stuff;
MPI_Barrier(MPI_COMM_WORLD); // Wait for all processes to finish processing
t += MPI_Wtime();

如果第一个MPI_Barrier丢失,并且MPI_stuff没有同步不同的进程,可能会发生这样的情况:其中一些进程非常早地到达下一个障碍,而另一些非常晚到达,然后早期的进程不得不等待较晚的进程。

还要注意,MPI_Barrier不能保证所有进程同时退出屏障。它只保证在某个时间点上,所有进程中的执行流都在MPI_Barrier调用内。其他的一切都依赖于实现。在一些平台上,特别是IBM Blue Gene,使用特殊的中断网络实现全局障碍,在那里MPI_Barrier实现了几乎周期完美的同步。在集群上,障碍是通过消息传递实现的,因此障碍退出时间可能会有很大不同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17579693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档