Open MPI logo

shmem_ptr(3) man page (version 3.1.6)

| Home | Support | FAQ |
About
FAQ
Open MPI Software
Current
Still supported
Older versions
Sub-Projects
Community

« Return to documentation listing

Table of Contents

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

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)


Table of Contents

« Return to documentation listing

Page last modified: 20-Mar-2020
©2004-2025 The Open MPI Project

AltStyle によって変換されたページ (->オリジナル) /