Pregunta

Estoy tratando de poner en práctica la clasificación bitónica usando MPI para 2 ^ n procesadores.

Me gustaría utilizar un n-dimensional hipercubo hacerlo por conveniencia. Usando MPI_Cart_Create puedo crear dimensiones de auto-organización. Si lo hace, maximizar la eficiencia de mi proceso y también reducir el número de LOC tengo que escupir para hacerlo ..

Y buscar en Google la literatura siempre dicen la misma cosa:

  

Tenga en cuenta que un hipercubo n-dimensional   es un torus n -dimensional con 2   procesos por dirección de coordenadas.   Por lo tanto, un apoyo especial para hipercubo   estructuras no es necesario.

No he visto ningún toro dimensionales ejemplo individual + n con 2 procesos por dirección de coordenadas parece nada más que misterio para mí. ¿A alguien le tiene que sugerir?

Gracias,

¿Fue útil?

Solución

Bueno, lo encontró

por lo que sería para un hipercubo 4-d .. El patrón es bastante sencilla. En hipercubo n-dimensional cada punto tiene N vecino y que están representados en este código. Tenga en cuenta que este código debe utilizar en lugar de máscara XOR poco porque MPI puede volver a ordenar los procesos para adaptarse a la disposición física de los clústeres.

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";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top