18.2.197. shmem_short_get_nbi
shmem_getmem_nbi(3), shmem_char_get_nbi(3), shmem_short_get_nbi(3), shmem_int_get_nbi(3), shmem_long_get_nbi(3), shmem_longlong_get_nbi(3), shmem_float_get_nbi(3), shmem_double_get_nbi(3), shmem_longdouble_get_nbi(3), shmem_get8_nbi(3), shmem_get16_nbi(3), shmem_get32_nbi(3), shmem_get64_nbi(3), shmem_get128_nbi(3), - 这些非阻塞获取例程提供了一种方法,用于将指定PE上的连续远程数据对象复制到本地数据对象。
18.2.197.1. 概述
C或C++:
#include <mpp/shmem.h>
void shmem_getmem_nbi(void *dest, const void *source,
size_t nelems, int pe)
void shmem_char_get(char *dest, const char *source,
size_t nelems, int pe)
void shmem_short_get(short *dest, const short *source,
size_t nelems, int pe)
void shmem_int_get(int *dest, const int *source,
size_t nelems, int pe)
void shmem_long_get(long *dest, const long *source,
size_t nelems, int pe)
void shmem_longlong_get(long long *dest, const long long *source,
size_t nelems, int pe)
void shmem_float_get(float *dest, const float *source,
size_t nelems, int pe)
void shmem_double_get(double *dest, const double *source,
size_t nelems, int pe)
void shmem_longdouble_get(long double *dest, const long double *source,
size_t nelems, int pe)
void shmem_get8(void *dest, const void *source,
size_t nelems, int pe)
void shmem_get16(void *dest, const void *source,
size_t nelems, int pe)
void shmem_get32(void *dest, const void *source,
size_t nelems, int pe)
void shmem_get64(void *dest, const void *source,
size_t nelems, int pe)
void shmem_get128(void *dest, const void *source,
size_t nelems, int pe)
Fortran语言:
INCLUDE "mpp/shmem.fh"
INTEGER nelems, pe
CALL SHMEM_GETMEM_NBI(dest, source, nelems, pe)
CALL SHMEM_CHARACTER_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_COMPLEX_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_DOUBLE_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_INTEGER_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_LOGICAL_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_REAL_GET_NBI(dest, source, nelems, pe)
CALL SHMEM_GET4_NBI(dest, source, nelems, pe)
CALL SHMEM_GET8_NBI(dest, source, nelems, pe)
CALL SHMEM_GET32_NBI(dest, source, nelems, pe)
CALL SHMEM_GET64_NBI(dest, source, nelems, pe)
CALL SHMEM_GET128_NBI(dest, source, nelems, pe)
18.2.197.2. 描述
get例程提供了一种方法,用于将来自不同PE的连续对称数据对象复制到本地PE上的连续数据对象。这些例程在发起操作后立即返回。该操作在后续调用shmem_quiet后才被视为完成。当shmem_quiet完成时,数据已被传送到本地PE上的目标数组。
参数如下:
- dest
待更新的本地数据对象。
- source
由pe标识的PE上的数据对象,包含待复制的数据。该数据对象必须可远程访问。
- nelems
目标数组和源数组中的元素数量。len必须是整数类型。如果使用Fortran,它必须是默认整数类型的常量、变量或数组元素。
- pe
远程PE的编号。pe必须为整数类型。如果使用Fortran,它必须是默认整数类型的常量、变量或数组元素。
如果您使用Fortran语言,数据类型必须采用默认大小。例如,实数变量必须声明为REAL、REAL*4或REAL(KIND=4)。
18.2.197.3. 注意事项
关于"远程可访问"这一术语的定义,请参阅intro_shmem(3)。
18.2.197.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_NBI(WORK, VALUES, 1, I)
CALL SHMEM_QUIET ! wait for delivery
SUM = SUM + WORK
ENDDO
PRINT *, 'PE ', MY_PE(), ' COMPUTED SUM=', SUM
CALL SHMEM_BARRIER_ALL
END
另请参阅
intro_shmem(3) shmem_quiet(3)