SHMEM_SWAP(3)

πŸ’… NAME πŸ’…

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, shmem_longlong_swap β€” bestie, these do an atomic swap to a remote data object ✨ (yes, all of them, it's a whole squad, they're a package deal 🫢)


🌸 SYNOPSIS 🌸

C or C++

#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

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 πŸ¦‹

okay so picture this: the atomic swap routines write value to address target on PE pe, and hand you back the previous contents of target, all in one atomic operation. Not me doing a trade AND a read at the same time, it's giving multitasking queen πŸ‘‘ no cap.

The arguments are as follows, bestie, listen up:

  • target β€” the remotely accessible integer data object that's getting updated on the remote PE. If you're in C/C++ land, the type of target should match whatever the SYNOPSIS section is implying (iykyk). If you're in Fortran land, it has to 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 to be atomically written to the remote PE. Same type as target, obviously, matching vibes only πŸ’…
  • pe β€” an integer telling you which PE number target is getting updated on. If you're doing Fortran, it's gotta be a default integer value, fr fr.

πŸ’€ NOTES πŸ’€

The term remotely accessible is defined over in intro_shmem(3), in case you were like "wait what does that mean" β€” go read that one, it's the lore πŸ™ˆ


πŸŽ€ RETURN VALUES πŸŽ€

The contents that had been at the target address on the remote PE prior to the swap get returned. So you get the old thing back, and the new thing lands. Periodt πŸ’–

See also: intro_shmem(3)


2003-2026, The Open MPI Community


and that's the whole page bestie, brought to you by Open MPI, last touched Sep 10, 2026 β€” now go swap something atomically, you icon, I'm obsessed πŸ§šβœ¨πŸ’œ

πŸ“¦ where this page comes from