SHMEM_DOUBLE_IGET(3)
β¨ SHMEM_DOUBLE_IGET(3) β the strided get squad, Open MPI edition β¨
okay so hi bestie π welcome to shmem_double_iget(3), coming at you straight from the Open MPI manual, and it's not just ONE function, it's a whole friend group π«Ά. The whole crew is:
shmem_complex_iget(3)shmem_double_iget(3)shmem_float_iget(3)shmem_iget4(3)shmem_iget8(3)shmem_iget32(3)shmem_iget64(3)shmem_iget128(3)shmem_int_iget(3)shmem_integer_iget(3)shmem_logical_iget(3)shmem_long_iget(3)shmem_longdouble_iget(3)shmem_longlong_iget(3)shmem_real_iget(3)shmem_short_iget(3)
and what do they ALL do? they transfer strided data from a specified processing element (PE). that's the whole vibe. slay π
π SYNOPSIS
C or C++:
#include <mpp/shmem.h>
void shmem_iget32(void *target, const void *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_iget64(void *target, const void *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_iget128(void *target, const void *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_int_iget(int *target, const int *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_double_iget(double *target, const double *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_float_iget(float *target, const float *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_long_iget(long *target, const long *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_longdouble_iget(long double *target,
const long double *source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe)
void shmem_longlong_iget(long long *target,
const long long *source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_short_iget(short *target,
const short *source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
Fortran:
INCLUDE "mpp/shmem.fh"
INTEGER tst, sst, len, pe
CALL SHMEM_COMPLEX_IGET(target, source, tst, sst, len,
& pe)
CALL SHMEM_DOUBLE_IGET(target, source, tst, sst, len,
& pe)
CALL SHMEM_IGET4(target, source, tst, sst, len, pe)
CALL SHMEM_IGET8(target, source, tst, sst, len, pe)
CALL SHMEM_IGET32(target, source, tst, sst, len, pe)
CALL SHMEM_IGET64(target, source, tst, sst, len, pe)
CALL SHMEM_IGET128(target, source, tst, sst, len, pe)
CALL SHMEM_INTEGER_IGET(target, source, tst, sst, len,
& pe)
CALL SHMEM_LOGICAL_IGET(target, source, tst, sst, len,
& pe)
CALL SHMEM_REAL_IGET(target, source, tst, sst, len, pe)
π§ DESCRIPTION
so the strided get routines do the thing where they pull array data that lives at address source on a remote PE (pe) π. The elements of that source array aren't all cozy next to each other β they're separated by a stride called sst (not me making up abbreviations, that's literally the spec). Once the data arrives, it gets stored at the local memory address target, separated by stride tst. And these routines return when the data has been copied into the local target array β so when it comes back, the data's already there. no waiting around, periodt β¨
π«Ά The arguments (aka the whole cast)
targetβ the array that gets updated on the local PE.sourceβ the array holding the data to be copied, sitting on the remote PE.tstβ the stride between consecutive elements of the target array. It gets scaled by the element size of the target array, and a value of1means the data is contiguous.tstmust be of type integer β and if you're calling from Fortran, it's gotta be a default integer value.sstβ same deal but for the source array: the stride between consecutive elements, scaled by the element size of the source array,1means contiguous, must be of type integer, and if you're in Fortran it must be a default integer value.lenβ the number of elements in the target and source arrays.lenmust be of type integer, and if you're using Fortran it must be a constant, variable, or array element of default integer type.peβ the PE number of the remote PE.pemust be of type integer, and if you're using Fortran, again: a constant, variable, or array element of default integer type.
π Typing constraints (yes they're strict, no you cannot break them)
target and source data objects must conform to these typing constraints, and bestie they are not flexible:
shmem_iget32,shmem_iget4: any noncharacter type that has a storage size equal to 32 bits.shmem_iget64,shmem_iget8: any noncharacter type that has a storage size equal to 64 bits.shmem_iget128: any noncharacter type that has a storage size equal to 128 bits.shmem_short_iget: elements of typeshort.shmem_int_iget: elements of typeint.shmem_long_iget: elements of typelong.shmem_longlong_iget: elements of typelong long.shmem_float_iget: elements of typefloat.shmem_double_iget: elements of typedouble.shmem_longdouble_iget: elements of typelong double.SHMEM_COMPLEX_IGET: elements of type complex of default size.SHMEM_DOUBLE_IGET: (Fortran) elements of type double precision.SHMEM_INTEGER_IGET: elements of type integer.SHMEM_LOGICAL_IGET: elements of type logical.SHMEM_REAL_IGET: elements of type real.
and then, because the original doc said it with its whole chest, here it is again π©· (yes, for real, it's listed twice β I'm not the one who did that, I'm just the messenger π):
shmem_longdouble_iget: elements of typelong double.SHMEM_COMPLEX_IGET: elements of type complex of default size.SHMEM_DOUBLE_IGET: (Fortran) elements of type double precision.SHMEM_INTEGER_IGET: elements of type integer.SHMEM_LOGICAL_IGET: elements of type logical.SHMEM_REAL_IGET: elements of type real.
and if you're on Fortran, data types must be of default size β like, a real variable has to be declared as REAL, REAL*4, or REAL(KIND=4). no sneaky bigger kinds, okay? πΈ
π NOTES
want the actual definition of the term remotely accessible? go read intro_shmem(3). it's giving required reading π
π EXAMPLES
here's a cute little Fortran program that uses shmem_logical_iget. compile it with the -lsma compiler option, bestie π₯
PROGRAM STRIDELOGICAL
LOGICAL SOURCE(10), TARGET(5)
SAVE SOURCE ! SAVE MAKES IT REMOTELY ACCESSIBLE
DATA SOURCE /.T.,.F.,.T.,.F.,.T.,.F.,.T.,.F.,.T.,.F./
DATA TARGET / 5*.F. /
CALL START_PES(2)
IF (MY_PE() .EQ. 0) THEN
CALL SHMEM_LOGICAL_IGET(TARGET, SOURCE, 1, 2, 5, 1)
PRINT*,'TARGET AFTER SHMEM_LOGICAL_IGET:',TARGET
ENDIF
CALL SHMEM_BARRIER_ALL
END
See also:
intro_shmem(3) shmem_get(3) shmem_quiet(3)
go read those too, they're all bangers π
π pspsps β Copyright: 2003-2026, The Open MPI Community. This page left the group chat on Sep 10, 2026 as part of Open MPI. stay strided, stay iconic, and don't forget your strides are scaled by element size ππ β¨
π¦ 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