MPI通信器 MPI通信器/通信子(Communicator) ●1 MPI程序中进程间的通信必须通过通信器进行; ●于 通信器分为域内通信器(同一进程组内的通信)和域间通信器(不同 进程组的进程间的通信) ●MPI程序启动时自动建立两个通信器: MPI_COMM_WORLD:包含程序中所有MPI进程 MPI_COMM_SELF:有单个进程独自构成,仅包含自己 http://math.ecnu.edu.cn/-jypan 11
http://math.ecnu.edu.cn/~jypan 11 MPI 通信器 MPI 程序中进程间的通信必须通过通信器进行; 通信器分为域内通信器(同一进程组内的通信)和域间通信器(不同 进程组的进程间的通信) MPI 程序启动时自动建立两个通信器: MPI_COMM_WORLD :包含程序中所有 MPI 进程 MPI_COMM_SELF :有单个进程独自构成,仅包含自己 MPI 通信器/通信子(Communicator)
MPI进程 MPI进程 ●PI程序中一个独立参与通信的个体; ●MPI进程组:由部分或全部进程构成的有序集合; ● 进程号是相对进程组或通信器而言的,同一进程在不同的进程组或通 信器中可以有不同的进程号 ● 进程号是在进程组或通信器被创建时赋予的 ● 进程号取值范围为0,.,np-1 ● 空进程:MPI_PROC_NULL 与空进程通信时不做任何操作 http://math.ecnu.edu.cn/-jypan 12
http://math.ecnu.edu.cn/~jypan 12 MPI 进程 MPI 程序中一个独立参与通信的个体; MPI 进程组:由部分或全部进程构成的有序集合; 进程号是相对进程组或通信器而言的,同一进程在不同的进程组或通 信器中可以有不同的进程号 进程号是在进程组或通信器被创建时赋予的 进程号取值范围为 0, …, np-1 空进程:MPI_PROC_NULL 与空进程通信时不做任何操作 MPI 进程
程序运行结果 口在单个结点(C22)上,开4个进程的运行结果 Hello,I am Proc.1 of 4 on c22 Hello,I am Proc.0 of 4 on c22 Hello,I am Proc.2 of 4 on c22 Hello,I am Proc.3 of 4 on c22 在四个结点上,开4个进程的运行结果 Hello,I am Proc.1 of 4 on c1 Hello,I am Proc.0 of 4 on c2 Hello,I am Proc.2 of 4 on c4 Hello,I am Proc.3 of 4 on c3 http://math.ecnu.edu.cn/-jypan 13
http://math.ecnu.edu.cn/~jypan 13 程序运行结果 在单个结点(c22)上,开 4 个进程的运行结果 Hello, I am Proc. 1 of 4 on c22 Hello, I am Proc. 0 of 4 on c22 Hello, I am Proc. 2 of 4 on c22 Hello, I am Proc. 3 of 4 on c22 在四个结点上,开 4 个进程的运行结果 Hello, I am Proc. 1 of 4 on c1 Hello, I am Proc. 0 of 4 on c2 Hello, I am Proc. 2 of 4 on c4 Hello, I am Proc. 3 of 4 on c3
程序运行过程 启动编译生成的可执行文件 进程日 进程1 进程2 进程3 MPI Init MPI Init MPI Comm rank MPI Comm_rank myid=0 myid=3 MPI Get processor_name MPI Get_processor_name proc_name=c1 proc_name=c4 namelen=2 namelen=2 printf printf hello,I am... hello,I am MPI Finalize MPI Finalize http://math.ecnu.edu.cn/~jypan 程序运行结束 14
http://math.ecnu.edu.cn/~jypan 14 程序运行过程 启动编译生成的可执行文件 进程 0 MPI_Init MPI_Comm_rank myid=0 MPI_Get_processor_name proc_name=c1 namelen=2 printf hello, I am . . . MPI_Finalize ︰ ︰ ︰ ︰ ︰ ︰ ︰ 程序运行结束 ︰ ︰ ︰ ︰ ︰ ︰ ︰ 进程 1 进程 2 进程 3 MPI_Init MPI_Comm_rank myid=3 MPI_Get_processor_name proc_name=c4 namelen=2 printf hello, I am . . . MPI_Finalize
MPI编程的一些惯例 MPI的所有常量、变量与函数/过程均以MPI开头 ■MPI的C语言接口为函数,FORTRAN接口为SUBROUTINE,且对应 接口的名称相同 ■ 在C程序中,所有常数的定义除下划线外一律由大写字母组成,在函数 和数据类型定义中,接MPI之后的第一个字母大写,其余全部为小写字 母,即MPI_Xxxx_xxx形式 ■除MPI WTIME和MPI WTICK外,所有C函数调用之后都将返回一个错 误信息码 http://math.ecnu.edu.cn/-jypan 15
http://math.ecnu.edu.cn/~jypan 15 MPI 编程的一些惯例 MPI 的所有常量、变量与函数/过程均以 MPI_ 开头 MPI 的 C 语言接口为函数,FORTRAN 接口为 SUBROUTINE,且对应 接口的名称相同 在 C 程序中,所有常数的定义除下划线外一律由大写字母组成,在函数 和数据类型定义中, 接 MPI_ 之后的第一个字母大写,其余全部为小写字 母,即 MPI_Xxxx_xxx 形式 除 MPI_WTIME 和 MPI_WTICK 外,所有 C 函数调用之后都将返回一个错 误信息码