Frage

Ich versuche bitonische zu implementieren MPI Sortierung für die Verwendung von 2 ^ n-Prozessoren.

Ich mag ein n-dimensionale verwenden hypercube so für Bequemlichkeit zu tun. Mit MPI_Cart_create ich selbstorganisierenden Dimensionen erstellen können. Dadurch wird so Effizienz meines Verfahrens maximieren und reduzieren auch die Anzahl der LOC ich zu spucken müssen, um es getan ..

googeln und die litterature immer dasselbe sagen:

  

Beachten Sie, dass ein n-dimensionale hypercube   ein n-dimensionaler Torus mit 2   Prozesse pro Koordinatenrichtung.   Somit spezielle Unterstützung für Hyper-Würfel   Strukturen sind nicht erforderlich.

Ich habe kein einziges Beispiel + n-dimensionalen Torus mit 2 Prozessen gesehen Richtung pro Koordinate scheint nichts als Rätsel für mich. Würde jemand vorschlagen?

Danke,

War es hilfreich?

Lösung

Nun, fand es

, so dass für ein 4-d hypercube wäre .. Das Muster ist ziemlich geradlinig. In n-dimensionalen hypercube hat jeder Punkt N Nachbarn, und sie sind in diesem Code dargestellt. Beachten Sie, dass dieser Code anstelle von XOR-Verknüpfung Bit-Maske verwendet wird, sollte da MPI kann die Prozesse neu, um das physische Layout Ihres Cluster passen.

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";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top