18.2.83. shmem_init
shmem_init, start_pes - 从对称堆中分配一块内存。
18.2.83.1. 概述
C或C++:
void shmem_init(void)
void start_pes(int npes)
Fortran语言:
CALL SHMEM_INIT()
CALL START_PES(npes)
18.2.83.2. 描述
start_pes 例程应该是 SHMEM 并行程序中的第一条语句。
start_pes 例程接受以下参数:
- npes
未使用。应设置为0。
此例程用于初始化SHMEM API,因此必须在调用任何其他SHMEM例程之前调用。该例程主要负责在调用PE上设置对称堆,并创建虚拟PE编号。当此例程成功返回后,调用PE将能够与其他PE进行通信和数据传输。
不允许多次调用此函数。
有关使用SHMEM通信例程进行编程的概述、SHMEM程序示例以及编译SHMEM程序的说明,请参阅intro_shmem(3)手册页。
18.2.83.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.83.4. 注意事项
如果start_pes调用不是程序中的第一条语句,在某些架构上可能会出现意外结果。
另请参阅
intro_shmem(3) shmem_barrier(3) shmem_barrier_all(3) shmem_put(3) my_pe(3) shmem_n_pes(3)