128 строки
3.4 KiB
Plaintext
128 строки
3.4 KiB
Plaintext
|
.\" -*- nroff -*-
|
||
|
.\" Copyright (c) 2015 University of Houston. All rights reserved.
|
||
|
.\" Copyright (c) 2015 Mellanox Technologies, Inc.
|
||
|
.\" $COPYRIGHT$
|
||
|
.de Vb
|
||
|
.ft CW
|
||
|
.nf
|
||
|
..
|
||
|
.de Ve
|
||
|
.ft R
|
||
|
|
||
|
.fi
|
||
|
..
|
||
|
.TH "SHMEM\\_CSWAP" "3" "#OMPI_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
|
||
|
.SH NAME
|
||
|
|
||
|
\fIshmem_int_cswap\fP(3),
|
||
|
\fIshmem_int4_cswap\fP(3),
|
||
|
\fIshmem_int8_cswap\fP(3),
|
||
|
\fIshmem_long_cswap\fP(3),
|
||
|
\fIshmem_longlong_cswap\fP(3)
|
||
|
\- Performs an atomic conditional swap to a remote data object
|
||
|
.SH SYNOPSIS
|
||
|
|
||
|
C or C++:
|
||
|
.Vb
|
||
|
#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);
|
||
|
.Ve
|
||
|
Fortran:
|
||
|
.Vb
|
||
|
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)
|
||
|
.Ve
|
||
|
.SH DESCRIPTION
|
||
|
|
||
|
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.
|
||
|
.PP
|
||
|
The arguments are as follows:
|
||
|
.TP
|
||
|
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
|
||
|
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
|
||
|
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
|
||
|
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:
|
||
|
.RS
|
||
|
.TP
|
||
|
\fBSHMEM_INT4_CSWAP\fP: 4\-byte integer
|
||
|
.TP
|
||
|
\fBSHMEM_INT8_CSWAP\fP: 8\-byte integer
|
||
|
.RE
|
||
|
.RS
|
||
|
.PP
|
||
|
.RE
|
||
|
.TP
|
||
|
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
|
||
|
value
|
||
|
The value to be atomically written to the remote PE. value must be the same data
|
||
|
type as target.
|
||
|
.TP
|
||
|
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.
|
||
|
.PP
|
||
|
.SH NOTES
|
||
|
|
||
|
The term remotely accessible is defined in \fIintro_shmem\fP(3)\&.
|
||
|
.SH RETURN VALUES
|
||
|
|
||
|
The contents that had been in the target data object on the remote PE prior to the conditional
|
||
|
swap.
|
||
|
.SH EXAMPLES
|
||
|
|
||
|
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.
|
||
|
.Vb
|
||
|
main()
|
||
|
{
|
||
|
static int race_winner = \-1;
|
||
|
int oldval;
|
||
|
|
||
|
start_pes(2);
|
||
|
oldval = shmem_int_cswap(&race_winner, \-1, _my_pe(), 0);
|
||
|
if (oldval == \-1)
|
||
|
printf("pe %d was first\\n",_my_pe());
|
||
|
}
|
||
|
.Ve
|
||
|
.SH SEE ALSO
|
||
|
|
||
|
\fIintro_shmem\fP(3),
|
||
|
\fIshmem_cache\fP(3),
|
||
|
\fIshmem_swap\fP(3)
|