Question

Je suis en train de mettre en œuvre le tri Bitonic utilisant MPI pour 2 ^ n processeurs.

Je voudrais utiliser un n dimensions hypercube de le faire pour des raisons pratiques. En utilisant MPI_Cart_Create je peux créer des dimensions d'auto-organisation. Cela permettra de maximiser l'efficacité de mon processus et réduire le nombre de LOC je dois cracher pour le faire ..

googler ET la litterature toujours dire la même chose:

  

Notez qu'une n hypercube de dimension   est un n tore à n dimensions avec 2   processus dans chaque direction de coordonnées.   Ainsi, un soutien particulier pour hypercube   les structures ne sont pas nécessaires.

Je ne l'ai pas vu un seul exemple + n torus avec 2 processus -dimensionnelle par direction de coordonnées semble rien mystère pour moi. Est-ce que quelqu'un at-il suggérer?

Merci,

Était-ce utile?

La solution

Eh bien, trouvé

ce serait un hypercube 4-d .. Le modèle est assez simple. N dimensions hypercube chaque point ont N voisin et ils sont représentés dans ce code. Notez que ce code doit utiliser à la place du masque de bit XOR car MPI peut réorganiser les processus pour adapter à la disposition physique de vos clusters.

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";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top