SHMEM_PTR(3)
πΈ NAME πΈ
Okay so shmem_ptr(3) β from the Open MPI manual, hi bestie π β literally returns a pointer to a data object on a specified processing element (PE). That's the whole main-character job, no cap.
β¨ 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. It's giving "direct access, but make it SHMEM" β¨
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. Obsessed with a practical shortcut, honestly.
The arguments are as follows, bestie:
targetβ the symmetric data object to be referenced.peβ an integer that indicates the PE number on whichtargetis 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 π¦
β οΈ Lowkey important: the shmem_ptr function is available only on systems where ordinary memory loads and stores are used to implement SHMEM put and get operations. That's the vibe check, iykyk.
π 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. Ngl, that's the plot twist: no remote access, no pointer.
π SEE ALSO π
intro_shmem(3)shmem_put(3)shmem_get(3)
Made with π
and group-chat energy β footer details, fr fr: source gitclone, version Unreleased developer copy, and the footer name is SHMEM_PTR(3). π«Ά
π¦ where this page comes from
- arch rolling: nvhpc-comm-libs 26.9-1 Β· LicenseRef-NVIDIA-HPC-SDK
- Copyright (c) 2015 University of Houston. All rights reserved
- Copyright (c) 2015 Mellanox Technologies, Inc
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms