다음을 통해 공유


MPI_Gather 함수

그룹의 모든 멤버에서 하나의 멤버로 데이터를 수집합니다.

구문

int MPIAPI MPI_Gather(
  _In_      void         *sendbuf,
            int          sendcount,
            MPI_Datatype sendtype,
  _Out_opt_ void         *recvbuf,
            int          recvcount,
            MPI_Datatype recvtype,
            int          root,
            MPI_Comm     comm
);

매개 변수

  • sendbuf [in]
    루트 프로세스로 보낼 데이터가 포함된 버퍼에 대한 포인터입니다.

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

  • sendcount
    송신 버퍼의 요소 수입니다. sendcount가 0이면 메시지의 데이터 부분이 비어 있습니다.

  • sendtype
    버퍼에 있는 각 요소의 데이터 형식입니다.

  • recvbuf [out, optional]
    각 프로세스에서 받은 데이터를 포함하는 루트 프로세스의 버퍼에 대한 포인터입니다. 여기에는 루트 프로세스에서 보낸 데이터가 포함됩니다. 이 매개 변수는 루트 프로세스에서만 중요합니다. recvbuf 매개 변수는 루트가 아닌 모든 프로세스에 대해 무시됩니다.

  • recvcount
    각 프로세스에서 수신되는 요소의 수입니다. 이 숫자는 버퍼의 총 항목 수가 아닙니다. 개수가 0이면 메시지의 데이터 부분이 비어 있습니다. 이 매개 변수는 루트 프로세스에서만 중요합니다.

  • recvtype
    버퍼에 있는 각 요소의 MPI 데이터 형식입니다. 이 매개 변수는 루트 프로세스에서만 중요합니다.

  • root
    지정된 통신기 내의 수신 프로세스의 순위입니다.

  • 통신
    MPI_Comm 통신기 핸들입니다.

반환 값

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

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

Fortran

    MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR

설명

모든 함수 매개 변수는 루트 프로세스에서 중요하며 sendbuf, sendcount, sendtype, rootcomm 만이 다른 프로세스에서 중요합니다. 루트comm 매개 변수는 모든 프로세스에서 동일해야 합니다.

일반적으로 파생 데이터 형식은 sendtyperecvtype 매개 변수 모두에 대해 허용됩니다. 각 프로세스의 sendtyperecvtype 매개 변수로 지정된 형식 서명은 루트 프로세스에서 recvcountsendcount 매개 변수의 형식 서명과 같아야 합니다. 전송되는 데이터의 양은 루트 프로세스와 각 개별 프로세스 간에 수신되는 데이터의 양과 같아야 합니다. 발신자와 수신자 간의 고유 형식 맵은 여전히 허용됩니다.

개수 및 형식의 사양으로 인해 루트의 위치를 두 번 이상 작성해서는 안 됩니다. 이러한 호출은 잘못되었습니다.

comm 매개 변수가 통신 내를 참조하는 경우 모든 프로세스는 해당 송신 버퍼의 내용을 루트 프로세스로 보냅니다. 루트 프로세스는 메시지를 수신하고 순위 순서로 저장합니다. 결과는 그룹의 각 n 프로세스가 에 대한 호출 MPI_Send(sendbuf, sendcount, sendtype, root, …)을 실행하고 루트가 에 대한 n 개 호출 MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …)을 실행한 것처럼 표시됩니다. 값 extent(recvtype)MPI_Type_get_extent 함수를 사용하여 가져옵니다. 함수에 대한 다른 설명은 그룹의 프로세스에서 보낸 n 메시지가 순위 순서로 연결되고, 결과 메시지는 루트에서 를 호출하는 것처럼 수신된다는 것입니다 MPI_RECV(recvbuf, recvcountn, recvtype, ...). 수신 버퍼는 루트가 아닌 모든 프로세스에 대해 무시됩니다.

comm 매개 변수가 상호 통신자를 참조하는 경우 호출에는 루트 프로세스를 정의하는 하나의 그룹 A 그룹이 있는 상호 통신기의 모든 프로세스가 포함됩니다. 다른 그룹 B의 모든 프로세스는 루트 매개 변수, 즉 그룹 A의 루트 프로세스 순위에서 동일한 값을 설정합니다. 루트 프로세스는 루트 매개 변수에 MPI_ROOT 값을 설정합니다. 그룹 A의 다른 모든 프로세스는 루트 매개 변수에 MPI_PROC_NULL 값을 설정합니다. 데이터는 루트 프로세스에서 그룹 B의 모든 프로세스로 브로드캐스트됩니다. 그룹 B에 있는 프로세스의 버퍼 매개 변수는 루트 프로세스의 버퍼 매개 변수와 일치해야 합니다.

요구 사항

제품

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

헤더

Mpi.h; Mpif.h

라이브러리

Msmpi.lib

DLL

Msmpi.dll

추가 정보

MPI 집합 함수

MPI_Datatype

MPI_Gatherv