File: shmem_quiet.3.rst

package info (click to toggle)
openmpi 5.0.8-10
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 201,692 kB
  • sloc: ansic: 613,078; makefile: 42,351; sh: 11,194; javascript: 9,244; f90: 7,052; java: 6,404; perl: 5,179; python: 1,859; lex: 740; fortran: 61; cpp: 20; tcl: 12
file content (86 lines) | stat: -rw-r--r-- 2,212 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
.. _shmem_quiet:


shmem_quiet
===========

.. include_body

:ref:`shmem_quiet`\ (3) - Waits for completion of all outstanding remote
writes issued by a processing element (PE).


SYNOPSIS
--------

C or C++:

.. code-block:: c++

   #include <mpp/shmem.h>

   void shmem_quiet(void)

Fortran:

.. code-block:: fortran

   CALL SHMEM_QUIET


DESCRIPTION
-----------

:ref:`shmem_quiet` ensures ordering of put (remote write) operations. All put
operations issued to any processing element (PE) prior to the call to
:ref:`shmem_quiet` are guaranteed to be visible to all other PEs no later than
any subsequent memory load or store, remote put or get, or
synchronization operations that follow the call to :ref:`shmem_quiet`.


NOTES
-----

| :ref:`shmem_quiet` is most useful as a way of ensuring ordering of delivery
  of several put operations. For example, you might use :ref:`shmem_quiet` to
  await delivery of a block of data before issuing another put, which
  sets a completion flag on another PE.
| :ref:`shmem_quiet` is not usually needed if :ref:`shmem_barrier_all`\ (3) or
  :ref:`shmem_barrier`\ (3) are called. The barrier routines all wait for the
  completion of outstanding remote writes (puts).


EXAMPLES
--------

::

   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


.. seealso::
   *intro_shmem*\ (3) :ref:`shmem_barrier`\ (3) :ref:`shmem_barrier_all`\ (3)
   *shmem_fence*\ (3) *shmem_put*\ (3) *shmem_wait*\ (3)