plucky (3) shmem_ptr.openmpi.3.gz

Provided by: openmpi-doc_5.0.7-1_all bug

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

       The  shmem_ptr  routine returns an address that can be used to directly reference target on the remote PE
       pe. With this address we can perform ordinary loads and stores to the remote address.

       When a sequence of loads (gets) and stores (puts) to a data object on a remote  PE  does  not  match  the
       access  pattern  provided in a SHMEM data transfer routine like shmem_put32(3) or shmem_real_iget(3), the
       shmem_ptr function can provide an efficient means to accomplish the communication.

       The arguments are as follows:

       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.

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

       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");
            }
          }

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.

RETURN VALUES

       shmem_ptr returns a pointer to the data object on the specified remote PE.  If  target  is  not  remotely
       accessible, a NULL pointer is returned.

       SEE ALSO:
          intro_shmem(3) shmem_put(3) shmem_get(3)

       2003-2025, The Open MPI Community

                                                  Feb 17, 2025                                      SHMEM_PTR(3)