SHMEM_GETMEM_NBI(3)
π SHMEM_GETMEM_NBI(3) π
okay bestie so this is a page from Open MPI, and it's literally all about the nonblocking get routines β like, one big happy family of them. Gather round π«Ά
β¨ NAME β¨
Here's the whole squad (yes, every single one, no skipping, I see you):
shmem_getmem_nbi(3)shmem_char_get_nbi(3)shmem_short_get_nbi(3)shmem_int_get_nbi(3)shmem_long_get_nbi(3)shmem_longlong_get_nbi(3)shmem_float_get_nbi(3)shmem_double_get_nbi(3)shmem_longdouble_get_nbi(3)shmem_get8_nbi(3)shmem_get16_nbi(3)shmem_get32_nbi(3)shmem_get64_nbi(3)shmem_get128_nbi(3)
and what do they all do? The nonblocking get routines provide a method for copying data from a contiguous remote data object on the specified PE to the local data object. periodt. π
π SYNOPSIS π
C or C++ πΈ
#include <mpp/shmem.h>
void shmem_getmem_nbi(void *dest, const void *source,
size_t nelems, int pe)
void shmem_char_get(char *dest, const char *source,
size_t nelems, int pe)
void shmem_short_get(short *dest, const short *source,
size_t nelems, int pe)
void shmem_int_get(int *dest, const int *source,
size_t nelems, int pe)
void shmem_long_get(long *dest, const long *source,
size_t nelems, int pe)
void shmem_longlong_get(long long *dest, const long long *source,
size_t nelems, int pe)
void shmem_float_get(float *dest, const float *source,
size_t nelems, int pe)
void shmem_double_get(double *dest, const double *source,
size_t nelems, int pe)
void shmem_longdouble_get(long double *dest, const long double *source,
size_t nelems, int pe)
void shmem_get8(void *dest, const void *source,
size_t nelems, int pe)
void shmem_get16(void *dest, const void *source,
size_t nelems, int pe)
void shmem_get32(void *dest, const void *source,
size_t nelems, int pe)
void shmem_get64(void *dest, const void *source,
size_t nelems, int pe)
void shmem_get128(void *dest, const void *source,
size_t nelems, int pe)
Fortran π¦
INCLUDE "mpp/shmem.fh"
INTEGER nelems, pe
CALL SHMEM_GETMEM_NBI(dest, source, nelems, pe)
CALL SHMEM_CHARACTER_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_COMPLEX_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_DOUBLE_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_INTEGER_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_LOGICAL_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_REAL_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_GET4_NBI(dest, source, nelems, pe)
CALL SHMEM_GET8_NBI(dest, source, nelems, pe)
CALL SHMEM_GET32_NBI(dest, source, nelems, pe)
CALL SHMEM_GET64_NBI(dest, source, nelems, pe)
CALL SHMEM_GET128_NBI(dest, source, nelems, pe)
π DESCRIPTION π
So the get routines are giving "copy a contiguous symmetric data object from a different PE into a contiguous data object on the local PE" β¨. The plot twist? These routines return right after posting the operation. Like, they said "k, sent, bye π".
The operation is considered complete after a subsequent call to shmem_quiet. At the completion of shmem_quiet, the data has been delivered to the dest array on the local PE. no cap, that's the whole deal.
The arguments, babes:
destβ Local data object to be updated. πsourceβ Data object on the PE identified bypethat contains the data to be copied. This data object must be remotely accessible. important!! π₯nelemsβ Number of elements in the target and source arrays.lenmust be of typeinteger. If you are using Fortran, it must be a constant, variable, or array element of default integer type.peβ PE number of the remote PE.pemust be of typeinteger. If you are using Fortran, it must be a constant, variable, or array element of default integer type.
okay and if you're using Fortran, data types must be of default size. For example, arealvariable must be declared asREAL,REAL*4, orREAL(KIND=4). don't get cute with it π
π NOTES π
See intro_shmem(3) for a definition of the term remotely accessible. iykyk π
β EXAMPLES β
Consider this simple example for Fortran. slay, it's a whole reduction:
PROGRAM REDUCTION
REAL VALUES, SUM
COMMON /C/ VALUES
REAL WORK
CALL START_PES(0) ! ALLOW ANY NUMBER OF PES
VALUES = MY_PE() ! INITIALIZE IT TO SOMETHING
CALL SHMEM_BARRIER_ALL
SUM = 0.0
DO I = 0,NUM_PES()-1
CALL SHMEM_REAL_GET_NBI(WORK, VALUES, 1, I)
CALL SHMEM_QUIET ! wait for delivery
SUM = SUM + WORK
ENDDO
PRINT *, 'PE ', MY_PE(), ' COMPUTED SUM=', SUM
CALL SHMEM_BARRIER_ALL
END
π¦ See also
Copyright 2003-2026, The Open MPI Community
and that's the whole page, bestie!! π«Άβ¨ this was Open MPI, SHMEM_GETMEM_NBI(3), dated Sep 10, 2026 β go forth and nonblocking-get, you main character ππ
π¦ where this page comes from
- ubuntu stonking: openmpi-doc 5.0.10-6 Β· other
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms