在 MPI 中,每个 rank 都有一个唯一的地址空间,并且它们之间的通信通过消息传递发生。
我想知道MPI 如何在具有共享内存的多核机器上工作。如果队列位于两台没有共享内存的不同机器上,则 MPI 必须使用消息进行通信。但是如果 rank 在同一台物理机器上(但每个 rank 仍然有不同的地址空间),MPI 调用会利用共享内存吗?
例如,假设我正在发出 ALLREDUCE 调用。我有两台机器 M1 和 M2,每台都有 2 个内核。等级 R1 和 R2 位于机器 M1 的核心 1 和核心 2 上,而 R3 和 R4 位于机器 M2 的核心 1 和 2 上。ALLREDUCE 将如何发生?是否会传输超过 1 条消息?理想情况下,我希望 R1 和 R2 使用它们可用的共享内存(类似于 R3 和 R4)进行减少,然后在 M1 和 M2 之间进行消息交换。
是否有任何文档可以让我阅读 MPI 中集体操作的实施细节?