并行程序设计基础——MPI接口一览

目录

1、A

2、B

3、C

4、D

5、E

6、F

7、G

8、I

9、K

10、L

11、O

12、P

13、Q

14、R

13、S

14、T

14、U

15、W


本专栏前三十篇文章对并行程序设计和MPI常用接口使用方法进行了介绍,这里我们再用一节内容对MPI的接口进行梳理,这里只展示MPI与C语言的接口(按照"MPI_* "中红色星号所代表的英文字母从A到Z的顺序进行梳理)。

1、A

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//终止MPI环境及MPI程序的执行
int MPI_Abort(MPI_Comm comm, int errorcode)
//得到给定位置在内存中的地址,将被废弃的函数,可以用MPI_Get_address取代
int MPI_Address(void *location, MPI_Aint *address)
//每一个进程都从所有其它进程收集数据,相当于所有进程都执行了一个MPI_Gather调用
int MPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,    
                  int recvcount, int *displs, MPI_Datatype recvtype, MPI_Comm comm)
//规约所有进程的计算结果,并将最终结果传递给所有其它的进程,相当于每一个进程都执行了一次MPI_Reduce调用
int MPI_Allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
                  MPI_Op op, MPI_Comm comm)
//所有进程相互交换数据
int MPI_Alltoall(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
                 void *recvbuf, int *recvcount, int *rdispls, MPI_Datatype recvtype, 
                 MPI_Comm comm)
//所有进程相互交换数据,但数据有一个偏移量
int MPI_Alltoallv(void *sendbuf, int *sendcount, int *sdispls, MPI_Datatype sendtype,
                  void *recvbuf, int *recvcount, int *rdispls, MPI_Datatype recvtype,
                  MPI_Comm comm)
//删除与指定关键词联系的属性值,即将废弃的特性,可以用MPI_Comm_delete_attr替代
int MPI_Attr_delete(MPI_Comm comm, int keyval)
//按关键词查找属性值,即将废弃的特性,可以用MPI_Comm_get_attr替代
int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag)
//按关键词设置属性值,即将废弃的特性,可以用MPI_Comm_set_attr替代
int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val)



//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//用指定的操作累计目标进程窗口中的数据
int MPI_Accumulate(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_Op op, MPI_Win win)
//创建一个新的出错处理类并返回它的值
int MPI_Add_error_class(int *errorclass)
//创建一个与错误处理类相联系的错误处理代码,并返回它的值
int MPI_Add_error_code(int errorclass, int *error)
//将一个出错提示串与错误处理类或错误代码建立联系
int MPI_Add_error_string(int errorcode, char *string)
//分配一块内存用于远程存储访问和消息传递操作
int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr)
//所有进程之间的数据交换,其数量、偏移和数据类型可以互不相同
int MPI_Alltoallw(void *sendbuf, int sendcounts[], int sdispls[], MPI_Datatype 
                  sendtype[], void *recvbuf, int recvcounts[], int rdispls[], 
                  MPI_Datatype recvtypes[], MPI_Comm comm)

2、B

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//等待直到所有的进程都执行到这一例程才继续执行下一条语句
int MPI_Barrier(MPI_Comm comm)
//将root进程的消息广播到所有其它进程
int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, MPI_Comm comm)
//使用用户声明的缓冲区进行发送
int MPI_Bsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm 
              comm)
//建立发送缓冲句柄
int MPI_Bsend_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, 
                   MPI_Comm comm, MPI_Request *request)
//将一个用户指定的缓冲区用于消息发送的目的
int MPI_Buffer_attach(void *buffer, int size)
//移走一个指定的发送缓冲区
int Buffer_detach(void *buffer, int *size)

3、C

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++// 
//取消一个请求
int MPI_Cancel(MPI_Request *request)
//给出一个进程所在组的标识号,得到其卡氏坐标值
int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords)
//按给定的拓扑创建一个新的通信域
int MPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims, int *periods, int reorder, 
                    MPI_Comm *comm_cart)
//得到给定通信域的卡氏拓扑信息
int MPI_Cart_get(MPI_Comm comm, int maxdims, int *dims, int *periods, int *coords)
//将进程标识号映射为卡氏拓扑坐标
int MPI_Cart_map(MPI_Comm comm, int *ndims, int *periods, int *newrank)
//由进程标识号得到卡氏坐标
int MPI_Cart_rank(MPI_Comm comm, int *coords, int *rank)
//给定进程标识号、平移方向与大小,得到相对于当前进程的源和目的进程的标识号
int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int 
                   *rank_dest)
//将一个通信域,保留给定的维,得到子通信域
int MPI_Cart_sub(MPI_Comm comm, int *remain_dims, MPI_Comm *newcomm)
//得到给定通信域的卡氏拓扑
int MPI_Cartdim_get(MPI_Comm comm, int *ndims)
//两个通信域比较
int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
//根据进程组创建新的通信域
int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm)
//通信域复制
int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm)
//释放一个通信域对象
int MPI_Comm_free(MPI_Comm *comm)
//由给定的通信域得到组信息
int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)
//得到调用进程在给定通信域中的进程标识号
int MPI_Comm_rank(MPI_Comm comm, int *rank)
//得到组间通信域的远程组
int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group)
//得到远程组的进程数
int MPI_Comm_remote_size(MPI_Comm comm, int *size)
//根据关键词保存属性值
int MPI_Comm_set_attr(MPI_Comm comm, int keyval, void *attribute_val)
//得到通信域组的大小
int MPI_Comm_size(MPI_Comm comm, int *size)
//按照给定的颜色和关键词创建新的通信域
int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
//测试给定通信域是否是域间域
int MPI_Comm_test_inter(MPI_Comm comm, int *flag)




//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//关闭指定的端口
int MPI_Close_port(char *port_name)
//接受请求,和客户端建立联系
int MPI_Comm_accept(char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm 
                    *newcomm)
//C通信域句柄转换为Fortran通信域句柄
MPI_Fint MPI_Comm_c2f(MPI_Comm comm)
//激活与指定通信域相联系的错误处理程序
int MPI_Comm_call_errhandler(MPI_Comm comm, int error)
//请求和服务端建立联系
int MPI_Comm_connect(char *portname, MPI_Info info, int root, MPI_Comm comm, MPI_Comm 
                    *newcomm)
//创建一个能附加到通信域的错误处理程序
int MPI_Comm_create_errhandler(MPI_Comm_errhandler_fn *function, MPI_Errhandler 
                               *errhandler)
//创建一个能在通信域之上缓存的新属性
int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn, 
                          MPI_Comm_delete_attr_function *comm_delete_attr_fn, int 
                          *comm_keyval, void *extra_state)
//删除建立在通信域之上的缓存属性
int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval)
//等待所有在通信域之中排队的通信完成,断开与服务端的联系并释放通信域
int MPI_Comm_disconnect(MPI_Comm *comm)
//将一个Fortran通信域句柄转换为C通信域句柄
MPI_Comm MPI_Comm_f2c(MPI_Fint comm)
//释放用MPI_Comm_create_keyval创建的属性
int MPI_Comm_free_keyval(int *comm_keyval)
//返回与一个通信域缓存的属性对应的值
int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void attribute_val, int *flag)
//返回当前与一个通信域对应的错误处理程序
int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler)
//返回与一个通信域对应的名字
int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen)
//返回一个既包括子进程又包括父进程的组间通信域
int MPI_Comm_get_parent(MPI_Comm *parent)
//将通过套接字连接的MPI进程形成一个组间通信域返回
int MPI_Comm_join(int id, MPI_Comm *intercomm)
//设置通信域缓存的属性值
int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attributr_val)
//把出错处理程序附加到通信域
int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler)
//把名字对应到通信域
int MPI_Comm_set_name(MPI_Comm comm, char *comm_name)
//产生子进程运行MPI程序
int MPI_Comm_spawn(char *command, char *argv[], int maxprocs, MPI_Info info, int root, 
                   MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[])
//产生子进程运行不同MPI程序
int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char 
                            **array_of_argv[], int array_of_maxprocs[], MPI_Info 
                            array_of_info[], int root, MPI_Comm comm, MPI_Comm 
                            *intercomm, int array_of_errcodes[])

4、D

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//在卡氏网格中建立进程维的划分
int MPI_Dims_create(int nnodes, int ndims, int *dims)

5、E

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//创建MPI错误句柄,即将废弃的特性,可以用MPI_Comm_create_errhandler代替
int MPI_Errhandler_create(MPI_handler_function *function, MPI_Errhandler *errhandler)
//释放MPI错误句柄
int MPI_Errhandler_free(MPI_Errhandler *errhandler)
//得到给定通信域的错误句柄,即将废弃的特性,可以用MPI_Comm_get_errhandler替代
int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
//设置MPI错误句柄,即将废弃的特性,可以用MPI_Comm_set_errhandler替代
int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
//将错误代码转换为错误类
int MPI_Error_class(int errorcode, int *errorclass)
//由给定的错误代码,返回它所对应的字符串
int MPI_Error_string(int errorcode, char *string, int *resultlen)



//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//同MPI_Scan,只不过规约操作的对象不包括自身
int MPI_Exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op 
               op, MPI_Comm comm)

6、F

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//结束MPI运行环境
int MPI_Finalize(void)



//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//把C文件句柄转换为Fortran文件句柄
MPI_Fint MPI_File_c2f(MPI_File file)
//激活与一个文件对应的出差处理程序
int MPI_File_call_errhandler(MPI_File fh, int error)
//关闭一个文件
int MPI_File_close(MPI_File *fh)
//创建能附加到文件的出差处理程序
int MPI_File_create_errhandler(MPI_File_errhandler_fn *function, MPI_Errhandler 
                               *errhandler)
//删除一个文件
int MPI_File_delete(char *filename, MPI_Info info)
//把Fortran文件句柄转换为C文件句柄
MPI_File MPI_File_f2c(MPI_Fint file)
//返回文件的访问模式
int MPI_File_get_amode(MPI_File fh, int *amode)
//得到文件句柄fh对应文件的访问模式信息,结果存放在flag中
int MPI_File_get_atomicity(MPI_File fh, int *flag)
//把一个相对视口的文件偏移转换成绝对字节偏移
int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp)
//返回与文件对应的出错处理程序
int MPI_File_get_errhandler(MPI_File fh, MPI_Errhandler *errhandler)
//返回用来打开文件的通信域组的副本
int MPI_File_get_group(MPI_File fh, MPI_Group *group)
//返回与文件相联系的INFO对象
int MPI_File_get_info(MPI_File fh, MPI_Info *info_used)
//返回非共享文件指针的当前位置
int MPI_File_get_position(MPI_File fh, MPI_Offset *offset)
//返回共享文件指针的当前位置
int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset)
//返回共享文件的大小
int MPI_File_get_size(MPI_File fh, MPI_Offset *size)
//返回文件中数据类型的跨度
int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent)
//返回当前文件视口
int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype 
                      *filetype, char *datarep)
//在非共享文件指针的当前位置开始非阻塞读文件
int MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                   MPI_Request *request)
//在指定的偏移开始非阻塞读文件
int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count,
                      MPI_Datatype datatype, MPI_Request *request)
//在共享文件指针的当前位置开始非阻塞读文件
int MPI_File_iread_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                          MPI_Request *request)
//在非共享文件指针的当前位置开始非阻塞写文件
int MPI_File_iwrite(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                    MPI_Request *request)
//在指定的偏移开始非阻塞写文件
int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, void *buf, int count,
                      MPI_Datatype datatype, MPI_Request *request)
//在共享文件指针的当前位置开始非阻塞写文件
int MPI_File_iwrite_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                           MPI_Request *request)
//打开一个文件
int MPI_File_open(MPI_Comm comm, char *filename, int amode, MPI_Info info, MPI_File 
                  *fh)
//为一个文件预分配磁盘空间
int MPI_File_preallocate(MPI_File fh, MPI_Offset size)
//在非共享文件指针的当前位置处读数据
int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                  MPI_Status *status)
//非共享文件的组读取,相当于进程组内所有进程都执行了一个MPI_FILE_READ调用
int MPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                  MPI_Status *status)
//用两步法开始一个非共享文件的组读取
int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
//用两步法完成一个非共享文件的组读取
int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status)
//从指定文件偏移处读数据
int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype 
                     datatype, MPI_Status *status)
//从指定位置开始读取的组调用,效果相当于每个进程都执行了一个相应的MPI_FILE_READ_AT
int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, 
                         MPI_Datatype datatype, MPI_Status *status)
//用两步法开始一个从指定位置读取的组调用
int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count, 
                               MPI_Datatype datatype)
//用两步法完成一个从指定位置读取的组调用
int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status)
//用共享文件指针进行组读取,如同每一个进程组内的进程依次执行了一个MPI_FILE_READ_SHARED
int MPI_File_read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype,    
                          MPI_Status *status)
//用两步法开始一个共享文件的组读取
int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype 
                                datatype)
//用两步法完成一个共享文件的组读取
int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status)
//从共享文件指针的当前位置开始读数据
int MPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                         MPI_Status *status)
//移动非共享文件指针
int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence)
//移动共享文件指针
int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence)
//组调用设置文件的访问模式
int MPI_File_set_atomicity(MPI_File fh, int flag)
//把一个新的出错程序附加到文件上
int MPI_File_set_errhandler(MPI_File fh, MPI_Errhandler errhandler)
//设置与一个文件对应的INFO对象的值
int MPI_File_set_info(MPI_File fh, MPI_Info info)
//设置文件长度
int MPI_File_set_size(MPI_File fh, MPI_Offset size)
//设置文件视口
int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, char *datarep, MPI_Info info)
//将缓冲文件数据与存储设备的数据进行同步
int MPI_File_sync(MPI_File fh)
//在非共享文件指针的当前位置处写入数据
int MPI_File_write(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                   MPI_Status *status)
//对非共享文件执行组写入,效果相当于每个进程都执行了一个MPI_FILE_WRITE
int MPI_File_write_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                       MPI_Status *status)
//用两步法开始一个非共享文件的组写入
int MPI_File_write_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
//用两步法完成一个非共享文件的组写入
int MPI_File_write_all_end(MPI_File fh, void *buf, MPI_Status *status)
//在指定的文件偏移处写数据
int MPI_File_write_at(MPI_File fh, MPI_Offset offset, void *buf, int count,    
                      MPI_Datatype datatype, MPI_Status *status)
//在各自的指定偏移处开始,执行文件的组写入
int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count,    
                          MPI_Datatype datatype, MPI_Status *status)
//用两步法开始一个指定位置的组写入
int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count,    
                                MPI_Datatype datatype)
//用两步法完成一个指定位置的组写入
int MPI_File_write_at_all_end(MPI_File fh, void *buf, MPI_Status *status)
//对共享文件进行组写入,相当于每一个进程按序依次执行一个MPI_FILE_WRITE_SHARED
int MPI_File_write_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                           MPI_Status *status)
//用两步法开始一个共享文件的组写入
int MPI_File_write_ordered_begin(MPI_File fh, void *buf, int count, 
                                 MPI_Datatype datatype)
//用两步法完成一个共享文件的组写入
int MPI_File_write_ordered_end(MPI_File fh, void *buf, MPI_Status *status)
//在共享文件指针的当前位置处写入数据
int MPI_File_write_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, 
                          MPI_Status *status)
//检查MPI_Finalize是否完成
int MPI_Finalized(int *flag)
//释放MPI_Alloc_mem申请的内存
int MPI_Free_mem(void *base)

7、G

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//从进程组中收集消息
int MPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, 
               int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
//从进程组中收集消息到指定位置
int MPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, 
                int recvcounts, int *displs, MPI_Datatype recvtype, int root, 
                MPI_Comm comm)
//得到以给定数据类型为单位的数据的个数
int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count)
//返回给定数据类型中基本元素的个数
int MPI_Get_elements(MPI_Status *status, MPI_Datatype datatype, int *elements)
//得到处理器名称
int MPI_Get_processor_name(char *name, int *resultlen)
//返回MPI的版本号
int MPI_Get_version(int *version, int *subversion)
//按照给定的拓扑创建新的通信域
int MPI_Graph_create(MPI_Comm comm_old, int nnodes, int *index, int *edges, 
                     int recorder, MPI_Comm *comm_graph)
//得到给定通信域的处理器拓扑结构
int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int *index, int *edges)
//将进程映射到给定的拓扑
int MPI_Graph_map(MPI_Comm comm, int nndoes, int *index, int *edges, int *newrank)
//给定拓扑,返回给定节点的相邻节点数
int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors)
//给定拓扑,返回给定节点的相邻节点
int MPI_Graph_neighbors(MPI_Comm comm, int rank, int *maxneighbors, int *neighbors)
//得到给定通信域的图拓扑
int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges)
//比较两个组
int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result)
//根据两个组的差异创建一个组
int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
//通过重新对一个已经存在的组进行排序,根据未列出的成员创建一个新组
int MPI_Group_excl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup)
//释放一个组
int MPI_Group_free(MPI_Group *group)
//通过重新对一个已经存在的组进行排序,根据列出的成员创建一个新组
int MPI_Group_incl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup)
//根据两个已经存在组的交集创建一个新组
int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
//根据已存在的组,去掉指定的部分,创建一个新组
int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_group *newgroup)
//根据已存在的组,按照指定的部分,创建一个新组
int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup)
//返回调用进程在给定组中的进程标识号
int MPI_Group_rank(MPI_Group group, int *rank)
//返回指定组的大小
int MPI_Group_size(MPI_Group group, int *size)
//将一个组中的进程标识号转换成另一个组的进程标识号
int MPI_Group_translate_ranks(MPI_Group group1, int n, int *ranks1, MPI_Group group2,
                              int *ranks2)
//将两个组合并为一个新组
int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)



//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//从指定进程的窗口取数据
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)
//返回内存位置的地址
int MPI_Get_address(void *location, MPI_Aint *address)
//通知MPI给定对象上的操作已经结束
int MPI_Grequest_complete(MPI_Request request)
//开始一个通用的非阻塞操作,并返回与该操作相联系的对象
int MPI_Grequest_start(MPI_Grequest_query_function *query_fn, 
                       MPI_Grequest_free_function *free_fn, 
                       MPI_Grequest_cancel_function *cancel_fn, void *extra_state,       
                       MPI_Request *request)
//把C进程组句柄转换为Fortran进程组句柄
MPI_Fint MPI_Group_c2f(MPI_Group group)
//把Fortran进程组句柄转换为C进程组句柄
MPI_Group MPI_Group_f2c(MPI_Fint group)

8、I

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//非阻塞缓冲区发送
int MPI_Ibsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, 
               MPI_Comm comm, MPI_Request *request)
//MPI执行环境初始化
int MPI_Init(int *argc, char ***argv)
//查询MPI_Init是否已经调用
int MPI_Initialized(int *flag)
//根据两个组内通信域创建一个组间通信域
int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm, 
                         int remote_leader, int tag, MPI_Comm *newintercomm)
//根据组间通信域创建一个组内通信域
int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintercomm)
//非阻塞消息到达与否的测试
int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status)
//非阻塞接收
int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag, 
              MPI_Comm comm, MPI_Request *request)
//非阻塞就绪发送
int MPI_Irsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, 
              MPI_Comm comm, MPI_Request *request)
//非阻塞发送
int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, 
              MPI_Comm comm, MPI_Request *request)
//非阻塞同步发送
int MPI_Issend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, 
              MPI_Comm comm, MPI_Request *request)



//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//把C信息句柄转换为Fortran信息句柄
MPI_Fint MPI_Info_c2f(MPI_Info info)
//创建一个新的INFO对象
int MPI_Info_create(MPI_Info *info)
//从INFO对象中删除<关键字,值>元组
int MPI_Info_delete(MPI_Info info, char *key)
//返回INFO对象的副本
int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo)
//把Fortran对象句柄转换为C INFO对象句柄
MPI_Info MPI_Info_f2c(MPI_Fint info)
//释放INFO对象
int MPI_Info_free(MPI_Info *info)
//返回与信息关键字对应的值
int MPI_Info_get(MPI_Info info, char *key, int valuelen, char *value, int *flag)
//返回INFO对象当前定义的关键字的数量
int MPI_Info_get_nkeys(MPI_Info info, int *nkeys)
//返回INFO对象定义的第n个关键字
int MPI_Info_get_nthkey(MPI_Info info, int n, char *key)
//返回与一个信息关键字对应的值的长度
int MPI_Info_get_valuelen(MPI_Info info, char *key, int *valuelen, int 
                         *flag)
//往INFO对象中加入<关键字,值>元组
int MPI_Info_set(MPI_Info info, char *key, char *value)
//初始化MPI和MPI线程环境
int MPI_Init_thread(int *argc, char*((*argv)[]), int required, int 
                    *provided)
//表明调用本函数的线程是否是主线程
int MPI_Is_thread_main(int *flag)

9、K

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//创建一个新的属性关键词,即将废除的特性,建议用MPI_Comm_create_keyval替代
int MPI_Keyval_create(MPI_Copy_function *copy_fn, MPI_Delete_function 
                      *delete_fn, int *keyval, void *extra_state)
//释放一个属性关键词
int MPI_Keyval_free(int *keyval)



//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
无

10、L

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
无



//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//返回与服务名对应的端口名
int MPI_Lookup_name(char *service_name, MPI_Info info, char *port_name)

11、O

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//创建一个用户定义的通信函数句柄
int MPI_Op_create(MPI_Uop function, int commute, MPI_Op *op)
//释放一个用户定义的通信函数句柄
int MPI_Op_free(MPI_Op *op)




//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//把C操作句柄转换为Fortran句柄
MPI_Fint MPI_Op_c2f(MPI_Op op)
//把Fortran句柄转换为C操作句柄
MPI_Op MPI_Op_f2c(MPI_Fint op)
//建立一个网络地址,以使服务器能够接收客户的连接请求
int MPI_Open_port(MPI_Info info, char *port_name)

12、P

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//将数据打包,放到一个连续的缓冲区中
int MPI_Pack(void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, 
            int outcount, int *position, MPI_Comm comm)
//返回需要打包的数据类型的大小
int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int 
                  *size)
//控制剖视
int MPI_Pcontrol(const int level)
//阻塞消息测试
int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status




//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//以指定的数据格式进行打包
int MPI_Pack_external(char *datarep, void *inbuf, int incount, MPI_Datatype 
              datatype, void *outbuf, MPI_Aint outsize, MPI_Aint *position)
//返回以指定的数据格式,数据打包需要的空间的大小
int MPI_Pack_external_size(char *datarep, int incount, MPI_Datatype 
                           datatype, MPI_Aint *size)
//将一个服务名和端口名建立联系,并将该服务名公之于众
int MPI_Publish_name(char *service_name, MPI_Info info, char *port_name)
//向指定进程的窗口写入数据
int MPI_Put(void *origin_addr, int orgin_count, MPI_Datatype 
            origin_datatype, int target_rank, MPI_Aint target_disp, int 
            target_count, MPI_Datatype target_datatype, MPI_Win win)

13、Q

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
无




//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//返回支持线程的级别
int MPI_Query_thread(int *provided)

14、R

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//标准接收
int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int 
            tag, MPI_Comm comm, MPI_Status *status)

//创建接收句柄
int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, 
                  int tag, MPI_Comm comm, MPI_Request *request) 
//将所有进程的值归约到root进程,得到一个结果
int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype 
                datatype, MPI_Op op, int root, MPI_Comm comm)
//将结果归约后再发送出去
int MPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, 
                       MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
//释放通信申请对象
int MPI_Request_free(MPI_Request *request)
//就绪发送
int MPI_Rsend(void *buf, int count, MPI_Datatype datatype, int dest, int 
              tag, MPI_Comm comm)
//创建就绪发送句柄
int MPI_Rsend_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)




//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//加入新的文件数据表示到MPI
int MPI_Register_datarep(char *datarep, MPI_Datarep_conversion_function 
                        *read_conversion_fn,    
                    MPI_Datarep_conversion_function *write_conversion_fn, 
                    MPI_Datarep_extent_function *dtype_file_extent_fn, 
                    void *extra_state)
//把C请求句柄转换成Fortran请求句柄
MPI_Fint MPI_Request_c2f(MPI_Request request)
//把Fortran请求句柄转换成C请求句柄
MPI_Request MPI_Request_f2c(MPI_Fint request)
//测试非阻塞操作的完成情况,如完成不释放请求对象
int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)

13、S

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//在给定的进程集合上进行扫描操作
int MPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype 
             datatype, MPI_Op op, MPI_Comm comm)
//将数据从一个进程发送到组中其它进程
int MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, 
                void *recvbuf, int recvcount, MPI_Datatype recvtype, 
                int root, MPI_Comm comm)
//将缓冲区中指定部分的数据从一个进程发送到组中其它进程
int MPI_Scatterv(void *sendbuf, int *sendcounts, int *displs, 
                 MPI_Datatype sendtype, void *recvbuf, int recvcount, 
                 MPI_Datatype recvtype, int root, MPI_Comm comm)
//标准数据发送
int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, 
             int tag, MPI_Comm comm)
//创建一个标准发送的句柄
int MPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dest, 
                  int tag, MPI_Comm comm, MPI_Request *request)
//同时完成发送和接收操作
int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, 
                 int dest, int sendtag, void *recvbuf, int recvcount, 
                 MPI_Datatype recvtype, int source, int recvtag, 
                 MPI_Comm comm, MPI_Status *status)
//用同一个发送和接收缓冲区进行发送和接收操作
int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, 
                         int dest, int sendtag, int source, int recvtag,
                         MPI_Comm comm, MPI_Status *status)
//同步发送
int MPI_Ssend(void *buf, int count, MPI_Datatype datatype, int dest, 
              int tag, MPI_Comm comm)
//创建一个同步发送句柄
int MPI_Ssend_init(void *buf, int count, MPI_Datatype datatype, int dest, 
                   int tag, MPI_Comm comm, MPI_Request *request)
//启动给定对象上的重复通信请求
int MPI_Start(MPI_Request *request)
//启动指定的所有重复通信请求
int MPI_Startall(int count, MPI_Request *array_of_requests)




//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//把C状态对象转换为Fortran状态对象
int MPI_Status_c2f(MPI_Status *c_status, MPI_Fint *f_status)
//把Fortran状态对象转换成C状态对象
int MPI_Status_f2c(MPI_Fint *f_status, MPI_Status *c_status)
//设置MPI_Test_cancelled将要返回的值
int MPI_Status_set_cancelled(MPI_Status *status, int flag)
//设置MPI_Get_elements将要返回的值
int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, 
                            int count)

14、T

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//测试发送或接收是否完成
int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status)
//测试前面所有的通信是否完成
int MPI_Testall(int count, MPI_Request *array_of_requests, int *flag, 
                MPI_Status *array_of_statues)
//测试前面任何一个通信是否完成
int MPI_Testany(int count, MPI_Request *array_of_requests, int *index, 
                int *flag, MPI_Status *status)
//测试是否有一些通信已经完成
int MPI_Testsome(int count, MPI_Request *array_of_requests, int *outcount, 
                 int *array_of_indices, MPI_Status *array_of_statues)
//测试一个请求对象是否已经删除
int MPI_Test_cancelled(MPI_Status *status, int *flag)
//测试指定通信域的拓扑类型
int MPI_Topo_test(MPI_Comm comm, int *top_type)
//提交一个类型
int MPI_Type_commit(MPI_Datatype *datatype)
//创建一个连续的数据类型
int MPI_Type_contiguous(int count, MPI_Datatype oldtype, 
                        MPI_Datatype *newtype)
//返回一个数据类型的范围,即将废弃的特性,建议使用MPI_Type_get_extent来替代
int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent)
//释放一个数据类型
int MPI_Type_free(MPI_Datatype *datatype)
//按照字节偏移,创建一个数据类型索引,即将废弃的特性,建议使用MPI_Type_create_hindexed来替代
int MPI_Type_hindexed(int count, int *array_of_blocklengths, 
                      MPI_Aint *array_of_displacements, MPI_Datatype 
                      oldtype, MPI_Datatype *newtype)
//根据以字节为单位的偏移量,创建一个向量数据类型,即将废弃的特性,建议使用MPI_Type_create_hvector来替代
int MPI_Type_hvector(int count, int blocklength, MPI_Aint stride, 
                    MPI_Datatype oldtype, MPI_Datatype *newtype)
//创建一个索引数据类型
int MPI_Type_indexed(int count, int *array_of_blocklengths, 
                     int *array_of_displacements, MPI_Datatype oldtype,
                     MPI_Datatype *newtype)
//返回指定数据类型的下边界,即将废弃的特性,建议使用MPI_Type_get_extent来替代
int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *newtype)
//以字节为单位,返回给定数据类型的大小
int MPI_Type_size(MPI_Datatype datatype, int *size)
//创建一个结构数据类型,即将废弃的特性,建议使用MPI_Type_create_struct来替代
int MPI_Type_struct(int count, int *array_of_blocklengths, 
                    MPI_Aint *array_of_displacements, MPI_Datatype 
                    *array_of_types, MPI_Datatype *newtype)
//返回指定数据类型的上边界,即将废弃的特性,建议使用MPI_Type_get_extent来替代
int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement)
//创建一个向量数据类型
int MPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype
                    oldtype, MPI_Datatype *newtype)




//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//将C数据类型句柄转换为Fortran数据类型句柄
MPI_Fint MPI_Type_c2f(MPI_Datatype datatype)
//创建一个分布式数组数据类型
int MPI_Type_create_darray(int size, int rank, int ndims, 
                          int array_of_gsizes[], int array_of_distribs[],
                          int array_of_dargs[], int array_of_psizes[],
                          int order, MPI_Datatype oldtype, MPI_Datatype    
                          *newtype)
//返回一个预定义的MPI数据类型,它与Fortran90复数变量的指定精度和十进制指数范围一致
int MPI_Type_create_f90_complex(int p, int r, MPI_Datatype *newtype)
//返回一个预定义的MPI数据类型,它与Fortran90整数变量的十进制数字的指定个数一致
int MPI_Type_create_f90_integer(int r, MPI_Datatype *newtype)
//返回一个预定义的MPI数据类型,它与Fortran90实数变量的指定精度和十进制指数范围一致
int MPI_Type_create_f90_real(int p, int r, MPI_Datatype *newtype)
//创建带字节偏移的索引数据类型
int MPI_Type_create_hindexed(int count, int array_of_blocklengths[], 
                             MPI_Aint array_of_displacements[], 
                             MPI_Datatype oldtype, MPI_Datatype *newtype)
//通过以字节为单位的间距,创建向量数据类型
int MPI_Type_create_hvector(int count, int blocklength, MPI_Aint stride, 
                            MPI_Datatype oldtype, MPI_Datatype *newtype)
//创建固定块长的索引数据类型
int MPI_Type_create_indexed_block(int count, int blocklength, 
                             int array_of_displacements[], 
                             MPI_Datatype oldtype, MPI_Datatype *newtype)
//创建一个能在数据类型上缓冲的新属性关键字
int MPI_Type_create_keyval(MPI_Type_copy_attr_function 
                       *type_copy_attr_fn, MPI_Type_delete_attr_function 
                       *type_delete_attr_fn, int *type_keyval,
                       void *extra_state)
//返回一个指定下限和范围的新数据类型
int MPI_Type_create_resized(MPI_Datatype oldtype, MPI_Aint lb, 
                            MPI_Aint extent, MPI_Datatype *newtype)
//创建结构数据类型
int MPI_Type_ceate_struct(int count, int array_of_blocklengths[], 
                          MPI_Aint array_of_displacements[], 
                          MPI_Datatype array_of_types[],
                          MPI_Datatype *newtype)
//创建字数组数据类型
int MPI_Type_create_subarray(int ndims, int array_of_sizes[], 
                            int array_of_subsizes[], 
                            int array_of_starts[], int order, 
                            MPI_Datatype oldtype, MPI_Datatype *newtype)
//删除数据类型上缓冲的属性关键字
int MPI_Type_delete_attr(MPI_Datatype type, int type_keyval)
//返回数据类型的副本
int MPI_Type_dup(MPI_Datatype_type, MPI_Datatype *newtype)
//把Fortran数据类型句柄转换为C数据类型句柄
MPI_datatype MPI_Type_f2c(MPI_Fint datatype)
//释放用MPI_Type_create_keyval创建的属性关键字
int MPI_Type_free_keyval(int *type_keyval)
//返回一个数据类型上缓冲的属性关键字对应的值
int MPI_Type_get_attr(MPI_Datatype type, int type_keyval, 
                      void *attribute_val, int *flag)
//返回用来创建派生数据类型的参数的值
int MPI_Type_get_contents(MPI_Datatype datatype, int max_integers, 
                          int max_address, int max_datatypes, 
                          int array_of_integers[], MPI_Aint 
                          array_of_addresses[], MPI_Datatype 
                          array_of_datatypes[])
//返回数据类型的类型和用来创建数据类型的参数的数量和类型
int MPI_Type_get_envelope(MPI_Datatype datatype, int *num_integers, 
                          int *num_address, int *num_datatypes, 
                          int *combiner)
//返回数据类型的下限和范围
int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, 
                        MPI_Aint *extent)
//返回与数据类型对应的名称
int MPI_Type_get_name(MPI_Datatype type, char *type_name, int *resultlen)
//返回数据类型的真实范围
int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb,
                             MPI_Aint *true_extent)
//返回与指定类型和大小的局部变量匹配的MPI数据类型
int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *type)
//设置在一个数据类型上缓冲的属性关键字的值
int MPI_Type_set_attr(MPI_Datatype type, int type_keyval, 
                      void *attribute_val)
//把名字和数据类型相关联
int MPI_Type_set_name(MPI_Datatype type, char *type_name)

14、U

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//从连续的缓冲区中将数据解包
int MPI_Unpack(void *inbuf, int insize, int *position, void *outbuf, 
               int outcount, MPI_Datatype datatype, MPI_Comm comm)




//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//以指定的格式将数据解包
int MPI_Unpack_external(char *datarep, void *inbuf, MPI_Aint *position,
                        void *outbuf, int outcount, MPI_Datatype datatype)
//取消一个以前发布的服务名
int MPI_Unpublish_name(char *service_name, MPI_Info info, char *port_name)

15、W

cpp 复制代码
//+++++++++++++++++++++++++MPI-1+++++++++++++++++++++++++++++//
//等待MPI的发送或接收语句结束
int MPI_Wait(MPI_Request *request, MPI_Status *status)
//等待所有给定的通信结束
int MPI_Waitall(int count, MPI_Request *array_of_requests, 
                MPI_Status *array_of_status)
//等待某些指定的发送或接收完成
int MPI_Waitany(int count, MPI_Request *array_of_requests, int *index,
                MPI_Status *status)
//等待一些给定的通信结束
int MPI_Waitsome(int incount, MPI_Request *array_of_requests, 
                 int *outcount, int *array_of_indices, 
                 MPI_Status *array_of_statuses)
//返回MPI_Wtime的分辨率
double MPI_Wtick(void)
//返回调用进程的流逝时间
double MPI_Wtime(void)




//+++++++++++++++++++++++++MPI-2+++++++++++++++++++++++++++++//
//把C窗口对象句柄转换为Fortran窗口对象句柄
MPI_Fint MPI_Win_c2f(MPI_Win win)
//激活与窗口对象对应的错误处理程序
int MPI_Win_call_errhandler(MPI_Win win, int error)
//完成从MPI_Win_start开始的RMA访问
int MPI_Win_complete(MPI_Win win)
//创建新窗口对象
int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, 
                   MPI_Info info, MPI_Comm comm, MPI_Win *win)
//创建对附加到窗口对象上的错误处理程序
int MPI_Win_create_errhandler(MPI_Win_errhandler_fn *function,
                             MPI_Errhandler *errhandler)
//创建能在窗口对象上缓冲的新属性关键字
int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
                       MPI_Win_delete_attr_function *win_delete_attr_fn,
                       int *win_keyval, void *extra_state)
//删除在窗口对象上缓冲的属性关键字
int MPI_Win_delete_attr(MPI_Win win, int win_keyval)
//把Fortran窗口对象句柄转换成C窗口对象句柄
MPI_Win MPI_Win_f2c(MPI_Fint win)
//同步窗口对象上的RMA操作
int MPI_Win_fence(int assert, MPI_Win win)
//释放窗口对象
int MPI_Win_free(MPI_Win *win)
//释放用MPI_Win_create_keyval创建的属性关键字
int MPI_Win_free_keyval(int *win_keyval)
//返回与窗口对象上缓冲的属性关键字对应的值
int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attrbute_val, 
                    int *flag)
//返回与窗口对象对应的出错处理程序
int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler)
//返回用来创建窗口对象的通信域组的副本
int MPI_Win_get_group(MPI_Win win, MPI_Group *group)
//返回与窗口对象对应的名称
int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen)
//对指定进程的窗口加锁
int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win)
//开始允许其它窗口的远程访问
int MPI_Win_post(MPI_Group group, int assert, MPI_Win win)
//设置窗口对象缓冲的属性关键字的值
int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val)
//把一个新的错误处理程序附加到窗口对象上
int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler)
//将名称与窗口对象关联
int MPI_Win_set_name(MPI_Win win, char *win_name)
//准备访问其它的窗口,实现与MPI_Win_post的握手
int MPI_Win_start(MPI_Group group, int assert, MPI_Win win)
//测试窗口对象之上的RMA操作是否完成
int MPI_Win_test(MPI_Win win, int *flag)
//对给定的窗口开锁
int MPI_Win_unlock(int rank, MPI_Win win)
//完成用MPI_Win_psot启动的RMA访问
int MPI_Win_wait(MPI_Win win)

至此,我们已完成并行程序设计基础的全部内容的介绍。感谢各位小伙伴的支持!

相关推荐
暴怒香菜统治世界4 分钟前
c语言--结构体
c语言·开发语言·数据结构·笔记·算法
-SGlow-5 分钟前
Linux相关概念和重要知识点(7)(git、冯诺依曼体系结构)
linux·运维·git
kuilaurence5 分钟前
C语言中的输入控制重要基础
c语言·开发语言
九离十5 分钟前
C语言初识(一)
c语言·开发语言
大佬,咋整啊7 分钟前
C语言0基础的前端考研日记:头插法/尾插法创建单链表
c语言·数据结构·考研
EterNity_TiMe_21 分钟前
【Linux基础IO】深入解析Linux基础IO缓冲区机制:提升文件操作效率的关键
linux·运维·服务器·开发语言·学习·性能优化·学习方法
张某布响丸辣23 分钟前
Kafka与RabbitMQ:深入理解两者之间的区别
分布式·kafka·rabbitmq
DdddJMs__13542 分钟前
C语言 | Leetcode C语言题解之第434题字符串中的单词数
c语言·leetcode·题解
0xwang1 小时前
Ubuntu24.04桌面版下的网络管理
linux·ubuntu
苏湘涵1 小时前
进程的那些事--实现shell
linux·运维·服务器