dwww Home | Manual pages | Find package

SHMEM_PTR(3)                       Open MPI                       SHMEM_PTR(3)

NAME
       shmem_ptr(3)  -  Returns a pointer to a data object on a specified pro-
       cessing 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
       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 mem-
       ory loads and stores are used to implement SHMEM  put  and  get  opera-
       tions.

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)

4.1.2                            Nov 24, 2021                     SHMEM_PTR(3)

Generated by dwww version 1.14 on Fri Jan 24 06:09:00 CET 2025.