我正在一台SMP超级计算机上与MPI程序一起工作。我希望能够确定哪些进程共享同一节点,例如通过设置整数键来实现,该键在同一节点上的所有进程中都相等,并且与一个节点不同。然后,目标是使用此键拆分通信器,并具有仅收集同一节点中进程的子通信器。
因此,该函数将如下所示:
假设在node_1上分布进程0,1,2,3,在node_2上分布进程4,5,6,7,等等。这个问题可以通过一个简单的公式解决,但我希望不需要对分布进行任何假设也能得到相同的结果。
我有一个想法,使用MPI_Get_processor_name:通过计算名称的哈希值并假设不会有两个名称会获得相同的哈希值(我不喜欢这种方法,因为如果有一天我有两个名称具有相同的哈希值,将难以追踪问题),或者使用某种跨进程的协议算法(哪种算法?我还不知道)。
如果可能的话,您会如何高效地解决它?
Matthieu
因此,该函数将如下所示:
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:通过计算名称的哈希值并假设不会有两个名称会获得相同的哈希值(我不喜欢这种方法,因为如果有一天我有两个名称具有相同的哈希值,将难以追踪问题),或者使用某种跨进程的协议算法(哪种算法?我还不知道)。
如果可能的话,您会如何高效地解决它?
Matthieu