25
Рис. 2.3. Распределение данных
Распределение и сбор данных осуществляется с
помощью вызовов
процедур MPI_Scatter и MPI_Gather.
int
MPI_Scatter(void*
sendbuf,
int
sentcount,
MPI_Datatype
senddatatype, void* recbuf, int reccount, MPI_Datatype recdatatype,int
root,MPI_Comm comm), где:
• sendbuf – адрес буфера для передачи данных;
• sentcount –
количество элементов, передаваемых на каждый
процесс (общее количество элементов в
буфере равно произведению
sentcount на количество процессов в коммуникаторе);
• senddatatype – тип передаваемых данных;
• recbuf – буфер для приема данных;
• reccount – размер буфера recbuf;
• recdatatype – тип данных для приемки;
• root – ранг процесса, с которого рассылаются данные;
• comm – коммуникатор.
При вызове этой процедуры произойдет следующее. Процесс с
рангом root произведет передачу данных
всем другим процессам в
коммуникаторе.
Каждому
процессу
будет
отправлено
sendcount
элементов. Процесс с рангом 0 получит порцию из sendbuf, начиная с 0-го
и заканчивая sendcount-1 элементом. Процесс с рангом 1 получит порцию,
начиная с sendcount, заканчивая 2* sendcount-1 и т.д.
Подпрограмма
MPI_Gather собирает данные от остальных
процессов.
Достарыңызбен бөлісу: