Pergunta

Estou tentando implementar a classificação bitônica usando o MPI para processadores de 2^n.

Eu gostaria de usar um n-dimensional Hypercube fazer isso por conveniência. Usando mpi_cart_create, posso criar dimensões auto-organizadas. Fazer isso maximizará a eficiência do meu processo e também reduzirá o número de loc que tenho que cuspir para fazê -lo ..

Google e a ninhada sempre diz a mesma coisa:

Observe que um hipercubo N -Dimensional é um toro n -dimensional com 2 processos por direção da coordenada. Assim, não é necessário suporte especial para estruturas de hipercubos.

Eu não vi nenhum exemplo único + Torus dimensional com 2 processos por direção de coordenada parece nada além de mistério para mim. Alguém teria que sugerir?

Obrigado,

Foi útil?

Solução

Bem, encontrei

Então isso seria para um hipercubo 4-D. O padrão é bastante direto. No hypercubo n-dimensional, cada ponto tem n vizinho e eles são representados neste código. Observe que esse código deve ser usado em vez de Xoring Bit Mask porque o MPI pode reordenar os processos para ajustar o layout físico de seus 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";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top