shmem_ptr(3)

shmem_ptr - Returns a pointer to a data object on a specified processing element (PE)

As shipped in IRIX 6.5.30. Last changed in IRIX 6.5.22.

NAME
     shmem_ptr - Returns a pointer to a data object on a specified
     processing element (PE)

SYNOPSIS
     C or C++:

        #include <mpp/shmem.h>

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

     Fortran:

        INCLUDE "mpp/shmem.fh"

        POINTER (PTR, POINTEE)
        INTEGER pe
        PTR = SHMEM_PTR(target, pe)

DESCRIPTION
     shmem_ptr returns the address of target on the specified PE.  This
     address can be assigned to a pointer.  After that, ordinary loads and
     stores to this remote address may be performed.

     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 remotely accessible integer data object on the remote
               PE.

     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 two-PE Fortran program calls shmem_ptr:

          PROGRAM PEEK
          INCLUDE 'mpp/shmem.fh'

          INTEGER BIGD(100)
          SAVE BIGD

          INTEGER POINTEE(*)
          POINTER (PTR,POINTEE)

          CALL START_PES(2)


          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 two-PE C program calls shmem_ptr:

          #include <mpp/shmem.h>
          main()
          {
                  static int bigd[100];
                  int *ptr;
                  int i;

                  start_pes(2);

                  if (_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 (_my_pe() == 1) {
                          printf("bigd on PE 1 is:\n");
                          for (i=0; i<100; i++)
                                  printf(" %d",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),