MPI allreduce 带屏障

MPI allreduce with barrier

关于MPI allreduce操作的内部结构及其与MPI barrier的关系的信息很少,而且这几条信息并不一致。所以,我试图澄清以下两个问题:

  1. 我应该将 barrier 与 allreduce 一起使用吗(我的 MPI 版本是 3.1.3)?
  2. 在并行编程的上下文中,同步和阻塞是否相同,如果不是,它们与 allreduce 和屏障操作有何关系?

除 MPI_Barrier 外,没有任何 MPI 集合体具有屏障语义,尽管由于数据依赖性,其他一些操作具有屏障语义。 MPI_All{reduce,gather,toall} 至少对于非零计数具有这样的数据依赖性,因此会产生障碍。

因此,不,你永远不应该向 allreduce 添加障碍,除非你想在计数为零时设置障碍。

我知道在某些超级计算机上的集体之前添加障碍的性能原因,但这确实是一个实现问题。

同步和阻塞不是一回事。非阻塞集体在完成时同步。有关这些术语的更详细定义,请参阅 MPI 标准。

这有帮助吗?如果没有,我会添加到它,直到它。