Domanda

Sto cercando di implementare l'ordinamento bitonico usando MPI per i processori 2 ^ n.

Vorrei utilizzare un n-dimensionale ipercubo a farlo per convenienza. Utilizzando MPI_Cart_Create posso creare dimensioni di auto-organizzazione. In questo modo ci permetterà di ottimizzare l'efficienza del mio processo e anche di ridurre il numero di LOC devo sputare per farlo fare ..

Googling E la letteratura dicono sempre la stessa cosa:

  

Si noti che un ipercubo n-dimensionale   è un toro n -dimensionale con 2   processi per coordinare direzione.   Così, supporto speciale per ipercubo   strutture non è necessaria.

Non ho visto alcun toro -dimensionale solo esempio + n con 2 processi per coordinare la direzione sembra altro che mistero per me. Qualcuno deve suggerire?

Grazie,

È stato utile?

Soluzione

Bene, trovato

in modo che sarebbe per un 4-d ipercubo .. Il modello è abbastanza straight-forward. In ipercubo n-dimensionale ciascun punto ha N vicina e sono rappresentati in questo codice. Si noti che questo codice dovrebbe usato al posto di XOR maschera di bit perché MPI può riordinare i processi per adattare il layout fisico dei cluster.

int rank, size; //I am process RANK and we are a total of SIZE
MPI_Init(&argc, &argv); 

MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

myFairShareOfNumber = totalNumber / size;

MPI_Comm nthCube;
int nDim=4;
int processPerDim [4]= {2,2,2,2};
int period [4]= {1,1,1,1};

MPI_Cart_create(MPI_COMM_WORLD, nDim, processPerDim, period, true, &nthCube);

int rankInDim;
MPI_Comm_rank(nthCube, &rankInDim);

int rank_source, rank_desta, rank_destb, rank_destc, rank_destd;
MPI_Cart_shift(nthCube, 0,1,&rank_source, &rank_desta);
MPI_Cart_shift(nthCube, 1,1,&rank_source, &rank_destb);
MPI_Cart_shift(nthCube, 2,1,&rank_source, &rank_destc);
MPI_Cart_shift(nthCube, 3,1,&rank_source, &rank_destd);
cerr << "I am known in the world as " << rankInDim << " my adjacents are -> " << rank_desta << "-" << rank_destb << "-" << rank_destc << "-" << rank_destd <<"\n";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top