2010-03-05 2 views
2

2^n 프로세서 용 MPI를 사용하여 비트순 정렬을 구현하려고합니다.MPI_CART를 사용하여 하이퍼 큐브에 프로세스를 매핑하는 방법

편의상 n 차원 hypercube을 사용하고 싶습니다. MPI_Cart_Create를 사용하여 자체 구성 차원을 만들 수 있습니다. .. 내 프로세스의 효율성을 극대화하고 또한 내가 그것을 완수하기 위해 침을해야 LOC의 수를 줄일 수 있도록

인터넷 검색을 수행하고 litterature는 항상 똑같은 이야기 :는 n이

주 - 3 차원 하이퍼 큐브 은 좌표 방향 당 2 개의 프로세스가있는 n 차원 원환 체입니다. 따라서 hypercube 구조에 대한 특수 지원은 필요하지 않습니다.

좌표 방향 당 2 개의 프로세스가있는 하나의 예제 + n 차원 원환 체는 나에게 신비로 보일뿐입니다. 누구든지 제안해야합니까?

감사합니다,

답변

5

글쎄, 그것은

그래서 4 차원 하이퍼 큐브를위한 것입니다 발견 .. 패턴이 꽤 솔직하다. n 차원 하이퍼 큐브에서 각 점은 N 개의 이웃을 가지며이 코드에서 표현됩니다. MPI는 클러스터의 실제 레이아웃에 맞게 프로세스를 재정렬 할 수 있기 때문에이 코드는 비트 마스크를 xoring하는 대신 사용해야합니다.

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"; 
+0

mmm 좋은 작품, 나는 큐브와 작업이 있고 꼭지점 간의 프로세스 통신을해야합니다. MPI_Sendrecv()를 사용하려고했으나 작동하지 않습니다. 작업에 통신이 있습니까? – Sergey

+1

MPI_Cart_shift (nthCube, nDim-1-s, 1, & rank_source, & rank_dest); – matdumsa

+0

(nDim-1-s) - 무엇을 의미합니까? 잠겨 있기 때문에 MPI_Sendrecv()를 사용하는 것이 맞습니다. – Sergey

관련 문제