2012-04-25 5 views
3

그룹 번호에 랭크 번호가 일반화되어 있습니까? 내 코드의 경우 MPI :: COMM_WORLD의 계층 적 분해를 만들고 싶습니다. 우리는 16 개의 스레드를 사용한다고 가정합니다. MPI :: COMM_WORLD.Split을 사용하여 각각 4 개의 계위를 갖는 4 개의 통신기를 만듭니다. 해당 네 그룹에 고유 한 ID를 제공하는 MPI 함수가 있습니까?MPI 그룹에 대한 MPI 순위 번호 일반화?

답변

5

글쎄, 각 프로세스를 여전히 원래 순위 인 MPI_COMM_WORLD으로 참조 할 수 있습니다. 각 프로세스가 colorkey 인수를 통해 MPI_Comm_split() 인수를 통해 수신하는 순위를 완전히 제어 할 수 있습니다. 이것은 오래된 순위와 새로운 그룹/순위 사이의 매핑을 생성하기에 충분한 정보입니다.

+0

맞습니다.'MPI_Comm_split()'에 추가 한 정보는 내가 요청한 정보를 계산하기에 충분합니다. 그러나 코어 수가 10,000 인 경우에는 그렇게하는 것이 쉽지 않습니다. MPI의 기반 위에서 직접이 작업을 수행 할 수 있는지에 대한 질문이있는 이유입니다. –

+2

나에게 충분히 단순 해 보입니다. N 개의 M 개의 프로세스를 N 개의 M 개의 그룹으로 나누고 싶다면 각 프로세스는''rank/N' color (그리고 옵션으로'rank % N' 키)로 Split()을 호출합니다. 그러면 그룹 0에 N-1, 그룹 1에 N..2 * N-1 등의 순위가 지정되고 각 그룹 내에서 프로세스의 원래 순서가 유지됩니다. 그룹'j'에서 순위 i가있는 프로세스는'MPI_COMM_WORLD'에서'j * N + i'의 순위를 가진 프로세스입니다. – suszterpatt

1

@ suszterpatt의 대답이 마음에 들지 않는다면 (카툰 통신기를 남용하고 의사 소통 자의 색인 (2,3)에있는 프로세스가 계층 적 분해의 2 그룹에서 프로세스 3 인 것처럼 가장 할 수 있습니다.

하지만이 책을 읽지 마시고 제가 그러한 남용을 권장한다는 인상을받지 마십시오. 그것은 단지 생각 일뿐입니다.