Два дополнения сделаны к большому числу коллективных коммуникационных вызовов:
MPI_IN_PLACE
, вместо значения, задающего буфер передачи или буфер
приема.
Объяснение:
Совместные операции (in-place) предоставляются, чтобы сократить
ненужное перемещение памяти обоими реализациями MPI и пользователем.
Заметим, что в то время как простая проверка условия, имеют ли буферы
передачи и приема одинаковый адрес, сработает для одних случаев (например,
MPI_ALLREDUCE
), она даст неадекватные результаты для других
(например, MPI_GATHER
с корнем, не равным нулю). Далее, ФОРТРАН явно запрещает совмещение имен аргументов; подход с использованием
специального значения для обозначения ''совместных'' операций устраняет
эту трудность. []
Совет пользователям:
При разрешении опции in-place
, буфер приема
во многих из коллективных вызовов становится буфером передачи-приема. По
этой причине, привязки к ФОРТРАН, включающие INTENT, должны помечать
такие буферы как INOUT, а не OUT. []
Обратите внимание, что MPI_IN_PLACE
- специальный тип значения; он
имеет те же ограничения на использование, которые имеет MPI_BOTTOM
.
Некоторые коллективные операции с интракоммуникаторами не поддерживают
опцию
[]in-place
(например, MPI_ALLTOALLV
).
broadcast
, gather
,
scatter
, то передача - однонаправленная). Направление передачи
отображается специальным значением корневого аргумента. В этом случае,
для группы, содержащей корневой процесс, все процессы в ней должны вызвать
процедуру, используя этот специальный корневой аргумент. Корневой
процесс использует специальное корневое значение MPI_ROOT
; все
другие процессы в этой же группе используют MPI_PROC_NULL
. Все
процессы в другой группе (группе, которая является отдаленной относительно
корневого процесса) должны вызвать коллективную процедуру и
предоставить ранг корня. Если операция некорневая (например,
all-to-all
), то передача - двунаправленная.
Заметим, что опция in-place
не применима к интракоммуникаторам в
тех случаях, когда нет связи процесса с самим собой.
Объяснение:
Корневые операции однонаправлены по своей природе, и здесь приводится
ясный путь для определения направления. Некорневые операции типа
all-to-all
будут часто являться составной частью обменов, когда
имеет смысл связываться в обоих направлениях сразу.
Далее приводятся определения коллективных процедур с тем, чтобы чтобы повысить удобочитаемость и понимание сопутствующего текста. Они не подменяют определения списков аргументов из MPI-1. Привязки к языкам Си и ФОРТРАН для этих процедур не изменены по отношению к MPI-1 и здесь не повторяются. Так как для различных версий интеркоммуникаторов требуются новые привязки к С++, они приводятся. Текст, описывающий каждую процедуру, добавляется в конец определения этой процедуры в MPI-1.