MPI_WIN_FENCE(assert,win)
IN | ASSERT | программное допущение (целое) | |
IN | WIN | объект окна (дескриптор) |
int MPI_Win_fence(int assert, MPI_Win win)
MPI_WIN_FENCE(ASSERT, WIN, IERROR)
INTEGER ASSERT, WIN, IERROR
void MPI::Win::Fence(int assert) const
MPI вызов MPI_WIN_FENCE(assert, win)
синхронизирует RMA
вызовы к win
. Вызов является коллективным в группе win
.
Все RMA операции в win
, происходящие в данном процессе и
начатые до вызова fence
, выполнятся в этом процессе до того, как
произойдет возврат из вызова fence
. Они выполнятся в их адресате
до того, как произойдет возврат из fence
в адресат. RMA
операции в win
, начатые процессом после того, как произойдет возврат
из fence
, получат доступ к окну адресата только после того, как
процессом-адресатом будет выполнен вызов MPI_WIN_FENCE
.
Вызов завершает период RMA доступа, если ему предшествовал другой
вызов fence
и локальные процессы, созданные коммуникационными RMA вызовами к win
между этими двумя вызовами. Вызов завершает
RMA период предоставления доступа, если ему предшествовал другой
вызов fence
, и локальное окно было адресатом RMA обращений
между этими двумя вызовами. Вызов начинает RMA период
предоставления доступа, если он предшествует другому вызову fence
и
коммуникационным RMA вызовам, созданным между этими двумя вызовами.
Вызов начинает период предоставления доступа, если он предшествует другому
вызову fence
и локальное окно является адресатом RMA
обращений между этими двумя вызовами fence
. Таким образом, вызов
fence
эквивалентен вызовам к подмножеству операций post
,
start
, complete
, wait
.
Вызов fence
обычно влечет за собой барьерную синхронизацию: процесс
завершает вызов
MPI_WIN_FENCE
только после того, как все другие
процессы в группе сделали свой соответствующий вызов. Тем не менее, вызов
MPI_WIN_FENCE
который, как известно завершает не любой период, (в
частности, вызов с assert = MPI_MODE_NOPRECEDE
) не обязательно
действует как барьер.
Аргумент assert
используется, чтобы обеспечить соглашения о контексте
вызова, которые могут использоваться для различных оптимизаций. Это
описывается в разделе 4.4.4. Значение assert = 0
всегда справедливо.
Совет пользователям: Вызовы MPI_WIN_FENCE
должны как
предшествовать, так и
следовать за вызовами get
, put
или accumulate
,
которые синхронизируются с помощью вызовов fence
. []