SHMEM\_PTR(3) Open MPI SHMEM\_PTR(3)

[shmem\_ptr(3)](/man/enterprise-packages/openmpi-cuda-12.6/shmem_ptr.3) - Returns a pointer to a data object on a specified processing element (PE).

# [SYNOPSIS](#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](#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 &lt;#shmem-put32&gt;(3) or [shmem\_real\_iget(3)](/man/enterprise-packages/openmpi-cuda-12.6/shmem_real_iget.3), the shmem\_ptr function can provide an efficient means to accomplish the communication.

The arguments are as follows:

[**target**](#target)

The symmetric data object to be referenced.

[**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](#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](#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](#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)](/man/enterprise-packages/openmpi-cuda-12.6/intro_shmem.3) [*shmem\_put*(3)](/man/enterprise-packages/openmpi-cuda-12.6/shmem_put.3) [*shmem\_get*(3)](/man/enterprise-packages/openmpi-cuda-12.6/shmem_get.3)

# [Copyright](#Copyright)

2003-2026, The Open MPI Community

September 16, 2026

---

Document: shmem_ptr(3) from openmpi-cuda-12.6 5.0.11-r1 (Chainguard OS)
Source: https://github.com/open-mpi/ompi
