SHMEM_LONGLONG_SWAP(3)

πŸ“¦
version 5.0.10 Β· 4 versions
, in ubuntu stonking

πŸ’– NAME πŸ’–

okay so this page is the whole swap girlie squad in Open MPI: shmem_double_swap, shmem_float_swap, shmem_int_swap, shmem_long_swap, shmem_swap, shmem_int4_swap, shmem_int8_swap, shmem_real4_swap, shmem_real8_swap, and shmem_longlong_swap β€” literally all of them perform an atomic swap to a remote data object. periodt.


✨ SYNOPSIS ✨

C or C++ besties:

#include <mpp/shmem.h>

double shmem_double_swap(double *target, double value,
  int pe)

float shmem_float_swap(float *target, float value, int pe)

int shmem_int_swap(int *target, int value, int pe)

long shmem_long_swap(long *target, long value, int pe)

long long shmem_longlong_swap(long long *target,
  long long value, int pe)

long shmem_swap(long *target, long value, int pe)

Fortran besties:

INCLUDE "mpp/shmem.fh"

INTEGER pe

INTEGER SHMEM_SWAP
ires = SHMEM_SWAP(target, value, pe)

INTEGER(KIND=4) SHMEM_INT4_SWAP
ires = SHMEM_INT4_SWAP(target, value, pe)

INTEGER(KIND=8) SHMEM_INT8_SWAP
ires = SHMEM_INT8_SWAP(target, value, pe)

REAL(KIND=4) SHMEM_REAL4_SWAP
res = SHMEM_REAL4_SWAP(target, value, pe)

REAL(KIND=8) SHMEM_REAL8_SWAP
res = SHMEM_REAL8_SWAP(target, value, pe)

πŸ¦‹ DESCRIPTION πŸ¦‹

so the atomic swap routines do the thing: they write value to address target on PE pe, and they hand you back the previous contents of target β€” all in one atomic operation. no takebacks, no half-finished nonsense, it's giving flawless.

the arguments, one by one 🫢:

  • target β€” the remotely accessible integer data object that's getting updated on the remote PE. if you're a C/C++ girlie, the type of target needs to match whatever the SYNOPSIS said. if you're in Fortran, it's gotta be one of these:
    • SHMEM_SWAP: Integer of default kind
    • SHMEM_INT4_SWAP: 4-byte integer
    • SHMEM_INT8_SWAP: 8-byte integer
    • SHMEM_REAL4_SWAP: 4-byte real
    • SHMEM_REAL8_SWAP: 8-byte real
  • value β€” the value that gets atomically written to the remote PE. value is the same type as target, no mix-and-matching bestie.
  • pe β€” an integer telling you which PE number target is getting updated on. if you're doing Fortran, it has to be a default integer value.

🌸 NOTES 🌸

the term remotely accessible is defined over in intro_shmem(3) β€” go peek at it, it's the lore. πŸ’…


⭐ RETURN VALUES ⭐

what you get back is the contents that had been at the target address on the remote PE before the swap happened. iconic behavior, truly.

See also:


2003-2026, The Open MPI Community


and that's the whole page bestie πŸ’– written up in the Open MPI manual, page SHMEM_LONGLONG_SWAP(3), last touched Sep 10, 2026 β€” copyright held down by 2003-2026, The Open MPI Community. go swap something atomically, you've got this 🫢✨

πŸ“¦ where this page comes from