2016-12-20 1 views
0

여기서 설명한 [1]과 동일한 작업 (첫 번째 코드)을 사용합니다. MPI_Reduce가 호출 한 축소 작업은 몇 번입니까?

MPI_Reduce(local, global, 1, mpi_datatype, mpi_selectop, 0, MPI_COMM_WORLD); 

나는 MPI_Reduce가 의사 소통의 과정의 P-1 수에 의해 호출하지만이 MPI_Allreduce 같은 다른 감소 기능을 위해 거짓 것을 보았다.

1Q - 생성 된 작업이 MPI_Reduce에 의해 몇 번 호출되는지 알고있는 패턴이 있습니까?

2Q - MPI_Reduce의 호출 횟수를 하나의 프로세스 (루트)로 줄이고 모든 프로세스의 입력 항목을 줄이는 방법이 있습니까? 먼저

[1] First k results

답변

0

, 난 당신이 MPI_Reduce를 작성할 때 MPI 사용자 감소 기능을 의미 가정합니다.

1) 사용자 축소 기능이 얼마나 자주 호출되는지는 정의되지 않습니다. 예를 들어, MPI 구현은 명시 적으로 입력 데이터의 청크에 대해 축소 연산을 호출 할 수 있습니다. 따라서 정확성과 관련하여 그것에 대해 어떠한 가정도해서는 안됩니다. 최적화하려는 경우 특정 상황에 맞게 측정하십시오.

2) 루트 순위에서만 축소 작업을 호출하려는 경우 MPI_Gather (메모리가 허용되는 경우)을 사용할 수 있습니다. MPI_Reduce_Local가 조금 도움이 될 수도 있지만 이 아니며은 전체 축소이며 MPI_Op으로 전화하는 유일한 방법입니다. 비 식품 계급의 컴퓨팅 및 통신 용량을 낭비하고 있기 때문에이 방법이 훨씬 효율적이지 않습니다. 효과적으로 시간 복잡성 측면에서 O (log n)에서 O (n)로 이동합니다.

해결하려는 실제 문제를 설명 할 수있는 경우 더 나은 해결책이 될 수 있습니다.

+0

나는 k 크기 미성년자를 제외하고 벡터 뭉치 (k 크기)를 벡터 전역으로 줄이고 min 힙 구조 (프로세스 크기의 수)를 사용하여 각 반복마다 첫 번째 값이 출력에 쓰여지도록하고 싶다. – realbas

관련 문제