.. MPI 编译环境的使用 李会民 hmli@ustc.edu.cn 中国科学技术大学超级运算中心 2011 年 10 月 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 1 / 17
.1 MPI 编译环境简介.2 MPICH MVAPICH MVAPICH2 Open MPI 等 MPI 编译环境.3 IBM PE MPI 并行环境.4 联系信息 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 2 / 17
MPI 编译器简介 MPI 编译环境实际上为 MPI 标准的不同实现 是利用在普通编译器 ( 比如 Intel 编译器 ) 基础上添加必要的 MPI 参数以指定 MPI 库的路径等链接 MPI 库的编译 除了具体 MPI 实现的参数之外, 其调用的普通编译器的参数继续有效 关于优化等不仅需要参考此 MPI 编译环境也需要参考调用的普通编译器 当前科大超算系统部署的类型 : 联想深腾 1800 集群 :MPICH 联想深腾 7000G GPU 集群 (InfiniBand 网络 ):Open MPI MVAPICH MVAPICH2 QLogic MPI LAM 曙光 CB-60G 集群 曙光 A950 胖节点 浪潮 TS850 胖节点 :Open MPI IBM JS22 刀片集群 :Parallel Environment(PE) Open MPI 为今后系统主要部署的 MPI 环境 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 3 / 17
.1 MPI 编译环境简介.2 MPICH MVAPICH MVAPICH2 Open MPI 等 MPI 编译环境.3 IBM PE MPI 并行环境.4 联系信息 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 4 / 17
MPICH MVAPICH MVAPICH2 Open MPI 等 MPI 编译环境 MPICH 和 MPICH2 为针对以太网, 但不支持 InfiniBand 网络的 MPI 实现 MVAPICH MVAPICH2 为基于 MPICH 和 MPICH2 之上针对 InfiniBand 网络的 MPI 实现 MPICH MVAPICH2 MVAPICH Open MPI 等 MPI 编译环境编译命令基本一致 一些编译参数有些不同 MPI 作业提交的参数也有所不同, 当前 LSF 作业调度系统提供的 MPI 作业运行脚本 mpijob, 主要针对系统默认设置的 MPI 实现, 其它版本的 MPI 实现未必能直接使用, 需要根据具体 MPI 实现对提交作业的要求进行改编 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 5 / 17
MPI 并行程序编译举例 编译命令主要为 :mpicc mpic++ mpicxx mpicc mpif77 和 mpif90, 不同类型程序的编译命令如下 : 将 C 语言的 MPI 并行程序 yourprog-mpi.c 编译为可执行文件 yourprog-mpi: mpicc -o yourprog-mpi yourprog-mpi.c 将 C++ 语言的 MPI 并行程序 yourprog-mpi.cpp 编译为可执行文件 yourprog-mpi,mpicxx 也可换为 mpic++ 或 mpicc: mpicxx -o yourprog-mpi yourprog-mpi.cpp 将 Fortran 77 语言的 MPI 并行程序 yourprog-mpi.f 编译为可执行文件 yourprog-mpi: mpif77 -o yourprog-mpi yourprog-mpi.f 将 Fortran 90 语言的 MPI 并行程序 yourprog-mpi.f90 编译为可执行文件 yourprog-mpi: mpif90 -o yourprog-mpi yourprog-mpi.f90 编译优化等, 主要结合所使用的编译器的编译选项与具体 MPI 实现的编译选项共同设置 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 6 / 17
MPICH MVAPICH2 MVAPICH 主要编译选项 -show: 仅显示命令信息, 但不进行编译 -help: 给出简单帮助用指定的编译器编译命令代替默认的编译命令, 只有在编译器与 MPICH 库兼容时才可使用 -cc=name:mpicc 的参数, 指定 C 编译器 -CC=name:mpiCC 和 mpicxx 的参数, 指定 C++ 编译器 -fc=name:mpif77 的参数, 指定 Fortran 77 编译器 -f77=name:mpif77 的参数, 指定 Fortran 77 编译器 -f90=name:mpif90 的参数, 指定 Fortran 90 之后的编译器 -compile-info: 显示程序编译的过程 -link-info: 显示链接过程 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 7 / 17
Open MPI 主要编译选项 -showme: 仅显示命令信息, 但不进行编译 -showme:compile: 仅显示编译器编译参数信息, 但不进行编译 -showme:link: 仅显示编译器链接时的参数信息, 但不进行链接用 OMPI_value 变量控制使用的编译命令 编译参数等,value 可为 : CPPFLAGS: 预处理选项 LDFLAGS: 链接选项 LIBS: 链接库选项 CC:C 编译命令 CFLAGS:C 编译选项 CXX:C++ 编译命令 CXXFLAGS:C++ 编译选项 F77:Fortran 77 编译命令 FFLAGS:Fortran 77 编译选项 FC:Fortran 9x 编译命令 FCFLAGS:Fortran 9x 编译选项 如使用 gfortan 作为 Fortran 90 编译命令, 并显示编译信息 : OMPI_FC=g f o r t r a n mpif90 showme 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 8 / 17
Open MPI 并行实现下的并行程序调试 编译时添加 -g 参数, 如 mpif90 g yourmpi prog. f 9 0 o yourmpi prog 几种运行方式 : 使用 GNU 调试命令 gdb, 不调用初始调试命令调试 : mpiexec n 4 xterm e gdb q t u i. / yourmpi prog 使用 GNU 调试命令 gdb 调试, 并调用调试命令文件 dbg. t x t : mpiexec n 4 xterm e gdb q t u i x dbg. t x t. / yourm 使用 Intel 调试命令 i d b c, 不调用初始调试命令调试 : mpiexec n 4 xterm e i d b c. / yourmpi prog 使用 Intel 调试命令 i d b c 调试, 并调用调试命令文件 dbg. t x t : mpiexec n 4 xterm e i d b c command dbg. t x t. / yourmp 调试命令文件 dbg. t x t 内容格式, 每行一条命令, 比如 : break 13 condition 1 k==2 run 注意 :xterm 为 Linux 下的一种图形终端命令, 也可使用其它的 上述调试需要图形界面, 如远程连接 Linux 系统调试, 需打开 X11 转发 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 9 / 17
MPI 程序出错时常用调试方式 以 Intel 调试器和 OpenMPI 的配合为例 : 添加 -g 参数编译 设置 dbg.txt 文件内容为 run 开始调试 : mpiexec n 4 xterm e i d b c command dbg. t x t. / yourm 程序将会自动停止在出错的位置, 并显示对行的源代码 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 10 / 17
.1 MPI 编译环境简介.2 MPICH MVAPICH MVAPICH2 Open MPI 等 MPI 编译环境.3 IBM PE MPI 并行环境.4 联系信息 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 11 / 17
IBM PE JS22 上安装的 MPI 的并行环境为 IBM Parallel Environment for AIX, 主要包括以下内容 : 并行操作环境 (Parallel Operating Environment-POE): 编译 提交和管理 MPI 库 : 支持 MPI 程序 并行调试器 pdb: 用于调试并行程序 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 12 / 17
MPI 并行程序的编译 PE 的编译命令主要为 :mpcc mpcc_r mpcc mpcc_r m p x l f m p x l f _ r mpxlf90 m p x l f 9 0 _ r mpxlf95 m p x l f 9 5 _ r 和 mpxlf2003_r 对于并行程序, 源文件类型和编译命令的对应关系如下 : 将 C 语言的 MPI 程序 yourprog-mpi.c 编译为 32 位可执行程序 yourprog-mpi: mpcc -o yourprog-mpi yourprog-mpi.c 将 C++ 语言的 MPI 程序 yourprog-mpi.c 编译为 32 位可执行程序 yourprog-mpi: mpcc -o yourprog-mpi yourprog-mpi.c 将 Fortran 77 语言的 MPI 程序 yourprog-mpi.f 编译为 32 位可执行程序 yourprog-mpi: mpxlf -o yourprog-mpi yourprog-mpi.f 将 Fortran 90 语言的 MPI 程序 yourprog-mpi.f90 编译为 64 位可执行程序 yourprog-mpi: mpxlf90 -o yourprog-mpi -q64 yourprog-mpi.f90 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 13 / 17
MPI 并行程序的运行 MPI 并行程序的运行命令为 poe, 其格式为 : poe program p r o g r a m _ o p t i o n s 下述命令表示以 4 个进程运行 yourprog-mpi: poe yourprog mpi procs 4 在 JS22 上, 请务必用作业管理软件 LoadLeveler 进行提交, 因此无需再指定 -procs 参数, 具体将在作业管理系统中介绍 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 14 / 17
MPI 并行程序调试 PE 提供并行调试器 PDB, 可对并行程序进行调试,PDB 与分布交互式 Shell(Distributed Interactive Shell-DISH) 共同工作,PDB 使用 DISH 管理进程, 利用 dbx 命令串行调试 对并行程序进行调试, 需在编译时添加 -g 参数编译成可调试的程序 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 15 / 17
.1 MPI 编译环境简介.2 MPICH MVAPICH MVAPICH2 Open MPI 等 MPI 编译环境.3 IBM PE MPI 并行环境.4 联系信息 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 16 / 17
联系信息 李会民 : 办公室 : 科大东区新科研楼 A 座网络信息中心二楼 205 室办公电话 :0551-3602248 电子信箱 :hmli@ustc.edu.cn 个人主页 :http://hmli.ustc.edu.cn 中国科大超算平台 :http://scc.ustc.edu.cn 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2011 年 10 月 17 / 17