Share via


MPI_Alltoallw 함수

에서 데이터를 수집하고 그룹의 모든 멤버에 데이터를 분산합니다. MPI_Alltoallw 함수는 이 API에서 가장 일반적인 형식의 전체 데이터 교환입니다. MPI_Alltoallw 개수, 변위 및 데이터 형식에 대한 별도의 사양을 사용하도록 설정합니다.

구문

int MPIAPI MPI_Alltoallw(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts[],
  _In_  int          *sdispls[],
  _In_  MPI_Datatype sendtypes[],
  _Out_ void         *recvbuf,
  _In_  int          *recvcounts[],
  _In_  int          *rdispls[],
  _In_  MPI_Datatype recvtypes[],
        MPI_Comm     comm
);

매개 변수

  • sendbuf [in]
    그룹의 모든 프로세스로 보낼 데이터에 대한 포인터입니다. 버퍼에 있는 요소의 수와 데이터 형식은 sendcountsendtype 매개 변수에 지정됩니다. 버퍼의 각 요소는 그룹의 프로세스에 해당합니다.

    comm 매개 변수가 통신 내를 참조하는 경우 모든 프로세스에서 MPI_IN_PLACE 지정하여 현재 위치 옵션을 지정할 수 있습니다. sendcount, sdisplssendtype 매개 변수는 무시됩니다. 각 프로세스는 해당 수신 버퍼 요소에 데이터를 입력합니다.

    보내고 받은 데이터는 recvcounts 배열 및 recvtype 매개 변수에 지정된 것과 동일한 형식 맵을 가져야 하며 rdispls 매개 변수에 지정된 대로 수신 버퍼의 위치에서 읽습니다.

  • sendcounts [in]
    sendbuf 매개 변수에 지정된 대로 이 프로세스가 버퍼에서 보내는 데이터 요소의 수입니다. sendcount의 요소가 0이면 해당 프로세스의 메시지 데이터 부분이 비어 있습니다.

  • sdispls [in]
    각 통신기 프로세스에 대한 데이터의 sendbuf 매개 변수를 기준으로 하는 위치(바이트)입니다.

    Entry j는 프로세스 j로 향하는 나가는 데이터를 사용할 sendbuf 매개 변수를 기준으로 하는 변위를 지정합니다.

  • sendtypes [in]
    송신 버퍼의 각 요소에 대한 데이터 형식입니다. entry j 는 그룹의 j 를 처리하기 위해 전송되는 데이터 형식을 지정합니다.

  • recvbuf [out]
    각 프로세스에서 받은 데이터를 포함하는 버퍼에 대한 포인터입니다. 버퍼에 있는 요소의 수와 데이터 형식은 recvcountrecvtype 매개 변수에 지정됩니다.

  • recvcounts [in]
    수신 버퍼에 있는 각 통신기 프로세스의 데이터 요소 수입니다.

  • rdispls [in]
    각 통신기 프로세스의 데이터의 recvbuf 매개 변수를 기준으로 하는 위치(바이트)입니다. 항목 i는 프로세스 i에서 들어오는 데이터를 배치할 recvbuf 매개 변수를 기준으로 변위를 지정합니다.

    recvbuf, recvcountsrdispls 매개 변수 배열에서 각 배열의 n번째 요소는 n번째 통신기 프로세스에서 수신된 데이터를 참조합니다.

  • recvtypes [in]
    버퍼에 있는 각 요소의 데이터 형식입니다. 항목 i 는 프로세스 i에서 수신되는 데이터 형식을 지정합니다.

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

반환 값

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

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

Fortran

    MPI_ALLTOALLW(SENDBUF, SENDCOUNT, SDISPLS, SENDTYPE, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE,COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPES(*), SDISPLS(*), RECVCOUNTS(*), RDISPLS(*), RECVTYPE, COMM, IERROR

설명

중요

최대 유연성을 허용하기 위해 송신 및 수신 버퍼 내의 블록의 변위가 바이트로 지정됩니다. 

모든 매개 변수는 모든 프로세스에서 중요합니다. comm 매개 변수는 모든 프로세스에서 동일해야 합니다.

comm 매개 변수가 통신 내를 참조하는 경우 프로세스에서 전송된 j번째 블록은 프로세스 j에서 수신되고 수신 버퍼의 i번째 블록에 배치됩니다. 이러한 블록의 크기가 모두 같을 필요는 없습니다.

프로세스 i에 대한 sendcounts[j]sendtypes[j] 매개 변수에 의해 지정된 형식 서명은 프로세스 jrecvcounts[i] 및 recvtypes[i]와 연결된 형식 서명 과 같아야 합니다. 따라서 전송되는 데이터의 양은 프로세스 쌍 간에 수신되는 데이터 양과 같아야 합니다. 발신자와 수신자 간의 고유 형식 맵은 여전히 허용됩니다.

MPI_Alltoallw 함수에 대한 호출의 결과는 각 프로세스가 를 사용하여 다른 모든 프로세스에 MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...)메시지를 보내고 에 대한 호출MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,i,...)을 사용하여 다른 모든 프로세스에서 메시지를 받은 것처럼 표시됩니다.

현재 위치 옵션을 지정하면 통신기 그룹의 두 프로세스 간에 동일한 양의 데이터와 형식이 전송되고 수신됨을 나타냅니다. 프로세스 쌍이 다르면 서로 다른 양의 데이터를 교환할 수 있습니다. 사용자는 프로세스 irecvcounts[j]recvtype이 프로세스 jrecvcounts[i]recvtype과 일치하는지 확인해야 합니다.

comm 매개 변수가 상호 통신자를 참조하는 경우 결과는 그룹 A의 각 프로세스가 그룹 B의 각 프로세스에 메시지를 보내는 것처럼, 그 반대의 경우도 마찬가지입니다. 그룹 A에 있는 프로세스 ij번째 송신 버퍼는 그룹 B에서 프로세스 ji번째 수신 버퍼와 일치해야 하며 그 반대의 경우도 마찬가지입니다.

요구 사항

제품

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_Alltoallv

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv