SHMEM_FLOAT_IPUT(3)

πŸ’… SHMEM_FLOAT_IPUT(3) πŸ’…

okay so first things first, bestie: this whole squad of man pages lives under Open MPI, and the headline girl is SHMEM_FLOAT_IPUT(3). But she rolls deep β€” the whole friend group is:

and their whole collective vibe is: Transfer strided data to a specified processing element (PE). periodt πŸ’–


✨ SYNOPSIS ✨

C or C++ 🫢

#include <mpp/shmem.h>

void shmem_double_iput(double *target, const double *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_float_iput(float *target, const float *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_int_iput(int *target, const int *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_iput32(void *target, const void *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_iput64(void *target, const void *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_iput128(void *target, const void *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_long_iput(long *target, const long *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_longdouble_iput(long double *target,
  const long double *source, ptrdiff_t tst, ptrdiff_t sst,
  size_t len, int pe)

void shmem_longlong_iput(long long *target,
  const long long *source, ptrdiff_t tst, ptrdiff_t sst,
  size_t len, int pe)

void shmem_short_iput(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_IPUT(target, source, tst, sst, len,
& pe)

CALL SHMEM_DOUBLE_IPUT(target, source, tst, sst, len,
& pe)

CALL SHMEM_INTEGER_IPUT(target, source, tst, sst, len,
& pe)

CALL SHMEM_IPUT4(target, source, tst, sst, len, pe)

CALL SHMEM_IPUT8(target, source, tst, sst, len, pe)

CALL SHMEM_IPUT32(target, source, tst, sst, len, pe)

CALL SHMEM_IPUT64(target, source, tst, sst, len, pe)

CALL SHMEM_IPUT128(target, source, tst, sst, len, pe)

CALL SHMEM_LOGICAL_IPUT(target, source, tst, sst, len,
& pe)

CALL SHMEM_REAL_IPUT(target, source, tst, sst, len, pe)

πŸ’œ DESCRIPTION πŸ’œ

okay so the shmem_iput routines literally just read the elements of a local array (source) and write them into a remote array (target) living on the PE you point at with pe. πŸ¦‹

timing tea, listen closely: these routines return once the data has been copied out of the source array on the local PE β€” but not necessarily before the data has actually been delivered to the remote data object. so like, don't assume the far side has it the second you're back. iykyk 😭

the arguments, one by one πŸŽ€

  • target β€” the array getting updated on the remote PE. this data object must be remotely accessible. no exceptions, bestie.
  • source β€” the array holding the data you're copying. your local stash.
  • tst β€” the stride between consecutive elements of the target array. it gets scaled by the element size of the target array. a value of 1 means contiguous data. tst must be of type integer. if you're in Fortran, it has to be a default integer value.
  • sst β€” the stride between consecutive elements of the source array. scaled by the element size of the source array. 1 means contiguous data. sst must be of type integer. Fortran girlies: default integer value, please.
  • len β€” number of elements in both the target and source arrays. len must be of type integer. in 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. in Fortran, again: a constant, variable, or array element of default integer type.

typing constraints β€” the vibe check πŸ‘‘

target and source have to conform to the typing constraints, and here's the full guest list:

  • shmem_iput32, shmem_iput4 β€” any noncharacter type that has a storage size equal to 32 bits.
  • shmem_iput64, shmem_iput8 β€” any noncharacter type that has a storage size equal to 64 bits.
  • shmem_iput128 β€” any noncharacter type that has a storage size equal to 128 bits.
  • shmem_short_iput β€” elements of type short.
  • shmem_int_iput β€” elements of type int.
  • shmem_long_iput β€” elements of type long.
  • shmem_longlong_iput β€” elements of type long long.
  • shmem_float_iput β€” elements of type float.
  • shmem_double_iput β€” elements of type double.
  • shmem_longdouble_iput β€” elements of type long double.
  • SHMEM_COMPLEX_IPUT β€” elements of type complex of default size.
  • SHMEM_DOUBLE_IPUT β€” (Fortran) elements of type double precision.
  • SHMEM_INTEGER_IPUT β€” elements of type integer.
  • SHMEM_LOGICAL_IPUT β€” elements of type logical.
  • SHMEM_REAL_IPUT β€” elements of type real.
  • SHMEM_LOGICAL_IPUT β€” elements of type logical.
  • SHMEM_REAL_IPUT β€” elements of type real.

(yes, SHMEM_LOGICAL_IPUT and SHMEM_REAL_IPUT are listed twice up there. that's how the original rolls. i don't make the rules, i just report them with love πŸ’€)

and if you're using Fortran, data types must be of default size. example: a real variable has to be declared as REAL, REAL*4 or REAL(KIND=4). don't try to be cute with it. πŸ™ˆ


πŸ“ NOTES πŸ“

need the actual definition of the term remotely accessible? go read intro_shmem(3). she explains it better than i ever could, fr fr.


🌈 EXAMPLES 🌈

okay consider this simple shmem_long_iput example for C/C++ programs. it's giving classic. 🧚

#include <mpp/shmem.h>

main()
{
  short source[10] = { 1, 2, 3, 4, 5,
  6, 7, 8, 9, 10 };
  static short target[10];

  shmem_init();
  if (shmem_my_pe() == 0) {
    /* put 10 words into target on PE 1 */
    shmem_short_iput(target, source, 1, 2, 5, 1);
  }
  shmem_barrier_all(); /* sync sender and receiver */
  if (shmem_my_pe() == 1) {
    shmem_udcflush(); /* not required on IRIX systems */
    printf("target on PE %d is %d %d %d %d %d0, shmem_my_pe(),
    (int)target[0], (int)target[1], (int)target[2],
    (int)target[3], (int)target[4] );
  }
  shmem_barrier_all(); /* sync before exiting */
}
ngl that printf line up there is exactly as the page gives it β€” quote marks and all. copy it verbatim and don't @ me 😭

πŸ”₯ SEE ALSO πŸ”₯

intro_shmem(3) shmem_iget(3) shmem_put(3) shmem_quiet(3)


2003-2026, The Open MPI Community


and that's the whole page, bestie πŸ’– huge slay to the Open MPI girlies for this one β€” source and version Open MPI, dated May 14, 2026, filed under SHMEM_FLOAT_IPUT(3). go forth and stride responsibly πŸ¦‹βœ¨πŸŽ€

πŸ“¦ where this page comes from