shmem_get

Copies data from a specified PE.

Definitions

C11 Synopsis

void shmem_get(TYPE *dest, const TYPE *source, size_t nelems, int pe);
void shmem_get(shmem_ctx_t ctx, TYPE *dest, const TYPE *source, size_t nelems, int pe);

where TYPE is one of the standard RMA types specified by Table:1

C/C++ Synopsis

void shmem_TYPENAME_get(TYPE *dest, const TYPE *source, size_t nelems, int pe);
void shmem_ctx_TYPENAME_get(shmem_ctx_t ctx, TYPE *dest, const TYPE *source,
                            size_t nelems, int pe);

where TYPE is one of the standard RMA types and has a corresponding TYPENAME specified by Table:1

void shmem_getSIZE(void *dest, const void *source, size_t  nelems, int pe);
void shmem_ctx_getSIZE(shmem_ctx_t ctx, void *dest, const void *source,
                       size_t nelems, int pe);

where SIZE is one of 8, 16, 32, 64, 128.

void shmem_getmem(void *dest, const void *source, size_t nelems, int pe);
void shmem_ctx_getmem(shmem_ctx_t ctx, void *dest, const void *source,
                      size_t nelems, int pe);

Deprecated Synopsis

Deprecated Fortran Synopsis

INTEGER nelems, pe
CALL SHMEM_CHARACTER_GET(dest, source, nelems, pe)
CALL SHMEM_COMPLEX_GET(dest, source, nelems, pe)
CALL SHMEM_DOUBLE_GET(dest, source, nelems, pe)
CALL SHMEM_GET4(dest, source, nelems, pe)
CALL SHMEM_GET8(dest, source, nelems, pe)
CALL SHMEM_GET32(dest, source, nelems, pe)
CALL SHMEM_GET64(dest, source, nelems, pe)
CALL SHMEM_GET128(dest, source, nelems, pe)
CALL SHMEM_GETMEM(dest, source, nelems, pe)
CALL SHMEM_INTEGER_GET(dest, source, nelems, pe)
CALL SHMEM_LOGICAL_GET(dest, source, nelems, pe)
CALL SHMEM_REAL_GET(dest, source, nelems, pe)

Datatype Reference Table

Table:1

|           TYPE          |      TYPENAME       |
|-------------------------|---------------------|
|   float                 |     float           |
|   double                |     double          |
|   long double           |     longdouble      |
|   char                  |     char            |
|   signed char           |     schar           |
|   short                 |     short           |
|   int                   |     int             |
|   long                  |     long            |
|   long long             |     longlong        |
|   unsigned char         |     uchar           |
|   unsigned short        |     ushort          |
|   unsigned int          |     uint            |
|   unsigned long         |     ulong           |
|   unsigned long long    |     ulonglong       |
|   int8_t                |     int8            |
|   int16_t               |     int16           |
|   int32_t               |     int32           |
|   int64_t               |     int64           |
|   uint8_t               |     uint8           |
|   uint16_t              |     uint16          |
|   uint32_t              |     uint32          |
|   uint64_t              |     uint64          |
|   size_t                |     size            |
|   ptrdiff_t             |     ptrdiff         |

Arguments

ctx     The context on which to perform the operation. When this argument is
        not provided, the operation is performed on SHMEM_CTX_DEFAULT.
dest    Local data object to be updated.
source  Data object on the PE identified by pe that contains the data to be
        copied. This data object must be remotely accessible.
nelems  Number of elements in the dest and source arrays. nelems must be of
        type size_t for C. When using Fortran, it must be a constant, variable,
        or array element of default integer type.
pe      PE number of the remote PE.  pe must be of type integer. When using
        Fortran, it must be a constant, variable, or array element of default
        integer type.

Description

The get routines provide a method for copying a contiguous symmetric data
object from a different PE to a contiguous data object on the local
PE.  The routines return after the data has been delivered to the dest
array on the local PE.

When using Fortran, dest and source must conform to certain typing
constraints, which are as follows:
|     Routine       |    Data type of dest and source    |
|-------------------|------------------------------------|
|shmem_getmem       |Fortran: Any noncharacter type.     |
|                   |C: Any data type. nelems is scaled  |
|                   |in bytes.                           |
|shmem_get4,        |Any noncharacter type that has a    |
|shmem_get32        |storage size equal to 32 bits.      |
|shmem_get8         |C: Any noncharacter type that has a |
|                   |storage size equal to 8 bits.       |
|                   |Fortran: Any noncharacter type that |
|                   |has a storage size equal to 64 bits.|
|shmem_get64        |Any noncharacter type that has a    |
|                   |storage size equal to 64 bits.      |
|shmem_get128       |Any  noncharacter type that has a   |
|                   |storage size equal to 128 bits.     |
|SHMEM_CHARACTER_GET|Elements of type character. nelems  |
|                   |is the number  of characters to     |
|                   |transfer. The actual character      |
|                   |lengths of the source and dest      |
|                   |variables are ignored.              |
|SHMEM_COMPLEX_GET  |Elements of type complex of default |
|                   |size.                               |
|SHMEM_DOUBLE_GET   |Fortran: Elements of type double    |
|                   |precision.                          |
|SHMEM_INTEGER_GET  |Elements of type integer.           |
|SHMEM_LOGICAL_GET  |Elements of type logical.           |
|SHMEM_REAL_GET     |Elements of type real.              |

Return Values

None.

Notes

When using Fortran, data types must be of default size.  For example, a real
variable must be declared as REAL, REAL4,  or REALKIND=KIND(1.0))}.

Examples

Fortran Example

PROGRAM REDUCTION
INCLUDE "shmem.fh"

REAL VALUES, SUM
COMMON /C/ VALUES
REAL WORK
CALL SHMEM_INIT()             ! ALLOW ANY NUMBER OF PES
VALUES = SHMEM_MY_PE()              ! INITIALIZE IT TO SOMETHING
CALL SHMEM_BARRIER_ALL
SUM = 0.0
DO I = 0, SHMEM_N_PES()-1
   CALL SHMEM_REAL_GET(WORK, VALUES, (SHMEM_N_PES()()-1), I)
   SUM = SUM + WORK
ENDDO
PRINT*,'PE ',SHMEM_MY_PE(),' COMPUTED SUM=',SUM
CALL SHMEM_BARRIER_ALL
END