Estoy trabajando con programas MPI en una supercomputadora SMP. Me gustaría identificar qué procesos están compartiendo el mismo nodo, por ejemplo, estableciendo una clave entera que es igual en todos los procesos en el mismo nodo y diferente de un nodo a otro. El objetivo sería entonces usar esta clave para dividir un comunicador y tener subcomunicadores reuniendo solo los procesos en el mismo nodo.MPI: obteniendo el número de nodos (no procesos) en un comunicador
Así que la función se vería como
int identify_node(MPI_Comm* comm); // returns a key characterizing a node
Suponiendo una distribución sencilla de los procesos como en nodo_1 0,1,2,3, 4,5,6,7 en nodo_2, etc, es una cuestión de una fórmula simple, pero me gustaría lograr el mismo resultado sin suponer en la distribución.
Tengo una idea de cómo hacerlo usando MPI_Get_processor_name: calculando un hash del nombre y supongo que no hay dos nombres que obtengan el mismo hash (no me gusta porque si un día tengo dos nombres con el mismo hash, será difícil rastrear el problema), o usar algún tipo de algoritmo de acuerdo entre procesos (¿cuál? No lo sé aún).
¿Cómo harías eso (de manera eficiente si es posible)?
Matthieu
Gracias, la pregunta que mencionas es bastante cercana. Creo que haré lo que me aconsejo: obtener un hash del nombre del procesador, luego realizar un segundo control con MPI_Gatherv. – sunmat