Domanda

Sto lavorando con programmi MPI su un supercomputer SMP. Desidero identificare i processi condividono lo stesso nodo, ad esempio impostando una chiave intero che è uguale in tutti i processi sullo stesso nodo, e diverso da un nodo ad un altro. L'obiettivo sarebbe quindi di utilizzare questa chiave per dividere un comunicatore e hanno sub-comunicatori in grado di raccogliere solo i processi nello stesso nodo.

Quindi, la funzione sarà simile

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

Supponendo una distribuzione semplice di processi come 0,1,2,3 su node_1, 4,5,6,7 su node_2, ecc si tratta di una semplice formula, ma vorrebbe ottenere lo stesso risultato senza 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 otterrà lo stesso hash (non mi piace questo perché se un giorno ho due nomi con lo stesso hash , sarà difficile tenere traccia del problema), o usare qualche tipo di algoritmo accordo tra processi (quale? non lo so ancora).

Come hai fatto (in modo efficiente se possibile)?

Matthieu

È stato utile?

Soluzione

Hai ragione che un ipotesi sulla distribuzione sarebbe poco saggio, dal momento rango riordino è in realtà un up-and-coming tecnica per migliorare le prestazioni a costo di quella regolarità.

Un algoritmo di hashing buon sul valore di ritorno di MPI_Get_processor_name dovrebbe essere abbastanza sicuro, ma se si vuole controllare due volte, si può sempre raccogliere i nomi reali all'interno di ogni gruppo utilizzando MPI_Gatherv e confrontare direttamente loro.

indirizzi questa domanda le stesse preoccupazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top