SHMEM_CSWAP(3)
π SHMEM_CSWAP(3) π
Open MPI manual page, bestie β this one is SHMEM_CSWAP(3), and we're gonna make it make sense without dropping a single detail β¨
πΈ NAME πΈ
shmem_int_cswap(3), shmem_int4_cswap(3), shmem_int8_cswap(3), shmem_long_cswap(3), shmem_longlong_cswap(3) β performs an atomic conditional swap to a remote data object π
π 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 π¦
Okay so 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, one clean little atomic moment β no cap πβ¨
The arguments are as follows:
The page gives us one batch of argument blurbs first:
targetβ The remotely accessible integer data object to be updated on the remote PE. If you're using C/C++, the type oftargetshould match that implied in the SYNOPSIS section. If you're using the Fortran compiler, it must be of type integer with an element size of 4 bytes forSHMEM_INT4_ADDand 8 bytes forSHMEM_INT8_ADD.valueβ The value to be atomically added totarget. If you're using C/C++, the type ofvalueshould match that implied in the SYNOPSIS section. If you're using Fortran, it must be of type integer with an element size oftarget.peβ An integer that indicates the PE number upon whichtargetis to be updated. If you're using Fortran, it must be a default integer value.
Yes, bestie, that firsttargetblurb literally saysSHMEM_INT4_ADDandSHMEM_INT8_ADDon a_CSWAPpage π I am not fixing it, I am handing it to you exactly as the page says.
Then the page lists another batch β it's giving duplicate target energy, but we keep every crumb π
targetβ The remotely accessible integer data object to be updated on the remote PE. If you're using C/C++, the data type oftargetshould match that implied in the SYNOPSIS section. If you're 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're using Fortran, it must be a default integer value.
π NOTES π
The term remotely accessible is defined in intro_shmem(3).
β RETURN VALUES β
The contents that had been in the target data object on the remote PE prior to the conditional swap. That's the old value, boo β returned to you after the swap shenanigans. π
π 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)
Okay bye bestie π«Ά This page's footer says gitclone, Unreleased developer copy, and SHMEM_CSWAP(3) β and there's no date listed, so I'm not gonna invent one πβ¨
π¦ where this page comes from
- arch rolling: nvhpc-comm-libs 26.9-1 Β· LicenseRef-NVIDIA-HPC-SDK
- Copyright (c) 2015 University of Houston. All rights reserved
- Copyright (c) 2015 Mellanox Technologies, Inc
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms