SHMEM_PTR(3)

✨ SHMEM_PTR(3) β€” bestie, let's get you a pointer ✨

okay so this is a page from the Open MPI manual, and it's all about shmem_ptr(3) β€” literally the little function that hands you a pointer to a data object chilling on a specified processing element (PE). obsessed. πŸ’–


πŸŽ€ NAME πŸŽ€

shmem_ptr(3) β€” Returns a pointer to a data object on a specified processing element (PE).

πŸ¦‹ SYNOPSIS πŸ¦‹

C or C++:

#include <mpp/shmem.h>

void *shmem_ptr(const void *target, int pe)

Fortran:

INCLUDE "mpp/shmem.fh"

POINTER (PTR, POINTEE)
INTEGER pe

PTR = SHMEM_PTR(target, pe)

πŸ’… DESCRIPTION πŸ’…

so the shmem_ptr routine returns an address you can use to directly reference target on the remote PE pe. once you've got that address? you can just do ordinary loads and stores to the remote address. no fancy data transfer call required, iykyk. ✨

here's the vibe: when a sequence of loads (gets) and stores (puts) to a data object on a remote PE doesn't match the access pattern that a SHMEM data transfer routine gives you β€” think shmem_put32 <#shmem-put32>(3) or shmem_real_iget(3) β€” then shmem_ptr can be an efficient means to accomplish the communication. it's giving optimization main character energy. πŸ”₯

the arguments are:

  • target β€” the symmetric data object to be referenced. 🎯
  • pe β€” an integer that indicates the PE number on which target is to be accessed. If you are using Fortran, it must be a default integer value, no cap. 🧚

🌸 EXAMPLES 🌸

This Fortran program calls shmem_ptr and then PE 0 writes to the BIGD array on PE 1:

PROGRAM REMOTEWRITE
  INCLUDE 'mpp/shmem.fh'

  INTEGER BIGD(100)
  SAVE BIGD
  INTEGER POINTEE(*)

  POINTER (PTR,POINTEE)
  CALL START_PES(0)
  IF (MY_PE() .EQ. 0) THEN
                             ! initialize PE 1's BIGD array
    PTR = SHMEM_PTR(BIGD, 1) ! get address of PE 1's BIGD
                             ! array
    DO I=1,100
      POINTEE(I) = I
    ENDDO
  ENDIF
  CALL SHMEM_BARRIER_ALL
  IF (MY_PE() .EQ. 1) THEN
    PRINT *, 'BIGD on PE 1 is: '
    PRINT *, BIGD
  ENDIF
END

and this is the equivalent program written in C:

#include <mpp/shmem.h>

main()
{
  static int bigd[100];
  int *ptr;
  int i;

  shmem_init();
  if (shmem_my_pe() == 0) {
  /* initialize PE 1's bigd array */
    ptr = shmem_ptr(bigd, 1);
    for (i=0; i<100; i++)
      *ptr++ = i+1;
  }
  shmem_barrier_all();
  if (shmem_my_pe() == 1) {
    printf("bigd on PE 1 is:\n");
    for (i=0; i<100; i++)
      printf(" %d\n",bigd[i]);
    printf("\n");
  }
}

two languages, same slay. πŸ’œ

πŸ™ˆ NOTES πŸ™ˆ

The shmem_ptr function is available only on systems where ordinary memory loads and stores are used to implement SHMEM put and get operations. fr fr, if your system isn't one of those, this whole thing is not for you. πŸ’€

⭐ RETURN VALUES ⭐

shmem_ptr returns a pointer to the data object on the specified remote PE. and if target is not remotely accessible? you get a NULL pointer back. so pls check it before you dereference it, bestie. 😭

See also:


2003-2026, The Open MPI Community


and that's the whole page, bestie β€” Open MPI, SHMEM_PTR(3), dated Sep 10, 2026. go get those remote pointers, you absolute icon. πŸ’–βœ¨πŸ«ΆπŸŽ€πŸ¦‹

πŸ“¦ where this page comes from