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

所以功能看起来像

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

假设在node_1、4,5,6,7上的流程的简单分布,node_2等。关于分布。

我有一个想法如何使用mpi_get_processor_name:通过计算名称的哈希,并假设没有两个名称会得到相同的哈希(我不喜欢这样很难跟踪问题),或在过程中使用某种协议算法(哪一个?我不知道)。

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

Matthieu

有帮助吗?

解决方案

您是对的,对分配的假设将是不明智的,因为排序重新排序实际上是以这种规律性为代价提高性能的新兴技术。

关于返回值的好散列算法 MPI_Get_processor_name 应该非常安全,但是如果您想仔细检查,您可以随时使用每个组中的实际名称 MPI_Gatherv 并直接比较它们。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top