Во всех ранее рассмотренных примерах использования функций передачи данных предполагалось, что сообщения представляют собой некоторый непрерывный вектор элементов предусмотренного в MPI типа (список имеющихся в MPI типов представлен в табл. 5.1). Понятно, что в общем случае необходимые к пересылке данные могут рядом не располагаться и состоять из значений разных типов. Конечно, и в этих ситуациях разрозненные данные могут быть переданы с использованием нескольких сообщений, но такой способ решения неэффективен в силу накопления латентностей множества выполняемых операций передачи данных. Другой возможный подход состоит в предварительной упаковке передаваемых данных в формат того или иного непрерывного вектора, однако и здесь появляются лишние операции копирования данных, да и понятность таких операций передачи далека от желаемой.
Передача от одного процесса всем процессам (широковещательная рассылка) | п. 3.2.2 | MPI_Bcast п. 5.2.3.1 | п. 5.2.3.1 |
Сбор и обработка данных на одном процессе от всех процессов (редукция данных) | пп. 3.2.2, 3.2.3 | MPI_Reduce п. 5.2.3.2 | п. 5.2.3.2 |
- то же с рассылкой результатов всем процессам | пп. 3.2.2, 3.2.3 | MPI_Allreduce MPI_Reduce_scatter п. 5.4.4 | |
- то же с получением частичных результатов обработки | пп. 3.2.2, 3.2.3 | MPI_Scan п. 5.4.4 | |
Обобщенная передача от одного процесса всем процессам (распределение данных) | п. 3.2.4 | MPI_Scatter MPI_Scatterv п. 5.4.1 | Лекция 6 |
Обобщенная передача от всех процессов одному процессу (сбор данных) | п. 3.2.4 | MPI_Gather MPI_Gatherv п. 5.4.2 | Лекция 6 |
- то же с рассылкой результатов всем процессам | п. 3.2.4 | MPI_Allgather MPI_Allgatherv п. 5.4.2 | |
Обобщенная передача данных от всех процессов всем процессам | п. 3.2.5 | MPI_Alltoall MPI_Alltoallv п. 5.4.3 | Лекция 6 |
Для обеспечения больших возможностей при определении состава передаваемых сообщений в MPI предусмотрен механизм так называемых производных типов данных. Далее будут даны основные понятия используемого подхода, приведены возможные способы конструирования производных типов данных и рассмотрены функции упаковки и распаковки данных.