渭水文库 - 千万精品文档,你想要的都能搜到,下载即用。

曙光MPI用户手册.doc

不只有我爱你20 页 206.5 KB 访问 292.97下载文档
曙光MPI用户手册.doc曙光MPI用户手册.doc曙光MPI用户手册.doc曙光MPI用户手册.doc曙光MPI用户手册.doc曙光MPI用户手册.doc
当前文档共20页 2.97
下载后继续阅读

曙光MPI用户手册.doc

曙光 MPI 用户手册 (TC1700 & TC4000L) 曙光信息产业有限公司 2003-9 目 录 MPI 的使用 .................................................................................................................................................1 1.MPI 简介………....................................................................................................................................1 2.MPI 的程序设计....................................................................................................................................1 2.1MPI 的基本功能….............................................................................................................................1 2.2 MPI 的几个重要特征........................................................................................................................2 2.3 消息…………....................................................................................................................................2 2.4 point-to-point 通信 ............................................................................................................................3 2.5 集群通信……....................................................................................................................................5 3.MPI 应用程序的编译............................................................................................................................6 3.1 环境设置……....................................................................................................................................6 3.2 make…………. ..................................................................................................................................7 3.3 mpif77 和 mpicc ................................................................................................................................8 4.MPI 应用程序的运行............................................................................................................................8 5.常见问题分析 ........................................................................................................................................8 附录 MPI 函数简表 .......................................................................................................................................9 C 语言函数列表………………………………………………………………………………………9 FORTRAN 语 言 函 数 列 表…………………………………………………………………………...12 曙光 MPI 用户手册 MPI 的使用 1.MPI 简介 MPI(Message Passing Interface)是消息传递接口的标准,当前通用的是 MPI1.2 规范。不 久前制定的 MPI2.0 规范除支持消息传递外,还支持 MPI 的 I/O 规范和进程管理规范。MPI 正 成为并行程序设计事实上的工业标准。 MPICH 含三层结构,最上层是 MPI 的 API,基本是点到点通信和点到点通信基础上构造的 集群通信(Collective Communication) ;中间层是 ADI 层(Abstract Device Interface),其中 device 可以简单地理解为某一种底层通信库,ADI 就是对各种不同的底层通信库的不同接口的统一标 准;最下层是具体的底层通信库,例如工作站机群上的 p4 通信库。 MPICH 在不同平台上的实现都是根据不同的 device(即平台或底层通信)实现不同的 ADI 接口,这种实现机制的好处有 :  将与 device 有关和无关的代码分开,减小实现难度;  利于 MPI 的不断升级;  提高 MPI 的性能。 2.MPI 的程序设计 2.1 MPI 的基本功能 MPI1.2 标准中没有对如何产生多个 MPI 进程作标准性规定,而把这一工作交给了具体的 实现。但是它有如下众所周知的假设:静态加载,即所有进程在加载完以后就全部确定,直至 整个程序结束才终止,在程序正常运行期间没有进程的创建和结束。 一个 MPI 程序的所有进程形成一个缺省的组,这个组被 MPI 预先规定的 Communicator MPI_COMM_WORLD 所确定。 MPI 环 境 的 初 始 化 和 结 束 流 程 如 下 : 在 调 用 MPI 例 程 之 前 , 各 个 进 程 都 应 该 执 行 MPI_INIT,接着调用 MPI_COMM_SIZE 获取缺省组(group)的大小,调用 MPI_COMM_RANK 获取调用进程在缺省组中的逻辑编号(从 0 开始) 。然后,进程可以根据需要,向其它进程发送 消息或接收其它进程的消息,经常调用的函数是 MPI_SEND 和 MPI_RECV。最后,当不需要调 用任何 MPI 例程后,调用 MPI_FINALIZE 消除 MPI 环境,进程此时可以结束,也可以继续执 行与 MPI 无关的语句。 上面提到的六个函数:MPI_INIT,MPI_COMM_SIZE,MPI_COMM_RANK,MPI_SEND, MPI_RECV,MPI_FINALIZE 实际上构成了编写一个完整的 MPI 程序所需例程的最小子集。 曙光信息产业有限公司 1 曙光 MPI 用户手册 2.2 MPI 的几个重要元素 下面分别介绍 MPI 的几个重要元素:Communicator(通信子) 、Group(进程组)、Context_id (上下文标识)、Data Types(数据类型)。 MPI 提供 Communicator 来指定通信操作的上下文,提供了通信操作的执行空间。在某个通 信空间(或上下文)中发送的消息必须在相同的空间中接收,不同空间中的消息互不干扰。 定 义 一 个 Communicator , 也 就 指 定 了 一 组 共 享 该 空 间 的 进 程 , 这 些 进 程 组 成 了 该 Communicator 的 Group。 Communicator 通过其特征属性 Context_id 来区分,同一个进程不同的 Communicator 有不 同的 Context_id。因此 Context_id 是另一个区分消息的标志。 MPI 引入消息的 Data Type 属性的目的有两个:一是支持异构系统计算;二是允许消息来 自不连续的或类型不一致的存储区,例如,可以传送数组的一列,或传送一个结构值,而该结 构的每个元素的类型不同。Data Types 定义了消息中不连续的数据项及其可能不同的数据类型。 Data Type 由应用程序在执行时通过基本的数据类型创建。 2.3 消息 一个消息(见图 1.1)相当于一封信,消息内容相当于信本身,消息的接收者相当于信封上 的内容。因此通常将前者称为消息的 buffer, 后者称为消息的 envelop。 Subroutine Name Message Address Message Count Message Data Type Destination Process ID Message Tag Communicator MPI_Send (&N, 1, MPI_INIT, i, i, MPI_COMM_WORLD) buffer: message address, count, datatype; envelop: process id, message tag,communicator 图 1.1:MPI 的消息格式 在 MPI 以前的大多数通信系统中,消息 buffer 通常仅由 buffer 的地址和长度决定,那么在 MPI 的消息格式中为什么要引入 Data Type 呢?这有两个主要原因: (1) 支持异构计算:不同系统有不同的数据表示。解决这一问题的方法是预先定义一些基本 数据类型,MPI 实现过程中对这些类型进行转换。 (2) 派生的数据类型(Derived Data Types):允许消息来自于不连续的和类型不一致的存储 区域,下面将详细说明。 如何将一个数组的偶数项全部传送出去呢?一般通信系统中采取的方法是:i) 一项一项地 传送 ii) 先将每个要传送的元素依次拷贝到一个临时缓冲区中,然后传送该缓冲区。 在 MPI 可以这样传送: double A[100]; MPI-Pack-size (50, MPI-DOUBLE, comm, & Buffersize) TempBuff = malloc (Buffersize); j = sizeof (MPI-Double); 曙光信息产业有限公司 2 曙光 MPI 用户手册 Position = 0; for (i = 0, i < 50; i++) MPI-Pack (A+i*j, 1, MPI-DOUBLE, TempBuffer, Buffer Size, & Position, comm); MPI-Send (TempBuffer, Position, MPI-PACKED, destination, tag, comm); 其中,MPI-PACKED 是一个派生数据类型,在 MPI 中,所有打包的消息都使用该类型。显 然,这种方法麻烦且易错,MPI 提供了另一种更加简明的方法,使得用户可以灵活地指定多种 消息格式。 一个消息可以包含多个数据项,每一项对应一个地址和数据类型(除了数据值以外) 。例如, 考虑以下 4 个消息传递的数据,假设 double 为 8 字节,char 为 1 字节,int 为 4 字节。 (1) double A[100],所有 A 的元素。该消息有 100 个数据项,每项为 double 类型,第 i 项 地址为 A+8(i-1)。 (2) 数组 A 的第 3 和第 4 个元素。包含两个数据项,类型为 double,第一项的地址为 A+16,第二项地址为 A+24。 (3) 数组的偶数项元素。包含 50 个数据项,类型为 double,第 i 项的地址为 A+16(i-1)。 (4) 数组 A 的第三个元素,接着是一个字符 C 和一个整型 K。这个消息包含 3 个不同类型 的数据项,见结构 S,则三个数据项的地址分别为 S+16,S+801;S+806。 struct { double A[100]; char c; int k; } S; 消息(1)(2)有如下两个特征:数据项连续存储,每个数据项的类型相同。这样的消息可以很 方便地由 (address, count, datatype) 指定。消息(3)中各个数据项的存储不连续,消息(4)中存储不 连续而且类型也不相同。显然 (address, count, datatype) 不能轻易地处理这些消息。 MPI 引入了派生数据类型,定义了消息中不连续的数据项及其可能不同的数据类型。它由 应用程序在执行时通过基本的数据类型创建。MPI 提供了强大的多样化的例程来构造复杂的派 生数据类型。例如: double A[100]; MPI_Data_type EvenElements; …… MPI_Type_vector (50, 1, 2, MPI_DOUBLE, & EvenElements); MPI_Type_commit ( & EvenElements); MPI_Send ( A, 1, EvenElements, destination, …); 如何指定消息的接收者呢?一个消息的 envelop 由三项指定:destination, tag, communicator。 Destination 是一个整数,指明目的进程在某个 group 中的 rank, 一般来说该 group 与发送者的 group 相同;tag 指定消息的类型,限制不同消息的接收。 2.4 point-to-point 通信 Point-to-Point 是 MPI 中最基本的通信方式,从动作的执行来看可分为阻塞(blocking)和非阻 塞(non-blocking)两种;从通信模式上又可分为标准(standard)、同步(synchronous)、缓冲 (buffered)和就绪(ready)四种。 曙光信息产业有限公司 3 曙光 MPI 用户手册 Model Blocking Non-Blocking Standard Send MPI_Send MPI_Isend Synchronous Send MPI_Ssend MPI_Issend Buffered Send MPI_Bsend MPI_Ibsend Ready Send MPI_Rsend MPI_Irsend Receive MPI_Recv MPI_Irecv Completion Check MPI_Wait MPI_Test 通信模式主要针对发送和接收所需的缓冲区管理和同步而提出的,各种模式的语义差别体 现在: 同步模式:发送请求可以不依赖于收方的匹配的接收请求而任意发出,但仅当收方已发出 接收该消息的请求后才成功结束。同步发送结束不仅意味着发送缓冲区可以重用,而且还表明 收方已发出接收该消息的请求。同步模式的一个本质特征是收方接收该消息的缓冲区已准备好, 不需要附加的系统缓冲区。收方的系统缓冲区仍可能需要,但阻塞方式不需要。在 MPI 中还存 在非阻塞的同步发送,它的返回并不意味着消息已发送出去,仅表明收方的用户缓冲区已准备 好。 缓冲模式:缓冲模式的发送的前提是用户显示地指定用以缓冲消息的缓冲区,这通过调用 MPI_Buffer_attach(buffer,size)来获得,通过 MPI_Buffer_detach(*buffer,*size)释放。发送的结束 仅表明消息已进入系统的缓冲区中,用户的发送缓冲区可重用,对收方的信息一无所知。 标准模式:其具体含义依赖于实现,可以是同步模式,直到有匹配的接收后才能结束;也 可以是缓冲模式,缓冲区由 MPI 系统提供,对用户透明,发送结束不依赖于匹配的接收。一般 地,出于性能考虑和可用的缓冲区量,标准发送的结束通常意味着消息已从发送方发出,而不 是滞留在发方的系统缓冲区中。标准模式是最常用的发送方式。 就绪模式:就绪模式中发送请求仅当有匹配的接收后才能发出,否则出错返回,其结果不 确定。它并不象同步模式中发送请求可以不依赖于收方的匹配的接收请求而任意发出,而在结 束过程中再等待匹配的接收。 阻塞和非阻塞的发送语义差别主要体现在用户发送缓冲区的重用上。对于非阻塞的发送, 只有调用了有关结束该发送的语句后才能重用发送缓冲区,否则将导致错误。接收方的差别与 此类似,接收缓冲区的内容仅当确认该接收请求已完成后才能使用。所以对于非阻塞操作,一 定要先调用等待(MPI_Wait)或测试(MPI_Test)函数来判断该请求的结束,然后再向缓冲区中写入 新内容(发送)或读取新内容(接收)。 接收语句形如以下方式: MPI_Recv(address,count,datatype,source,tag,communicator,status),其中第一个参数指出接收 缓冲区;第二个参数指出能接收的最大数据项数目;第三个参数定义了数据项对应的数据类型; 第四、五和六个参数确定了源节点、消息类型和通信的空间,其中第四和五个参数可用 MPI_ANY_SOURCE 和 MPI_ANY_TAG 来任意匹配;第七个参数是一个指向 MPI_Status 结构 曙光信息产业有限公司 4 曙光 MPI 用户手册 的指针,已接收到的消息的源节点编号和消息类型可从 status.MPI_SOURCE 和 status.MPI_TAG 域 中 获 取 , 实 际 接 收 的 消 息 长 度 在 status 中 尽 管 有 记 录 , 但 已 进 行 了 编 码 , 需 要 调 用 MPI_Get_count(&status,MPI_INT,&C)进行解码,返回值 C 并不是字节数,而是某个数据类型的 项数。 如果一个接收者可以接收来自不同进程的不同大小和类型的消息,状态信息的使用非常灵 活和有用。例如对于 client-sever 的应用程序,server 可以接收所有 client 的不同的请求,而 server 将根据实际接收消息的来源和类型作相应的服务。server 的程序大致结构如下所示: while (true) { MPI_Recv(received_request,100,MPI_BYTE,MPI_ANY_SOURCE,MPI_ANY_TAG,comm,&status); switch(status.MPI_TAG) { ……; case tag_i: perform service i; ……; } } 2.5 集群通信 集群通信(Collective Communication)的一个显著特征是指定的 Communicator 中所有的进 程都参与通信操作。一个隐含的意思是每个进程都需要调用该操作函数。MPI 提供了丰富的集 群通信操作例程(见下表所示)。 类型 函数 数据移动 MPI_Bcast 一到多,消息相同 MPI_Gather 多到一,消息由各个进程决定 MPI_Gatherv MPI_Gather 的一般形式 MPI_Allgather MPI_Gather 的一般形式 MPI_Allgatherv MPI_Allgather 的一般形式 MPI_Scatter 一到多,消息由根节点决定 MPI_Scatterv MPI_Scatter 一般形式 MPI_Alltoall 多到多,消息由每个进程确定 MPI_Alltoallv MPI_Alltoall 的一般形式 MPI_Reduce 多到一的聚集操作,结果在根 MPI_Allreduce 上者的一般形式,结果在所有进程 MPI_Reduce_scatter 结果 scatter 到各个进程 MPI_Scan 前缀操作 MPI_Barrier 同步操作 数据聚集 同步 功能 Broadcast: MPI_Bcast(buff,count,datatype,root,comm) 三元组(buff,count,datatype)确定了消息,对根进程来说,既是发送缓冲区也是接收缓冲区; 而对其他进程仅为接收缓冲区。 曙光信息产业有限公司 5 曙光 MPI 用户手册 Gather: MPI_Gather(sendbuf,sendcount,senfdatatype,recvbuf,recvcount,recvdatatype,root,comm) 根进程接收其他进程由三元组(sendbuf,sendcount,senfdatatype)指定的消息,接着按每个进程 在 comm 组中的编号依此连接在一起,存放在根进程的接收缓冲区中,缓冲区由三元组 (recvbuf,recvcount,recvdatatype)指定,其他进程的接收缓冲区忽略。 Scatter: MPI_Scatter(sendbuf,sendcount,senfdatatype,recvbuf,recvcount,recvdatatype,root,comm) 根进程中,三元组(sendbuf,sendcount,senfdatatype)存储了 n 个消息,第 k 个消息将传给第 k 个进程。非根节点的发送缓冲区被忽略。 Barrier: MPI_Barrier(comm) comm 指定了其内的所有进程的同步。 Reduce: MPI_Reduce(sendbuf,recvbuf,count,datatype,op,comm) 全局操作符 Op 列表如下: MPI_Max 取最大值 MPI_Lor 逻辑或 MPI_Min 取最小值 MPI_Bor 按位或 MPI_Sum 求和 MPI_Lxor 逻辑异或 MPI_Prod 乘积 MPI_Bxor 按位异或 MPI_Land 逻辑与 MPI_Maxloc 求最大值和位置 MPI_Band 按位与 MPI_Minloc 求最小值和位置 3. MPI 应用程序的编译 曙光 4000L MPI 系统的目录结构如下: /usr/local/mpich-1.2.5/ch_p4 Ethernet 网 /usr/local/mpich-1.2.1..7b/ch_gm Myrinet 网 bin 系统的相关命令 include C 和 Fortran 的头文件 lib 库文件 man 联机手册 3.1 环境设置 在曙光 4000L 系统中,MPI 应设置相应的环境变量。在/etc/.profile 文件中加入以下内容: export MPI_ROOT=/usr/local/mpich-1.2.5/ch_p4 (以太网) export MPI_ROOT=/usr/local/mpich-1.2.1..7b/ch_gm (Myrinet 网) PATH=$MPI_ROOT/bin:$PATH 曙光信息产业有限公司 6 曙光 MPI 用户手册 3.2 make MPI 应用程序常需要链接特殊的库和编译选项, 这时用户就要使用“makefile”。按需要修 改 makefile 文件,主要是编译器路径的设置。 C 和 Fortran 程序的 Makefile 文件模板如下: # # Makefile for compiling MPI programs . RUNTIME_SYSTEM = "linux" ## edit the following definition for your system LINUX_MPIHOME = /usr/local/mpich-1.2.5/ch_p4 MFC = $(LINUX_MPIHOME)/bin/mpif90 MCC = $(LINUX_MPIHOME)/bin/mpicc MLD = $(LINUX_MPIHOME)/bin/mpif90 FCFLAGS = -O2 -Mcray=pointer -tp p6 -pc 32 -Mnoframe -byteswapio LDOPTIONS = -O2 -Mcray=pointer -tp p6 -pc 32 -Mnoframe -byteswapio LOCAL_LIBRARIES = -L$(LINUX_MPIHOME)/lib -lfmpich -lmpich MAKE = make -i -r AWK = awk SED = sed CAT = cat CUT = cut EXPAND = expand M4 = m4 CPP = /lib/cpp -C -P -traditional CPPFLAGS = -DMPI -Dlinux CFLAGS = -DMPI -I$(LINUX_MPIHOME)/include ARCH_OBJS = milliclock.o IWORDSIZE = 4 RWORDSIZE = 4 LWORDSIZE = 4 #----------------------------------------------------------------------------# Don't touch anything below this line #----------------------------------------------------------------------------.F.i: $(RM) $@ $(CPP) $(CPPFLAGS) $*.F > $@ mv $*.i $(DEVTOP)/pick/$*.f cp $*.F $(DEVTOP)/pick .c.o: $(RM) $@ && \ $(CC) -c $(CFLAGS) $*.c .F.o: $(RM) $@ $(FC) -c $(FCFLAGS) $*.F .F.f: $(RM) $@ $(CPP) $(CPPFLAGS) $*.F > $@ .f.o: $(RM) $@ 曙光信息产业有限公司 7 曙光 MPI 用户手册 $(FC) -c $(FCFLAGS) $*.f 3.3 mpif77 和 mpicc 如果用户设置了正确的 MPI 系统命令的执行路径,就可以直接地使用命令行方式 mpicc 或 mpif77 来编译 C 或 Fortran 程序,编译方式与 cc 和 f77 完全一致。 MPI 提供了两个命令 (mpif77 和 mpicc) 来简化编译和链接 MPI Fortran 或 C 语言程序的过 程,用户可使用此命令编译 MPI 应用程序,特别是当程序只包含少量文件时。mpif77 (mpicc) 与一般 Fortran (或 C) 编译命令使用方式类似, 可加入同样的选项(详细选项可见有关编译器选 项的说明) ,如: mpif77 mpicc mpif77 mpicc -c foo.f -c foo.c -o foo foo.f -o foo foo.c 有时链接时需一些特殊库, 应在链接时注明。使用 mpicc 和 mpif77 省略了有关 MPI 的路径设置。 4. MPI 应用程序的运行 在曙光 4000L 系统上,所有 MPI 应用程序均应在计算节点运行,因此在应用程序编译好 后,使用 mpirun 命令运行 MPI 应用程序。 mpirun -np mpirun –p4pg (ch_p4 时,pgfile 为用户自行指定的机群列表文件) mpich.ch_gm –np (myrinet 的机群列表文件默认是$HOME/.gmpi/conf) mpich.ch_gm --gm-f –np (有--gm-f 选项时 myrinet 的机群列表文件由用户在中自行指定) -np 是用户期望运行的进程数。进程数与实际的物理节点数没有必然联系,因为允许 一个节点运行同一个应用的多个进程。如果未指定,则默认为 1。 在运行选项之后,是用户的程序名。该可执行文件必须与启动节点上的路径一致。运行选 项与用户程序名有先后的顺序,先运行选项,后用户可执行程序名。 5. 常见问题分析 1、Q:“Permission Denied.” A:所有 slave 进程都是通过 remote shell 启动。如果远程机器不允许远程执行命令,将会遇 到上述错误信息。出现上述信息与 MPI 通信库无关。检查.rhosts 配置,和询问系统管 理员。 2、Q:“pgm_path_name: Command not found” A:可执行文件找不到。 3、Q:“p0_2005: p4_error:fork_p4:fork failed: 曙光信息产业有限公司 8 曙光 MPI 用户手册 P4_error:latest msg from perror:Error 0” A:这可能是因为用户的程序太大。在 ch_p4 上,一个 MPI 进程启动后立即被复制一份,负 责处理通信任务。在一定时间内,被复制的进程占有与其父进程相同大小的存贮空间。 因此,当一个应用程序需占有最大可用资源的一半时,经常就会遇到此错误。这个错误 是由底层 p4 库决定的。 4、Q:Program fails when it tries to write to a file. A:这是因为在 MPI_Init 之前打开的文件仅能被 0 号进程控制,其他进程对其操作将导致错 误。解决的方法是将有关文件操作移至 MPI_Init 和 MPI_Finalize 函数调用之间。 附录 MPI 函数简表 C 语言函数列表  C Binding for Point-to-Point Communication ·int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) ·int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) ·int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count) ·int MPI_Bsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) ·int MPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) ·int MPI_Rsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) ·int MPI_Buffer_attach( void* buffer, int size) ·int MPI_Buffer_detach( void* buffer, int* size) ·int MPI_Isend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) ·int MPI_Ibsend(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) ·int MPI_Irsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) ·int MPI_Irecv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request) ·int MPI_Wait(MPI_Request *request, MPI_Status *status) ·int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status) ·int MPI_Request_free(MPI_Request *request) ·int MPI_Waitany(int count, MPI_Request *array_of_requests, int *index, MPI_Status *status) ·int MPI_Testany(int count, MPI_Request *array_of_requests, int *index, int *flag, MPI_Status *status) ·int MPI_Waitall(int count, MPI_Request *array_of_requests, MPI_Status *array_of_statuses) ·int MPI_Testall(int count, MPI_Request *array_of_requests, int *flag, MPI_Status *array_of_statuses) · int MPI_Waitsome(int incount, MPI_Request *array_of_requests, int *outcount, int *array_of_indices, MPI_Status *array_of_statuses) ˙int MPI_Testsome(int incount, MPI_Request *array_of_requests, int *outcount, int *array_of_indices, MPI_Status *array_of_statuses) ·int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status) ·int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status) ·int MPI_Cancel(MPI_Request *request) ·int MPI_Test_cancelled(MPI_Status *status, int *flag) · int MPI_Send_init(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, 曙光信息产业有限公司 9 曙光 MPI 用户手册 MPI_Request *request) · int MPI_Bsend_init(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) · int MPI_Ssend_init(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) · int MPI_Rsend_init(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) ·int MPI_Recv_init(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request) ·int MPI_Start(MPI_Request *request) ·int MPI_Startall(int count, MPI_Request *array_of_requests) ·int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, MPI_Datatype 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_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype) ·int MPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype oldtype, MPI_Datatype *newtype) ·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) ·int MPI_Type_hindexed(int count, int *array_of_blocklengths, MPI_Aint *array_of_displacements, MPI_Datatype oldtype, MPI_Datatype *newtype) ·int MPI_Type_struct(int count, int *array_of_blocklengths, MPI_Aint *array_of_displacements, MPI_Datatype *array_of_types, MPI_Datatype *newtype) ·int MPI_Address(void* location, MPI_Aint *address) ·int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent) ·int MPI_Type_size(MPI_Datatype datatype, int *size) ·int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint* displacement) ·int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint* displacement) 、 ·int MPI_Type_commit(MPI_Datatype *datatype) ·int MPI_Type_free(MPI_Datatype *datatype) ·int MPI_Get_elements(MPI_Status *status, MPI_Datatype datatype, int *count) ·int MPI_Pack(void* inbuf, int incount, MPI_Datatype datatype, void *outbuf, int outsize, int *position, MPI_Comm comm) · int MPI_Unpack(void* inbuf, int insize, int *position, void *outbuf, int outcount, MPI_Datatype datatype, MPI_Comm comm) ·int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size)  C Binding for Collective Communication: ·int MPI_Barrier(MPI_Comm comm ) ·int MPI_Bcast(void* buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm ) · 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_Scatter(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int 曙光信息产业有限公司 10 曙光 MPI 用户手册 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_Allgather(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) ·int MPI_Allgatherv(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, MPI_Comm comm) · int MPI_Alltoall(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) ·int MPI_Alltoallv(void* sendbuf, int *sendcounts, int *sdispls, MPI_Datatype sendtype, void* recvbuf, int *recvcounts, int *rdispls, MPI_Datatype recvtype, MPI_Comm comm) ·int MPI_Reduce(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) ·int MPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op) ·int MPI_Op_free( MPI_Op *op) ·int MPI_Allreduce(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) ·int MPI_Reduce_scatter(void* sendbuf, void* recvbuf, int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) ·int MPI_Scan(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm )  C binding for Groups,Contexts,and Communicator: ·int MPI_Group_size(MPI_Group group, int *size) ·int MPI_Group_rank(MPI_Group group, int *rank) · int MPI_Group_translate_ranks (MPI_Group group1, int n, int *ranks1, MPI_Group group2, int *ranks2) ·int MPI_Group_compare(MPI_Group group1,MPI_Group group2, int *result) ·int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) ·int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) ·int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) ·int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) ·int MPI_Group_incl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup) ·int MPI_Group_excl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup) ·int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) ·int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) ·int MPI_Group_free(MPI_Group *group) ·int MPI_Comm_size(MPI_Comm comm, int *size) ·int MPI_Comm_rank(MPI_Comm comm, int *rank) ·int MPI_Comm_compare(MPI_Comm comm1,MPI_Comm comm2, int *result) ·int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) ·int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) ·int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm) ·int MPI_Comm_free(MPI_Comm *comm) ·int MPI_Comm_test_inter(MPI_Comm comm, int *flag) ·int MPI_Comm_remote_size(MPI_Comm comm, int *size) ·int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group) ·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 *newintracomm) ·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) ·int MPI_Attr_put(MPI_Comm comm, int keyval, void* attribute_val) ·int MPI_Attr_get(MPI_Comm comm, int keyval, void* attribute_val, int *flag) 曙光信息产业有限公司 11 曙光 MPI 用户手册 ·int MPI_Attr_delete(MPI_Comm comm, int keyval)  C Binding for Process Topologies: ·int MPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims, int *periods, int reorder, MPI_Comm *comm_cart) ·int MPI_Dims_create(int nnodes, int ndims, int *dims) ·int MPI_Graph_create(MPI_Comm comm_old, int nnodes, int *index, int *edges, int reorder, MPI_Comm *comm_graph) ·int MPI_Topo_test(MPI_Comm comm, int *status) ·int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges) ·int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int *index, int *edges) ·int MPI_Cartdim_get(MPI_Comm comm, int *ndims) ·int MPI_Cart_get(MPI_Comm comm, int maxdims, int *dims, int *periods, int *coords) ·int MPI_Cart_rank(MPI_Comm comm, int *coords, int *rank) ·int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int *coords) ·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_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_Cart_map(MPI_Comm comm, int ndims, int *dims, int *periods, int *newrank) ·int MPI_Graph_map(MPI_Comm comm, int nnodes, int *index, int *edges, int *newrank)  C Binding for Envoronmental Inquery: ·int MPI_Get_processor_name(char *name, int *resultlen) ·int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler) ·int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler) ·int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler) ·int MPI_Errhandler_free(MPI_Errhandler *errhandler) ·int MPI_Error_string(int errorcode, char *string, int *resultlen) ·int MPI_Error_class(int errorcode, int *errorclass) ·int double MPI_Wtime(void) ·int double MPI_Wtick(void) ·int MPI_Init(int *argc, char ***argv) ·int MPI_Finalize(void) ·int MPI_Initialized(int *flag) ·int MPI_Abort(MPI_Comm comm, int errorcode)  C Binding for Profiling: ·int MPI_Pcontrol(const int level, ...) Fortran 语言函数列表  Fortran Binding for Point-to Point Communication: ·MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR ·MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR) BUF(*) INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR ·MPI_GET_COUNT(STATUS, DATATYPE, COUNT, IERROR) INTEGER STATUS(MPI_STATUS_SIZE), DATATYPE, COUNT, IERROR ·MPI_BSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR ·MPI_SSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR) 曙光信息产业有限公司 12 曙光 MPI 用户手册 BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR ·MPI_RSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR ·MPI_BUFFER_ATTACH( BUFFER, SIZE, IERROR) BUFFER(*) INTEGER SIZE, IERROR ·MPI_BUFFER_DETACH( BUFFER, SIZE, IERROR) BUFFER(*) INTEGER SIZE, IERROR ·MPI_ISEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR ·MPI_IBSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR ·MPI_ISSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR ·MPI_IRSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR ·MPI_IRECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, REQUEST, IERROR) BUF(*) INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, REQUEST, IERROR ·MPI_WAIT(REQUEST, STATUS, IERROR) INTEGER REQUEST, STATUS(MPI_STATUS_SIZE), IERROR ·MPI_TEST(REQUEST, FLAG, STATUS, IERROR) LOGICAL FLAG INTEGER REQUEST, STATUS(MPI_STATUS_SIZE), IERROR ·MPI_REQUEST_FREE(REQUEST, IERROR) INTEGER REQUEST, IERROR ·MPI_WAITANY(COUNT, ARRAY_OF_REQUESTS, INDEX, STATUS, IERROR) INTEGER COUNT, ARRAY_OF_REQUESTS(*), INDEX, STATUS(MPI_STATUS_SIZE), IERROR ·MPI_TESTANY(COUNT, ARRAY_OF_REQUESTS, INDEX, FLAG, STATUS, IERROR) LOGICAL FLAG INTEGER COUNT, ARRAY_OF_REQUESTS(*), INDEX, STATUS(MPI_STATUS_SIZE), IERROR ·MPI_WAITALL(COUNT, ARRAY_OF_REQUESTS, ARRAY_OF_STATUSES, IERROR) INTEGER COUNT, ARRAY_OF_REQUESTS(*), ARRAY_OF_STATUSES(MPI_STATUS_SIZE,*), IERROR ·MPI_TESTALL(COUNT, ARRAY_OF_REQUESTS, FLAG, ARRAY_OF_STATUSES, IERROR) LOGICAL FLAG INTEGER COUNT, ARRAY_OF_REQUESTS(*), ARRAY_OF_STATUSES(MPI_STATUS_SIZE,*), IERROR · MPI_WAITSOME(INCOUNT, ARRAY_OF_REQUESTS, OUTCOUNT, ARRAY_OF_INDICES, ARRAY_OF_STATUSES, IERROR) INTEGER INCOUNT, ARRAY_OF_REQUESTS(*), OUTCOUNT, ARRAY_OF_INDICES(*), ARRAY_OF_STATUSES(MPI_STATUS_SIZE,*), IERROR · MPI_TESTSOME(INCOUNT, ARRAY_OF_REQUESTS, OUTCOUNT, ARRAY_OF_INDICES, ARRAY_OF_STATUSES, IERROR) INTEGER INCOUNT, ARRAY_OF_REQUESTS(*), OUTCOUNT, ARRAY_OF_INDICES(*), ARRAY_OF_STATUSES(MPI_STATUS_SIZE,*), IERROR ·MPI_IPROBE(SOURCE, TAG, COMM, FLAG, STATUS, IERROR) LOGICAL FLAG INTEGER SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR ·MPI_PROBE(SOURCE, TAG, COMM, STATUS, IERROR) INTEGER SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR ·MPI_CANCEL(REQUEST, IERROR) INTEGER REQUEST, IERROR ·MPI_TEST_CANCELLED(STATUS, FLAG, IERROR) 曙光信息产业有限公司 13 曙光 MPI 用户手册 LOGICAL FLAG INTEGER STATUS(MPI_STATUS_SIZE), IERROR ·MPI_SEND_INIT(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) BUF(*) INTEGER REQUEST, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR ·MPI_BSEND_INIT(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) BUF(*) INTEGER REQUEST, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR ·MPI_SSEND_INIT(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR ·MPI_RSEND_INIT(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR ·MPI_RECV_INIT(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, REQUEST, IERROR) BUF(*) INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, REQUEST, IERROR ·MPI_START(REQUEST, IERROR) INTEGER REQUEST, IERROR ·MPI_STARTALL(COUNT, ARRAY_OF_REQUESTS, IERROR) INTEGER COUNT, ARRAY_OF_REQUESTS(*), IERROR · MPI_SENDRECV(SENDBUF, SENDCOUNT, SENDTYPE, DEST, SENDTAG, RECVBUF, RECVCOUNT, RECVTYPE, SOURCE, RECVTAG, COMM, STATUS, IERROR) SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE, DEST, SENDTAG, RECVCOUNT, RECVTYPE, SOURCE, RECVTAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR · MPI_SENDRECV_REPLACE(BUF, COUNT, DATATYPE, DEST, SENDTAG, SOURCE, RECVTAG, COMM, STATUS, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, SENDTAG, SOURCE, RECVTAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR ·MPI_TYPE_CONTIGUOUS(COUNT, OLDTYPE, NEWTYPE, IERROR) INTEGER COUNT, OLDTYPE, NEWTYPE, IERROR ·MPI_TYPE_VECTOR(COUNT, BLOCKLENGTH, STRIDE, OLDTYPE, NEWTYPE, IERROR) INTEGER COUNT, BLOCKLENGTH, STRIDE, OLDTYPE, NEWTYPE, IERROR ·MPI_TYPE_HVECTOR(COUNT, BLOCKLENGTH, STRIDE, OLDTYPE, NEWTYPE, IERROR) INTEGER COUNT, BLOCKLENGTH, STRIDE, OLDTYPE, NEWTYPE, IERROR · MPI_TYPE_INDEXED(COUNT, ARRAY_OF_BLOCKLENGTHS, ARRAY_OF_DISPLACEMENTS, OLDTYPE, NEWTYPE, IERROR) INTEGER COUNT, ARRAY_OF_BLOCKLENGTHS(*), ARRAY_OF_DISPLACEMENTS(*), OLDTYPE, NEWTYPE, IERROR · MPI_TYPE_HINDEXED(COUNT,ARRAY_OF_BLOCKLENGTHS,ARRAY_OF_DISPLACEMENTS, OLDTYPE, NEWTYPE, IERROR) INTEGER COUNT, ARRAY_OF_BLOCKLENGTHS(*), ARRAY_OF_DISPLACEMENTS(*), OLDTYPE, NEWTYPE, IERROR ·MPI_TYPE_STRUCT(COUNT, ARRAY_OF_BLOCKLENGTHS, ARRAY_OF_DISPLACEMENTS, ARRAY_OF_TYPES, NEWTYPE, IERROR) INTEGER COUNT,ARRAY_OF_BLOCKLENGTHS(*),ARRAY_OF_DISPLACEMENTS(*), ARRAY_OF_TYPES(*), NEWTYPE, IERROR ·MPI_ADDRESS(LOCATION, ADDRESS, IERROR) LOCATION(*) INTEGER ADDRESS, IERROR ·MPI_TYPE_EXTENT(DATATYPE, EXTENT, IERROR) INTEGER DATATYPE, EXTENT, IERROR ·MPI_TYPE_SIZE(DATATYPE, SIZE, IERROR) INTEGER DATATYPE, SIZE, IERROR ·MPI_TYPE_LB( DATATYPE, DISPLACEMENT, IERROR) INTEGER DATATYPE, DISPLACEMENT, IERROR ·MPI_TYPE_UB( DATATYPE, DISPLACEMENT, IERROR) INTEGER DATATYPE, DISPLACEMENT, IERROR 曙光信息产业有限公司 14 曙光 MPI 用户手册 ·MPI_TYPE_COMMIT(DATATYPE, IERROR) INTEGER DATATYPE, IERROR ·MPI_TYPE_FREE(DATATYPE, IERROR) INTEGER DATATYPE, IERROR ·MPI_GET_ELEMENTS(STATUS, DATATYPE, COUNT, IERROR) INTEGER STATUS(MPI_STATUS_SIZE), DATATYPE, COUNT, IERROR ·MPI_PACK(INBUF, INCOUNT, DATATYPE, OUTBUF, OUTSIZE, POSITION, COMM, IERROR) INBUF(*), OUTBUF(*) INTEGER INCOUNT, DATATYPE, OUTSIZE, POSITION, COMM, IERROR ·MPI_UNPACK(INBUF, INSIZE, POSITION, OUTBUF, OUTCOUNT, DATATYPE, COMM, IERROR) INBUF(*), OUTBUF(*) INTEGER INSIZE, POSITION, OUTCOUNT, DATATYPE, COMM, IERROR ·MPI_PACK_SIZE(INCOUNT, DATATYPE, COMM, SIZE, IERROR) INTEGER INCOUNT, DATATYPE, COMM, SIZE, IERROR  Fortran Binding for Collective Communication: ·MPI_BARRIER(COMM, IERROR) INTEGER COMM, IERROR ·MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR) BUFFER(*) INTEGER COUNT, DATATYPE, ROOT, COMM, IERROR ·MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR ·MPI_GATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, ROOT, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), RECVTYPE, ROOT, COMM, IERROR ·MPI_SCATTER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR ·MPI_SCATTERV(SENDBUF, SENDCOUNTS, DISPLS, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNTS(*), DISPLS(*), SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR ·MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR · MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), RECVTYPE, COMM, IERROR ·MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR · MPI_ALLTOALLV(SENDBUF, SENDCOUNTS, SDISPLS, SENDTYPE, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER SENDCOUNTS(*), SDISPLS(*), SENDTYPE, RECVCOUNTS(*), RDISPLS(*), RECVTYPE, COMM, IERROR ·MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR ·MPI_OP_CREATE( FUNCTION, COMMUTE, OP, IERROR) EXTERNAL FUNCTION LOGICAL COMMUTE INTEGER OP, IERROR ·MPI_OP_FREE( OP, IERROR) 曙光信息产业有限公司 15 曙光 MPI 用户手册 INTEGER OP, IERROR ·MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER COUNT, DATATYPE, OP, COMM, IERROR ·MPI_REDUCE_SCATTER(SENDBUF, RECVBUF, RECVCOUNTS, DATATYPE, OP, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR ·MPI_SCAN(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR) SENDBUF(*), RECVBUF(*) INTEGER COUNT, DATATYPE, OP, COMM, IERROR  Fortran Binding for Group, Contexts,etc. ·MPI_GROUP_SIZE(GROUP, SIZE, IERROR) INTEGER GROUP, SIZE, IERROR ·MPI_GROUP_RANK(GROUP, RANK, IERROR) INTEGER GROUP, RANK, IERROR ·MPI_GROUP_TRANSLATE_RANKS(GROUP1, N, RANKS1, GROUP2, RANKS2, IERROR) INTEGER GROUP1, N, RANKS1(*), GROUP2, RANKS2(*), IERROR ·MPI_GROUP_COMPARE(GROUP1, GROUP2, RESULT, IERROR) INTEGER GROUP1, GROUP2, RESULT, IERROR ·MPI_COMM_GROUP(COMM, GROUP, IERROR) INTEGER COMM, GROUP, IERROR ·MPI_GROUP_UNION(GROUP1, GROUP2, NEWGROUP, IERROR) INTEGER GROUP1, GROUP2, NEWGROUP, IERROR ·MPI_GROUP_INTERSECTION(GROUP1, GROUP2, NEWGROUP, IERROR) INTEGER GROUP1, GROUP2, NEWGROUP, IERROR ·MPI_GROUP_DIFFERENCE(GROUP1, GROUP2, NEWGROUP, IERROR) INTEGER GROUP1, GROUP2, NEWGROUP, IERROR ·MPI_GROUP_INCL(GROUP, N, RANKS, NEWGROUP, IERROR) INTEGER GROUP, N, RANKS(*), NEWGROUP, IERROR ·MPI_GROUP_EXCL(GROUP, N, RANKS, NEWGROUP, IERROR) INTEGER GROUP, N, RANKS(*), NEWGROUP, IERROR ·MPI_GROUP_RANGE_INCL(GROUP, N, RANGES, NEWGROUP, IERROR) INTEGER GROUP, N, RANGES(3,*), NEWGROUP, IERROR ·MPI_GROUP_RANGE_EXCL(GROUP, N, RANGES, NEWGROUP, IERROR) INTEGER GROUP, N, RANGES(3,*), NEWGROUP, IERROR ·MPI_GROUP_FREE(GROUP, IERROR) INTEGER GROUP, IERROR ·MPI_COMM_SIZE(COMM, SIZE, IERROR) INTEGER COMM, SIZE, IERROR ·MPI_COMM_RANK(COMM, RANK, IERROR) INTEGER COMM, RANK, IERROR ·MPI_COMM_COMPARE(COMM1, COMM2, RESULT, IERROR) INTEGER COMM1, COMM2, RESULT, IERROR ·MPI_COMM_DUP(COMM, NEWCOMM, IERROR) INTEGER COMM, NEWCOMM, IERROR ·MPI_COMM_CREATE(COMM, GROUP, NEWCOMM, IERROR) INTEGER COMM, GROUP, NEWCOMM, IERROR ·MPI_COMM_SPLIT(COMM, COLOR, KEY, NEWCOMM, IERROR) INTEGER COMM, COLOR, KEY, NEWCOMM, IERROR ·MPI_COMM_FREE(COMM, IERROR) INTEGER COMM, IERROR ·MPI_COMM_TEST_INTER(COMM, FLAG, IERROR) INTEGER COMM, IERROR LOGICAL FLAG ·MPI_COMM_REMOTE_SIZE(COMM, SIZE, IERROR) INTEGER COMM, SIZE, IERROR ·MPI_COMM_REMOTE_GROUP(COMM, GROUP, IERROR) 曙光信息产业有限公司 16 曙光 MPI 用户手册 INTEGER COMM, GROUP, IERROR ·MPI_INTERCOMM_CREATE(LOCAL_COMM, LOCAL_LEADER, PEER_COMM, REMOTE_LEADER, TAG, NEWINTERCOMM, IERROR) INTEGER LOCAL_COMM, LOCAL_LEADER, PEER_COMM, REMOTE_LEADER, TAG, NEWINTERCOMM, IERROR ·MPI_INTERCOMM_MERGE(INTERCOMM, HIGH, INTRACOMM, IERROR) INTEGER INTERCOMM, INTRACOMM, IERROR LOGICAL HIGH ·MPI_KEYVAL_CREATE(COPY_FN, DELETE_FN, KEYVAL, EXTRA_STATE, IERROR) EXTERNAL COPY_FN, DELETE_FN INTEGER KEYVAL, EXTRA_STATE, IERROR ·MPI_KEYVAL_FREE(KEYVAL, IERROR) INTEGER KEYVAL, IERROR ·MPI_ATTR_PUT(COMM, KEYVAL, ATTRIBUTE_VAL, IERROR) INTEGER COMM, KEYVAL, ATTRIBUTE_VAL, IERROR ·MPI_ATTR_GET(COMM, KEYVAL, ATTRIBUTE_VAL, FLAG, IERROR) INTEGER COMM, KEYVAL, ATTRIBUTE_VAL, IERROR LOGICAL FLAG ·MPI_ATTR_DELETE(COMM, KEYVAL, IERROR) INTEGER COMM, KEYVAL, IERROR  Fortran Binding for Progress Topology: ·MPI_CART_CREATE(COMM_OLD, NDIMS, DIMS, PERIODS, REORDER, COMM_CART, IERROR) INTEGER COMM_OLD, NDIMS, DIMS(*), COMM_CART, IERROR LOGICAL PERIODS(*), REORDER ·MPI_DIMS_CREATE(NNODES, NDIMS, DIMS, IERROR) INTEGER NNODES, NDIMS, DIMS(*), IERROR ·MPI_GRAPH_CREATE(COMM_OLD, NNODES, INDEX, EDGES, REORDER, COMM_GRAPH, IERROR) INTEGER COMM_OLD, NNODES, INDEX(*), EDGES(*), COMM_GRAPH, IERROR LOGICAL REORDER ·MPI_TOPO_TEST(COMM, STATUS, IERROR) INTEGER COMM, STATUS, IERROR ·MPI_GRAPHDIMS_GET(COMM, NNODES, NEDGES, IERROR) INTEGER COMM, NNODES, NEDGES, IERROR ·MPI_GRAPH_GET(COMM, MAXINDEX, MAXEDGES, INDEX, EDGES, IERROR) INTEGER COMM, MAXINDEX, MAXEDGES, INDEX(*), EDGES(*), IERROR ·MPI_CARTDIM_GET(COMM, NDIMS, IERROR) INTEGER COMM, NDIMS, IERROR ·MPI_CART_GET(COMM, MAXDIMS, DIMS, PERIODS, COORDS, IERROR) INTEGER COMM, MAXDIMS, DIMS(*), COORDS(*), IERROR LOGICAL PERIODS(*) ·MPI_CART_RANK(COMM, COORDS, RANK, IERROR) INTEGER COMM, COORDS(*), RANK, IERROR ·MPI_CART_COORDS(COMM, RANK, MAXDIMS, COORDS, IERROR) INTEGER COMM, RANK, MAXDIMS, COORDS(*), IERROR ·MPI_GRAPH_NEIGHBORS_COUNT(COMM, RANK, NNEIGHBORS, IERROR) INTEGER COMM, RANK, NNEIGHBORS, IERROR ·MPI_GRAPH_NEIGHBORS(COMM, RANK, MAXNEIGHBORS, NEIGHBORS, IERROR) INTEGER COMM, RANK, MAXNEIGHBORS, NEIGHBORS(*), IERROR ·MPI_CART_SHIFT(COMM, DIRECTION, DISP, RANK_SOURCE, RANK_DEST, IERROR) INTEGER COMM, DIRECTION, DISP, RANK_SOURCE, RANK_DEST, IERROR ·MPI_CART_SUB(COMM, REMAIN_DIMS, NEWCOMM, IERROR) INTEGER COMM, NEWCOMM, IERROR LOGICAL REMAIN_DIMS(*) ·MPI_CART_MAP(COMM, NDIMS, DIMS, PERIODS, NEWRANK, IERROR) INTEGER COMM, NDIMS, DIMS(*), NEWRANK, IERROR LOGICAL PERIODS(*) ·MPI_GRAPH_MAP(COMM, NNODES, INDEX, EDGES, NEWRANK, IERROR) INTEGER COMM, NNODES, INDEX(*), EDGES(*), NEWRANK, IERROR 曙光信息产业有限公司 17 曙光 MPI 用户手册  Fortran Binding for Envoronmental Inquery: ·MPI_GET_PROCESSOR_NAME(NAME, RESULTLEN, IERROR) CHARACTER*(*) NAME INTEGER RESULTLEN, IERROR ·MPI_ERRHANDLER_CREATE(FUNCTION, HANDLER, IERROR) EXTERNAL FUNCTION INTEGER ERRHANDLER, IERROR ·MPI_ERRHANDLER_SET(COMM, ERRHANDLER, IERROR) INTEGER COMM, ERRHANDLER, IERROR ·MPI_ERRHANDLER_GET(COMM, ERRHANDLER, IERROR) INTEGER COMM, ERRHANDLER, IERROR ·MPI_ERRHANDLER_FREE(ERRHANDLER, IERROR) INTEGER ERRHANDLER, IERROR ·MPI_ERROR_STRING(ERRORCODE, STRING, RESULTLEN, IERROR) INTEGER ERRORCODE, RESULTLEN, IERROR CHARACTER*(*) STRING ·MPI_ERROR_CLASS(ERRORCODE, ERRORCLASS, IERROR) INTEGER ERRORCODE, ERRORCLASS, IERROR DOUBLE PRECISION MPI_WTIME() DOUBLE PRECISION MPI_WTICK() ·MPI_INIT(IERROR) INTEGER IERROR ·MPI_FINALIZE(IERROR) INTEGER IERROR ·MPI_INITIALIZED(FLAG, IERROR) LOGICAL FLAG INTEGER IERROR ·MPI_ABORT(COMM, ERRORCODE, IERROR) INTEGER COMM, ERRORCODE, IERROR  Fortran Binding for Profiling: ·MPI_PCONTROL(level) INTEGER LEVEL, ... 曙光信息产业有限公司 18

相关文章