Н., Пескова Е. Е., Шаманаев П. А. Основы параллельного программирования с использованием технологий mpi и openmp учебное пособие саранск издательство свмо 2013 2



Pdf көрінісі
бет21/53
Дата07.06.2023
өлшемі6.58 Mb.
#474796
1   ...   17   18   19   20   21   22   23   24   ...   53
ParProg MPI OpenMP

int 
MPI_Gather(void* 
sendbuf, 
int 
sentcount, 
MPI_Datatype 
senddatatype, void* recbuf, int reccount, MPI_Datatype recdatatype,int 
root,MPI_Comm comm), где:
• sendbuf – адрес буфера для передачи данных;
• sentcountколичество элементов, передаваемое на главный 
процесс;


26 
• senddatatype – тип передаваемых данных;
• recbuf – буфер для приема данных;
• reccount – размер буфера recbuf;
• recdatatype – тип данных для приемки;
• root – ранг процесса, на котором собираются данные;
• comm – коммуникатор.
Посредством MPI_Gather каждый процесс в коммуникаторе 
передает данные из буфера sendbuf на процесс с рангом root. Этот 
"ведущий" процесс осуществляет склейку поступающих данных в буфере 
recbuf. Склейка данных осуществляется линейно, положение пришедшего 
фрагмента данных определяется рангом процесса, его приславшего. В 
целом процедура MPI_Gather обратна по своему действию процедуре 
MPI_Scatter.
Следует заметить, что при использовании MPI_Gather сборка 
осуществляется только на одном процессе. Во всех остальных процессах 
заполнение буфера recbuf не определено. Для некоторых задач 
необходимо, чтобы данные, рассчитанные на каждом из процессов, были 
собраны в единый объект опять же на каждом процессе. В таком случае, 
вместо 
функции 
MPI_Gather 
следует 
использовать 
функцию 
MPI_Allgather. При использовании функции MPI_Allgather на всех 
процессах в буфере recbuf будут собраны одинаковые данные - "большой" 
объект, полученный как объединение фрагментов, переданных с каждого 
из процессов. 
Другая полезная процедура MPI_Alltoall пересылает данные по 
принципу "все - всем" 
Рис. 2.4. Работа MPI_Alltoall 
Кроме перечисленных, в MPI существует еще десяток функций, 
осуществляющих различные коллективные операции. При работе с ними 
следует помнить следующие основные моменты:


27 
 все коллективные операции выполняются в рамках коммуникатора. 
Если 
необходимо 
выполнить 
коллективную 
операцию 
над 
подмножеством процессов, следует создать для этой цели свой 
коммуникатор.
 коллективные операции должны вызываться во всех процессах, 
которые в них участвуют.
 
разумное использование коллективных операций - хорошее средство 
повышения производительности.


Достарыңызбен бөлісу:
1   ...   17   18   19   20   21   22   23   24   ...   53




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет