|
| 1 | +\color{ForestGreen} |
| 2 | +\apisummary{ |
| 3 | + The nonblocking put-with-signal routines provide a method for copying data |
| 4 | + from a contiguous local data object to a data object on a specified \ac{PE} |
| 5 | + and subsequently updating a remote flag to signal completion. |
| 6 | +} |
| 7 | + |
| 8 | +\begin{apidefinition} |
| 9 | + |
| 10 | +\begin{C11synopsis} |
| 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); |
| 13 | +\end{C11synopsis} |
| 14 | +where \TYPE{} is one of the standard \ac{RMA} types specified by Table \ref{stdrmatypes}. |
| 15 | + |
| 16 | +\begin{Csynopsis} |
| 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); |
| 19 | +\end{Csynopsis} |
| 20 | +where \TYPE{} is one of the standard \ac{RMA} types and has a corresponding \TYPENAME{} specified by Table \ref{stdrmatypes}. |
| 21 | + |
| 22 | +\begin{CsynopsisCol} |
| 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); |
| 25 | +\end{CsynopsisCol} |
| 26 | +where \SIZE{} is one of \CONST{8, 16, 32, 64, 128}. |
| 27 | + |
| 28 | +\begin{CsynopsisCol} |
| 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); |
| 31 | +\end{CsynopsisCol} |
| 32 | + |
| 33 | +\begin{apiarguments} |
| 34 | + \apiargument{IN}{ctx}{A context handle specifying the context on which to |
| 35 | + perform the operation. When this argument is not provided, the operation is |
| 36 | + performed on the default context.} |
| 37 | + \apiargument{OUT}{dest}{Data object to be updated on the remote \ac{PE}. |
| 38 | + This data object must be remotely accessible.} |
| 39 | + \apiargument{IN}{source}{Data object containing the data to be copied.} |
| 40 | + \apiargument{IN}{nelems}{Number of elements in the \dest{} and \source{} |
| 41 | + arrays. \VAR{nelems} must be of type \VAR{size\_t} for \Cstd.} |
| 42 | + \apiargument{OUT}{sig\_addr}{Data object to be updated on the remote |
| 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 | + 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.} |
| 48 | + \apiargument{IN}{pe}{\ac{PE} number of the remote \ac{PE}.} |
| 49 | +\end{apiarguments} |
| 50 | + |
| 51 | +\apidescription{ |
| 52 | + The nonblocking put-with-signal routines provide a method for copying data |
| 53 | + from a contiguous local data object to a data object on a specified \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. |
| 73 | +} |
| 74 | + |
| 75 | +\apireturnvalues{ |
| 76 | + None. |
| 77 | +} |
| 78 | + |
| 79 | +\apinotes{ |
| 80 | + The \dest{} and \VAR{sig\_addr} data objects must both be remotely |
| 81 | + accessible. The \VAR{sig\_addr} and \dest{} could be of different kinds, |
| 82 | + for example, one could be a global/static \Cstd variable and the other could |
| 83 | + be allocated on the symmetric heap. |
| 84 | + |
| 85 | + \VAR{sig\_addr} and \dest{} may not be overlapping in memory. |
| 86 | +} |
| 87 | + |
| 88 | +\end{apidefinition} |
| 89 | +\color{black} |
0 commit comments