MPI allreduce 带屏障
MPI allreduce with barrier
关于MPI allreduce操作的内部结构及其与MPI barrier的关系的信息很少,而且这几条信息并不一致。所以,我试图澄清以下两个问题:
- 我应该将 barrier 与 allreduce 一起使用吗(我的 MPI 版本是 3.1.3)?
- 在并行编程的上下文中,同步和阻塞是否相同,如果不是,它们与 allreduce 和屏障操作有何关系?
除 MPI_Barrier 外,没有任何 MPI 集合体具有屏障语义,尽管由于数据依赖性,其他一些操作具有屏障语义。 MPI_All{reduce,gather,toall} 至少对于非零计数具有这样的数据依赖性,因此会产生障碍。
因此,不,你永远不应该向 allreduce 添加障碍,除非你想在计数为零时设置障碍。
我知道在某些超级计算机上的集体之前添加障碍的性能原因,但这确实是一个实现问题。
同步和阻塞不是一回事。非阻塞集体在完成时同步。有关这些术语的更详细定义,请参阅 MPI 标准。
这有帮助吗?如果没有,我会添加到它,直到它。
关于MPI allreduce操作的内部结构及其与MPI barrier的关系的信息很少,而且这几条信息并不一致。所以,我试图澄清以下两个问题:
- 我应该将 barrier 与 allreduce 一起使用吗(我的 MPI 版本是 3.1.3)?
- 在并行编程的上下文中,同步和阻塞是否相同,如果不是,它们与 allreduce 和屏障操作有何关系?
除 MPI_Barrier 外,没有任何 MPI 集合体具有屏障语义,尽管由于数据依赖性,其他一些操作具有屏障语义。 MPI_All{reduce,gather,toall} 至少对于非零计数具有这样的数据依赖性,因此会产生障碍。
因此,不,你永远不应该向 allreduce 添加障碍,除非你想在计数为零时设置障碍。
我知道在某些超级计算机上的集体之前添加障碍的性能原因,但这确实是一个实现问题。
同步和阻塞不是一回事。非阻塞集体在完成时同步。有关这些术语的更详细定义,请参阅 MPI 标准。
这有帮助吗?如果没有,我会添加到它,直到它。