窗口的创建
MPI_WIN_CREATE(base, size, disp_unit, info, comm ,win)
INbase窗口空间的初始地址
INsize以字节为单位的窗口空间大小
INdisp_unit 一个偏移单位对应的字节数
INinfo传递给运行时的信息
INcomm通信域
OUT win 返回的窗口对象
int MPI_Win_create(void * base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
MPI_Win * win)
MPI_WIN_CREATE(BASE, SIZE, DISP_UNIT, INFO, COMM, WIN, IERROR)
<type> BASE(*)
INTEGER (KIND=MPI_ADDRESS_KIND) SIZE
INTEGER DISP_UNIT, INFO, COMM, WIN, IERROR

MPI_WIN_CREATE在本地的一片特定的存储空间之上开辟一个"窗口",其它的进程就可以通过这一窗口来直接访问该窗口限定的存储空间。该空间的基地址是base,以字节为单位的空间大小是size,在该窗口上以字节为单位的数据类型偏移为disp_unit,传递给运行时的信息为info。如果给定窗口大小size=0,则表示该窗口没有存储区域可以被其它进程访问。
该调用是一个组调用,所有comm通信域之内的进程都要执行,它返回一个窗口对象,该窗口并不只是表示本地窗口,它是建立在整个组上的窗口,通过这一窗口对象并指定组内的特定进程,就可以访问组内的任何一个进程的提供给窗口的存储区域,实现远程存储访问。
MPI_WIN_FREE(win)
INOUT win 窗口对象,输入为要释放的窗口,返回为空
int MPI_Win_free(MPI_Win * win)
MPI_WIN_FREE(WIN, IERROR)
INTEGER WIN, IERROR

与MPI_WIN_CREAT操作相对应,MPI_WIN_FREE将前面创建的窗口对象释放掉,它也是一个组调用,组内的所有进程都需要执行它,它返回后将原来的窗口对象置为空MPI_WIN_NULL。在所有的远程存储访问完成后,执行这一操作释放掉不再使用的对象。

从窗口读
MPI_GET(origin_addr, origin_count, origin_datatype, target_rank, target_disp,
target_count, target_datatype, win)
OUTorigin_addr本地接收缓冲区的起始地址
IN origin_count 以指定的数据类型为单位,接收数据的个数
IN origin_datatype接收数据的数据类型
IN target_rank将要读的窗口所在的进程标识
IN target_disp读取位置相对于窗口起始地址偏移单位的个数
IN target_count 以指定的数据类型为单位,读取数据的个数
IN target_datatype读取数据的数据类型
IN win窗口对象
int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int
target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype
target_datatype, MPI_Win win)
MPI_GET(ORIGIN_ADDR, ORIGIN_COUNT, ORIGIN_DATATYPE,TARGET_RANK,TARGET_DISP,
TARGET_COUNT, TARGET_DATATYPE, WIN,IERROR)
<type> ORIGIN_ADD(*)
INTEGER (KIND=MPI_ADDRESS_KIND) TARGET_DISP
INTEGER ORIGIN_COUNT, ORIGIN_DATATYPE, TARGET_RANK,
TARGET_COUNT, TARGET_DATATYPE, WIN, IERROR

MPI_GET与MPI_PUT是类似的,只不过数据传送的方向正好相反,它从其它进程的窗口读数据到自己的缓冲区中。具体地, 它从target_rank进程的第target_disp个偏移位置开始,读取target_count个类型为target_datatype的数据,放到本地以origin_add开始的缓冲区中,接收数据的个数为origin_count个,数据类型为origin_datatype。

图16-1 MPI_GET操作图示