Как сопоставить процесс для гиперкуба с использованием MPI_CART

StackOverflow https://stackoverflow.com/questions/2384969

Вопрос

Я пытаюсь реализовать битоническую сортировку с использованием MPI для 2 ^ n процессоров.

Я хотел бы использовать N-мерное гиперкуб сделать это для удобства. Использование MPI_CART_CREATE Я могу создавать самоорганизующие размеры. Это будет максимально максимизировать эффективность моего процесса, а также уменьшить количество LOC, я должен плевать, чтобы сделать это ..

Googling и мочеиспускания всегда говорят о том же:

Обратите внимание, что N-служащий HyperCube представляет собой N-слабое торт с 2 процессами на направление координата. Таким образом, особая поддержка структур гиперкубров не нужна.

Я не видел ни одного пример + N-слушающий торт с 2 процессами на координатное направление, кажется, ничего, кроме как загадка для меня. Кто-нибудь должен предложить?

Спасибо,

Это было полезно?

Решение

Ну, нашел это

Так что это было бы для 4-D гиперкуба .. Узор довольно прямо. В N-мерной гиперкубе каждая точка имеет n соседа, и они представлены в этом коде. Обратите внимание, что этот код должен использоваться вместо маски для козла, потому что MPI может повторно заказать процессы, чтобы соответствовать физической макете ваших кластеров.

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";
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top