6

我正在 SMP 超级计算机上使用 MPI 程序。我想确定哪些进程共享同一个节点,例如通过设置一个整数键,该键在同一个节点上的所有进程中都相等,并且从一个节点到另一个节点不同。然后目标是使用此密钥拆分通信器并让子通信器仅收集同一节点中的进程。

所以函数看起来像

int identify_node(MPI_Comm* comm); // returns a key characterizing a node

假设一个简单的进程分布,如 node_1 上的 0、1、2、3、node_2 上的 4、5、6、7 等。这是一个简单的公式问题,但我想在没有假设的情况下达到相同的结果关于分布。

我有一个想法如何使用 MPI_Get_processor_name 做到这一点:通过计算名称的哈希并假设没有两个名称将获得相同的哈希(我不喜欢这样,因为如果有一天我有两个名称具有相同的哈希,它会很难跟踪问题),或者跨进程使用某种协议算法(哪一个?我还不知道)。

您将如何做到这一点(如果可能,高效)?

马蒂厄

4

1 回答 1

3

你是对的,关于分布的假设是不明智的,因为排名重新排序实际上是一种以牺牲规律性为代价来提高性能的新兴技术。

返回值的一个好的散列算法MPI_Get_processor_name应该是相当安全的,但是如果你想仔细检查,你总是可以收集每个组中的实际名称MPI_Gatherv并直接比较它们。

这个问题似乎解决了同样的问题。

于 2011-11-29T17:33:33.883 回答