18.2.53. shmem_float_get
shmem_character_get(3), shmem_complex_get(3), shmem_double_get(3), shmem_float_get(3), shmem_get4(3), shmem_get8(3), shmem_get32(3), shmem_get64(3), shmem_get128(3), shmem_getmem(3), shmem_int_get(3), shmem_integer_get(3), shmem_logical_get(3), shmem_long_get(3), shmem_longdouble_get(3), shmem_longlong_get(3), shmem_real_get(3), shmem_short_get(3) - 从指定的处理单元(PE)传输数据。
18.2.53.1. 概述
C或C++:
#include <mpp/shmem.h>
void shmem_get32(void *target, const void *source,
size_t len, int pe)
void shmem_get64(void *target, const void *source,
size_t len, int pe)
void shmem_get128(void *target, const void *source,
size_t len, int pe)
void shmem_getmem(void *target, const void *source,
size_t len, int pe)
void shmem_int_get(int *target, const int *source,
size_t len, int pe)
void shmem_double_get(double *target, const double *source,
size_t len, int pe)
void shmem_float_get(float *target, const float *source,
size_t len, int pe)
void shmem_long_get(long *target, const long *source,
size_t len, int pe)
void shmem_longdouble_get(long double *target,
const long double *source, size_t len, int pe)
void shmem_longlong_get(long long *target,
const long long *source, size_t len, int pe)
void shmem_short_get(short *target,
const short *source, size_t len, int pe)
Fortran语言:
INCLUDE "mpp/shmem.fh"
INTEGER len, pe
CALL SHMEM_CHARACTER_GET(target, source, len, pe)
CALL SHMEM_COMPLEX_GET(target, source, len, pe)
CALL SHMEM_DOUBLE_GET(target, source, len, pe)
CALL SHMEM_GET4(target, source, len, pe)
CALL SHMEM_GET8(target, source, len, pe)
CALL SHMEM_GET32(target, source, len, pe)
CALL SHMEM_GET64(target, source, len, pe)
CALL SHMEM_GET128(target, source, len, pe)
CALL SHMEM_GETMEM(target, source, len, pe)
CALL SHMEM_INTEGER_GET(target, source, len, pe)
CALL SHMEM_LOGICAL_GET(target, source, len, pe)
CALL SHMEM_REAL_GET(target, source, len, pe)
18.2.53.2. 描述
shmem_get例程将远程PE pe上地址source处的数据对象的nelems个元素传输到本地PE上地址target处的数据对象。这些例程会在数据被复制到本地PE的target地址后返回。
参数如下:
- target
待更新的本地数据对象。
- source
由pe标识的PE上的数据对象,包含待复制的数据。该数据对象必须可远程访问。
- len
目标数组和源数组中的元素数量。len必须是整数类型。如果使用Fortran,它必须是默认整数类型的常量、变量或数组元素。
- pe
远程PE的编号。pe必须为整数类型。如果使用Fortran,它必须是默认整数类型的常量、变量或数组元素。
目标与源数据对象必须符合以下类型约束条件:
- shmem_getmem: Fortran: Any noncharacter type. C: Any data type. len is
按字节缩放。
- shmem_get4, shmem_get32: Any noncharacter type that has a storage size
等于32位。
- {shmem_get8, shmem_get64}: Any noncharacter type that has a storage size equal to
64位。
- shmem_get128: Any noncharacter type that has a storage size equal to 128
位。
shmem_short_get: 短整型元素。
shmem_int_get: 整型元素。
shmem_long_get: 长整型元素。
shmem_longlong_get: 长整型(long long)元素。
shmem_float_get: 浮点类型的元素。
shmem_double_get: 双精度浮点类型的元素。
shmem_longdouble_get: 长双精度类型的元素。
- SHMEM_CHARACTER_GET: Elements of type character. len is the number of
要传输的字符数。源变量和目标变量的实际字符长度将被忽略。
SHMEM_COMPLEX_GET:默认大小的复数类型元素。
SHMEM_DOUBLE_GET: (Fortran) 双精度类型的元素。
SHMEM_INTEGER_GET: 整数类型的元素。
SHMEM_LOGICAL_GET: 逻辑类型的元素。
SHMEM_REAL_GET: 实数类型的元素。
如果您使用Fortran语言,数据类型必须采用默认大小。例如,实数变量必须声明为REAL、REAL*4或REAL(KIND=4)。
18.2.53.3. 注意事项
关于"远程可访问"这一术语的定义,请参阅intro_shmem(3)。
18.2.53.4. 示例
考虑这个简单的Fortran示例。
PROGRAM REDUCTION
REAL VALUES, SUM
COMMON /C/ VALUES
REAL WORK
CALL START_PES(0) ! ALLOW ANY NUMBER OF PES
VALUES = MY_PE() ! INITIALIZE IT TO SOMETHING
CALL SHMEM_BARRIER_ALL
SUM = 0.0
DO I = 0,NUM_PES()-1
CALL SHMEM_REAL_GET(WORK, VALUES, 1, I)
SUM = SUM + WORK
ENDDO
PRINT *, 'PE ', MY_PE(), ' COMPUTED SUM=', SUM
CALL SHMEM_BARRIER_ALL
END
另请参阅
intro_shmem(3) shmem_put(3) shmem_iget(3) shmem_quiet(3)