关于MPI allreduce操作的内部结构及其与MPI屏障的关系的信息很少,而这些信息并不一致。所以,我想澄清以下两个问题:
答案 0 :(得分:3)
除了MPI_Barrier之外,没有MPI集合具有屏障语义,尽管一些其他操作由于数据依赖性而具有屏障语义 。 MPI_All {reduce,gather,toall}至少对于非零计数具有这样的数据依赖性,因此将赋予障碍。
因此,不,你应该永远不要为allreduce添加障碍,除非你想在计数为零时屏障。
我知道在一些超级计算机上集体之前增加障碍的性能原因,但这确实是一个实现问题。
同步和阻止不是一回事。非阻塞集合在完成时同步。有关这些术语的更详细定义,请参阅MPI标准。
这有帮助吗?如果没有,我会添加它,直到它。