다음을 통해 공유


MPI_Reduce 함수

그룹의 모든 멤버에서 전역 축소 작업을 수행합니다. 미리 정의된 수학 또는 논리 연산 또는 애플리케이션 정의 연산을 지정할 수 있습니다.

구문

int MPIAPI MPI_Reduce(
  _In_      void         *sendbuf,
  _Out_opt_ void         *recvbuf,
            int          count,
            MPI_Datatype datatype,
            MPI_Op       op,
            int          root,
            MPI_Comm     comm
);

매개 변수

  • sendbuf [in]
    루트 프로세스로 보낼 데이터를 포함하는 버퍼에 대한 핸들입니다.

    comm 매개 변수가 통신 내를 참조하는 경우 모든 프로세스에서 MPI_IN_PLACE 지정하여 현재 위치 옵션을 지정할 수 있습니다. sendcountsendtype 매개 변수는 무시됩니다. 각 프로세스는 해당 수신 버퍼 요소에 데이터를 입력합니다. n번째 프로세스는 수신 버퍼의 n번째 요소로 데이터를 보냅니다. 루트 프로세스는 수신 버퍼의 해당 요소에서 입력 데이터를 가져와서 출력 데이터로 바꿉니다.

  • recvbuf [out, optional]
    감소 작업의 결과를 수신하는 버퍼에 대한 핸들입니다. 이 매개 변수는 루트 프로세스에서만 중요합니다.

  • count
    이 프로세스에서 보낼 요소의 수입니다.

  • datatype
    버퍼에 있는 각 요소의 데이터 형식입니다. 이 매개 변수는 op 매개 변수에 지정된 작업과 호환되어야 합니다.

  • Op
    수행할 전역 감소 작업입니다. 핸들은 기본 제공 또는 애플리케이션 정의 작업을 나타낼 수 있습니다. 미리 정의된 작업 목록은 MPI_Op 항목을 참조하세요.

  • root
    지정된 전달자 내의 수신 프로세스의 순위입니다.

  • 통신
    MPI_Comm 커뮤니케이터 핸들입니다.

반환 값

성공에 대한 MPI_SUCCESS 반환합니다. 그렇지 않으면 반환 값이 오류 코드입니다.

Fortran에서 반환 값은 IERROR 매개 변수에 저장됩니다.

Fortran

    MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR) 
        <type> SENDBUF(*), RECVBUF(*) 
        INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR

설명

MPI_Reduce 함수는 지정된 작업이 연관되어 있다고 가정하여 구현됩니다. 미리 정의된 모든 연산은 결합적이고 통근 가능하도록 설계되었습니다. 사용자는 결합형으로 설계되었지만 커밋되지는 않는 작업을 정의할 수 있습니다. 감소 작업의 기본 평가 순서는 그룹의 프로세스 순위에 따라 결정됩니다. 그러나 구현은 결합성 또는 결합성 및 통근성을 활용하여 평가 순서를 변경할 수 있습니다. 이 프로세스는 부동 소수점 추가와 같이 엄격하게 연관성이 있고 통근적이지 않은 작업의 감소 결과를 변경할 수 있습니다.

일부 애플리케이션은 부동 소수점 작업의 비연속적 특성을 무시할 수 없거나 특수한 평가 순서가 필요하고 결합형으로 처리할 수 없는 사용자 정의 작업을 사용할 수 있습니다. 이 경우 평가 순서를 명시적으로 적용할 수 있습니다. 예를 들어 엄격한 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽으로 평가 순서가 필요한 작업의 경우 다음 프로세스를 사용할 수 있습니다.

  1. 예를 들어 MPI_Gather 함수를 사용하여 단일 프로세스에서 모든 피연산자를 수집합니다.
  2. 예를 들어 MPI_Reduce_local 함수를 사용하여 필요한 순서로 축소 작업을 적용합니다.
  3. 필요한 경우 결과를 다른 프로세스에 브로드캐스트하거나 분산합니다.

참고

각 프로세스의 MPI_Reduce 함수에 서로 다른 사용자 정의 작업을 제공할 수 있습니다. 함수는 이 경우 어떤 피연산자에서 사용되는 작업을 정의하지 않습니다. MPI_Reduce 함수가 구현되는 방법에 대해 어떠한 가정도 할 수 없습니다. 각 프로세스에서 동일한 작업을 지정하는 것이 가장 안전합니다.

 

사용자 정의 연산자는 일반적인 파생 데이터 형식에서 작동할 수 있습니다. 이 경우 reduce 연산이 적용되는 각 인수는 여러 기본 값을 포함할 수 있는 이러한 데이터 형식에서 설명하는 하나의 요소입니다.

겹치는 데이터 형식은 송신 버퍼에서 허용되지만 수신 버퍼에는 허용되지 않습니다. 수신 버퍼의 데이터 형식이 겹치면 예측할 수 없는 결과가 발생할 수 있으며 오류로 간주됩니다.

comm 매개 변수가 통신 내를 참조하는 경우 MPI_Reduce 함수는 그룹에 있는 각 프로세스의 입력 버퍼에 지정된 대로 요소를 결합하고 지정된 연산을 사용하여 루트 프로세스의 출력 버퍼에 결합된 값을 반환합니다.

입력 버퍼와 출력 버퍼에는 동일한 데이터 형식의 요소 수가 동일합니다. count, datatype, op, rootcomm 매개 변수에 대해 동일한 값을 사용하여 모든 그룹 멤버에서 함수를 호출합니다. 이렇게 하면 모든 프로세스가 동일한 형식의 요소를 사용하여 동일한 길이의 입력 버퍼 및 출력 버퍼를 제공할 수 있습니다.

각 프로세스는 하나의 요소 또는 요소 시퀀스를 제공할 수 있으며, 이 경우 시퀀스의 각 항목에서 요소별로 작업이 실행됩니다. 예를 들어 작업이 MPI_MAX 송신 버퍼에 부동 소수점 숫자 recvbuf(1) 인 두 개의 요소가 포함된 경우 의 전역 최대 (sendbuf(1)) 값을 수신하고 recvbuf(2)(sendbuf(2))전역 최대값을 받습니다.

comm 매개 변수가 상호 통신자를 참조하는 경우 호출에는 상호 통신기의 모든 프로세스가 포함되지만 루트 프로세스를 정의하는 하나의 그룹 A 그룹이 포함됩니다. 다른 그룹 B의 모든 프로세스는 루트 매개 변수, 즉 그룹 A의 루트 프로세스 순위에서 동일한 값을 설정합니다. 루트 프로세스는 루트 매개 변수에 MPI_ROOT 값을 설정합니다. 그룹 A의 다른 모든 프로세스는 루트 매개 변수에 MPI_PROC_NULL 값을 설정합니다. B 그룹 프로세스에서는 송신 버퍼 매개 변수만 중요하며 수신 버퍼 매개 변수만 루트 프로세스에서 중요합니다.

요구 사항

제품

HPC Pack 2012 MS-MPI 재배포 가능 패키지, HPC Pack 2008 R2 MS-MPI 재배포 가능 패키지, HPC Pack 2008 MS-MPI 재배포 가능 패키지 또는 HPC Pack 2008 클라이언트 유틸리티

헤더

Mpi.h; Mpif.h

라이브러리

Msmpi.lib

DLL

Msmpi.dll

추가 정보

MPI 집합 함수

MPI_Datatype

MPI_Gather

MPI_Op

MPI_Bcast