18.2.123. shmem_long_iput

shmem_complex_iput(3), shmem_double_iput(3), shmem_float_iput(3), shmem_int_iput(3), shmem_integer_iput(3), shmem_iput4(3), shmem_iput8(3), shmem_iput32(3), shmem_iput64(3), shmem_iput128(3), shmem_logical_iput(3), shmem_long_iput(3), shmem_longdouble_iput(3), shmem_longlong_iput(3), shmem_real_iput(3), shmem_short_iput(3) - 将跨步数据传输到指定的处理单元(PE)。

18.2.123.1. 概述

C或C++:

#include <mpp/shmem.h>

void shmem_double_iput(double *target, const double *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_float_iput(float *target, const float *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_int_iput(int *target, const int *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_iput32(void *target, const void *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_iput64(void *target, const void *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_iput128(void *target, const void *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_long_iput(long *target, const long *source,
  ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe)

void shmem_longdouble_iput(long double *target,
  const long double *source, ptrdiff_t tst, ptrdiff_t sst,
  size_t len, int pe)

void shmem_longlong_iput(long long *target,
  const long long *source, ptrdiff_t tst, ptrdiff_t sst,
  size_t len, int pe)

void shmem_short_iput(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_IPUT(target, source, tst, sst, len,
& pe)

CALL SHMEM_DOUBLE_IPUT(target, source, tst, sst, len,
& pe)

CALL SHMEM_INTEGER_IPUT(target, source, tst, sst, len,
& pe)

CALL SHMEM_IPUT4(target, source, tst, sst, len, pe)

CALL SHMEM_IPUT8(target, source, tst, sst, len, pe)

CALL SHMEM_IPUT32(target, source, tst, sst, len, pe)

CALL SHMEM_IPUT64(target, source, tst, sst, len, pe)

CALL SHMEM_IPUT128(target, source, tst, sst, len, pe)

CALL SHMEM_LOGICAL_IPUT(target, source, tst, sst, len,
& pe)

CALL SHMEM_REAL_IPUT(target, source, tst, sst, len, pe)

18.2.123.2. 描述

shmem_iput例程读取本地数组(source)中的元素,并将其写入由pe指定的PE上的远程数组(target)。这些例程在数据从本地PE的源数组中复制出来时返回,但不一定在数据传送到远程数据对象之前返回。

参数如下:

target

需要在远程PE上更新的数组。该数据对象必须具有远程可访问性。

source

包含待复制数据的数组。

tst

目标数组中连续元素之间的跨度。该跨度会根据目标数组的元素大小进行缩放。值为1表示数据是连续的。tst必须为整数类型。如果使用Fortran,则必须为默认整数值。

sst

源数组中连续元素之间的跨度。该跨度会根据源数组的元素大小进行缩放。值为1表示数据是连续的。sst必须为整数类型。如果使用Fortran,则必须为默认整数值。

len

目标数组和源数组中的元素数量。len必须是整数类型。如果使用Fortran,它必须是默认整数类型的常量、变量或数组元素。

pe

远程PE的编号。pe必须为整数类型。如果使用Fortran,它必须是默认整数类型的常量、变量或数组元素。

目标与源数据对象必须符合以下类型约束条件:

shmem_iput32, shmem_iput4: Any noncharacter type that has a storage size equal

至32位。

shmem_iput64, shmem_iput8: Any noncharacter type that has a storage size equal

扩展到64位。

shmem_iput128: 任何存储大小等于128位的非字符类型。

shmem_short_iput: 短整型元素。

shmem_int_iput: 整型元素。

shmem_long_iput: 长整型元素。

shmem_longlong_iput: 长整型(long long)元素。

shmem_float_iput: 浮点型元素。

shmem_double_iput: 双精度浮点类型元素。

shmem_longdouble_iput: 长双精度类型的元素。

SHMEM_COMPLEX_IPUT:默认大小的复数类型元素。

SHMEM_DOUBLE_IPUT: (Fortran) 双精度类型的元素。

SHMEM_INTEGER_IPUT: 整数类型的元素。

SHMEM_LOGICAL_IPUT: 逻辑类型的元素。

SHMEM_REAL_IPUT: 实数类型的元素。

SHMEM_LOGICAL_IPUT: 逻辑类型的元素。

SHMEM_REAL_IPUT: 实数类型的元素。

如果您使用Fortran语言,数据类型必须采用默认大小。例如,实数变量必须声明为REAL、REAL*4或REAL(KIND=4)。

18.2.123.3. 注意事项

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

18.2.123.4. 示例

请看以下针对C/C++程序的简单shmem_long_iput示例。

#include <mpp/shmem.h>

main()
{
  short source[10] = { 1, 2, 3, 4, 5,
  6, 7, 8, 9, 10 };
  static short target[10];

  shmem_init();
  if (shmem_my_pe() == 0) {
    /* put 10 words into target on PE 1 */
    shmem_short_iput(target, source, 1, 2, 5, 1);
  }
  shmem_barrier_all(); /* sync sender and receiver */
  if (shmem_my_pe() == 1) {
    shmem_udcflush(); /* not required on IRIX systems */
    printf("target on PE %d is %d %d %d %d %d0, shmem_my_pe(),
    (int)target[0], (int)target[1], (int)target[2],
    (int)target[3], (int)target[4] );
  }
  shmem_barrier_all(); /* sync before exiting */
}

另请参阅

intro_shmem(3) shmem_iget(3) shmem_put(3) shmem_quiet(3)