18.2.219. 启动处理元素

shmem_init, start_pes - 从对称堆中分配一块内存。

18.2.219.1. 概述

C或C++:

void shmem_init(void)
void start_pes(int npes)

Fortran语言:

CALL SHMEM_INIT()
CALL START_PES(npes)

18.2.219.2. 描述

start_pes 例程应该是 SHMEM 并行程序中的第一条语句。

start_pes 例程接受以下参数:

npes

未使用。应设置为0。

此例程用于初始化SHMEM API,因此必须在调用任何其他SHMEM例程之前调用。该例程主要负责在调用PE上设置对称堆,并创建虚拟PE编号。当此例程成功返回后,调用PE将能够与其他PE进行通信和数据传输。

不允许多次调用此函数。

有关使用SHMEM通信例程进行编程的概述、SHMEM程序示例以及编译SHMEM程序的说明,请参阅intro_shmem(3)手册页。

18.2.219.3. 示例

这是一个调用shmem_integer_put(3)的简单程序:

PROGRAM PUT
  INCLUDE "mpp/shmem.fh"

  INTEGER TARG, SRC, RECEIVER, BAR
  COMMON /T/ TARG
  PARAMETER (RECEIVER=1)

  CALL SHMEM_INIT()
  IF (MY_PE() .EQ. 0) THEN
    SRC = 33
    CALL SHMEM_INTEGER_PUT(TARG, SRC, 1, RECEIVER)
  ENDIF
  CALL SHMEM_BARRIER_ALL ! SYNCHRONIZES SENDER AND RECEIVER
  IF (MY_PE() .EQ. RECEIVER) THEN
    PRINT *,'PE ', MY_PE(),' TARG=',TARG,' (expect 33)'
  ENDIF
END

18.2.219.4. 注意事项

如果start_pes调用不是程序中的第一条语句,在某些架构上可能会出现意外结果。

另请参阅

intro_shmem(3) shmem_barrier(3) shmem_barrier_all(3) shmem_put(3) my_pe(3) shmem_n_pes(3)