|
| 1 | +\color{ForestGreen} |
1 | 2 | \apisummary{ |
2 | 3 | The nonblocking put-with-signal routines provide a method for copying data |
3 | 4 | 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. |
5 | 6 | } |
6 | 7 |
|
7 | 8 | \begin{apidefinition} |
8 | 9 |
|
9 | 10 | \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); |
12 | 13 | \end{C11synopsis} |
13 | 14 | where \TYPE{} is one of the standard \ac{RMA} types specified by Table \ref{stdrmatypes}. |
14 | 15 |
|
15 | 16 | \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); |
18 | 19 | \end{Csynopsis} |
19 | 20 | where \TYPE{} is one of the standard \ac{RMA} types and has a corresponding \TYPENAME{} specified by Table \ref{stdrmatypes}. |
20 | 21 |
|
21 | 22 | \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); |
24 | 25 | \end{CsynopsisCol} |
25 | 26 | where \SIZE{} is one of \CONST{8, 16, 32, 64, 128}. |
26 | 27 |
|
27 | 28 | \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); |
30 | 31 | \end{CsynopsisCol} |
31 | 32 |
|
32 | 33 | \begin{apiarguments} |
33 | 34 | \apiargument{IN}{ctx}{A context handle specifying the context on which to |
34 | 35 | perform the operation. When this argument is not provided, the operation is |
35 | 36 | 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.} |
38 | 39 | \apiargument{IN}{source}{Data object containing the data to be copied.} |
39 | 40 | \apiargument{IN}{nelems}{Number of elements in the \dest{} and \source{} |
40 | 41 | arrays. \VAR{nelems} must be of type \VAR{size\_t} for \Cstd.} |
41 | 42 | \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 |
45 | 45 | 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.} |
46 | 48 | \apiargument{IN}{pe}{\ac{PE} number of the remote \ac{PE}.} |
47 | 49 | \end{apiarguments} |
48 | 50 |
|
49 | 51 | \apidescription{ |
50 | 52 | The nonblocking put-with-signal routines provide a method for copying data |
51 | 53 | 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. |
60 | 73 | } |
61 | 74 |
|
62 | 75 | \apireturnvalues{ |
|
69 | 82 | for example, one could be a global/static \Cstd variable and the other could |
70 | 83 | be allocated on the symmetric heap. |
71 | 84 |
|
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. |
88 | 86 | } |
89 | 87 |
|
90 | 88 | \end{apidefinition} |
| 89 | +\color{black} |
0 commit comments