点对点通信
(自 MCCL 2.7 起)点对点通信可用于表达等级之间的任何通信模式。任何点对点通信都需要两个 MCCL 调用:一个等级上的 mcclSend() 调用和另一个等级上的相应 mcclRecv() 调用,两者具有相同的计数和数据类型。
针对不同对等体的多个 mcclSend() 和 mcclRecv() 调用可以与 mcclGroupStart() 和 mcclGroupEnd() 结合使用,形成更复杂的通信模式,如一对一(散射)、多对一(收集)、多对多或与 N 维空间中的邻居通信。
组内的点对点调用将阻塞,直到该组调用完成,但组内的调用可以被视为独立进行,因此永远不应相互阻塞。因此,合并需要同时进行的调用以避免死锁非常重要。
以下是一些并行应用程序使用的典型点对点通信模式的例子。MCCL 语义允许所有变体,每个等级具有不同的大小、数据类型和缓冲区。