18.2.141. shmem_longdouble_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.141.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.141.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.141.3. 注意事项
关于"远程可访问"这一术语的定义,请参阅intro_shmem(3)。
18.2.141.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)