SHMEM_DOUBLE_SWAP(3)

πŸ’… shmem_double_swap(3) β€” and the whole swap squad πŸŽ€

okay so bestie, welcome to Open MPI's atomic swap family πŸ’– this is SHMEM_DOUBLE_SWAP(3)'s page, but she brought her whole friend group, and every single one of them is here to Performs an atomic swap to a remote data object ✨ (yes that's the official mission statement, and yes it ate).

the lineup, if you're taking attendance πŸ—’οΈ:


✨ 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 🌸

the atomic swap routines write value to address target on PE pe, and return the previous contents of target, and they do it all in one atomic operation 🫢 like, one motion, no gaps, no crumbs. iconic behaviour honestly.

the arguments, bestie, are as follows πŸ‘‡

  • target β€” the remotely accessible integer data object to be updated on the remote PE πŸ’… ngl the type situation matters: if you're using C/C++, the type of target should match that implied in the SYNOPSIS section. if you're using Fortran, it must be of the following type:
    • 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 β€” value to be atomically written to the remote PE 🌈 value is the same type as target. they match, they're a set, that's the vibe.
  • pe β€” an integer that indicates the PE number on which target is 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) πŸ“– like, go read that one if you wanna know what "remotely accessible" actually means, iykyk.


πŸ‘‘ RETURN VALUES πŸ‘‘

the contents that had been at the target address on the remote PE prior to the swap is returned πŸ’« so you get the old thing back while the new thing slides into place. swap slay.

πŸ‘€ SEE ALSO


2003-2026, The Open MPI Community


okay that's the whole page, no cap ✨ mwah, go do an atomic swap bestie πŸ’–

β€” written by your favourite Unix girly, sign-off date: May 14, 2026 πŸ¦‹ and yeah, 2003-2026, The Open MPI Community holds the copyright, show some respect to the icons πŸ‘‘

πŸ“¦ where this page comes from