SHMEM_LONGDOUBLE_IGET(3)

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

πŸ’– SHMEM_LONGDOUBLE_IGET πŸ’–

okay bestie, listen β€” this is the Open MPI strided-get family and it's giving so many aliases πŸ¦‹. We're talking:

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 literally all of them do the same iconic thing: Transfers strided data from a specified processing element (PE) ✨


🌸 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 a lil fetch: they grab array data that lives at address source on the remote PE (pe) 🫢. The elements of the source array are spaced apart by a stride sst β€” think of it like the elements are holding hands but with gaps, iykyk. Once the data arrives, it gets parked at your local memory address target, spaced out by stride tst. And the routines don't ghost you partway β€” they return once the data has been copied into the local target array. periodt. πŸ’…

Here's the whole cast of arguments, no gatekeeping:

  • target β€” the array that gets updated over on the local PE. that's the glow-up destination ✨
  • source β€” the array holding the data to be copied, chillin' on the remote PE.
  • tst β€” the stride between consecutive elements of the target array. It's scaled by the element size of the target array. A value of 1 means contiguous data (iconic, no gaps, we love her). tst must be of type integer. If you're calling from Fortran, it must be a default integer value.
  • sst β€” the stride between consecutive elements of the source array. Scaled by the element size of the source array. A value of 1 means contiguous data. sst must be of type integer. If you're calling from Fortran, it must be a default integer value.
  • len β€” the number of elements in the target and source arrays. len must be of type integer. 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. pe must be of type integer. If you're using Fortran, it must be a constant, variable, or array element of default integer type.

The target and source data objects must conform to typing constraints, bestie β€” this is not a drill 🚨. Here they are:

  • 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 type short.
  • shmem_int_iget: Elements of type int.
  • shmem_long_iget: Elements of type long.
  • shmem_longlong_iget: Elements of type long long.
  • shmem_float_iget: Elements of type float.
  • shmem_double_iget: Elements of type double.
  • shmem_longdouble_iget: Elements of type long 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.
  • shmem_longdouble_iget: Elements of type long 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.

(yes babe, some of those show up twice β€” we keep it 100% faithful, no edits, that's the vibe πŸ’œ)

If you're using 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 custom sizing, sorry not sorry πŸ™ˆ


πŸ“Œ NOTES πŸ“Œ

Wanna know what "remotely accessible" even means? See intro_shmem(3) for the definition, bestie. πŸ’«


🌈 EXAMPLES 🌈

This cute lil Fortran program uses shmem_logical_iget. Compile it with the -lsma compiler option ✨:

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) β€” the whole friend group, go say hi πŸ‘‘ πŸ¦‹


That's the whole page, bestie! This masterpiece is Β© 2003-2026, The Open MPI Community, and this particular edition was stamped Sep 10, 2026. no cap, she's been serving since '03 πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from