SHMEM_LONG_CSWAP(3)
π shmem_long_cswap(3) β the Open MPI girlies' guide to the conditional swap β¨
okay so bestie, gather round, because this page is actually a whole family of functions, not just one. The star of the show is shmem_long_cswap, but she brought her sisters:
shmem_int_cswap <#shmem-int-cswap>(3)shmem_int4_cswap(3)shmem_int8_cswap(3)shmem_long_cswap(3)shmem_longlong_cswap <#shmem-longlong-cswap>(3)
and together they do one (1) thing: Performs an atomic conditional swap to a remote data object. that's it, that's the girlboss job. π
β¨ SYNOPSIS β¨
C or 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)
Fortran:
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)
πΈ 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. like, no rusty little race-condition crumbs left behind. periodt. π
The arguments are as follows:
targetβ The remotely accessible integer data object to be updated on the remote PE. If you are using C/C++, the type oftargetshould match that implied in the SYNOPSIS section. If you are using the Fortran compiler, it must be of typeintegerwith an element size of 4 bytes forSHMEM_INT4_ADDand 8 bytes forSHMEM_INT8_ADD.valueβ The value to be atomically added totarget. If you are using C/C++, the type ofvalueshould match that implied in the SYNOPSIS section. If you are using Fortran, it must be of typeintegerwith an element size oftarget.peβ An integer that indicates the PE number upon whichtargetis to be updated. If you are using Fortran, it must be a default integer value.
and then, because this page loves a double feature, here's the rundown again with cond joining the party:
targetβ The remotely accessible integer data object to be updated on the remote PE. If you are using C/C++, the data type oftargetshould match that implied in the SYNOPSIS section. If you are using Fortran, it must be of the following type:SHMEM_INT4_CSWAP: 4-byte integerSHMEM_INT8_CSWAP: 8-byte integer
condβcondis compared to the remotetargetvalue. Ifcondand the remotetargetare equal, thenvalueis swapped into the remotetarget. Otherwise, the remotetargetis unchanged. In either case, the old value of the remotetargetis returned as the function return value.condmust be of the same data type astarget.valueβ The value to be atomically written to the remote PE.valuemust be the same data type astarget.peβ An integer that indicates the PE number upon whichtargetis to be updated. If you are using Fortran, it must be a default integer value.
π NOTES π
The term remotely accessible is defined in intro_shmem(3). lowkey the origin story, you should read it. π«Ά
π« RETURN VALUES π«
The contents that had been in the target data object on the remote PE prior to the conditional swap. she gives you the before pic, not the after. πΈ
π₯ 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.
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\n",shmem_my_pe());
}
See also:
intro_shmem(3) shmem_cache(3) shmem_swap(3)
ok so real talk for one sec: this whole page is shmem_long_cswap(3), and she lives in Open MPI. The copyright on her is 2003-2026, The Open MPI Community, and the page is dated Sep 10, 2026. That's the whole sign-off bestie, mwah πβ¨π
π¦ where this page comes from
- ubuntu stonking: openmpi-doc 5.0.10-6 Β· other
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms