File: shmem_long_cswap.3

package info (click to toggle)
openmpi 5.0.8-4
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 201,684 kB
  • sloc: ansic: 613,078; makefile: 42,353; 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 (174 lines) | stat: -rw-r--r-- 4,352 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
.\" Man page generated from reStructuredText.
.
.TH "SHMEM_LONG_CSWAP" "3" "May 30, 2025" "" "Open MPI"
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.INDENT 0.0
.INDENT 3.5
.UNINDENT
.UNINDENT
.sp
\fI\%shmem_int_cswap\fP(3), shmem_int4_cswap(3),
shmem_int8_cswap(3), \fI\%shmem_long_cswap\fP(3),
\fI\%shmem_longlong_cswap\fP(3) \- Performs an atomic conditional swap to a
remote data object
.SH SYNOPSIS
.sp
C or C++:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
#include <mpp/shmem.h>

int shmem_int_cswap(int *target, int cond, int value, int pe)

long shmem_long_cswap(long *target, long cond, long value,
  int pe)

long long shmem_longlong_cswap(longlong *target,
  longlong cond, longlong value, int pe)
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Fortran:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
INCLUDE "mpp/shmem.fh"

INTEGER pe

INTEGER(KIND=4) SHMEM_INT4_CSWAP
ires = SHMEM_INT4_CSWAP(target, cond, value, pe)

INTEGER(KIND=8) SHMEM_INT8_CSWAP
ires = SHMEM_INT8_CSWAP(target, cond, value, pe)
.ft P
.fi
.UNINDENT
.UNINDENT
.SH DESCRIPTION
.sp
The conditional swap routines conditionally update a target data object
on an arbitrary processing element (PE) and return the prior contents of
the data object in one atomic operation.
.sp
The arguments are as follows:
.INDENT 0.0
.TP
.B target
The remotely accessible integer data object to be updated on the
remote PE. If you are using C/C++, the type of target should match
that implied in the SYNOPSIS section. If you are using the Fortran
compiler, it must be of type integer with an element size of 4 bytes
for SHMEM_INT4_ADD and 8 bytes for SHMEM_INT8_ADD.
.TP
.B value
The value to be atomically added to target. If you are using C/C++,
the type of value should match that implied in the SYNOPSIS section.
If you are using Fortran, it must be of type integer with an element
size of target.
.TP
.B pe
An integer that indicates the PE number upon which target is to be
updated. If you are using Fortran, it must be a default integer
value.
.TP
.B target
The remotely accessible integer data object to be updated on the
remote PE. If you are using C/C++, the data type of target should
match that implied in the SYNOPSIS section. If you are using Fortran,
it must be of the following type:
.sp
\fBSHMEM_INT4_CSWAP\fP: 4\-byte integer
.sp
\fBSHMEM_INT8_CSWAP\fP: 8\-byte integer
.TP
.B cond
cond is compared to the remote target value. If cond and the remote
target are equal, then value is swapped into the remote target.
Otherwise, the remote target is unchanged. In either case, the old
value of the remote target is returned as the function return value.
cond must be of the same data type as target.
.TP
.B value
The value to be atomically written to the remote PE. value must be
the same data type as target.
.TP
.B pe
An integer that indicates the PE number upon which target is to be
updated. If you are using Fortran, it must be a default integer
value.
.UNINDENT
.SH NOTES
.sp
The term remotely accessible is defined in \fIintro_shmem\fP(3).
.SH RETURN VALUES
.sp
The contents that had been in the target data object on the remote PE
prior to the conditional swap.
.SH EXAMPLES
.sp
The following call ensures that the first PE to execute the conditional
swap will successfully write its PE number to race_winner on PE 0.
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
main()
{
  static int race_winner = \-1;
  int oldval;

  shmem_init();
  oldval = shmem_int_cswap(&race_winner, \-1, shmem_my_pe(), 0);
  if (oldval == \-1)
    printf("pe %d was first\en",shmem_my_pe());
}
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
\fBSEE ALSO:\fP
.INDENT 0.0
.INDENT 3.5
\fIintro_shmem\fP(3) \fIshmem_cache\fP(3) \fIshmem_swap\fP(3)
.UNINDENT
.UNINDENT
.SH COPYRIGHT
2003-2025, The Open MPI Community
.\" Generated by docutils manpage writer.
.