MPI_Scatter 함수
한 멤버의 데이터를 그룹의 모든 멤버에 분산합니다. MPI_Scatter 함수는 MPI_Gather 함수에서 수행하는 연산의 역방향을 수행합니다.
구문
int MPIAPI MPI_Scatter(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
매개 변수
sendbuf [in]
루트 프로세스에서 보낼 데이터를 포함하는 버퍼에 대한 핸들입니다.sendbuf 매개 변수는 루트가 아닌 모든 프로세스에 대해 무시됩니다.
comm 매개 변수가 통신 내를 참조하는 경우 루트 프로세스에서 MPI_IN_PLACE 지정하여 현재 위치 옵션을 지정할 수 있습니다. recvcount 및 recvtype 매개 변수는 무시됩니다. 분산된 벡터는 여전히 n 세그먼트를 포함하는 것으로 간주됩니다. 여기서 n 은 그룹 크기입니다. 루트 프로세스에 해당하는 세그먼트는 이동되지 않습니다.
sendcount
송신 버퍼의 요소 수입니다. sendcount가 0이면 메시지의 데이터 부분이 비어 있습니다.sendcount 매개 변수는 루트가 아닌 모든 프로세스에 대해 무시됩니다.
sendtype
버퍼에 있는 각 요소의 데이터 형식입니다.sendcount 매개 변수는 루트가 아닌 모든 프로세스에 대해 무시됩니다.
recvbuf [out]
각 프로세스에서 수신되는 데이터를 포함하는 버퍼에 대한 핸들입니다. 버퍼에 있는 요소의 수와 데이터 형식은 recvcount 및 recvtype 매개 변수에 지정됩니다.recvcount
수신 버퍼의 요소 수입니다. 개수가 0이면 메시지의 데이터 부분이 비어 있습니다.recvtype
수신 버퍼에 있는 요소의 데이터 형식입니다.root
지정된 통신기 내의 송신 프로세스의 순위입니다.통신
MPI_Comm 커뮤니케이터 핸들입니다.
반환 값
성공에 대한 MPI_SUCCESS 반환합니다. 그렇지 않으면 반환 값이 오류 코드입니다.
Fortran에서 반환 값은 IERROR 매개 변수에 저장됩니다.
Fortran
MPI_SCATTER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
설명
MPI_Scatter 함수의 효과는 루트 프로세스가 MPI_Send 함수를 사용하여 메시지를 보내는 것과 같습니다. 이 메시지는 그룹의 각 멤버에 대해 하나씩 n개의 등가 세그먼트로 분할됩니다. i번째 세그먼트는 그룹의 i번째 프로세스로 전송됩니다.
comm이 인트라커뮤니키터인 경우 결과는 루트가 n 송신 작업을 MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)
실행한 것처럼 되며 각 프로세스는 수신 MPI_Recv(recvbuf, recvcount, recvtype, i,…)
을 실행했습니다.
루트 프로세스에 대한 sendcount 및 sendtype 매개 변수에 의해 지정된 형식 서명은 recvcount에 지정된 형식 서명 및 모든 프로세스에 대한 recvtype 매개 변수와 같아야 합니다. 따라서 전송되는 데이터의 양은 프로세스 쌍 간에 수신되는 데이터의 양과 같아야 합니다. 발신자와 수신자 간의 고유 형식 맵은 여전히 허용됩니다.
모든 함수 매개 변수는 루트 프로세스에서 중요하며 recvbuf, recvcount, recvtype, root 및 comm 매개 변수만 다른 프로세스에서 중요합니다. 루트 및 comm 매개 변수는 모든 프로세스에서 동일해야 합니다.
개수 및 형식의 사양으로 인해 루트의 위치를 두 번 이상 읽지 않아야 합니다.
comm 매개 변수가 상호 통신자를 참조하는 경우 호출에는 상호 통신기의 모든 프로세스가 포함되지만 루트 프로세스를 정의하는 하나의 그룹 A 그룹이 포함됩니다. 다른 그룹 B의 모든 프로세스는 루트 매개 변수, 즉 그룹 A의 루트 프로세스 순위에서 동일한 값을 설정합니다. 루트 프로세스는 루트 매개 변수에 MPI_ROOT 값을 설정합니다. 그룹 A의 다른 모든 프로세스는 루트 매개 변수에 MPI_PROC_NULL 값을 설정합니다. 데이터는 루트 프로세스에서 그룹 B의 모든 프로세스로 브로드캐스트됩니다. 그룹 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 |