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)