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