Skip to content

Commit 8ef94d4

Browse files
committed
Update NBI put-with-signal atomicity description
1 parent d08fd17 commit 8ef94d4

File tree

1 file changed

+37
-38
lines changed

1 file changed

+37
-38
lines changed

content/shmem_put_signal_nbi.tex

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,75 @@
1+
\color{ForestGreen}
12
\apisummary{
23
The nonblocking put-with-signal routines provide a method for copying data
34
from a contiguous local data object to a data object on a specified \ac{PE}
4-
and subsequently setting a remote flag to signal completion.
5+
and subsequently updating a remote flag to signal completion.
56
}
67

78
\begin{apidefinition}
89

910
\begin{C11synopsis}
10-
void @\FuncDecl{shmem\_put\_signal\_nbi}@(TYPE *dest, const TYPE *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int pe);
11-
void @\FuncDecl{shmem\_put\_signal\_nbi}@(shmem_ctx_t ctx, TYPE *dest, const TYPE *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int pe);
11+
void @\FuncDecl{shmem\_put\_signal\_nbi}@(TYPE *dest, const TYPE *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int sig_op, int pe);
12+
void @\FuncDecl{shmem\_put\_signal\_nbi}@(shmem_ctx_t ctx, TYPE *dest, const TYPE *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int sig_op, int pe);
1213
\end{C11synopsis}
1314
where \TYPE{} is one of the standard \ac{RMA} types specified by Table \ref{stdrmatypes}.
1415

1516
\begin{Csynopsis}
16-
void @\FuncDecl{shmem\_\FuncParam{TYPENAME}\_put\_signal\_nbi}@(TYPE *dest, const TYPE *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int pe);
17-
void @\FuncDecl{shmem\_ctx\_\FuncParam{TYPENAME}\_put\_signal\_nbi}@(shmem_ctx_t ctx, TYPE *dest, const TYPE *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int pe);
17+
void @\FuncDecl{shmem\_\FuncParam{TYPENAME}\_put\_signal\_nbi}@(TYPE *dest, const TYPE *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int sig_op, int pe);
18+
void @\FuncDecl{shmem\_ctx\_\FuncParam{TYPENAME}\_put\_signal\_nbi}@(shmem_ctx_t ctx, TYPE *dest, const TYPE *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int sig_op, int pe);
1819
\end{Csynopsis}
1920
where \TYPE{} is one of the standard \ac{RMA} types and has a corresponding \TYPENAME{} specified by Table \ref{stdrmatypes}.
2021

2122
\begin{CsynopsisCol}
22-
void @\FuncDecl{shmem\_put\FuncParam{SIZE}\_signal\_nbi}@(void *dest, const void *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int pe);
23-
void @\FuncDecl{shmem\_ctx\_put\FuncParam{SIZE}\_signal\_nbi}@(shmem_ctx_t ctx, void *dest, const void *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int pe);
23+
void @\FuncDecl{shmem\_put\FuncParam{SIZE}\_signal\_nbi}@(void *dest, const void *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int sig_op, int pe);
24+
void @\FuncDecl{shmem\_ctx\_put\FuncParam{SIZE}\_signal\_nbi}@(shmem_ctx_t ctx, void *dest, const void *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int sig_op, int pe);
2425
\end{CsynopsisCol}
2526
where \SIZE{} is one of \CONST{8, 16, 32, 64, 128}.
2627

2728
\begin{CsynopsisCol}
28-
void @\FuncDecl{shmem\_putmem\_signal\_nbi}@(void *dest, const void *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int pe);
29-
void @\FuncDecl{shmem\_ctx\_putmem\_signal\_nbi}@(shmem_ctx_t ctx, void *dest, const void *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int pe);
29+
void @\FuncDecl{shmem\_putmem\_signal\_nbi}@(void *dest, const void *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int sig_op, int pe);
30+
void @\FuncDecl{shmem\_ctx\_putmem\_signal\_nbi}@(shmem_ctx_t ctx, void *dest, const void *source, size_t nelems, uint64_t *sig_addr, uint64_t signal, int sig_op, int pe);
3031
\end{CsynopsisCol}
3132

3233
\begin{apiarguments}
3334
\apiargument{IN}{ctx}{A context handle specifying the context on which to
3435
perform the operation. When this argument is not provided, the operation is
3536
performed on the default context.}
36-
\apiargument{OUT}{dest}{Data object to be updated on the remote \ac{PE}. This
37-
data object must be remotely accessible.}
37+
\apiargument{OUT}{dest}{Data object to be updated on the remote \ac{PE}.
38+
This data object must be remotely accessible.}
3839
\apiargument{IN}{source}{Data object containing the data to be copied.}
3940
\apiargument{IN}{nelems}{Number of elements in the \dest{} and \source{}
4041
arrays. \VAR{nelems} must be of type \VAR{size\_t} for \Cstd.}
4142
\apiargument{OUT}{sig\_addr}{Data object to be updated on the remote
42-
\ac{PE} as the signal. This signal data object must be
43-
remotely accessible.}
44-
\apiargument{IN}{signal}{Unsigned 64-bit value that is assigned to the
43+
\ac{PE} as the signal. This signal data object must be remotely accessible.}
44+
\apiargument{IN}{signal}{Unsigned 64-bit value that is used for updating the
4545
remote \VAR{sig\_addr} signal data object.}
46+
\apiargument{IN}{sig\_op}{Signal operator that represents the type of update
47+
to be performed on the remote \VAR{sig\_addr} signal data object.}
4648
\apiargument{IN}{pe}{\ac{PE} number of the remote \ac{PE}.}
4749
\end{apiarguments}
4850

4951
\apidescription{
5052
The nonblocking put-with-signal routines provide a method for copying data
5153
from a contiguous local data object to a data object on a specified \ac{PE}
52-
and subsequently setting a remote flag to signal completion. The routines
53-
return after posting the operation. The operation is considered complete
54-
after the subsequent call to \FUNC{shmem\_quiet}. At the completion of
55-
\FUNC{shmem\_quiet}, the data has been copied out of the \source{}
56-
array on the local \ac{PE} and delivered into the \dest{} array on the
57-
destination \ac{PE}. The delivery of \VAR{signal} flag on the remote
58-
\ac{PE} indicates the delivery of its corresponding \dest{} data words
59-
into the data object on the remote \ac{PE}.
54+
and subsequently updating a remote flag to signal completion.
55+
56+
The routines return after posting the operation. The operation is considered
57+
complete after a subsequent call to \FUNC{shmem\_quiet}. At the completion
58+
of \FUNC{shmem\_quiet}, the data has been copied out of the \source{} array
59+
on the local \ac{PE} and delivered into the \dest{} array on the destination
60+
\ac{PE}. The delivery of \VAR{signal} flag on the remote \ac{PE} indicates
61+
the delivery of its corresponding \dest{} data words into the data object on
62+
the remote \ac{PE}.
63+
64+
The \VAR{sig\_op} signal operator determines the type of update to be
65+
performed on the remote \VAR{sig\_addr} signal data object.
66+
67+
An update to the \VAR{sig\_addr} signal data object through a non-blocking
68+
put-with-signal routine completes as if performed atomically with respect to
69+
any other non-blocking put-with-signal routine that updates the
70+
\VAR{sig\_addr} signal data object using the same \VAR{sig\_op} signal
71+
update operator and any point-to-point synchronization routine that accesses
72+
the \VAR{sig\_addr} signal data object.
6073
}
6174

6275
\apireturnvalues{
@@ -69,22 +82,8 @@
6982
for example, one could be a global/static \Cstd variable and the other could
7083
be allocated on the symmetric heap.
7184

72-
The \VAR{sig\_addr} and \dest{} may not be overlapping in memory.
73-
74-
The delivery of \VAR{signal} flag on the remote \ac{PE} indicates only the
75-
delivery of its corresponding \dest{} data words into the data object on
76-
the remote \ac{PE}. Without a memory-ordering operation, there is no implied
77-
ordering between the delivery of the signal word of a nonblocking
78-
put-with-signal routine and another data transfer. For example, the delivery
79-
of the signal word in a sequence consisting of a put routine followed by a
80-
nonblocking put-with-signal routine does not imply delivery of the put
81-
routine's data.
82-
83-
The signal set by the nonblocking put-with-signal routines is compatible
84-
with all point-to-point synchronization interfaces. The delivery of
85-
\VAR{signal} flag on the remote \ac{PE} must not cause partial updates. This
86-
requires the update on \VAR{signal} flag to be an atomic operation, with
87-
atomicity guarantees described in Section~\ref{subsec:amo_guarantees}.
85+
\VAR{sig\_addr} and \dest{} may not be overlapping in memory.
8886
}
8987

9088
\end{apidefinition}
89+
\color{black}

0 commit comments

Comments
 (0)