18.2.34. shmem_double_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.34.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.34.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.34.3. 注意事项

关于"远程可访问"这一术语的定义,请参阅intro_shmem(3)。

18.2.34.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)