SHMEM_LONGLONG_WAIT(3)

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

okay so bestie, welcome to SHMEM_LONGLONG_WAIT(3) πŸ’– this is a page straight outta the Open MPI manual, and it's basically the whole girl-gang of wait / wait_until routines: the int, int4, int8, long, longlong, short girlies and the plain ones too. they all do the same iconic thing β€” sit there until somebody changes your variable. periodt. ✨


πŸ’– NAME πŸ’–


✨ SYNOPSIS ✨

🌸 C or C++

#include <mpp/shmem.h>

void shmem_int_wait(volatile int *var, int value)

void shmem_int_wait_until(volatile int *var, int cond, int value)

void shmem_long_wait(volatile long *var, long value)

void shmem_long_wait_until(volatile long *var, int cond, long value)

void shmem_longlong_wait(volatile long long *var, long long value)

void shmem_longlong_wait_until(volatile long long *var, int cond,
  long long value)

void shmem_short_wait(volatile short *var, short value)

void shmem_short_wait_until(volatile short *var, int cond,
  short value)

void shmem_wait(volatile long *ivar, long cmp_value)

void shmem_wait_until(volatile long *ivar, int cmp, long value)

πŸŽ€ Fortran

INCLUDE "mpp/shmem.fh"

CALL SHMEM_INT4_WAIT(ivar, cmp_value)

CALL SHMEM_INT4_WAIT_UNTIL(ivar, cmp, cmp_value)

CALL SHMEM_INT8_WAIT(ivar, cmp_value)

CALL SHMEM_INT8_WAIT_UNTIL(ivar, cmp, cmp_value)

CALL SHMEM_WAIT(ivar, cmp_value)

CALL SHMEM_WAIT_UNTIL(ivar, cmp, cmp_value)

🌈 DESCRIPTION 🌈

okay so the tea β˜•: shmem_wait and shmem_wait_until are literally sitting there waiting for ivar to get changed by a remote write or an atomic swap issued by a different processor. it's giving point-to-point directed synchronization, no cap πŸ’…

a call to shmem_wait does not return until some other processor writes a value not equal to cmp_value into ivar on the waiting processor. a call to shmem_wait_until does not return until some other processor changes ivar to satisfy the condition implied by cmp and cmp_value. this mechanism is useful when a processor needs to tell another processor that it has completed some action. 🫢

and now the arguments, bestie β€” every single one, we're listing all of them:

  • target β€” the remotely accessible integer data object to be updated on the remote PE. if you're on C/C++, the type of target should match what's implied in the SYNOPSIS section. if you're on the Fortran compiler, it must be of type integer with an element size of 4 bytes for SHMEM_INT4_ADD and 8 bytes for SHMEM_INT8_ADD.
  • value β€” the value to be atomically added to target. if you're on C/C++, the type of value should match what's implied in the SYNOPSIS section. if you're on Fortran, it must be of type integer with an element size of target.
  • pe β€” an integer that says which PE number target is gonna be updated on. if you're on Fortran, it must be a default integer value.
  • ivar β€” a remotely accessible integer variable that's being updated by another PE. if you're on C/C++, the type of ivar should match what's implied in the SYNOPSIS section. if you're on Fortran, ivar must be a specific sized integer type depending on which function you called, like so:
    • shmem_wait, shmem_wait_until: default INTEGER
    • shmem_int4_wait, shmem_int4_wait_until: INTEGER*4
    • shmem_int8_wait, shmem_int8_wait_until: INTEGER*8
  • cmp β€” the compare operator that compares ivar with cmp_value. cmp must be of type integer. if you're on Fortran, it must be of default kind. if you're on C/C++, the type of cmp should match what's implied in the SYNOPSIS section. the following cmp values are supported, babe:
    • SHMEM_CMP_EQ β€” Equal
    • SHMEM_CMP_NE β€” Not equal
    • SHMEM_CMP_GT β€” Greater than
    • SHMEM_CMP_LE β€” Less than or equal to
    • SHMEM_CMP_LT β€” Less than
    • SHMEM_CMP_GE β€” Greater than or equal to
  • cmp_value β€” cmp_value must be of type integer. if you're on C/C++, the type of cmp_value should match that implied in the SYNOPSIS section. if you're on Fortran, cmp_value must be an integer of the same size and kind as ivar. the shmem_wait routines return when ivar is no longer equal to cmp_value. the shmem_wait_until routines return when the compare condition is true. and the compare condition is defined by the ivar argument compared with the cmp_value using the comparison operator, cmp. simple as that πŸ’œ

🧚 EXAMPLES 🧚

Example 1: the following call returns when variable ivar is not equal to 100:

INTEGER*8 IVAR

CALL SHMEM_INT8_WAIT(IVAR, INT8(100))

Example 2: the following call to SHMEM_INT8_WAIT_UNTIL is equivalent to the call to SHMEM_INT8_WAIT in example 1:

INTEGER*8 IVAR

CALL SHMEM_INT8_WAIT_UNTIL(IVAR, SHMEM_CMP_NE, INT8(100))

Example 3: the following C/C++ call waits until the sign bit in ivar is set by a transfer from a remote PE:

int ivar;

shmem_int_wait_until(&ivar, SHMEM_CMP_LT, 0);

Example 4: the following Fortran example is in the context of a subroutine:

SUBROUTINE EXAMPLE()
  INTEGER FLAG_VAR
  COMMON/FLAG/FLAG_VAR
  . . .
  FLAG_VAR = FLAG_VALUE ! initialize the event variable
  . . .
  IF (FLAG_VAR .EQ. FLAG_VALUE) THEN
    CALL SHMEM_WAIT(FLAG_VAR, FLAG_VALUE)
  ENDIF
  FLAG_VAR = FLAG_VALUE ! reset the event variable for next time
  . . .
END

See also:


2003-2026, The Open MPI Community


and that's the whole page, bestie, you ate it πŸ“πŸ’… ooh and before you go β€” this one was born Sep 10, 2026 ✨ and it's brought to you by the Open MPI legends, copyright 2003-2026, The Open MPI Community 🫢 go forth and wait on that variable, queen πŸ‘‘

πŸ“¦ where this page comes from