shmem_quiet 的保序操作

shmem quiet 保序操作

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

A调用了一个put,A再调用一个quiet,A再调用一个put,就能保证后面的put是发生在前一个put之后的,上面这个例子有一个状态标记FLAG_VAR,用来标记操作的完成,这个就需要用到保序操作。

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>