18.2.140. shmem_longdouble_iget
shmem_complex_iget(3), shmem_double_iget(3), shmem_float_iget(3), shmem_iget4(3), shmem_iget8(3), shmem_iget32(3), shmem_iget64(3), shmem_iget128(3), shmem_int_iget(3), shmem_integer_iget(3), shmem_logical_iget(3), shmem_long_iget(3), shmem_longdouble_iget(3), shmem_longlong_iget(3), shmem_real_iget(3), shmem_short_iget(3) - 从指定的处理单元(PE)传输跨步数据
18.2.140.1. 概述
C或C++:
#include <mpp/shmem.h>
void shmem_iget32(void *target, const void *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_iget64(void *target, const void *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_iget128(void *target, const void *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_int_iget(int *target, const int *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_double_iget(double *target, const double *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_float_iget(float *target, const float *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_long_iget(long *target, const long *source,
ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_longdouble_iget(long double *target,
const long double *source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe)
void shmem_longlong_iget(long long *target,
const long long *source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
void shmem_short_iget(short *target,
const short *source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)
Fortran语言:
INCLUDE "mpp/shmem.fh"
INTEGER tst, sst, len, pe
CALL SHMEM_COMPLEX_IGET(target, source, tst, sst, len,
& pe)
CALL SHMEM_DOUBLE_IGET(target, source, tst, sst, len,
& pe)
CALL SHMEM_IGET4(target, source, tst, sst, len, pe)
CALL SHMEM_IGET8(target, source, tst, sst, len, pe)
CALL SHMEM_IGET32(target, source, tst, sst, len, pe)
CALL SHMEM_IGET64(target, source, tst, sst, len, pe)
CALL SHMEM_IGET128(target, source, tst, sst, len, pe)
CALL SHMEM_INTEGER_IGET(target, source, tst, sst, len,
& pe)
CALL SHMEM_LOGICAL_IGET(target, source, tst, sst, len,
& pe)
CALL SHMEM_REAL_IGET(target, source, tst, sst, len, pe)
18.2.140.2. 描述
strided get例程用于从远程PE(pe)上的源地址(source)获取数组数据。source数组中的元素通过步长sst进行分隔。当数据接收完成后,将被存储到本地内存地址target处,并通过步长tst进行分隔。这些例程会在数据被复制到本地target数组后返回。
参数如下:
- target
要在本地PE上更新的数组。
- source
包含要在远程PE上复制的数据的数组。
- tst
目标数组中连续元素之间的跨度。该跨度会根据目标数组的元素大小进行缩放。值为1表示数据是连续的。tst必须为整数类型。如果从Fortran调用,则必须为默认整数值。
- sst
源数组中连续元素之间的跨度。该跨度会根据源数组的元素大小进行缩放。值为1表示数据是连续的。sst必须为整数类型。如果从Fortran调用,则必须为默认整数值。
- len
目标数组和源数组中的元素数量。len必须是整数类型。如果使用Fortran,它必须是默认整数类型的常量、变量或数组元素。
- pe
远程PE的编号。pe必须为整数类型。如果使用Fortran,它必须是默认整数类型的常量、变量或数组元素。
目标与源数据对象必须符合以下类型约束条件:
- shmem_iget32, shmem_iget4: Any noncharacter type that has a storage size
等于32位。
- shmem_iget64, shmem_iget8: Any noncharacter type that has a storage size
等于64位。
- shmem_iget128: Any noncharacter type that has a storage size equal to
128位。
shmem_short_iget: 短整型元素。
shmem_int_iget: 整型元素。
shmem_long_iget: 长整型元素。
shmem_longlong_iget: 长整型(long long)元素。
shmem_float_iget: 浮点型元素。
shmem_double_iget: 双精度浮点类型的元素。
shmem_longdouble_iget: 长双精度类型的元素。
SHMEM_COMPLEX_IGET: 默认大小的复数类型元素。
SHMEM_DOUBLE_IGET: (Fortran) 双精度类型的元素。
SHMEM_INTEGER_IGET: 整数类型的元素。
SHMEM_LOGICAL_IGET: 逻辑类型的元素。
SHMEM_REAL_IGET: 实数类型的元素。
shmem_longdouble_iget: 长双精度类型的元素。
SHMEM_COMPLEX_IGET: 默认大小的复数类型元素。
SHMEM_DOUBLE_IGET: (Fortran) 双精度类型的元素。
SHMEM_INTEGER_IGET: 整数类型的元素。
SHMEM_LOGICAL_IGET: 逻辑类型的元素。
SHMEM_REAL_IGET: 实数类型的元素。
如果您使用Fortran语言,数据类型必须采用默认大小。例如,实数变量必须声明为REAL、REAL*4或REAL(KIND=4)。
18.2.140.3. 注意事项
关于"远程可访问"这一术语的定义,请参阅intro_shmem(3)。
18.2.140.4. 示例
以下简单示例展示了在Fortran程序中使用shmem_logical_iget的情况。编译此示例时请使用-lsma编译器选项。
PROGRAM STRIDELOGICAL
LOGICAL SOURCE(10), TARGET(5)
SAVE SOURCE ! SAVE MAKES IT REMOTELY ACCESSIBLE
DATA SOURCE /.T.,.F.,.T.,.F.,.T.,.F.,.T.,.F.,.T.,.F./
DATA TARGET / 5*.F. /
CALL START_PES(2)
IF (MY_PE() .EQ. 0) THEN
CALL SHMEM_LOGICAL_IGET(TARGET, SOURCE, 1, 2, 5, 1)
PRINT*,'TARGET AFTER SHMEM_LOGICAL_IGET:',TARGET
ENDIF
CALL SHMEM_BARRIER_ALL
END
另请参阅
intro_shmem(3) shmem_get(3) shmem_quiet(3)