SHMEM_PTR(3)SHMEM_PTR(3)NAMEshmem_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)
DESCRIPTIONshmem_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 VALUESshmem_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 ALSOintro_shmem(3), shmem_put(3), shmem_get(3),