18.2.62. shmem_float_put_nbi

shmem_putmem_nbi(3), shmem_char_put_nbi(3), shmem_short_put_nbi(3), shmem_int_put_nbi(3), shmem_long_put_nbi(3), shmem_longlong_put_nbi(3), shmem_float_put_nbi(3), shmem_double_put_nbi(3), shmem_longdouble_put_nbi(3), shmem_put8_nbi(3), shmem_put16_nbi(3), shmem_put32_nbi(3), shmem_put64_nbi(3), shmem_put128_nbi(3), - 非阻塞写入例程提供了一种方法,用于将数据从本地连续数据对象复制到指定PE上的数据对象。

18.2.62.1. 概述

C或C++:

#include <mpp/shmem.h>

void shmem_putmem_nbi(void *dest, const void *source,
  size_t nelems, int pe)

void shmem_char_put(char *dest, const char *source,
  size_t nelems, int pe)

void shmem_short_put(short *dest, const short *source,
  size_t nelems, int pe)

void shmem_int_put(int *dest, const int *source,
  size_t nelems, int pe)

void shmem_long_put(long *dest, const long *source,
  size_t nelems, int pe)

void shmem_longlong_put(long long *dest, const long long *source,
  size_t nelems, int pe)

void shmem_float_put(float *dest, const float *source,
  size_t nelems, int pe)

void shmem_double_put(double *dest, const double *source,
  size_t nelems, int pe)

void shmem_longdouble_put(long double *dest, const long double *source,
  size_t nelems, int pe)

void shmem_put8(void *dest, const void *source,
  size_t nelems, int pe)

void shmem_put16(void *dest, const void *source,
  size_t nelems, int pe)

void shmem_put32(void *dest, const void *source,
  size_t nelems, int pe)

void shmem_put64(void *dest, const void *source,
  size_t nelems, int pe)

void shmem_put128(void *dest, const void *source,
  size_t nelems, int pe)

Fortran语言:

INCLUDE "mpp/shmem.fh"

INTEGER nelems, pe

CALL SHMEM_PUTMEM_NBI(dest, source, nelems, pe)

CALL SHMEM_CHARACTER_PUT_NBI(dest, source, nelems, pe)

CALL SHMEM_COMPLEX_PUT_NBI(dest, source, nelems, pe)

CALL SHMEM_DOUBLE_PUT_NBI(dest, source, nelems, pe)

CALL SHMEM_INTEGER_PUT_NBI(dest, source, nelems, pe)

CALL SHMEM_LOGICAL_PUT_NBI(dest, source, nelems, pe)

CALL SHMEM_REAL_PUT_NBI(dest, source, nelems, pe)

CALL SHMEM_PUT4_NBI(dest, source, nelems, pe)

CALL SHMEM_PUT8_NBI(dest, source, nelems, pe)

CALL SHMEM_PUT32_NBI(dest, source, nelems, pe)

CALL SHMEM_PUT64_NBI(dest, source, nelems, pe)

CALL SHMEM_PUT128_NBI(dest, source, nelems, pe)

18.2.62.2. 描述

这些例程在发布操作后返回。操作在后续调用shmem_quiet后才被视为完成。当shmem_quiet完成时,数据已被复制到目标PE的dest数组中。数据字传递到目标PE的数据对象中可能以任意顺序发生。此外,两个连续的put例程可能会乱序传递数据,除非在这两次调用之间插入对shmem_fence的调用。

参数如下:

dest

需要在远程PE上更新的数据对象。该数据对象必须能够远程访问。

source

包含待复制数据的数据对象。

nelems

目标数组和源数组中的元素数量。对于C语言,nelems必须是size_t类型。如果使用Fortran,它必须是一个默认整数类型的常量、变量或数组元素。

pe

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

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

18.2.62.3. 注意事项

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

18.2.62.4. 示例

考虑这个简单的C语言示例。

#include <stdio.h>
#include <mpp/shmem.h>

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

  if (shmem_my_pe() == 0) {
    /* put 10 words into target on PE 1 */
    shmem_long_put_nbi(target, source, 10, 1);
    shmem_quiet();
  }
  shmem_barrier_all();  /* sync sender and receiver */
  if (shmem_my_pe() == 1)
    shmem_udcflush();  /* not required on Altix systems */
  printf("target[0] on PE %d is %d\n", shmem_my_pe(), target[0]);
}

另请参阅

intro_shmem(3) shmem_quiet(3)