Sto lavorando con i programmi MPI su un supercomputer SMP. Vorrei identificare quali processi condividono lo stesso nodo, ad esempio impostando una chiave intera uguale in tutti i processi sullo stesso nodo e diversa da un nodo a un altro. L'obiettivo sarebbe quindi utilizzare questa chiave per dividere un comunicatore e avere sottocomunicatori che raccolgono solo i processi nello stesso nodo.MPI: acquisizione del numero di nodi (non processi) in un comunicatore
Quindi la funzione sarà simile
int identify_node(MPI_Comm* comm); // returns a key characterizing a node
Supponendo una semplice distribuzione di processi come 0,1,2,3 su node_1, 4,5,6,7 su node_2, ecc è una questione di una formula semplice, ma mi piacerebbe ottenere lo stesso risultato senza alcuna ipotesi sulla distribuzione.
ho un idea di come farlo usando MPI_Get_processor_name: calcolando un hash del nome e assumere non ci sono due nomi avranno lo stesso hash (non mi piace questo perché se un giorno ho due nomi con lo stesso hash, sarà difficile tracciare il problema), o usare un qualche tipo di algoritmo di accordo tra i processi (quale non lo so ancora).
Come lo faresti (in modo efficiente se possibile)?
Matthieu
Grazie, la domanda che hai citato è davvero molto vicina. Penso che farò quello che mi consigli: ottenere un hash del nome del processore, quindi eseguire un secondo controllo con MPI_Gatherv. – sunmat