next up previous contents
Next: Общая синхронизация с активным Up: Синхронизационные вызовы Previous: Синхронизационные вызовы   Contents

Fence

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. []



Alex Otwagin 2002-12-10