Probabilmente vorrete controllare MPI_COMM_SPLIT_TYPE. Essa vi permetterà di dividere un comunicatore esistente basato sulla split_type
si passa come un parametro:
int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key,
MPI_Info info, MPI_Comm *newcomm)
In questo momento, l'unica split_type è MPI_COMM_TYPE_SHARED
, definito nello standard come:
Questo tipo divide il comunicatore in subcomunicatori, ognuno dei quali può creare un'area di memoria condivisa.
Questo di solito è la stessa cosa di quello che stai chiedendo, ma dovrete controllare due volte che è vero sulla vostra macchina.
L'altra cosa che devi sapere è che questa è una nuova funzione in MPI-3 quindi potrebbe non essere disponibile in tutte le implementazioni di MPI. So che è disponibile per MPICH e per i suoi derivati. AFAIK, non è disponibile nell'ultima versione di Open MPI. Quindi assicurati di avere una versione di MPI che effettivamente la supporta.
fonte
2013-08-08 16:33:51
Wesley, grazie. È un peccato che questo non sia disponibile per Open MPI. Anche se, fammi fare un esempio per vedere se ho capito come funziona questo split type_. Supose Ho 32 processi su 4 nodi 8-core. La mia intenzione è di creare 4 gruppi di 8 core, basati su processi di memoria condivisi che si trovano sullo stesso nodo. Potrei usare MPI_Comm_split_type. Usando questo non potrei, per esempio, creare 8 gruppi di 4 (mettendo 2 gruppi in ogni nodo), potrei? –
Sì, puoi farlo. Se si desidera creare 8 gruppi di 4 in cui ogni gruppo è locale a un nodo, è necessario utilizzare il parametro chiave in modo che metà dei processi contribuisca a una chiave e l'altra metà contribuisca a una chiave diversa. Questo è stato il comportamento della chiamata esistente MPI_COMM_SPLIT quindi ci dovrebbero essere un sacco di tutorial da seguire. Dovrai solo aggiungere un po 'per le nuove aggiunte di tipo. –
OpenMPI imposta le variabili di ambiente OMPI_COMM_WORLD_LOCAL_RANK e OMPI_COMM_WORLD_LOCAL_SIZE che è possibile utilizzare per scoprire quanti processi condividono un nodo ("dimensione locale"). –