18.2.189. shmem_quiet
shmem_quiet(3) - 等待处理单元(PE)发出的所有未完成远程写入操作完成。
18.2.189.1. 概述
C或C++:
#include <mpp/shmem.h>
void shmem_quiet(void)
Fortran语言:
CALL SHMEM_QUIET
18.2.189.2. 描述
shmem_quiet 确保远程写入操作的顺序性。在调用shmem_quiet之前,针对任何处理单元(PE)发出的所有远程写入操作,都保证会在后续任何内存加载/存储、远程写入/读取或同步操作执行之前,对其他所有PE可见。
18.2.189.3. 注意事项
shmem_quiet is most useful as a way of ensuring ordering of delivery
of several put operations. For example, you might use shmem_quiet to
await delivery of a block of data before issuing another put, which
sets a completion flag on another PE.
shmem_quiet is not usually needed if shmem_barrier_all(3) or
shmem_barrier(3) are called. The barrier routines all wait for the
completion of outstanding remote writes (puts).
18.2.189.4. 示例
PROGRAM COMPFLAG
INCLUDE "mpp/shmem.fh"
INTEGER FLAG_VAR, ARRAY(100), RECEIVER, SENDER
COMMON/FLAG/FLAG_VAR
COMMON/DATA/ARRAY
INTRINSIC MY_PE
FLAG_VAR = 0
CALL SHMEM_BARRIER_ALL ! wait for FLAG_VAR to be initialized
SENDER = 0 ! PE 0 sends the data
RECEIVER = 1 ! PE 1 receives the data
IF (MY_PE() .EQ. 0) THEN
ARRAY = 33
CALL SHMEM_PUT(ARRAY, ARRAY, 100, RECEIVER) ! start sending data
CALL SHMEM_QUIET ! wait for delivery
CALL SHMEM_PUT(FLAG_VAR, 1, 1, RECEIVER) ! send completion flag
ELSE IF (MY_PE() .EQ. RECEIVER) THEN
CALL SHMEM_UDCFLUSH
CALL SHMEM_WAIT(FLAG_VAR, 0)
PRINT *,ARRAY ! ARRAY has been delivered
ENDIF
END
另请参阅
intro_shmem(3) shmem_barrier(3) shmem_barrier_all(3) shmem_fence(3) shmem_put(3) shmem_wait(3)