SHMEM_IGET64(3)
π SHMEM_IGET64(3) β like, the strided-get glow-up
okay so bestie, welcome to the <pink>Open MPI</pink> manual page for SHMEM_IGET64(3) and its whole extended friend group π«Ά. Pull up a chair, grab a strawberry π, and let's get into it.
β¨ NAME β¨
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) β Transfers strided data from a specified processing element (PE). that's the whole vibe, periodt. π
πΈ 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 exactly what it says on the tin, bestie: they grab array data that's chillen at address source on the remote PE (pe). The elements in the source array aren't all squished together β they're separated by a stride, sst. Once the data arrives, it goes into the local memory address target, separated by stride tst. And the routines return after the data has been copied into your local target array β so like, when they come back, it's done, no cap. β¨
Here's the cast of characters (the arguments, iykyk):
- target β the array on the local PE that's getting updated. this is the main character of the operation tbh π
- source β the array holding the data to be copied, sitting over there 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. A value of
1means contiguous data (all cozy together π).tstmust be of typeinteger. If you're calling from Fortran, it has to be a defaultintegervalue. - sst β the stride between consecutive elements of the source array. Scaled by the element size of the source array. A value of
1means contiguous data.sstmust be of typeinteger. If you're in Fortran, it must be a defaultintegervalue. - len β the number of elements in the target and source arrays.
lenmust be of typeinteger. Fortran girlies: it must be a constant, variable, or array element of defaultintegertype. - pe β the PE number of the remote PE.
pemust be of typeinteger. Fortran girlies: constant, variable, or array element of defaultintegertype.
the typing constraints (these are non-negotiable, fr fr)
The target and source data objects have to conform to the typing constraints, which are literally these:
shmem_iget32,shmem_iget4β any noncharacter type that has a storage size equal to32bits.shmem_iget64,shmem_iget8β any noncharacter type that has a storage size equal to64bits.shmem_iget128β any noncharacter type that has a storage size equal to128bits.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 typecomplexof default size.SHMEM_DOUBLE_IGETβ (Fortran) elements of type double precision.SHMEM_INTEGER_IGETβ elements of typeinteger.SHMEM_LOGICAL_IGETβ elements of typelogical.SHMEM_REAL_IGETβ elements of typereal.
and then, because the original page is being extra π:
shmem_longdouble_igetβ elements of typelong double.SHMEM_COMPLEX_IGETβ elements of typecomplexof default size.SHMEM_DOUBLE_IGETβ (Fortran) elements of type double precision.SHMEM_INTEGER_IGETβ elements of typeinteger.SHMEM_LOGICAL_IGETβ elements of typelogical.SHMEM_REAL_IGETβ elements of typereal.
not me listing those twice π β but that's literally how the original has it, so we keep it. identical info, zero facts lost, that's the rule bestie.
If you're in Fortran, data types must be of default size. For example, a real variable must be declared as REAL, REAL*4, or REAL(KIND=4). no fancy wide sizes, okay? π
π NOTES π
Go read intro_shmem(3) for the definition of the term remotely accessible β it's the whole lore, iykyk. π
π₯ EXAMPLES π₯
okay so here's a cute little Fortran example that uses shmem_logical_iget. Compile this one 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
like, the SAVE comment is doing so much work there β it's literally what makes it remotely accessible. iconic. π
π SEE ALSO π
intro_shmem(3)shmem_get(3)shmem_quiet(3)
β COPYRIGHT β
2003-2026, The Open MPI Community
and that's the page, bestie π¦ β brought to you by the <pink>Open MPI</pink> girlies, dated May 14, 2026, with all the love in the world. mwah π go get those strides. π
π¦ where this page comes from
- arch rolling: nvhpc-comm-libs 26.9-1 Β· LicenseRef-NVIDIA-HPC-SDK
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms