언어

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 지정하여 현재 위치 옵션을 지정할 수 있습니다. sendcount 및 sendtype 매개 변수는 무시됩니다. 각 프로세스는 해당 수신 버퍼 요소에 데이터를 입력합니다. 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, root 및 comm 만이 다른 프로세스에서 중요합니다. 루트 및 comm 매개 변수는 모든 프로세스에서 동일해야 합니다.

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

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

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