中国科学技术大学超级计算中心ChinaGrid高性能计算集群使用指南

Size: px
Start display at page:

Download "中国科学技术大学超级计算中心ChinaGrid高性能计算集群使用指南"

Transcription

1 中国科学技术大学超级计算中心 ChinaGrid 高性能计算集群使用指南 李会民 2016 年 5 月 27 日 目录 I 前言 7 II ChinaGrid 高性能计算集群简介 8 III 用户登录与文件传输 10 IV 串行及 OpenMP 程序编译及运行 12 1 C/C++/Fortran 编译器简介 Intel C/C++ Fortran 编译器 PGI C/C++ Fortran 编译器简介 GNU C/C++ Fortran 编译器简介 C/C++ 程序的编译 输入输出文件后缀与类型的关系 Intel C/C++ 编译器重要编译选项 PGI C/C++ 编译器重要编译选项

2 目录 GNU C/C++ 编译器 GCC 重要编译选项 C/C++ 程序编译举例 Fortran 程序的编译 输入输出文件后缀与类型的关系 Intel Fortran 编译器重要编译选项 PGI Fortran 编译器重要编译选项 GNU Fortran 编译器重要编译选项 Fortran 程序编译举例 OpenMP 程序的编译与运行 35 V MPI 并行程序编译及运行 37 5 MPI 并行程序的编译 Intel MPI 库 编译命令 编译命令参数 环境变量 编译举例 Open MPI 库 与编译器相关的编译选项 MPI 并行程序的运行 44 VI 程序调试 45 7 Intel 调试器简介 45 8 准备所需要调试的程序 准备调试代码源代码 准备编译器和连接器环境

3 目录 调试优化编译的代码 准备所需要调试的并行程序 编译所要调试的程序 开始调试程序 启动基于命令行的 Intel 调试器 在调试器中卸载程序 显示源代码 运行程序 设置和删除断点 控制进程环境 执行一行代码 执行代码直到 执行一行汇编指令 显示变量或表达式值 退出调试器 传递命令给调试器 调试多进程 支持多调用框架 线程和源 命令 文件名和变量补全 自定义命令 调试并行程序 与线程和进程组一起工作 总览 进程和线程集表示法 在调试器中存储进程和线程集 进程和线程集操作 预定义的线程集 查看线程与线程集

4 目录 改变当前进程集 调试多线程应用 在 OpenMP 和串行代码中寻找 bug 查看 OpenMP 信息 线程数据共享探测 调试大规模并行应用 总览 在调试 MPI 应用之前 开始 MPI 调试会话 附着到已经存在的 MPI 进程 在并行调试会话中的可用命令 与聚合消息一起工作 并行调试技巧 在并行调试中查找源文件 并行调试举例 使用 mpirun_dbg.idb 启动文件 VII Intel MKL 数值函数库 Intel MKL Intel MKL 主要内容 Intel MKL 目录内容 链接 Intel MKL 快速入门 利用 -mkl 编译器参数 使用单一动态库 选择所需库进行链接 使用链接行顾问

5 目录 使用命令行链接工具 链接举例 在 Intel 64 架构上链接 在 IA-32 架构上链接 链接细节 在命令行上列出所需库链接 动态选择接口和线程层链接 使用接口库链接 使用线程库链接 使用计算库链接 使用编译器运行库链接 使用系统库链接 性能优化等 85 VIII 作业调度管理系统 作业运行的条件 查看队列情况 :bqueues 提交作业 :bsub 提交到特定队列 :bsub -q 运行串行作业 :bsub -q serial 指明所需要的 CPU 核数 :bsub -n 运行 MPI 作业 :bsub -n NUM mpijob 运行 OpenMP 共享内存作业 :bsub -q 运行 MPI 和 OpenMP 共享内存混合并行作业 运行排他性作业 :bsub -x 指明输出 输出文件运行 :bsub -i -o -e 交互式运行作业 :bsub -I

6 目录 6 20 终止作业 :bkill 挂起作业 :bstop 继续运行被挂起的作业 :bresume 设置作业最先运行 :btop 设置作业最后运行 :bbot 修改排队中的作业选项 :bmod 查看作业的排队和运行情况 :bjobs 查看运行中作业的屏幕正常输出 :bpeek 查看各节点的运行情况 :lsload 查看各节点的空闲情况 :bhosts 查看用户信息 :busers 95 IX 联系方式 96

7 7 Part I 前言 本用户使用指南主要将对在中国科学技术大学超级计算中心 ChinaGrid 高性能计算 集群上进行编译以及运行作业做一基本介绍, 详细信息请参看相应的指南 为了便于查看, 主要排版约定如下 : 命令 :command parameters 文件名 :/path/file 环境变量 :MKLROOT 脚本文件内容或长命令 : export OPENMPI=/opt/openmpi-1.6.4_intel export PATH=$OPENMPI/bin:$PATH export MANPATH=$MANPATH:$OPENMPI/share/man 命令输出 : QUEUE_NAME PRIO STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SUSP serial 50 Open:Active long 40 Open:Active normal 30 Open:Active 由于受水平和时间所限, 错误和不妥之处在所难免, 欢迎指出错误和改进意见, 本人将尽力完善 请从超算中心主页上下载更新后的手册

8 8 Part II ChinaGrid 高性能计算集群简介 中国科学技术大学超级计算中心 ChinaGrid 高性能计算集群, 主要由浪潮 NF5260M3 机架式服务器 浪潮 NX5440 刀片服务器 曙光 TC4600 刀片服务器 联想 B710 刀片服务器构成, 共计一个管理和用户登录节点 一个存储节点及 44 个计算节点, 其中计算节点为 704 个 CPU 核心, 总双精度峰值计算能力为每秒 万亿次 具体参数为 : 管理和用户登录节点 : 用户主登录节点, 可以进行编译与通过作业调度系统提交作业 禁止直接在此节点上运行作业 浪潮 NF5260M3 机架式服务器一台, 两颗 64 位主频 2.60GHz 的 Intel Xeon E x86_64 8 核 CPU, 共 16 核,32GB 内存 节点名为 chinagrid 存储节点 : 浪潮 SA5212H2 机架式存储服务器,6 块 2TB SATA 硬盘, 可用空间 9TB 刀片计算节点 : 各节点配置 : 两颗 64 位主频 2.60GHz 的 Intel Xeon E x86_64 8 核 CPU ( 共 16 核 ) 32GB 内存及 300GB SAS 硬盘 节点名 :node1-node44 * node1-node10: 浪潮 NF5260M3 机架式服务器,10 台 * node11-node20: 浪潮 NX5440 刀片服务器,10 台 * node21-node30: 联想 B710 刀片服务器,10 台 * node31-node44: 曙光 TC4600 刀片服务器,14 台 计算网络 :56Gbps InfiniBand 高速网 管理网络 : 千兆以太网 操作系统 :x86_64 架构的 64 位 CentOS 6.5 Linux 编译器 :Intel PGI 和 GNU 等 C/C++ Fortran 编译器 数值函数库 :Intel MKL 并行环境 :Intel MPI 和 Open MPI 等, 支持 MPI 并行程序 ; 各节点内的 CPU 共享内存, 节点内既支持分布式内存的 MPI 并行方式, 也支持共享内存的 OpenMP 并行方式 ; 同时支持在节点内部共享内存, 节点间分布式内存的混合并行模式

9 9 资源管理和作业调度 :IBM Platform LSF 常用公用软件安装目录 :/opt 请自己查看有什么软件, 有些软件需要在自 己 /.bashrc 等配置文件中设置后才可以使用 图 1: ChinaGrid 高性能计算集群

10 10 Part III 用户登录与文件传输 本系统的操作系统为 x86_64 的 64 位 CentOS 6.4 Linux, 不支持 TELNET 方式登录, 用户需以 SSH 方式 ( 在 MS Windows 下可利用 PuTTY Xshell SSH Secure Shell Client 等支持 SSH 协议的客户端软件 1 ) 登录到用户登录节点 ( 节点名 chinagrid) 后进行编译 提交作业等操作 用户数据可以利用 FTP 和 SFTP 协议进行数据传输 为了安全, 用户若短时间内 3 次密码错误登录, 那么登录时所使用 IP 将被自动封锁 10 分钟, 可以等待 10 分钟后再尝试, 或换个 IP 登录, 或联系管理员解封 用户可以在登录节点上运行 passwd 命令修改密码 ( 利用 passwd 命令在登录节点之外的节点上修改密码无效 ) 请不要设置简单密码和向无关人员泄漏密码, 以免给用户造成损失 用户登录进来的默认语言环境为 zh_cn.utf-8 中文, 以方便查看登录后的中文提示 如果希望使用英文或 GBK 中文, 可以在自己的 /.bashrc 中添加 export LC_ALL=C 或 export LC_ALL=zh_CN.GBK 针对 zh_cn.utf-8 的 PuTTY 客户端配置修改如下 2 : 打开 PuTTY 主程序, 选择 SESSION 登入到服务器 点击左上角 change setting..., 打开设置面板 选择 window > Appearance > Font settings > Change..., 选择 Fixedsys 字体, 字符集选择 CHINESE_GB2312 在 window > Appearance > Translation 中,Received data assumed to be in which character set 中, 把 Use font encoding 改为 UTF-8 切换到 session 选项, 选中常用的那个, 点击 SAVE, 把这些设置保存在 session 里面 ( 否则下次打开又不支持中文 ) 账户开设时, 默认最大可用 50GB 磁盘存储空间 用户请及时清除不需要的文件, 以便释放空间 运行 quota -s 命令可以查看当前自己的磁盘空间使用情况,du -hs 目录可 以查看目录占用的空间 如需要更大存储空间, 请与管理人员联系 超算中心无法提供数据备份服务, 数据一但丢失或误删将无法恢复, 请务必及时 下载保存自己的数据 1 客户端下载 : 2 PuTTY 客户端中文设置 :

11 11 超算系统可从校内 IP 登录, 校外一般无法直接访问 如果需要从校外等登录, 可以使用学校的 VPN( 教师的网络通带有此功能, 学生的不带 ), 或者申请校超算中心 VPN ( 超算中心 VPN 设置了只能访问超算服务器, 无法访问校内外其它资源 本超算系统采用 x86_64 的 64 位 CentOS 6.4 Linux 操作系统 CentOS(Community EN- Terprise Operating System) 是 Linux 主流发行版之一, 它来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成 由于出自同样的源代码, 因此有些要求高度稳定性的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用 两者的不同在于 CentOS 并不包含封闭源代码软件 一般来说可以用 man 命令或者命令加 -h 或 help 等选项来查看该命令的详细用法, 详细信息可参考 CentOS Red Hat Enterprise Linux 手册或通用 Linux 手册

12 12 Part IV 串行及 OpenMP 程序编译及运行 在本系统上可运行 C/C++ Fortran 的串行程序, 以及与 OpenMP 和 MPI 结合的并行程序 用户只需在登录节点 (chinagrid) 上以相应的编译命令和选项进行编译即可 ( 用户不应到其余节点上进行编译, 以免影响系统效率 其它节点一般只设置了运行作业所需要的库路径等, 未必设置了编译环境 ) 当前安装的编译环境主要为: C/C++ Fortran 编译器 :Intel PGI 和 GNU 编译器, 支持 OpenMP 并行 MPI 并行环境 :Intel MPI 和 Open MPI 并行环境 系统当前设置为默认使用 Intel C/C++/Fortran 编译器与 Intel MPI 的 组合, 用户也可以单独设置自己所需的串行编译环境 ( 如在 /.bashrc 中设置 ), 也可直 接运行 mpi-selector-menu 3 命令按照提示选择自己使用的 MPI 和串行编译环境, 注意数字 后需要加 u, 设置完成后最好重新登录以便设置生效 : Current system default : intel - mpi _intel - compiler Current user default : <none> u and s modifiers can be added to numeric and U commands to specify user or system-wide. 1. intel - mpi _intel - compiler intel - mpi _intel - compiler intel - mpi _intel - compiler openmpi-1.6.3_intel - compiler openmpi-1.6.3_intel - compiler openmpi-1.6.4_gcc openmpi-1.6.4_intel - compiler openmpi-1.6.4_pgi U. Unset default Q. Quit Selection (1-8[us], U[us], Q): 注意 : 在 /.bashrc 中设置的级别要高于使用 mpi-selector-menu 设置的 本节主要介绍串行程序和 OpenMP 并行程序的编译,MPI 并行程序的编译将在后面介绍 3 此命令虽然是针对 MPI 设计的, 但设置后也会更改串行编译环境

13 1 C/C++/FORTRAN 编译器简介 13 1 C/C++/Fortran 编译器简介 1.1 Intel C/C++ Fortran 编译器 Intel C/C++ Fortran 编译器, 是一种主要针对 Inetl 平台的高性能编译器, 可用于开 发复杂且要进行大量计算的 C/C++ Fortran 程序 系统已经安装的是 Intel Parallel Studio XE 2013 带有的, 并设置默认使用 64 位 的 版本的 Intel 编译器, 安装目录为 /opt/intel/composer_xe_ , 用户 直接使用即可, 无需自己设置 系统还安装有 64 位 版本的编译器, 安装在 /opt/intel/composer_xe_ , 用户如想使用, 可以在自己的 /.bashrc 之类环境设置文件中添加代码 ( 表示空格 ):. /opt/intel/composer_xe_ /bin/compilervars.sh intel64 或者运行 mpi-selector-menu 命令设置 Intel 编译器编译 C 和 C++ 源程序的编译命令分别为 icc 和 icpc; 编译 Fortran 源程序 的命令为 ifort icpc 命令使用与 icc 命令相同的编译器选项, 利用 icpc 编译时将后缀 为.c 和.i 的文件看作为 C++ 文件 ; 而利用 icc 编译时将后缀为.c 和.i 的文件则看作为 C 文件 用 icpc 编译时, 总会链接 C++ 库 ; 而用 icc 编译时, 只有在编译命令行中包含 C++ 源文件 时才链接 C++ 库 官方手册目录 : 版本 :/opt/intel/composer_xe_ /documentation 版本 :/opt/intel/composer_xe_ /documentation 1.2 PGI C/C++ Fortran 编译器简介 PGI C/C++ Fortran 编译器是一种针对多种 CPU 与操作系统的高性能编译器, 可用 于开发复杂且要进行大量计算的程序 当前安装的版本为 2010 v10.6, 安装在 /opt/pgi/ linux86-64/10.6 用户要使用, 可以运行 mpi-selector-menu 命令设置, 或在自己的 /.bashrc 之类环境 设置文件中添加以下代码设置 : PATH=/opt/pgi/linux86-64/10.6/bin:$PATH MANPATH=$MANPATH:/opt/pgi/linux86-64/10.6/man export PATH MANPATH

14 2 C/C++ 程序的编译 14 PGI 编译器编译 C C++ Fortran 77 源程序的命令分别为 pgcc pgcc 和 pgf77, 编译 Fortran 90( 为了描述方便, 本手册中将 Fortran 标准统称为 Fortran 90) 的源程序的命令有 pgf90 pgf901 pgf902 pgf90_ex pgf95 和 pgfortran 官方手册目录 :/opt/pgi/linux86-64/10.6/doc 1.3 GNU C/C++ Fortran 编译器简介 GNU C/C++ Fortran(GCC) 编译器为系统自带的编译器, 当前安装的版本为 和 默认为 版本, 用户无需特殊设置即可使用 GNU 编译器编译 C C++ 源程序的命令分别为 版本的 gcc 和 g++ 及 版本的 gcc34 和 g++34;4.4.7 版本的 gfortran 可以直接编译 Fortran 源程序 版本的 g77 只能编译 F77 程序, 不可编译 Fortran 90 源程序 2 C/C++ 程序的编译 本节主要介绍 C/C++ 源程序的常用编译方式 建议采用对一般程序来说性能较好 的 Intel 编译器, 用户也可以选择适合自己程序的编译器, 以取得更好的性能 2.1 输入输出文件后缀与类型的关系 编译器默认将按照输入文件的后缀判断文件类型, 输入文件的后缀与类型的关系见表 1 编译器默认将输出按照文件类型与后缀相对应, 输出文件的后缀与类型的关系见表 Intel C/C++ 编译器重要编译选项 -Bdynamic: 在运行时动态链接所需要的库 -Bstatic : 静态链接用户生成的库 -c: 仅编译成目标文件 (.o 文件 ) -fast: 最大化整个程序的速度 这里是所谓的最大化, 还是需要结合程序本身使用合适的选项, 默认不使用此选项 -g: 包含调试信息 -ip: 在单个文件中进行过程间优化 (Interprocedural Optimizations-IPO)

15 2 C/C++ 程序的编译 15 表 1: 输入文件后缀与类型的关系 文件名 解释 动作 filename.c C 源文件 传给编译器 filename.c filename.cc filename.cc C++ 源文件 传给编译器 filename.cpp filename.cxx filename.a filename.so 库文件 传递给链接器 filename.i 已预处理的文件传递给标准输出 filename.o 目标文件传递给链接器 filename.s 汇编文件传递给汇编器 文件名 表 2: 输出文件后缀与文件类型的关系 解释 filename.i filename.o filename.s a.out 已预处理的文件, 由使用 -p 选项生成目标文件, 由添加 -c 选项生成汇编文件, 由添加 -s 选项生成默认生成的可执行文件

16 2 C/C++ 程序的编译 16 -ipo[n]: 在多文件中进行过程间优化, 非负整数 n 为可生成的目标文件数 -I< 头文件目录 >: 指明头文件的搜索路径 -L< 库目录 >: 指明库的搜索路径 -mkl<lib>: 链接时自动链接 Intel MKL 库, 默认为不起用 <lib> 可以为 : parallel: 采用线程化部分 MKL 库链接, 此为 lib 如果没指明时的默认选项 sequential: 采用未线程化的串行 MKL 库链接 cluster: 采用集群部分和串行部分 MKL 链接 -l< 库文件 >: 指明所需链接的库名, 如库名为 libxyz.a, 则可用 -lxyz 指定 -o file: 指定生成的文件名 -openmp: 编译 OpenMP 程序 注意 : 在本系统上只能在同一个节点内的 CPU 上运行 OpenMP 程序, 提交作业时请结合相应选项, 以保证在同一个节点运行 -O< 级别 >: 设定优化级别, 默认为 O2 O 与 O2 相同, 推荐使用 ;O3 为在 O2 基础之上增加更激进的优化, 比如包含循环和内存读取转换和预取等, 但在有些情况下速度反而慢, 建议在具有大量浮点计算和大数据处理的循环时的程序使用 -p: 进行概要导向优化 (Profile Guided Optimization-PGO) -shared: 生成共享目标而不是可执行文件, 必须在编译每个目标文件时使用 -fpic 选项 -static : 静态链接所有库 -std=< 标准 >: 标准可以为 c89 c99 gnu89 gnu++98 或 c++0x, 分别对应相应标准 -w: 编译时不显示任何警告, 只显示错误 -wall: 编译时显示所有警告 -x < 类型 >: 类型可以为 c c++ c-header cpp-output c++-cpp-output assembler assembler-with-cpp 或 none, 分别表示 c 源文件等, 以使所有源文件都被认为是此类型的 -Xhost: 告诉编译器以编译时主机的最高指令集指令编译 建议仔细查看编译器手册中关于程序优化的部分, 特别是 IPO PGO 和 HLO 部分, 多加测试, 选择适合自己程序的编译选项以提高性能

17 2 C/C++ 程序的编译 PGI C/C++ 编译器重要编译选项 PGI 编译器选项非常多, 下面仅仅是列出一些本人认为常用的关于编译 C 程序 的 pgcc 命令的重要选项 编译 C++ 程序的 pgcc 命令有稍微不同, 建议仔细查看 PGI 相关 资料 一般选项 : -#: 显示编译器 汇编器 链接器的调用信息 -c: 仅编译成目标文件 (.o 文件 ) -defaultoptions 和 -nodefaultoptions: 是否使用默认选项, 默认为使用 -flags: 显示所有可用的编译选项 -help[=option]: 显示帮助信息,option 可以为 groups asm debug language linker opt other overall phase phase prepro suffix switch target 和 variable -Minform=level: 控制编译时错误信息的显示级别 level 可以为 fatal file severe warn inform, 默认为 -Minform=warn -noswitcherror: 显示警告信息后, 忽略未知命令行参数并继续进行编译 默认显示错误信息并且终止编译 -o file: 指定生成的文件名 -show: 显示现有 pgcc 命令的配置信息 -silent: 不显示警告信息, 与 -Minform=severe 等同 -v: 详细模式, 在每个命令执行前显示其命令行 -V: 显示编译器版本信息 -w: 编译时不显示任何警告, 只显示错误 优化选项 : -fast: 编译时选择针对目标平台的普通优化选项 用 pgcc -fast -help 可以查看等价的开关 优化级别至少为 O2, 参看 -O 选项 -fastsse: 对支持 SSE 和 SSE2 指令的 CPU( 如 Intel Xeon CPU) 编译时选择针对目标平台的优化选项 用 pgcc -fastsse -help 可以查看等价的开关, 优化级别至少为 O2, 参看 -O 选项 -fpic 或 -fpic: 编译器生成地址无关代码, 以便可用于生成共享目标文件 ( 动态链接库 ) -Kpic 或 -KPIC: 与 -fpic 或 -fpic 相同, 为了与其余编译器兼容

18 2 C/C++ 程序的编译 18 -Minfo[=option[,option, ]]: 显示有用信息到标准错误输出, 选项可为 all autoinline inline ipa loop 或 opt mp time 或 stat -Mipa[=option[,option, ]] 和 -Mnoipa: 启用指定选项的过程间分析优化, 默认为 -Mnoipa -Mneginfo=option[,option ]: 使编译器显示为什么特定优化没有实现的信息 选项包括 concur loop 和 all -Mnoopenmp: 当使用 -mp 选项时, 忽略 OpenMP 并行指令 -Mnosgimp: 当使用 -mp 选项时, 忽略 SGI 并行指令 -Mpfi: 生成概要导向工具, 此时将会包含特殊代码收集运行时的统计信息以用于子序列编译 -Mpfi 必须在链接时也得使用 当程序运行时, 会生成概要导向文件 pgfi.out -Mpfo: 启用概要导向优化, 此时必须在当前目录下有概要文件 pgfi.out -Mprof[=option[,option, ]]: 设置性能功能概要选项 此选项可使得结果执行生成性能概要, 以便 PGPROF 性能概要器分析 -mp[=option]: 打开对源程序中的 OpenMP 并行指令的支持 -O[level]: 设置优化级别 level 可设为 , 其中 4 与 3 相同 -pg: 使用 gprof 风格的基于抽样的概要刨析 调试选项 : -g: 包含调试信息 预处理选项 : -C: 预处理时保留 C 源文件中的注释 -D<name[=def]>: 预处理时定义宏 name 为 def -dd: 打印源文件中已定义的宏及其值到标准输出 -di: 打印预处理中包含的所有文件信息, 含文件名和定义时的行号 -dm: 打印预处理时源文件已定义的宏及其值, 含定义时的文件名和行号 -dn: 与 -dd 类似, 但只打印源文件已定义的宏, 而不打印宏值 -E: 预处理每个.c 文件, 将结果发送给标准输出, 但不进行编译 汇编或链接等操作 -I< 头文件目录 >: 指明头文件的搜索路径 -M: 打印 make 的依赖关系到标准输出 -MD: 打印 make 的依赖关系到文件 file.d, 其中 file 是编译文件的根名字

19 2 C/C++ 程序的编译 19 -MM: 打印 make 的依赖关系到标准输出, 但忽略系统头文件 -MMD: 打印 make 的依赖关系到文件 file.d, 其中 file 是编译的文件的根名字, 但忽略系统头文件 -P: 预处理每个文件, 并保留每个 file.c 文件预处理后的结果到 file.i -U<name>: 去除预处理中的任何 name 的初始定义 链接选项 : -Bdynamic: 在运行时动态链接所需的库 -Bstatic: 静态链接所需的库 -Bstatic_pgi : 动态链接系统库时静态链接 PGI 库 -g77libs: 允许链接 GNU g77 或 gcc 命令生成的库 -l< 库文件 >: 指明所需链接的库名 如库为 libxyz.a, 则可用 -lxyz 指定 -L< 库目录 >: 指明库的搜索路径 -m: 显示链接拓扑 -Mrpath 和 -Mnorpath: 默认为 -rpath, 以给出包含 PGI 共享目标的路径 用 - Mnorpath 可以去除此路径 -pgf77libs: 链接时添加 pgf77 运行库, 以允许混合编程 -r: 生成可以重新链接的目标文件 -R<directory>: 对共享目标文件总搜索 directory 目录 -pgf90libs: 链接时添加 pgf90 运行库, 以允许混合编程 -shared: 生成共享目标而不是可执行文件, 必须在编译每个目标文件时使用 -fpic 选项 -soname<name>: 生成共享目标时, 用内在的 DT_SONAME 代替指定的 name -u<name>: 传递给链接器, 以生成未定义的引用 语言选项 : -B: 源文件中允许 C++ 风格的注释, 指的是以 // 开始到行尾内容为注释 除非指定 -C 选项, 否则这些注释被去除 -c8x 或 -c89: 对 C 源文件采用 C89 标准 -c9x 或 -c99: 对 C 源文件采用 C99 标准

20 2 C/C++ 程序的编译 20 平台相关选项 : -Kieee 和 -Knoieee: 浮点操作是否严格按照 IEEE 754 标准 使用 -Kieee 时一些优化处理将被禁止, 并且使用更精确的数值库 默认为 -Knoieee, 将使用更快的但精确性低的方式 -Ktrap=[option,[option] ]: 控制异常发生时 CPU 的操作 选项可为 divz fp align denorm inexact inv none ovf unf, 默认为 none -Msecond_underscore 和 -Mnosecond_underscore: 是否对已有 _ 的 Fortran 函数名添加第二个 _ 与 g77 编译命令兼容时使用, 因为 g77 默认符号后添加第二个 _ -mcmodel=small medium: 使内存模型是否限制目标小于 2GB(small) 或允许数据块大于 2GB(medium) medium 时暗含 -Mlarge_arrays 选项 -tp target:target 可以为 nehalem-64 等, 默认与编译时的平台一致 建议仔细查看编译器手册中关于程序优化的部分, 多加测试, 选择适合自己程序 的编译选项以提高性能 本系统采用的是 Intel Xeon E CPU, 需要仔细选择, 特 别是保证结果的正确性 2.4 GNU C/C++ 编译器 GCC 重要编译选项 GNU 编译器 GCC 是 Linux 系统自带的编译器, 系统安装的版本为 和 3.4.6, 选项 非常多, 下面仅仅是列出一些针对 本人认为常用的重要选项, 建议仔细看 GCC 相 关资料 控制文件类型的选项 : -x language: 明确指定而非让编译器判断输入文件的类型 language 可为 : * c c-header c-cpp-output * c++ c++-header c++-cpp-output * objective-c objective-c-header objective-c-cpp-output * objective-c++ objective-c++-header objective-c++-cpp-output * assembler assembler-with-cpp * ada * f95 f95-cpp-input * java * treelang 当 language 为 none 时, 禁止任何明确指定的类型, 其类型由文件名后缀决定

21 2 C/C++ 程序的编译 21 -c: 仅编译成目标文件 (.o 文件 ), 并不进行链接 -o file: 指定生成的文件名 -v: 详细模式, 显示在每个命令执行前显示其命令行 -###: 显示编译器 汇编器 链接器的调用信息但并不进行实际编译, 在脚本中可以用于捕获驱动器生成的命令行 help: 显示帮助信息 target-help: 显示目标平台的帮助信息 version: 显示编译器版本信息 C 语言选项 : -ansi:c 模式时, 支持所有 ISO C90 指令 在 C++ 模式时, 去除与 ISO C++ 冲突的 GNU 扩展 -std=: 控制语言标准, 可以为 c89 iso9899:1990 iso9899: c99 c9x iso9899:1999 iso9899:199x gnu89 gnu99 gnu9x c++98 gnu++98 -B: 在源文件中允许 C++ 风格的注释, 指的是以 // 开始到行尾内容为注释 除非指定 -C 选项, 否则这些注释被去除 -c8x 或 -c89: 对 C 源文件采用 C89 标准 -c9x 或 -c99: 对 C 源文件采用 C99 标准 警告选项 : -fsyntax-only: 仅仅检查代码的语法错误, 并不进行其它操作 -w: 编译时不显示任何警告, 只显示错误 -Wfatal-errors: 遇到第一个错误就停止, 而不尝试继续运行显示更多错误信息 调试选项 : -g: 包含调试信息 -ggdb: 包含利用 gbd 调试时所需要的信息 优化选项 : -O[level]: 设置优化级别 优化级别 level 可以设置为 s 预处理选项 : -C: 预处理时保留 C 源文件中的注释

22 2 C/C++ 程序的编译 22 -D name: 预处理时定义宏 name 的值为 1 -D name=def: 预处理时定义 name 为 def -U name: 预处理时去除的任何 name 初始定义 -undef: 不预定义系统或 GCC 声明的宏, 但标准预定义的宏仍旧被定义 -dd: 显示源文件中定义的宏及其值到标准输出 -di: 显示预处理中包含的所有文件, 包括文件名和定义时的行号信息 -dm: 显示预处理时源文件中定义的宏及其值, 包括定义时文件名和行号 -dn: 与 -dd 类似, 但只显示源文件中定义的宏, 而不显示宏值 -E: 预处理各.c 文件, 将结果发给标准输出, 不进行编译 汇编或链接 -I< 头文件目录 >: 指明头文件的搜索路径 -M: 打印 make 的依赖关系到标准输出 -MD: 打印 make 的依赖关系到文件 file.d, 其中 file 是编译文件的根名字 -MM: 打印 make 的依赖关系到标准输出, 但忽略系统头文件 -MMD: 打印 make 的依赖关系到文件 file.d, 其中 file 是编译的文件的根名字, 但忽略系统头文件 -P: 预处理每个文件, 并保留每个 file.c 文件预处理后的结果到 file.i 链接选项 : -pie: 在支持的目标上生成地址无关的可执行文件 -s: 从可执行文件中去除所有符号表 -rdynamic: 添加所有符号表到动态符号表中 -static: 静态链接所需的库 -shared: 生成共享目标而不是可执行文件, 必须在编译每个目标文件时使用 -fpic 选项 -shared-libgcc: 使用共享 libgcc 库 -static-libgcc: 使用静态 libgcc 库 -u <symbol>: 确保符号 symbol 未定义, 强制链接一个库模块来定义它 -I< 头文件目录 >: 指明头文件的搜索路径 -l< 库文件 >: 指明所需链接的库名, 如库为 libxyz.a, 则可用 -lxyz 指定 -L< 库目录 >: 指明库的搜索路径 -B< 路径 >: 设置寻找可执行文件 库 头文件 数据文件等路径

23 2 C/C++ 程序的编译 23 i386 和 x86-64 平台相关选项 : -mtune=cpu-type: 设置优化针对的 CPU 类型, 可为 :generic core2 opteron opteron-sse3 bdver1 bdver2 等,bdver1 为针对本系统 AMD Opteron CPU 的 -march=cpu-type: 设置指令针对的 CPU 类型,CPU 类型与上行中一样 -mieee-fp 和 -mno-ieee-fp: 浮点操作是否严格按照 IEEE 标准 约定成俗的选项 : -fpic: 生成地址无关的代码以用于共享库 -fpic: 如果目标机器支持, 将生成地址无关的代码 -fopenmp: 编译 OpenMP 并行程序 -fpie 和 -fpie: 与 -fpic 和 -fpic 类似, 但生成的地址无关代码, 只能链接到可执行文件中 建议仔细查看编译器手册中关于程序优化的部分, 多加测试, 选择适合自己程序 的编译选项以提高性能 2.5 C/C++ 程序编译举例 Intel C/C++ 编译器编译举例 : icc -o yourprog yourprog.c 将 C 程序 yourprog.c 编译为可执行文件 yourprog icpc -o yourprog yourprog.cpp 将 C++ 程序 yourprog.cpp 编译为可执行文件 yourprog icc -o yourprog-omp -openmp yourprog.c 将 OpenMP 指令并行的 C 程序 yourprog-omp.c 编译为可执行文件 yourprog-omp PGI C/C++ 编译器编译举例 : pgcc -o yourprog yourprog.c 将 C 程序 yourprog.c 编译为可执行文件 yourprog pgcc -o yourprog yourprog.cpp 将 C++ 程序 yourprog.cpp 编译为可执行文件 yourprog pgcc -o yourprog-omp -mp yourprog.c 将 OpenMP 指令并行的 C 程序 yourprog-omp.c 编译为可执行文件 yourprog-omp

24 3 FORTRAN 程序的编译 24 GNU C/C++ 编译器编译举例 : gcc -o yourprog yourprog.c 将 C 程序 yourprog.c 编译为可执行文件 yourprog g++ -o yourprog yourprog.cpp 将 C++ 程序 yourprog.cpp 编译为可执行文件 yourprog gcc -o yourprog-omp -fopenmp yourprog.c 将 OpenMP 指令并行的 C 程序 yourprog-omp.c 编译为可执行文件 yourprog-omp 3 Fortran 程序的编译 3.1 输入输出文件后缀与类型的关系 编译器默认将按照输入文件的后缀判断文件类型, 输入文件的后缀与类型的关系见表 3 编译器默认将输出按照文件类型与后缀相对应, 输出文件的后缀与类型的关系见表 Intel Fortran 编译器重要编译选项 Intel 编译器选项非常多, 下面仅仅是列出一些本人认为常用的编译 Fortran 程序 的 ifort 编译命令重要选项, 建议仔细看相关资料 -auto-scalar:integer REAL COMPLEX 和 LOGICAL 内在类型变量, 如未声明有 SAVE 属性, 将分配到运行时堆栈中, 下次调用此函数时变量赋值 -Bdynamic: 运行时动态链接所需要的库 -Bstatic : 静态链接用户生成的库 -c: 仅编译成目标文件 (.o 文件 ) -convert [ 关键字 ]: 转换无格式数据的类型, 比如关键字为 big_endian 和 little_endian 时, 分别表示无格式的输入输出为 big_endian 和 little_endian 格式, 更多格式类型, 请看编译器手册 -cpp: 对源代码进行预处理, 等价于 -fpp -extend-source[size]: 指明固定格式的 Fortran 源代码宽度, 选项 size 可为 和 132 也可直接用 和 -132 指定, 默认为 72 字符

25 3 FORTRAN 程序的编译 25 表 3: 输入文件后缀与文件类型的关系 文件名 解释 动作 filename.a 目标库文件 传给编译器 filename.f filename.for filename.ftn filename.i filename.fpp filename.fpp 固定格式的 Fortran 源文件 被 Fortran 编译器编译 filename.f 固定格式的 Fortran 源文件自动被 Fortran 编译器预处理后再被编译 filename.for filename.ftn filename.f90 filename.i90 自由格式的 Fortran 源文件 被 Fortran 编译器编译 filename.f90 自由格式的 Fortran 源文件 自动被 Fortran 编译器预处理后再被编译 filename.s 汇编文件 传递给汇编器 filename.so 库文件 传递给链接器 filename.o 目标文件 传递给链接器 表 4: 输出文件后缀与类型的关系 文件名 解释 生成方式 filename.o 目标文件 编译时添加 -c 选项生成 filename.so 共享库文件 编译时指定为共享型, 如添加 -shared, 并不含 -c filename.mod 模块文件 编译含有 MODULE 声明时的源文件生成 filename.s 汇编文件 编译时添加 -S 选项生成 a.out 默认生成的可执行文件 编译时没有指定 -c 时生成

26 3 FORTRAN 程序的编译 26 -fast: 最大化整个程序的速度 这里是所谓的最大化, 还是需要结合程序本身使用合适的选项 -fixed: 指明 Fortran 源代码为固定格式, 默认由文件后缀决定格式类别 -fpic: 生成地址无关代码, 当编译成共享目标文件时必须使用此选项, 等价于 -fpic, 默认为 -fno-pic -free: 指明 Fortran 源程序为自由格式, 默认由文件后缀决定格式类别 -g: 包含调试信息 -ip: 在单个文件中进行过程间优化 (Interprocedural Optimizations-IPO) -ipo[n]: 在多文件中进行过程间优化, 非负整数 n 为可生成的目标文件数 -I< 头文件目录 >: 指明头文件的搜索路径 -implicitnone: 指明默认变量名为未定义, 建议在写程序时添加 implicit none 语句, 以避免出现由于默认类型造成的错误 -L< 库目录 >: 指明库的搜索路径 -l< 库文件 >: 指明所需链接的库名, 如库文件为 libxyz.a, 则可用 -lxyz 指定 -mkl<lib>: 链接时自动链接 Intel MKL 库, 默认为不起用 <lib> 可以为 : parallel: 采用线程化部分 MKL 库链接, 此为 lib 如果没指明时的默认选项 sequential: 采用未线程化的串行 MKL 库链接 cluster: 采用集群部分和串行部分 MKL 链接 -nofree: 指明 Fortran 源程序为固定格式 -openmp: 编译 OpenMP 指令并行程序, 注意 : 在本系统上只能在同一个节点内 CPU 上运行 OpenMP 程序, 提交作业时请结合相应选项, 以保证在同一个节点上运行 -O< 级别 >: 设定优化级别 默认为 O2,O 与 O2 相同, 推荐使用 O3 为在 O2 基础之上增加更激进的优化, 比如包含循环和内存读取转换和预取等, 但在有些情况下速度反而慢, 建议在具有大量浮点计算和大数据处理的循环时的程序使用 -p: 进行概要导向优化 (Profile Guided Optimization-PGO) -save: 强制变量值存储在静态内存中 此选项保存递归函数和用 AUTOMATIC 声明的所有变量 ( 除本地变量外 ) 在静态分配中, 下次调用时可继续用 默认为 -auto-scalar, 内在类型 INTEGER REAL COMPLEX 和 LOGICAL 变量分配到运行时堆栈中

27 3 FORTRAN 程序的编译 27 -shared: 生成共享目标而不是可执行文件, 必须在编译每个目标文件时使用 -fpic 选项 -stand < 标准 >: 以指定 Fortran 标准进行编译, 编译时显示源文件中不符合此标准的信息 标准可为 f03 f90 f95 和 none, 分别对应显示不符合 Fortran 的代码信息和不显示任何非标准的代码信息, 也可写为 -std< 标准 >, 此时标准不带 f, 可为 static: 静态链接所有库 -unroll[n]: 循环最大可展开的层数, 与性能相关 -us: 编译时给外部用户定义的函数名添加一个下划线, 等价于 -assume underscore, 如果编译时显示 _ 函数找不到时也许添加此选项即可解决 -w: 编译时不显示任何警告, 只显示错误 -wall: 编译时显示所有警告 -X: 编译时不用默认的头文件搜索目录, 与 -I 结合可使用指定的头文件目录 -Xhost: 告诉编译器以编译时主机的最高指令集指令编译 建议仔细查看编译器手册中关于程序优化的部分, 特别是 IPO PGO 和 HLO 部 分, 多加测试, 选择适合自己程序的编译选项以提高性能 本系统采用的是 Intel Xeon E CPU, 建议参考本 CPU 相关资料, 并仔细选择参数 3.3 PGI Fortran 编译器重要编译选项 PGI 编译器选项非常多, 下面仅仅是列出一些本人认为常用的编译 Fortran 9x 程序 的 pgf90 重要选项, 编译 Fortran 77 程序的 pgf77 等编译命令也许有部分不同, 建议仔细 看 PGI 相关资料 一般选项 : -#: 显示编译器 汇编器 链接器的调用 -c: 仅编译成目标文件 (.o 文件 ) -defaultoptions 和 -nodefaultoptions: 是否使用默认选项, 默认为使用 -flags: 显示所有可用的编译参数 -help[=option]: 显示帮助信息,option 可以为 groups asm debug language linker opt other overall phase phase prepro suffix switch target 和 variable

28 3 FORTRAN 程序的编译 28 -Minform=level: 控制编译时错误信息的显示级别,level 可以为 fatal file severe warn inform, 默认为 -Minform=warn -noswitcherror: 显示警告信息后, 忽略未知命令行参数继续进行编译 ; 默认为显示错误信息并终止编译 -o file: 指定生成的文件名 -show: 显示现有 pgf90 命令的配置信息 -silent: 不显示警告信息, 与 -Minform=severe 等同 -v: 详细模式, 显示在每个命令执行前显示其命令行 -V: 显示编译器版本信息 -w: 编译时不显示任何警告, 只显示错误 优化选项 : -fast: 编译时选择针对目标平台的普通优化参数, 用 pgf90 -fast -help 可以查看等价的开关 优化级别至少为 O2, 参看 -O 参数 -fastsse: 对支持 SSE 和 SSE2 指令的 CPU( 如 Opteron) 编译时选择针对目标平台的普通优化参数, 用 pgcc -fastsse -help 可以查看等价的开关 优化级别至少为 O2, 参看 -O 参数 -fpic 或 -fpic: 编译器生成地址无关代码, 以便可以用于生成共享目标文件 ( 动态链接库 ) -Kpic 或 -KPIC: 与 -fpic 或 -fpic 相同, 为了与其余编译器兼容 -Minfo[=option[,option, ]]: 显示有用的信息到标准错误输出, 选项可以为 all autoinline inline ipa loop 或 opt mp time 或 stat -Mipa [=option[,option, ]] 和 -Mnoipa: 对过程间分析启用和指定参数, 默认为 -Mnoipa -Mneginfo=option[,option ]: 使编译器生成关于为什么特定优化没有实现的信息 选项包括 concur loop 和 all -Mnoopenmp: 当使用 -mp 选项时, 忽略 OpenMP 指令 -Mnosgimp: 当使用 -mp 选项时, 忽略 SGI 并行指令 -Mpfi: 生成概要导向工具, 此时将会包含特殊代码以收集运行时的统计信息以用于子序列的编译中 -Mpfi 必须在链接时也得使用 当程序运行时, 会生成概要导向文件 pgfi.out -Mpfo: 启动概要导向优化, 此时必须在当前目录下存在概要文件 pgfi.out -Mprof[=option[,option, ]]: 设置性能功能概要选项 用此选项可使结果执行生成性能概要, 以便 PGPROF 性能概要器可以分析

29 3 FORTRAN 程序的编译 29 -mp[=option]: 打开对源程序中的 OpenMP 并行指令的支持 -O[level]: 设置优化级别 level 可设为 , 其中 4 与 3 相同 -pg: 使用 gprof 风格的基于抽样的概要刨析 调试选项 : -g: 包含调试信息 预处理选项 : -C: 预处理时保留 C 源文件中的注释 -D<name[=def]>: 预处理时定义 name 为 def -dd: 显示源文件中定义的宏及其值到标准输出 -di: 显示预处理中包含的所有文件, 包括文件名和定义时的行号信息 -dm: 显示预处理时源文件中定义的宏及其值, 包括定义时文件名和行号 -dn: 与 -dd 类似, 但只显示源文件中已定义的宏, 而不显示宏值 -E: 预处理各.c 文件, 将结果发给标准输出, 不进行编译 汇编或链接 -I< 头文件目录 >: 指明头文件的搜索路径 -M: 显示 make 的依赖关系到标准输出 -MD: 显示 make 的依赖关系到文件 file.d, 其中 file 是编译文件的根名字 -MM: 显示 make 的依赖关系到标准输出, 但忽略系统头文件 -MMD: 显示 make 的依赖关系到文件 file.d, 其中 file 是编译的文件的根名字, 但忽略系统头文件 -P: 预处理每个文件, 并保留每个 file.c 文件预处理后的结果到 file.i -U<name>: 预处理去除时 name 的初始定义 链接选项 : -Bdynamic: 运行时动态链接所需的库 -Bstatic: 静态链接所需的库 -Bstatic_pgi : 对动态链接系统库时静态链接 PGI 库 -g77libs: 允许链接 GNU g77 或 gcc 生成的库 -l< 库文件 >: 指明所需链接的库名, 如库为 libxyz.a, 则可用 -lxyz 指定 -L< 库目录 >: 指明库的搜索路径 -m: 显示链接拓扑

30 3 FORTRAN 程序的编译 30 -Mrpath 和 -Mnorpath: 默认为 -rpath, 以设置包含 PGI 共享目标的路径 用 - Mnorpath 可以去除此路径 -pgf77libs: 链接时添加 pgf77 运行库, 以允许混合编程 -r: 生成可以重新链接的目标文件 -R<directory>: 对共享目标文件总搜索 directory 目录 -pgf90libs: 链接时添加 pgf90 运行库, 以允许混合编程 -shared: 生成共享目标而不是可执行文件, 必须在编译每个目标文件时使用 -fpic 选项 -soname<name>: 生成共享目标时, 用内在的 DT_SONAME 代替指定的 name -u<name>: 传递给链接器, 以生成未定义的引用 语言选项 : -byteswapio 或 -Mbyteswapio: 对无格式 Fortran 数据文件在输入输出时从大端 (big-endian) 到小端 (little-endian) 交换比特, 或者相反 此选项可以用于读写 Sun 或 SGI 等系统中的无格式的 Fortran 数据文件 -i2: 将 INTEGER 变量按照 2 比特处理 -i4: 将 INTEGER 变量按照 4 比特处理 -i8: 将默认的 INTEGER 和 LOGICAL 变量按照 4 比特处理 -i8storage: 对 INTEGER 和 LOGICAL 变量分配 8 比特 -Mallocatable[=95 03]: 按照 Fortran 95 或 2003 标准分配数组 -Mbackslash 和 -Mnobackslash: 将反斜线 (\) 当作正常字符 ( 非转义符 ) 处理, 默认为 -Mnobackslash -Mnobackslash 导致标准的 C 反斜线转义序列在引号包含的字串中重新解析 -Mbackslash 则导致反斜线被认为和其它字符一样 -Mextend: 设置源代码的行宽为 132 列 -Mfixed -Mnofree 和 -Mnofreeform: 强制对源文件按照固定格式进行语法分析, 默认.f 或.F 文件被认为固定格式 -Mfree 和 -Mfreeform: 强制对源文件按照自由格式进行语法分析, 默认.f90.F90.f95 或.F95 文件被认为自由格式 -Mi4 和 -Mnoi4: 将 INTEGER 看作 INTEGER*4 -Mnoi4 将 INTEGER 看作 INTEGER*2 -Mnomain: 当链接时, 不包含调用 Fortran 主程序的目标文件 -Mr8 和 -Mnor8: 将 REAL 看作 DOUBLE PRECISION, 将实 (REAL) 常数看作双精度 (DOUBLE PRECISION) 常数 默认为否 -Mr8intrinsics [=float] 和 -Mnor8intrinsics: 将 CMPLX 看作 DCMPLX, 将 REAL 看作 DBLE 添加 float 选项时, 将 FLOAT 看作 DBLE

31 3 FORTRAN 程序的编译 31 -Msave 和 -Mnosave: 是否将所有局部变量添加 SAVE 声明, 默认为否 -Mupcase 和 -Mnoupcase: 是否保留名字的大小写 -Mnoupcase 导致所有名字转换成小写 注意, 如果使用 -Mupcase, 那么变量名 X 与变量名 x 不同, 并且关键字必须为小写 -Mcray=pointer: 支持 Cray 指针扩展 -module directory: 指定编译时保存生成的模块文件的目录 -r4: 将 DOUBLE PRECISION 变量看作 REAL -r8: 将 REAL 变量看作 DOUBLE PRECISION 平台相关选项 : -Kieee 和 -Knoieee: 浮点操作是否严格按照 IEEE 754 标准, 默认为不 使用 - Kieee 时一些优化处理被禁止, 并且使用更加精确的数值库, 默认为 -Knoieee, 将使用更快的但精确性低的方式 -Ktrap=[option,[option] ]: 控制异常发生时,CPU 的操作 选项可以为 divz fp align denorm inexact inv none ovf unf, 默认为 none -Mlarge_arrays 和 -Mnolarge_arrays: 是否允许数组大于 2GB, 默认不允许 当使用 -mcmodel=medium 时暗含 -Mlarge_arrays 选项 -mcmodel=small medium: 使用内存模型是否限制目标小于 2GB(small) 或允许数据块大于 2GB(medium),medium 时暗含 -Mlarge_arrays 选项 -Msecond_underscore 和 -Mnosecond_underscore: 是否对已经有 _ 的 Fortran 函数名添加第二个 _ 主要在与 g77 兼容时使用,g77 默认给符号添加第二个 _ -Mvarargs 和 -Mnovarargs: 是否生成从 Fortran 调用 C 程序时用变量参数调用序列, 默认为否 -tp target:target 可以为 nehalem-64 等, 默认与编译时的平台一致 建议仔细查看编译器手册中关于程序优化的部分, 多加测试, 选择适合自己程序 的编译选项以提高性能 本系统采用的是 Intel Xeon E CPU, 需要仔细选择, 特 别是保证结果的正确性 3.4 GNU Fortran 编译器重要编译选项 GNU Fortran 编译器是 Linux 系统自带的 Fortran 编译器, 系统安装的版本为 4.4.7, 支 持大部分 gcc 选项, 下面仅仅是列出一些针对 的 gfortran 本人认为常用的重要选项, 建议仔细看 GNU Fortran 和 gcc 的相关资料

32 3 FORTRAN 程序的编译 32 控制 Fortran 语言类型的选项 : -ffree-form 和 -ffixed-form: 声明源文件是自由格式还是固定格式, 默认从 Fortran 90 起的源文件为自由格式, 之前的 Fortran 77 等的源文件为固定格式 -fdefault-double-8: 设置 DOUBLE PRECISION 类型为 8 比特 -fdefault-integer-8: 设置 INTEGER 和 LOGICAL 类型为 8 比特 -fdefault-real-8: 设置 REAL 类型为 8 比特 -fno-backslash: 将反斜线 (\) 当作正常字符 ( 非转义符 ) 处理 -ffixed-line-length-<n>: 设置固定格式源代码的行宽为 n -ffree-line-length-<n>: 设置自由格式源代码的行宽为 n -fmax-identifier-length=<n>: 设置名称的最大字符长度为 n,fortran 95 和 200x 的长度分别为 31 和 65 -fimplicit-none: 禁止变量的隐式声明, 所有变量都需要显式声明 -fcray-pointer: 支持 Cray 指针扩展 -fopenmp: 编译 OpenMP 并行程序 -std=<std>: 指明 Fortran 标准,std 可以为 f95 f2003 legacy -M<dir> 和 -J<dir>: 指定编译时保存生成的模块文件目录 -fconvert=<conversion>: 指定对无格式 Fortran 数据文件表示方式, 其值可以为 :native, 默认值 ;swap, 在输入输出时从大端 (big-endian) 到小端 (littleendian) 交换比特, 或者相反 ;big-endian, 用大端方式读写 ;little-endian, 用小端方式读写 一般选项 : -c: 仅编译成目标文件 (.o 文件 ), 并不进行链接 -o file: 指定生成的文件名 -v: 详细模式, 显示在每个命令执行前显示其命令行 -###: 显示编译器 汇编器 链接器的调用信息但并不进行实际编译, 在脚本中可以用于捕获驱动器生成的命令行 help: 显示帮助信息 target-help: 显示目标平台的帮助信息 version: 显示编译器版本信息 警告选项 :

33 3 FORTRAN 程序的编译 33 -fsyntax-only: 仅仅检查代码的语法错误, 并不进行其余操作 -w: 编译时不显示任何警告, 只显示错误 -Wfatal-errors: 遇到第一个错误就停止, 而不尝试继续运行 调试选项 : -g: 包含调试信息 -ggdb: 包含利用 gbd 调试时所需要的信息 优化选项 : -O[level]: 设置优化级别 优化级别 level 可以设置为 s 预处理选项 : -C: 保留预处理的 C 源文件中的注释 -D name: 在预处理中定义宏 name 的值为 1 -D name=def: 在预处理中定义 name 为 def -U name: 去除预处理中的任何 name 初始定义 -undef: 不预定义系统或 GCC 声明的宏, 但标准预定义的宏仍旧被定义 -dd: 显示源文件中定义的宏及其值到标准输出 -di: 显示预处理中包含的所有文件, 包括文件名和定义时的行号 -dm: 显示预处理时源文件中定义的宏及值, 含定义时文件名和行号 -dn: 与 -dd 类似, 但只显示源文件中定义的宏, 而不显示宏值 -E: 预处理各文件, 将结果发给标准输出, 不进行编译 汇编或链接 -I< 头文件目录 >: 指明头文件的搜索路径 -M: 打印 make 的依赖关系到标准输出 -MD: 打印 make 的依赖关系到文件 file.d, 其中 file 是编译文件的根名字 -MM: 打印 make 的依赖关系到标准输出, 但忽略系统包含 -MMD: 打印 make 的依赖关系到文件 file.d, 其中 file 是编译的文件的根名字, 但忽略系统头文件 -P: 预处理每个文件, 并保留每个 file.c 文件预处理后的结果到 file.i 链接选项 : -pie: 在支持的目标上生成地址无关的可执行文件 -s: 从可执行文件中去除所有符号表

34 3 FORTRAN 程序的编译 34 -rdynamic: 添加所有符号表到动态符号表中 -static: 静态链接所需的库 -shared: 生成共享目标而不是可执行文件, 必须在编译每个目标文件时使用 -fpic 选项 -shared-libgcc: 使用共享 libgcc 库 -static-libgcc: 使用静态 libgcc 库 -u <symbol>: 确保符号 symbol 未定义, 强制连接一个库模块来定义它 -I< 头文件目录 >: 指明头文件的搜索路径 -l< 库文件 >: 指明所需链接的库名, 如库为 libxyz.a, 则可用 -lxyz 指定 -L< 库目录 >: 指明库的搜索路径 -B< 路径 >: 设置寻找可执行文件 库 头文件 数据文件等路径 Intel 386 和 AMD x86-64 平台相关选项 : -mtune=cpu-type: 设置优化针对的 CPU 类型, 可为 :generic core2 opteron opteron-sse3 bdver1 bdver2 等,bdver1 为针对本系统 AMD Opteron CPU 的 -march=cpu-type: 设置指令针对的 CPU 类型,CPU 类型与上行中一样 -mieee-fp 和 -mno-ieee-fp: 浮点操作是否严格按照 IEEE 标准 约定成俗的选项 : -fno-automatic: 将每个程序单元的本地变量和数组声明具有 SAVE 属性 -ff2c: 与 g77 和 f2c 命令生成的代码兼容 -fno-underscoring: 不在名字后添加 _ 注意:gfortran 默认行为与 g77 和 f2c 不兼容, 为了兼容需要加 -ff2c 选项 除非使用者了解与现有系统环境的集成, 否则不建议使用 -fno-underscoring 选项 -funderscoring: 对外部函数名没有 _ 的加 _, 以与一些 Fortran 编译器兼容 -fsecond-underscore: 默认 gfortran 对外部函数名添加一个 _, 如果使用此选项, 那么将添加两个 _ 此选项当使用-fno-underscoring 选项时无效 此选项当使用 -ff2c 时默认启用 -fpic: 生成地址无关的代码以用于共享库 -fpic: 如果目标机器支持, 将生成地址无关的代码 -fpie 和 -fpie: 与 -fpic 和 -fpic 类似, 但生成的地址无关代码只能链接到可执行文件中 建议仔细查看编译器手册中关于程序优化的部分, 多加测试, 选择适合自己程序 的编译选项以提高性能

35 4 OPENMP 程序的编译与运行 Fortran 程序编译举例 Intel Fortran 编译器编译举例 : ifort -o yourprog yourprog.for 将 Fortran 77 程序 yourprog.for 编译为可执行文件 yourprog ifort -o yourprog -static yourprog.f90 将 Fortran 90 程序 yourprog.f90 静态编译为可执行文件 yourprog ifort -o yourprog-omp -openmp yourprog.f90 将 OpenMP 指令并行的 Fortran 90 程序 yourprog-omp.f90 编译为可执行文件 yourprogomp PGI Fortran 编译器编译举例 : pgf77 -o yourprog yourprog.for 将 Fortran 77 程序 yourprog.for 编译为可执行文件 yourprog pgf90 -o yourprog -static yourprog.f90 将 Fortran 90 程序 yourprog.f90 静态编译为可执行文件 yourprog pgf90 -o yourprog-omp -mp yourprog.f90 将 OpenMP 指令并行的 Fortran 90 程序 yourprog-omp.f90 编译为可执行文件 yourprogomp GNU Fortran 编译器编译举例 : g77 -o yourprog yourprog.for 将 Fortran 77 程序 yourprog.for 编译为可执行文件 yourprog gfortran -o yourprog -static yourprog.f90 将 Fortran 90 程序 yourprog.f90 静态编译为可执行文件 yourprog gfortran -o yourprog-omp -fopenmp yourprog.f90 将 OpenMP 指令并行的 Fortran 90 程序 yourprog-omp.f90 编译为可执行文件 yourprogomp 注意 :g77 既不支持 OpenMP, 也不支持 Fortran 90 标准 4 OpenMP 程序的编译与运行 Intel PGI 和 GNU 编译器都支持 OpenMP 并行, 只需利用相关编译命令结合必要 的 OpenMP 编译选项编译即可 对应此三种编译器的 OpenMP 编译选项分别为 -openmp -mp 和 -fopenmp

36 4 OPENMP 程序的编译与运行 36 Intel 编译器 : icc -openmp -o yourprog-omp yourprog.c 将 OpenMP 的 C 程序 yourprog-omp.c 编译为可执行文件 yourprog-omp ifort -openmp -o yourprog-omp yourprog.f90 将 OpenMP 的 Fortran 90 程序 yourprog-omp.f90 编译为可执行文件 yourprog-omp PGI 编译器 : pgcc -mp -o yourprog-omp yourprog.c 将 OpenMP 的 C 程序 yourprog-omp.c 编译为可执行文件 yourprog-omp pgf90 -mp -o yourprog-omp yourprog.f90 将 OpenMP 的 Fortran 90 程序 yourprog-omp.f90 编译为可执行文件 yourprog-omp GNU 编译器 : gcc -fopenmp -o yourprog-omp yourprog.c 将 OpenMP 的 C 程序 yourprog-omp.c 编译为可执行文件 yourprog-omp gfortran -fopenmp -o yourprog-omp yourprog.f90 将 OpenMP 的 Fortran 90 程序 yourprog-omp.f90 编译为可执行文件 yourprog-omp OpenMP 程序的运行一般是通过在运行前设置环境变量 OMP_NUM_THREADS 来控制线程数, 比如在 bash 中利用 export OMP_NUM_THREADS=16 设置使用 16 个线程运行 注意, 本系统为节点内共享内存节点间分布式内存的架构, 因此只能在一个节点上的 CPU 之间运行同一个 OpenMP 程序作业, 在提交作业时需要使用相应选项以保证在同一个节点运行 )

37 37 Part V MPI 并行程序编译及运行 本系统的通信网络有两种 :56Gbps InfiniBand 高速计算网络和千兆以太网 Infini- Band 网络相比千兆以太网具有高带宽低延迟的特点, 通信性能比千兆以太网要高很多, 建议使用 本系统安装有两种 MPI 实现 :Intel MPI 和 Open MPI, 并可与不同编译器相互配合使 用, 安装目录分别在 /opt/intel/impi 和 /opt/openmpi-* 4 系统默认设置使用的 InfiniBand Intel 编译器与 Intel MPI 的组合 默认 Intel MPI 的安装目录为 /opt/intel/impi/ , 建 议使用 用户可以运行 mpi-selector-menu 命令按照提示选择自己使用的 MPI 环境 ( 注意数字 后需要加 u), 设置完成后最好重新登录以便设置生效 : Current system default : intel - mpi _intel - compiler Current user default : <none> u and s modifiers can be added to numeric and U commands to specify user or system-wide. 1. intel - mpi _intel - compiler intel - mpi _intel - compiler intel - mpi _intel - compiler openmpi-1.6.3_intel - compiler openmpi-1.6.3_intel - compiler openmpi-1.6.4_gcc openmpi-1.6.4_intel - compiler openmpi-1.6.4_pgi U. Unset default Q. Quit Selection (1-8[us], U[us], Q): 上述选项的格式 :MPI 实现名 -MPI 实现版本 _ 编译器名 - 编译器版本 以上述为例, 如果想使用 版本的 Open MPI 与 版本的 Intel 编译器的组合, 那么请输入 7u 后回车 4 具有不同版本的 Open MPI 与编译器的组合

38 5 MPI 并行程序的编译 38 5 MPI 并行程序的编译 5.1 Intel MPI 库 Intel MPI 库 5 是一种多模消息传递接口 (MPI) 库, 所安装的 4.1 版本 Intel MPI 库实现 了 MPI V2.2 标准 Intel MPI 库可以使开发者采用新技术改变或升级其处理器和互联网 络而无需改编软件或操作环境成为可能 主要包含以下内容 : Intel MPI 库运行时环境 (RTO): 具有运行程序所需要的工具, 包含多功能守护进程 (MPD) Hydra 及支持的工具 共享库 (.so) 和文档 Intel MPI 库开发套件 (SDK): 包含所有运行时环境组件和编译工具, 含编译器命令, 如 mpiicc 头文件和模块 静态库(.a) 调试库 追踪库和测试代码 编译命令 请注意,Intel MPI 与 Open MPI 等 MPI 实现不同,mpicc mpif90 和 mpifc 命令默认使用 GNU 编译器, 如需指定使用 Intel 编译器等, 请使用对应的 mpiicc mpiicpc 和 mpiifort 命令 下表为 Intel MPI 编译命令及其对应关系 其中 : ia32:ia-32 架构 intel64:intel 64(x86_64, amd64) 架构 移植现有的 MPI 程序到 Intel MPI 库时, 请重新编译所有源代码 如需显示某命令的简要帮助, 可以不带任何参数直接运行该命令 编译命令参数 -mt_mpi: 采用以下级别链接线程安全的 MPI 库 :MPI_THREAD_FUNNELED, MPI_THREAD_SERIALIZED 或 MPI_THREAD_MULTIPLE Intel MPI 库默认使用 MPI_THREAD_FUNNELED 级别线程安全库 注意 : 如使用 Intel C 编译器编译时添加了 -openmp 或 -parallel 参数, 那么使用线程安全库 5 主页 :

39 5 MPI 并行程序的编译 39 表 5: Intel MPI 编译命令及其对应关系 编译命令 调用的默认编译器命令 支持的语言 支持的应用二进制接口 通用编译器 mpicc gcc, cc C 32/64 bit mpicxx g++ C/C++ 32/64 bit mpifc gfortran Fortran77*/Fortran 95* 32/64 bit GNU* Compilers Versions 3 and Higher mpigcc gcc C 32/64 bit mpigxx g++ C/C++ 32/64 bit mpif77 g77 Fortran 77 32/64 bit mpif90 gfortran Fortran 95 32/64 bit Intel Fortran, C++ Compilers Versions 11.1 and Higher mpiicc icc C 32/64 bit mpiicpc icpc C++ 32/64 bit mpiifort ifort Fortran77/Fortran 95 32/64 bit 如果用 Intel Fortran 编译器编译时添加了如下参数, 那么使用线程安全库 : * -openmp * -parallel * -threads * -reentrancy * -reentrancy threaded -static_mpi: 静态链接 Intel MPI 库, 并不影响其它库的链接方式 -static: 静态链接 Intel MPI 库, 并将其传递给编译器, 作为编译器参数 -config=<name>: 使用的配置文件 -profile=<profile_name>: 使用的 MPI 分析库文件 -t 或 -trace: 链接 Intel Trace Collector 库 -check_mpi: 链接 Intel Trace Collector 正确性检查库 -ilp64: 打开局部 ILP64 支持 对于 Fortran 程序编译时如果使用 -i8 选项, 那么也需要此 ILP64 选项

40 5 MPI 并行程序的编译 40 -dynamic_log: 与 -t 组合使用链接 Intel Trace Collector 库 不影响其它库链接方式 -g: 采用调试模式编译程序, 并针对 Intel MPI 调试版本生成可执行程序 可查看官方手册 Environment variables 部分 I_MPI_DEBUG 变量查看 -g 参数添加的调试信息 采用调试模式时不对程序进行优化, 可查看 I_MPI_LINK 获取 Intel MPI 调试版本信息 -link_mpi=<arg>: 指定链接 MPI 的具体版本, 具体请查看 I_MPI_LINK 获取 Intel MPI 版本信息 此参数将覆盖掉其它参数, 如 -mt_mpi -t=log -trace=log 和 -g -O: 启用编译器优化 -fast: 对整个程序进行最大化速度优化 此参数强制使用静态方法链接 Intel MPI 库 mpiicc mpiicpc 和 mpiifort 编译命令支持此参数 -echo: 显示所有编译命令脚本做的信息 -show: 仅显示编译器如何链接, 但不实际执行 -{cc,cxx,fc,f77,f90}=<compiler>: 选择使用的编译器 如 :mpicc -cc=icc -c test.c -gcc-version=<nnn>, 设置编译命令 mpicxx 和 mpiicpc 编译时采用部分 GNU C++ 环境的版本, 如 <nnn> 的值为 340, 表示对应 GNU C x <nnn> 值 GNU* C++ 版本 x x x x x x x x x x x -compchk: 启用编译器设置检查, 以保证调用的编译器配置正确 -v: 显示版本信息

41 5 MPI 并行程序的编译 环境变量 I_MPI_{CC,CXX,FC,F77,F90}_PROFILE 和 MPI{CC,CXX,FC,F77,F90}_PROFILE: 默认分析库 语法 :I_MPI_{CC,CXX,FC,F77,F90}_PROFILE=<profile_name> 过时语法 :MPI{CC,CXX,FC,F77,F90}_PROFILE=<profile_name> I_MPI_TRACE_PROFILE: 设定 -trace 参数使用的默认分析文件 语法 :I_MPI_TRACE_PROFILE=<profile_name> I_MPI_{CC,CXX,F77,F90}_PROFILE 环境变量将覆盖掉 I_MPI_TRACE_PROFILE I_MPI_CHECK_PROFILE: 设定 -check_mpi 参数使用的默认分析 语法 :I_MPI_CHECK_PROFILE=<profile_name> I_MPI_CHECK_COMPILER: 设定启用或禁用编译器兼容性检查 语法 :I_MPI_CHECK_COMPILER=<arg> * <arg> 为 enable yes on 1 时打开兼容性检查 * <arg> 为 disable no off 0 时, 关闭编译器兼容性检查, 为默认值 I_MPI_{CC,CXX,FC,F77,F90} 和 MPICH_{CC,CXX,FC,F77,F90}: 语法 :I_MPI_{CC,CXX,FC,F77,F90}=<compiler> 过时语法 :MPICH_{CC,CXX,FC,F77,F90}=<compiler> <compiler> 为编译器的编译命令名或路径 I_MPI_ROOT: 设置 Intel MPI 库的安装目录路径 语法 :I_MPI_ROOT=<path> <path> 为 Intel MPI 库的安装后的目录 VT_ROOT: 设置 Intel Trace Collector 的安装目录路径

42 5 MPI 并行程序的编译 42 语法 :VT_ROOT=<path> <path> 为 Intel Trace Collector 的安装后的目录 I_MPI_COMPILER_CONFIG_DIR: 设置编译器配置目录路径 语法 :I_MPI_COMPILER_CONFIG_DIR=<path> <path> 为编译器安装后的配置目录, 默认值为 <installdir>/<arch>/etc I_MPI_LINK: 设置链接 MPI 库版本 语法 :I_MPI_LINK=<arg> <arg> 可为 : * opt: 优化的单线程版本 Intel MPI 库 ; * opt_mt: 优化的多线程版本 Intel MPI 库 ; * dbg: 调试的单线程版本 Intel MPI 库 ; * dbg_mt: 调试的多线程版本 Intel MPI 库 ; * log: 日志的单线程版本 Intel MPI 库 ; * log_mt: 日志的多线程版本 Intel MPI 库 编译举例 对于并行程序, 对应不同类型源文件的编译命令如下 : mpicc -o yourprog-mpi yourprog-mpi.c 调用默认 C 编译器将 C 语言的 MPI 并行程序 yourprog-mpi.c 编译为可执行文件 yourprogmpi mpiicxx -o yourprog-mpi yourprog-mpi.cpp 调用 Intel C++ 编译器将 C++ 语言的 MPI 并行程序 yourprog-mpi.cpp 编译为可执行文件 yourprog-mpi mpif90 -o yourprog-mpi yourprog-mpi.f 调用 GNU Forttan 编译器将 Fortran 77 语言的 MPI 并行程序 yourprog-mpi.f 编译为可执行文件 yourprog-mpi mpiifort -o yourprog-mpi yourprog-mpi.f90 调用 Intel Fortran 编译器将 Fortran 90 语言的 MPI 并行程序 yourprog-mpi.f90 编译为可执行文件 yourprog-mpi

43 5 MPI 并行程序的编译 Open MPI 库 Open MPI 6 库是另一种非常优秀 MPI 实现, 用户如需使用可以自己通过运行 mpi-selector-menu 选择与 openmpi 相关的项自己设置即可 Open MPI 的编译命令主要为 : C 程序 :mpicc C++ 程序 :mpic++ mpicxx mpicc Fortran 77 程序 :mpif77 mpif90 Fortran 90 程序 :mpif90 对于并行程序, 对应不同类型源文件的编译命令如下 : mpicc -o yourprog-mpi yourprog-mpi.c 将 C 语言的 MPI 并行程序 yourprog-mpi.c 编译为可执行文件 yourprog-mpi mpicxx -o yourprog-mpi yourprog-mpi.cpp 将 C++ 语言的 MPI 并行程序 yourprog-mpi.cpp 编译为可执行文件 yourprog-mpi, 也可换为 mpic++ 或 mpicc mpif77 -o yourprog-mpi yourprog-mpi.f 将 Fortran 77 语言的 MPI 并行程序 yourprog-mpi.f 编译为可执行文件 yourprog-mpi mpif90 -o yourprog-mpi yourprog-mpi.f90 将 Fortran 90 语言的 MPI 并行程序 yourprog-mpi.f90 编译为可执行文件 yourprog-mpi 编译命令的基本语法为 : 编译命令 [-showme -showme:compile -showme:link]... 编译参数可以为 : showme: 显示所调用的编译器所调用编译参数等信息 showme:compile: 显示调用的编译器的参数 showme:link: 显示调用的链接器的参数 showme:command: 显示调用的编译命令 showme:incdirs: 显示调用的编译器所使用的头文件目录, 以空格分隔 showme:libdirs: 显示调用的编译器所使用的库文件目录, 以空格分隔 6 主页 :

44 6 MPI 并行程序的运行 44 showme:libs: 显示调用的编译器所使用的库名, 以空格分隔 showme:version: 显示 Open MPI 的版本号 默认使用配置 Open MPI 时所用的编译器及其参数, 可以利用环境变量来改变 环 境变量格式为 OMPI_value, 其 value 可以为 : CPPFLAGS: 调用 C 或 C++ 预处理器时的参数 LDFLAGS: 调用链接器时的参数 LIBS: 调用链接器时所添加的库 CC:C 编译器 CFLAGS:C 编译器参数 CXX:C++ 编译器 CXXFLAGS:C++ 编译器参数 F77:Fortran 77 编译器 FFLAGS:Fortran 77 编译器参数 FC:Fortran 90 编译器 FCFLAGS:Fortran 90 编译器参数 5.3 与编译器相关的编译选项 MPI 编译环境的编译命令实际上是调用 Intel PGI 或 GCC 编译器进行编译, 具体优 化选项等, 请参看 Intel MPI Open MPI 以及 Intel PGI 和 GCC 编译器手册 6 MPI 并行程序的运行 在本系统上,MPI 并行程序需结合 IBM Platform LSF 作业调度系统的作业提交命 令 bsub 来调用作业脚本运行, 基本格式为 bsub -q normal -n 16 mpijob executable, 请参 看 VIII 作业调度系统介绍

45 7 INTEL 调试器简介 45 Part VI 程序调试 此部分主要介绍 Intel 调试器, 其它的, 如 GNU 调试器和 PGI 调试器, 很多调试命令 类似 Intel 调试器, 请自己查看相关资料 7 Intel 调试器简介 Intel 调试器 (IDB) 是一个全功能的象征性源代码应用程序调试器, 包括以下功能 : 调试 C/C++ 和 Fortran 程序 反汇编和检查机器码和机器寄存器值 调试多线程应用 ( 只支持在 Linux 主机上 ) 调试 Intel 众核 (MIC) 应用 ( 只支持在 Linux 主机上 ) Intel 调试器在 Linux 系统上有图形界面 (GUI) 和命令行 (command line) 两种方式, 其 内建命令具有 IDB(Intel 调试 ) 和 GDB(GNU 调试 ) 两种模式 Intel 调试器的特性主要包含 : C/C++ 语言支持 ; 汇编语言支持 ; Fortran 语言支持, 包含 Fortran 95/90 标准 ; 访问程序访问的寄存器 ; 修改寄存器的位字段编辑器 ; 与 Intel Inspector XE 的内存错误分析特性兼容 在 Linux 主机上, 基于 Intel C++ 编译器 Intel Click Plus 或 OpenMP 运行时环境,Intel 调 试器有助于在应用开发中引入并行 Intel 调试器提供以下并行调试特性 : 线程数据共享分析, 用于探测不同线程对相同数据元素的访问 ( 针对 C/C+ + 和 Fortran); 智能断点, 用于在从不同线程重入函数调用上停止程序执行 ;

46 8 准备所需要调试的程序 46 显示向量寄存器的视图, 如 Intel Streaming SIMD Extensions (Intel SSE) 寄存器, 具有利用单指令多数据 (SIMD) 指令集和广泛的格式和编辑选项调试并行数据 ; 模拟串行执行 OpenMP 代码或 Intel Cilk Plus 代码的模式 ; OpenMP 运行时信息视图集, 用于高级 OpenMP 程序状态分析 图形界面的 Intel 调试器提供了完全的调试进程控制, 通过点击工具栏按钮, 就可以使用大多数基本函数, 如单步 (single-step) 执行 执行完函数的单步执行 (step-throughfunction) 运行和显示内存 图形界面的 Intel 调试器支持多源代码窗口 计算表达式和改变其值, 拖曳表达式到计算窗口等 图形界面的 Intel 调试器相对简单, 本手册主要介绍基于命令行的 Intel 调试器, 但部分功能需要图形界面的调试器 8 准备所需要调试的程序 8.1 准备调试代码源代码 调试程序时, 一般无需修改程序源代码, 但是在程序中建议做如下改变 : 如果程序运行后, 利用调试器难于终止, 请设置一个初始停止点 ; 在源代码增加一些断言, 以便帮助定位错误 8.2 准备编译器和连接器环境 调试信息被编译器存储在.o 文件 信息的级别和格式由编译器选项控制 对于 Intel C/C++ 或 Fortran 编译器, 采用 -g 选项, 例如 : icc -g hello.c icpc -g hello.cpp ifort -g hello.f90 对于 GCC 编译器, 采用 -g 选项 对于一些较老版本的 GCC, 此选项也许会产生 DWARF-1 标准的调试信息, 如果这样, 请使用 -gdwarf-2 选项, 例如 : gcc -gdwarf-2 hello.c g++ -gdwarf-2 hello.cpp

47 8 准备所需要调试的程序 47 gfortran -gdwarf-2 hello.f90 调试信息将通过 ld 命令导入到 a.out( 可执行程序 ) 或.so( 共享库 ) 文件中 如果是在调试优化编译的代码, 采用 -g 选项将自动增加 -O0 选项 请参看调试优化编译的代码部分中关于 -g 和相关扩展调试选项及它们的与优化之间的关系 8.3 调试优化编译的代码 Intel 调试器可以通过使用 -g 参数帮助调试优化编译的程序 但是关于此程序的信息也许并不准确, 尤其是变量的地址和值经常没有被正确报告, 这是因为通用调试信息模式无法全部表示 -O1 -O2 -O3 及其它优化选项的复杂性 为了避免此限制, 采用 Intel 编译器编译程序时在所需的 -O1 -O2 或 -O3 优化选项同时指明 -g 和 -debug 扩展选项 这会产生具有更多高级但更少通用支持的调试信息, 主要激活以下 : 给出变量的正确地址和值, 不管其是在寄存器或不同时间在不同地址时 注意 : 在程序中, 一些变量可能被优化掉或转换成不同类型的数据, 或其地址没有在所有点都被记录 在这些情形下, 打印变量时将显示无值 < novalue > 否则, 这些值和地址将正确, 但这些寄存器没有地址, 调试器中 print &i 命令将打印一条警告 尽管 break main 命令通常将在程序开始处理后停止, 但程序大多数变量和参数在程序的开始处理和结束处理时是未定义的 在堆栈追踪中显示内联函数, 这通过使用 inline 关键词识别 注意 : 只有在堆栈顶端和通常 ( 非内联 ) 调用的函数显示指令指针, 其原因在于其它函数与其调用的内联函数共享硬件定义的堆栈帧 返回指令将只返回对那些采用调用指令时是非内联调用函数的控制, 其原因在于内联调用没有定义返回地址 up down 和 call 命令以通常方式工作 允许在内联函数中设置断点 Intel 调试器存在以下限制 : 优化经常导致产生的对某一行源代码的指令的顺序与源代码的顺序不一致 ; 针对某一行的指令也许与对其它源码行的指令混合 在这些代码中单步追踪时, 程序将趋向于不顺次在每一行源代码上停止, 而是在源代码行变化发生时停止

48 8 准备所需要调试的程序 准备所需要调试的并行程序 必须用 Intel 编译器编译源代码才可以使用 Intel 调试器特性, 比如分析共享数据或 在重入函数调用中停止 为了使用并行调试特性, 需要 : 如果存在 makefile 编译配置文件, 请对它进行编辑 在命令行添加编译器选项 -debug parallel 重编译程序 8.5 编译所要调试的程序 下面以常做为例子的 hello 程序为例介绍 hello.c 例子 : #include <stdio.h> int main() { printf( Hello World!\n ); return 0; } 编译 : icc -debug -O0 helloworld.c -o helloworld hello.f90 例子 : program main print *, Hello World! end program main 编译 : ifort -debug -O0 helloworld.f90 -o helloworld

49 9 开始调试程序 49 9 开始调试程序 9.1 启动基于命令行的 Intel 调试器 在 Linux 系统上 Intel 调试器的 idb 命令默认使用图形界面启动, 为了使用命令行方式 启动, 请运行命令 idbc Intel 调试器有两种调试模式 :IDB 和 GDB 模式, 可以分别以以下方式启动 : idbc -idb idbc -gdb 查看可用的选项, 可以运行命令 idbc --help 启动所需要调试的程序, 有几种方式 : 启动调试器时运行程序 :idbc yourprogram 启动调试器后调用程序 : 启动调试器 :idbc 在 idbc 命令行中启动程序 :file yourprogram 调试出错时生成的 core 文件 :idbc yourprogram corefilename 启动调试器时附着到某个进程 :idbc -p processid 9.2 在调试器中卸载程序 file( 只用于 GDB 模式 ) 不跟任何参数将卸载当前可执行程序, 只卸载当前可执行程序 unload [pid filename](idb 模式 ) 指明进程号或文件名卸载 detach 以附着到某个进程启动调试器时取消附着 9.3 显示源代码 在调试器启动后的命令行中输入 list 命令可以显示源代码, 如输入 list main, 将显 示 main 函数的代码

50 9 开始调试程序 运行程序 在命令行中输入 run, 将开始运行程序 9.5 设置和删除断点 设置断点 : 输入以下命令 :break main 此时在程序 main 处设置了一个断点 输入 run 再次运行程序应用将停止在设置的断点处 删除断点 : 列出所有设置的断点 ID 号 :info breakpoints 调试器将显示所有存在的断点 指明所要删除的断点 ID 号 如果从开始调试后没有设置其它断点, 那么只有 1 个断点, 其 ID 号为 1 删除此断点 :delete breakpoint 1 那么将删除设置断点 1 重新运行程序 那么程序将运行并显示 Hello World!, 并退出程序 9.6 控制进程环境 用户可以 :1 对进程的环境变量进行设置或者取消设置以便在将来使用;2 设置与当前调试器环境和启动调试器的 shell 不同的环境 设置的变量将影响后续调试的新进程 环境命令不影响当前运行进程 设置的环境变量不改变或显示调试器的环境变量, 它们只影响新产生的进程 显示当前集的所有环境变量, 可采用以下方式之一 : show environment( 仅 gdb 模式 ) export( 仅 idb 模式 ) printenv( 仅 idb 模式 ) setenv( 仅 idb 模式 )

51 9 开始调试程序 51 增加或改变环境变量, 可采用以下命令之一 : set environment( 仅 gdb 模式 ) export( 仅 idb 模式 ) setenv( 仅 idb 模式 ) 取消一个环境变量, 可采用以下命令之一 : * unset environment( 仅 gdb 模式 ) * unsetenv( 仅 idb 模式 ) 注意 :Intel 调试器没有命令可以简单回到调试器启动时的环境变量的初始状态, 用户必须正确设置和取消环境变量 9.7 执行一行代码 如果源代码当前行是函数调用, 那么可以步入 (step into) 或者跨越 (step voer) 此函数 1. 步进执行一行源代码, 步入到此函数中 : (a) 使用 step 命令应用执行一行代码 如果当前行是函数调用, 那么应用步入到函数中, 即不执行完此函数调用 2. 步进执行一行源代码, 跨越执行完此函数 : (a) 使用 next 命令应用执行一行代码 如果当前行是函数调用, 那么应用跨越此函数, 即执行完此函数调用 9.8 执行代码直到 运行代码直到某行或某个表达式, 可用 until 命令 9.9 执行一行汇编指令 如果应用的当前指令为函数调用, 那么可以步入或者跨越此函数 1. 步进执行一行汇编指令, 步入到此函数中 :

52 10 传递命令给调试器 52 (a) 使用 stepi 命令应用执行一行指令 如果下一行指令是函数调用, 那么应用步入到函数中 2. 步进执行一行汇编指令, 跨越此执行完此函数 : (a) 使用 nexti 命令应用执行到下一汇编代码 如果当前行是跳出或调用, 那么应用跨越过它 9.10 显示变量或表达式值 利用 print 命令可以显示变量值或表达式的值 如 : 显示变量 val2 的当前值 :print val2 显示表达式 val2*2 的值 :print val2* 退出调试器 在命令行中输入 quit, 将退出调试器 10 传递命令给调试器 10.1 调试多进程 图形界面 Intel 调试器不支持调试多进程, 采用命令行方式代替 调试器可以同时发现和控制多个进程, 由于以下原因之一 : 它产生的此进程 它附着的此进程 在任何时刻, 利用 Intel 调试器只可以检查或执行一个单独的所控制的进程 剩余 的被停止, 用户必须精确地将调试器变换到想要调试的进程, 并停止正在控制的进程 显示调试器所控制的进程 : 1. 如没有在 IDB 模式下, 利用以下命令转换到 IDB 模式 : (a) $cmdset = idb

53 10 传递命令给调试器 53 (b) 输入 process 或 show process 命令调试器显示它所控制的任何进程 2. 如果想变换到 GDB 模式, 利用以下命令 : (a) $cmdset = gdb 3. 将调试器变换到某一特定进程 : (a) 如没有在 IDB 模式下, 利用以下命令转换到 IDB 模式 : (idb) $cmdset = idb (b) 输入 process 命令变换离开的进程将保持停止, 直到或者调试器退出或者变换到它并继续它 4. 如果想变换到 GDB 模式, 利用以下命令 : (a) $cmdset = gdb 10.2 支持多调用框架 线程和源 进程包含一个或多个执行线程 线程执行函数 函数是指令的序列, 是由编译器从源文件的源行中编译成的 在进入 Intel 调试器调试进程时, 也许会非常乏味地重复指定哪个线程 源文件等, 以便应用命令 为了避免这样, 每次调试器停止进程时, 会重新建立用户命令的静态上下文和动态上下文 动态上下文的组件依赖于用户运行的程序, 静态上下文独立于用户的运行 用户可以使用调试器变量显示上下文的组件或通过使用其它命令显示 静态上下文包含下表中的 : 当前程序 当前文件 当前行 info sharedlibrary(gdb 模式 ) 或 listobj(idb 模式 ),info file print $curfile print $curline 动态上下文包含下表中的 : Intel 调试器保持静态和动态上下文组件一致作为上下文改变 调试器决定当前文 件和行对应进程停止的位置, 但用户也可通过下面命令直接改变动态上下文 : frame(gdb 模式 )

54 10 传递命令给调试器 54 where print $curprocess print $curthread thread 当前调用框架当前进程当前线程导致调试器获得进程控制的线程执行事件 up 或 down func(idb 模式 ) process(idb 模式 ) thread 用户可以利用 file(gdb 模式 ) 或 unload(idb 模式 ) 命令卸载程序 10.3 命令 文件名和变量补全 Intel 调试器支持命令 文件名和变量的补全 在 Intel 调试器命令行中开始键入一个命令 文件名或变量名, 然后按 Tab 键 如果有不只一个备选, 调试器会发出铃声 再一次按 Tab 键, 将列出备选 利用单引号和双引号影响可能备选集 利用单引号填充 C++ 名字, 包含特殊字符的 ( :, <, >, ( 等 ) 利用双引号告诉调试器在文件名中查看备选 10.4 自定义命令 Intel 调试器支持用户自定义命令 GDB 模式 : 用户定义的命令支持在定义体内包含 if while loop_break 和 loop_continue 命令 用户定义的命令最多可有 10 个参数, 以空白分割 参数名依次为 $arg0, $arg1, $arg2,..., $arg9 参数总数存储在 $argc 中 其步骤为 : 输入 define commandname 每行输入一个命令 输入 end

55 11 调试并行程序 55 IDB 模式 : 利用 alias 命令来定义或显示用户自己的命令 定义可以包含 : 另一个 alias 的名字, 如果在定义中嵌套的 alias 是第一个识别符 引号包含的字符串, 如果在指定的引号前加了反斜线 两个引用标记不能一起用 ; 它们必须用一个空格或至少一个字符分割 11 调试并行程序 11.1 与线程和进程组一起工作 总览 线程是进程内部单个 串行控制流 每个线程包含单个执行点 线程在单个地址空间中 ( 共享 ) 执行 ; 因此, 进程的线程可以读写相同的内存地址 多个进程执行时, 当用户需要关注某个进程时, 它却恼人地或不切实际地枚举所有进程 当为了设置代码断点而定义停止线程和线程过滤器时, 用户需要定义线程集 用户可以以紧凑方式指定进程或线程集, 集可包含一个或多个范围 用户可以对每个进程集执行普通操作, 调试器变量既可以存储集也可以存储范围以便操作 引用和查看 进程和线程集表示法 指明进程和线程集进程或线程集包含进程或线程 ID 的一个或多个连续范围, 以逗号 (,) 分割 1. 为了指明一个进程集, 采用下面表示法 : [ range {,...} ] 2. 声明一个线程集, 采用下面表示法 : t:[ range {,...}} ] 3. 利用空括号显示空集 : [ ] 4. 可以利用表达式 通配符及合并线程集来指明进程和线程集

56 11 调试并行程序 56 例如 : 下面例子包含当前进程中的前三个线程 : t:[1,2,3] 下面例子采用表达式来指明线程集 : t:[1:3+foo()] 下面例子指明了合并后的进程集 : :[*] -t:[1] 下面例子包含当前进程中的所有线程 : t:[*] 下面例子包含当前进程中除线程 1 和 6 之外的所有线程 : t:[2:5, 7:] 指明进程或线程的范围为了指明进程或线程的一段范围, 采用以下表示法 : *: 指明所有进程或线程 expression : * 如果 expression 的值可以计算出或强制转换成一个整数 p, 那么此集只包含具有 ID p 的线程或进程 * 如果 expression 可以计算成一个范围 r, 那么集与 r 相同 { expression } : { expression }: 指明进程或线程的连续范围 例如 :[10:12] 指明具有进程号 和 12 的进程 ;t:[10:12] 指明具有线程号 和 12 的线程 注意 :Intel 调试器忽略下限大于上限的范围 下限和上限都是可选的, 因此可以类似下面指明 : :n: 所有 ID 号不大于 n 的进程或线程 例如,[:5] 代表所有进程号不大于 5 的进程 n:: 所有 ID 号不小于 n 的进程或线程 例如,t:[20:] 代表所有线程号不小于 20 的线程 :: 所有进程或线程

57 11 调试并行程序 在调试器中存储进程和线程集 在 Intel 调试器中利用 set 命令可以在调试器变量中存储进程和线程集 如 : set $set1 = [:7, 10, 15:20, 30:] 可以用 print 和 show process set 命令显示存储的值 print $set1 如果用户没有指明集名, 或指明了所有, 调试器显示所有存储在调试器变量中的进程集 例如 : 设置 set2:set $set2 = [8:9, 5:2, 22:27] 显示 set2 值 :show process set $set2 将显示 : $set2 = [8:9, 22:27] 显示所有进程集 :show process set * 将显示 : $set1 = [:7, 10, 15:20, 30:] $set2 = [8:9, 22:27] 下面例子设置变 $myset2, 包含线程 和 $myset1 集 : set $myset2 = t:[3, 10:20, 50:] + $myset 进程和线程集操作 Intel 调试器中的进程和线程集支持下表中的操作 : 操作 代表 指定动作 + 并集 作用在 S1 和 S2 集上, 返回包含在 S1 集或包含在 S2 集中的元素 - 差集 作用在 S1 和 S2 集上, 返回包含在 S1 集, 但不包含在 S2 集中的元素 单目操作符 - 负号 作用在集 S 上, 返回全集与 S 集的差集 预定义的线程集 默认,Intel 调试器包含以下调试器变量集, 以便使用户能方便访问几个线程集 用户可以用这些变量来定义用户自己的线程集 :

58 11 调试并行程序 58 $allthreads $currentlockstepthreads $currentopenmpteam $currentthread $frozenthreads $lasteventingthread $uninterruptedthreads 所有存在调试线程 具有相同程序计数器作为当前线程的线程集 在 OpenMP 中, 并行区域产生一个线程组队 当当前线程是一个线程队的成员时,$currentopenmpteam 是最里面队里的所有线程与当前线程 当前线程 当一个事件发生时, 调试器将当前线程设置为事件线程 利用 thread 命令可以将一个线程设置为当前线程 当前冻结的线程 引发最后事件的线程 调试事件可以是断点 同步点 信号发生或异常 不可终止的线程 查看线程与线程集 在 Intel 调试器命令行上可以使用 info threads 命令查看线程与线程集 改变当前进程集 在 Intel 调试器命令行上可以使用 focus 命令改变当前进程集 11.2 调试多线程应用 在 OpenMP 和串行代码中寻找 bug 为了判定 bug 是由并发导致的还是在算法内部导致的, 串行执行 OpenMP 并行代码区域并限制这些代码区域在针对每个区域的单个线程中执行非常有用 用户可以动态串行化这些代码区域, 因此无需重新编译或重启 OpenMP 应用 注意 : 当用户在程序在并行区域执行时启用串行化, 此区域并不会串行化执行, 只是随后的区域将是串行化执行 当用户终止串行化, 只有当前地址后的区域重新回到并行 串行化所选择的区域时, 在此区域之前或之后设置断点非常有用 这将帮助用户在选择区域被执行前打开串行化, 及在其它并行区域前关闭串行化 利用这种选择性串行化, 应用的其余部分仍旧可以并行, 这将缩短执行时间 串行化一个 OpenMP 并行区域 : 到向串行化的代码区域 在此区域之前的行处和之后行处分别设置一个断点 此步帮助用户串行化此特别的代码区域

59 11 调试并行程序 59 运行或重新运行应用 应用将停止在第一个断点处 启用串行化 : 输入命令 idb set openmp-serialization on 继续调试 应用停止在下一个断点处 只有单个线程执行此区域 终止串行化执行 : 输入命令 idb set openmp-serialization off 所有随后的 OpenMP 并行区域被多个线程执行, 直到用户重新启用串行化 注意 : 每一次用户想串行运行相同区域时, 用户都必须在第一个断点处启用串行, 在第二个断点处终止串行 查看 OpenMP 信息 当调试 OpenMP 应用时,Intel 调试器提供 OpenMP 的锁 队和线程信息 为了启用 OpenMP 支持, 必须保证调试器访问了共享库 libomp_db.so, 默认此库在编译器安装目录的 lib/intel64 或 lib/ia32 目录下 当 Intel 调试器探测到是在调试 OpenMP 程序时, 会自动启动 OpenMP 支持 为了关闭 OpenMP 支持, 需要执行下面命令 : set $threadlevel= native 如要重新启用, 则执行下面命令 : set $threadlevel= openmp 图形界面 Intel 调试器支持查看以下 OpenMP 应用信息 : 信息利用的窗口使用的命令 线程 Threads Window idb info thread 任务 Tasks Window idb info task 栅栏 ( 同步 ) Barriers Window idb info barrier 任务等待 Taskwaits Window idb info taskwait 锁 Locks Window idb info locks 队 Team Window idb info teams 父 / 子关系 Spawn Tree Window idb info openmp thread tree 线程数据共享探测 关于线程数据共享探测 :

Intel C/C++ Fortran编译器的使用

Intel C/C++ Fortran编译器的使用 .. Intel C/C++ Fortran 编译器的使用 李会民 hmli@ustc.edu.cn 中国科学技术大学超级运算中心 2011 年 10 月 李会民 ( 中国科大超算中心 ) Intel 编译器的使用 2011 年 10 月 1 / 26 .1 Intel C/C++ Fortran 编译器简介.2 Intel C/C++ 编译器用法.3 Intel Fortran 编译器用法.4 串行程序调试.5

More information

GNU C/C++ Fortran编译器

GNU C/C++ Fortran编译器 .. GNU C/C++ Fortran 编译器的使用 中国科学技术大学超级运算中心 2011 年 10 月 ( 中国科大超算中心 ) Intel 编译器的使用 2011 年 10 月 1 / 41 .1 GNU C/C++ Fortran 编译器简介.2 GNU C/C++ 编译器用法.3 GNU Fortran 编译器用法.4 串行程序调试 :gdb.5 联系信息 ( 中国科大超算中心 ) Intel

More information

GNU C/C++ Fortran编译器

GNU C/C++ Fortran编译器 GNU C/C++ Fortran 编译器的使用河南师范大学高性能计算中心 2015-12-5 ( 河南师大高性能计算中心 ) GNU 编译器的使用 2015-12-5 1 / 41 1 GNU C/C++ Fortran 编译器简介 2 GNU C/C++ 编译器用法 3 GNU Fortran 编译器用法 4 串行程序调试 :gdb 5 联系信息 ( 河南师大高性能计算中心 ) GNU 编译器的使用

More information

MPI编译环境的使用

MPI编译环境的使用 MPI 编译环境的使用河南师范大学高性能计算中心 2015-12-5 ( 河南师大高性能计算中心 ) MPI 编译环境的使用 2015-12-5 1 / 24 1 主流 MPI 环境介绍 2 Intel MPI 环境 3 Open MPI 等主流 MPI 环境 4 联系信息 ( 河南师大高性能计算中心 ) MPI 编译环境的使用 2015-12-5 2 / 24 MPI 编译环境简介各种 MPI 编译环境实际上为

More information

MPI编译环境的使用

MPI编译环境的使用 MPI 编译环境的使用李会民 hmli@ustceducn 中国科学技术大学超级计算中心 2016-9-13 李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2016-9-13 1 / 25 1 主流 MPI 环境介绍 2 Intel MPI 环境 3 Open MPI 等主流 MPI 环境 4 联系信息李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2016-9-13 2 /

More information

MPI编译环境的使用

MPI编译环境的使用 MPI 编译环境的使用李会民 hmli@ustceducn 中国科学技术大学超级计算中心 2015 年 4 月 16 日李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2015 年 4 月 16 日 1 / 25 1 主流 MPI 环境介绍 2 Intel MPI 环境 3 Open MPI 等主流 MPI 环境 4 联系信息李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2015

More information

MPI编译环境的使用

MPI编译环境的使用 MPI 编译环境的使用李会民 hmli@ustceducn 中国科学技术大学超级计算中心 2014 年 4 月 10 日李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2014 年 4 月 10 日 1 / 24 1 主流 MPI 环境介绍 2 联系信息李会民 ( 中国科大超算中心 ) MPI 编译环境的使用 2014 年 4 月 10 日 2 / 24 MPI 编译环境简介各种 MPI

More information

MPI编译环境的使用

MPI编译环境的使用 .. 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 联系信息 李会民 (

More information

中国科学技术大学超级计算中心刀片及胖节点超级计算系统使用指南

中国科学技术大学超级计算中心刀片及胖节点超级计算系统使用指南 中国科学技术大学超级计算中心 刀片及胖节点超级计算系统使用指南 李会民 2016 年 5 月 27 日 目录 1 前言 4 2 刀片及胖节点超算系统概述 5 3 用户登录与文件传输 7 4 串行及 OpenMP 程序编译 9 4.1 编译器简介................................... 9 4.1.1 Intel C/C++ Fortran 编译器简介....................

More information

Intel C/C++ Fortran编译器的使用

Intel C/C++ Fortran编译器的使用 Intel C/C++ Fortran 编译器的使用河南师范大学高性能计算中心 2015-12-5 ( 河南师大高性能计算中心 ) Intel 编译器的使用 2015-12-5 1 / 44 1 Intel C/C++ Fortran 编译器简介 2 Intel C/C++ 编译器用法 3 Intel Fortran 编译器用法 4 串行程序调试 5 联系信息 ( 河南师大高性能计算中心 ) Intel

More information

Intel C/C++ Fortran编译器的使用

Intel C/C++ Fortran编译器的使用 Intel C/C++ Fortran 编译器的使用李会民 hmli@ustceducn 中国科学技术大学超级计算中心 2014 年 4 月 25 日李会民 ( 中国科大超算中心 ) Intel 编译器的使用 2014 年 4 月 25 日 1 / 44 1 Intel C/C++ Fortran 编译器简介 2 Intel C/C++ 编译器用法 3 Intel Fortran 编译器用法 4 串行程序调试

More information

Slide 1

Slide 1 基本编译和纠错 吴宏文 hongwenwu@cn.ibm.com IBM STG Lab Services and Training 1 目录 AIX 上编译介绍 MPI 编译运行介绍 一般程序的纠错 2 一般编译过程 源文件 source 编译 目标文件 object 连接 可执行文件 exe 执行 3 一般编译过程 Unix 系统中, 可执行文件没有统一的后缀, 系统从文件的属性来区分可执行文件和丌可执行文件

More information

.... 青能所超级计算平台用户 2011 年 3 月培训 李会民 中国科学院青岛生物能源与过程研究所超级计算中心 年 03 月 李会民 ( 中科院青能所 ) 青能所超算用户培训 2011 年 03 月 1 / 55

.... 青能所超级计算平台用户 2011 年 3 月培训 李会民 中国科学院青岛生物能源与过程研究所超级计算中心 年 03 月 李会民 ( 中科院青能所 ) 青能所超算用户培训 2011 年 03 月 1 / 55 青能所超级计算平台用户 2011 年 3 月培训 李会民 hmli@ustceducn 中国科学院青岛生物能源与过程研究所超级计算中心 2011 年 03 月 李会民 ( 中科院青能所 ) 青能所超算用户培训 2011 年 03 月 1 / 55 培训内容 1 青能所超算平台简介 2 用户登录与文件传输 3 串行及 OpenMP 程序编译 4 MPI 并行程序编译 5 数学函数库 6 作业管理系统

More information

第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V 正式版本

第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V 正式版本 V3s 项目 CamDroid 编译第三方程序 / V1.0 第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V1.0 2014-04-23 正式版本 第 2 页共 9 页 目录 1. 交叉编译环境... 3 2. 第三方库的 Makefile 示例... 4 3. 第三方应用 Makefile 示例... 5 4. 第三方应用 CamLinux.mk 示例... 6 5. 常见错误...

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

第7章-并行计算.ppt

第7章-并行计算.ppt EFEP90 10CDMP3 CD t 0 t 0 To pull a bigger wagon, it is easier to add more oxen than to grow a gigantic ox 10t 0 t 0 n p Ts Tp if E(n, p) < 1 p, then T (n) < T (n, p) s p S(n,p) = p : f(x)=sin(cos(x))

More information

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un Linux C July 27, 2016 Contents 1 Linux IDE 1 2 GCC 3 2.1 hello.c hello.exe........................... 5 2.2............................... 9 2.2.1 -Wall................................ 9 2.2.2 -E..................................

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0 SDChain-Matrix 节点搭建指南 目录 1 环境要求... 3 2 软件下载... 4 3 安装部署... 4 3.1 部署可执行程序目录... 4 3.2 部署配置文件目录... 4 3.3 部署数据库文件目录... 4 3.4 部署日志文件目录... 4 3.5 部署依赖库文件目录... 4 4 配置参数... 5 5 启动运行... 7 5.1 普通模式启动... 7 5.2 加载启动模式...

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM Oracle Solaris Studio 12.2 DLight 2010 9 2 2 3 DLight 3 3 6 13 CPU 16 18 21 I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AMP Apache MySQL

More information

录 环 录结 统 资 查 环 设 设 环 变 库 问题 业 计 结 资 请 业 业查 WRF CESM

录 环 录结 统 资 查 环 设 设 环 变 库 问题 业 计 结 资 请 业 业查 WRF CESM 绍 陈 锟 级计 jingkun.chen@nscc-gz.cn 录 环 录结 统 资 查 环 设 设 环 变 库 问题 业 计 结 资 请 业 业查 WRF CESM 环 户 结 结 ln (login node) cn ( compute node) trans-server 盘结 户 ln0~ln3 户 ln7~ln8 ln 过 ssh 进 cn 须 业 进./WORK NSFCGZ /app/toolshs/transserver.sh

More information

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

C/C++语言 - C/C++数据

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

Eclipse C C++, or

Eclipse C C++,  or Eclipse C C++, Emailctchen@pl.csie.ntut.edu.tw or s1669021@ntut.edu.tw, s2598003@ntut.edu.tw http://pl.csie.ntut.edu.tw/~ctchen, http://www.ntut.edu.tw/~s2598003/ 2004/9/10 (0.02 ) Eclipse http://www.eclipse.org

More information

EK-STM32F

EK-STM32F STMEVKIT-STM32F10xx8 软 件 开 发 入 门 指 南 目 录 1 EWARM 安 装... 1 1.1 第 一 步 : 在 线 注 册... 1 1.2 第 二 步 : 下 载 软 件... 2 1.3 第 三 步 : 安 装 EWARM... 3 2 基 于 STMEVKIT-STM32F10xx8 的 示 例 代 码 运 行... 6 2.1 GPIO Demo... 6 2.2

More information

ebook8-30

ebook8-30 3 0 C C C C C C++ C + + C++ GNU C/C++ GNU egcs UNIX shell s h e l l g a w k P e r l U N I X I / O UNIX shell awk P e r l U N I X C C C C C C U N I X 30.1 C C U N I X 70 C C U N I X U N I X U N I X C Dennis

More information

深腾7000 * SGI Altix4700胖节点使用指南

深腾7000 * SGI Altix4700胖节点使用指南 新一代超级计算机 元 用户快速使用指南 中国科学院计算机网络信息中心 超级计算中心 2014 年 12 月 15 日 目录 1. 基本环境简介... 4 1.1. 硬件环境... 4 1.2. 软件环境... 5 2. 上机使用... 6 2.1. 系统登录和数据传输... 6 2.2. 环境变量设置... 6 2.3. 程序编译... 7 2.3.1. 串行程序编译... 7 2.3.2. OpenMP

More information

Prepare.ppt [兼容模式]

Prepare.ppt [兼容模式] 课前实验 Linux 操作系统的安装 C 语言编程环境的设置 TinyOS 开发环境的设置 一 实验目的 1 学会在计算机或虚拟机环境中安装 Linux 操作系统 2 学会在 Linux 下进行 C 语言编程 3 掌握交叉编译开发, 学会在 Linux 下设置 TinyOS 开发环 境, 能够完成基于 NesC 的 TinyOS 应用程序开发 二 Linux 操作系统的安装 14.04.4-desktop-amd64.iso

More information

Oracle Solaris Studio makefile C C++ Fortran IDE Solaris Linux C/C++/Fortran IDE "Project Properties" IDE makefile 1.

Oracle Solaris Studio makefile C C++ Fortran IDE Solaris Linux C/C++/Fortran IDE Project Properties IDE makefile 1. Oracle Solaris Studio 12.2 IDE 2010 9 2 8 9 10 11 13 20 26 28 30 32 33 Oracle Solaris Studio makefile C C++ Fortran IDE Solaris Linux C/C++/Fortran IDE "Project Properties" IDE makefile 1. "File" > "New

More information

Oracle Oracle Solaris Studio IDE makefile C C++ Fortran makefile IDE Solaris Linux C/C++/Fortran Oracle IDE "P

Oracle Oracle Solaris Studio IDE makefile C C++ Fortran makefile IDE Solaris Linux C/C++/Fortran Oracle IDE P Oracle Solaris Studio 12.3 IDE 2011 12 E26461-01 2 7 8 9 9 Oracle 10 12 14 21 26 27 29 31 32 33 Oracle Solaris Studio IDE makefile C C++ Fortran makefile IDE Solaris Linux C/C++/Fortran Oracle IDE "Project

More information

华恒家庭网关方案

华恒家庭网关方案 LINUX V1.5 1 2 1 2 LINUX WINDOWS PC VC LINUX WINDOWS LINUX 90% GUI LINUX C 3 REDHAT 9 LINUX PC TFTP/NFS http://www.hhcn.com/chinese/embedlinux-res.html minicom NFS mount C HHARM9-EDU 1 LINUX HHARM9-EDU

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

目录 1 IPv6 PIM Snooping 配置命令 IPv6 PIM Snooping 配置命令 display pim-snooping ipv6 neighbor display pim-snooping ipv6 routing-ta

目录 1 IPv6 PIM Snooping 配置命令 IPv6 PIM Snooping 配置命令 display pim-snooping ipv6 neighbor display pim-snooping ipv6 routing-ta 目录 1 IPv6 PIM Snooping 配置命令 1-1 1.1 IPv6 PIM Snooping 配置命令 1-1 1.1.1 display pim-snooping ipv6 neighbor 1-1 1.1.2 display pim-snooping ipv6 routing-table 1-2 1.1.3 display pim-snooping ipv6 statistics

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Linux 操 作 系 统 基 础 介 绍 课 程 目 标 及 要 求 了 解 Linux 操 作 系 统 的 登 入 方 式 掌 握 常 用 命 令 的 基 本 用 法 能 够 熟 练 在 各 个 目 录 转 换 Outline 1. Linux 操 作 系 统 简 介 2. Linux 操 作 系 统 的 登 录 3. Linux 操 作 系 统 的 目 录 结 构 4. 常 用 命 令 5.

More information

目录 1 H3C R4900 G2 服务器可选部件与操作系统兼容性列表 控制卡 GPU 卡 网卡 FC HBA 卡 TPM/TCM 模块 NVMe SSD PCle 加速卡 1-31 i

目录 1 H3C R4900 G2 服务器可选部件与操作系统兼容性列表 控制卡 GPU 卡 网卡 FC HBA 卡 TPM/TCM 模块 NVMe SSD PCle 加速卡 1-31 i 目录 1 H3C R4900 G2 服务器可选部件与操作系统兼容性列表 1-1 1.1 控制卡 1-1 1.2 GPU 卡 1-5 1.3 网卡 1-8 1.4 FC HBA 卡 1-21 1.5 TPM/TCM 模块 1-29 1.6 NVMe SSD PCle 加速卡 1-31 i 1 H3C R4900 G2 服务器可选部件与操作系统兼容性列表 本手册为产品通用资料 对于定制化产品, 请用户以产品实际情况为准

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

一、

一、 ... 1...24...58 - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - i. ii. iii. iv. i. ii. iii. iv. v. vi. vii. viii. ix. x. - 9 - xi. - 10 - - 11 - -12- -13- -14- -15- C. @ -16- @ -17- -18- -19- -20- -21- -22-

More information

江苏宁沪高速公路股份有限公司.PDF

江苏宁沪高速公路股份有限公司.PDF - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - 33.33% ( ) ( ) ( ) 33.33% ( ) ( ) ( ) 1 1 1992 8 3200001100976 1997 6 27 H 12.22 2001 1 16 A 1.5 2001 12 3 503,774.75 14,914,399,845.00 13,445,370,274.00

More information

Autodesk Product Design Suite Standard 系统统需求 典型用户户和工作流 Autodesk Product Design Suite Standard 版本为为负责创建非凡凡产品的设计师师和工程师提供供基本方案设计和和制图工具, 以获得令人惊叹叹的产品

Autodesk Product Design Suite Standard 系统统需求 典型用户户和工作流 Autodesk Product Design Suite Standard 版本为为负责创建非凡凡产品的设计师师和工程师提供供基本方案设计和和制图工具, 以获得令人惊叹叹的产品 Autodesk Product Design Suite Standard 20122 系统统需求 典型用户户和工作流 Autodesk Product Design Suite Standard 版本为为负责创建非凡凡产品的设计师师和工程师提供供基本方案设计和和制图工具, 以获得令人惊叹叹的产品设计 Autodesk Product Design Suite Standard 版本包包括以下软件产产品

More information

并行计算

并行计算 OpenMP OpenMP OpenMP OpenMP OpenMP MPI OpenMP OpenMP 2006-10-9 2 OpenMP ( ) OpenMP RedHat Linux Intel C OpenMP 2006-10-9 3 OpenMP OpenMP OpenMP OpenMP 2006-10-9 4 RedHat Linux Intel C root intel8.1 chmod

More information

目 录(目录名)

目  录(目录名) 目录 目录...1-1 1.1 域名解析配置命令... 1-1 1.1.1 display dns domain... 1-1 1.1.2 display dns dynamic-host... 1-1 1.1.3 display dns server... 1-2 1.1.4 display ip host... 1-3 1.1.5 dns domain... 1-4 1.1.6 dns resolve...

More information

509 (ii) (iii) (iv) (v) 200, , , , C 57

509 (ii) (iii) (iv) (v) 200, , , , C 57 59 (ii) (iii) (iv) (v) 500,000 500,000 59I 18 (ii) (iii) (iv) 200,000 56 509 (ii) (iii) (iv) (v) 200,000 200,000 200,000 500,000 57 43C 57 (ii) 60 90 14 5 50,000 43F 43C (ii) 282 24 40(1B) 24 40(1) 58

More information

Microsoft Word - MP2018_Report_Chi _12Apr2012_.doc

Microsoft Word - MP2018_Report_Chi _12Apr2012_.doc 人 力 資 源 推 算 報 告 香 港 特 別 行 政 區 政 府 二 零 一 二 年 四 月 此 頁 刻 意 留 空 - 2 - 目 錄 頁 前 言 詞 彙 縮 寫 及 注 意 事 項 摘 要 第 一 章 : 第 二 章 : 第 三 章 : 第 四 章 : 附 件 一 : 附 件 二 : 附 件 三 : 附 件 四 : 附 件 五 : 附 件 六 : 附 件 七 : 引 言 及 技 術 大 綱 人

More information

南華大學數位論文

南華大學數位論文 1 i -------------------------------------------------- ii iii iv v vi vii 36~39 108 viii 15 108 ix 1 2 3 30 1 ~43 2 3 ~16 1 2 4 4 5 3 6 8 6 4 4 7 15 8 ----- 5 94 4 5 6 43 10 78 9 7 10 11 12 10 11 12 9137

More information

李天命的思考藝術

李天命的思考藝術 ii iii iv v vi vii viii ix x 3 1 2 3 4 4 5 6 7 8 9 5 10 1 2 11 6 12 13 7 8 14 15 16 17 18 9 19 20 21 22 10 23 24 23 11 25 26 7 27 28 12 13 29 30 31 28 32 14 33 34 35 36 5 15 3 1 2 3 4 5 6 7 8 9 10 11

More information

皮肤病防治.doc

皮肤病防治.doc ...1...1...2...3...4...5...6...7...7...9...10... 11...12...14...15...16...18...19...21 I ...22...22...24...25...26...27...27...29...30...31...32...33...34...34...36...36...37...38...40...41...41...42 II

More information

性病防治

性病防治 ...1...2...3...4...5...5...6...7...7...7...8...8...9...9...10...10... 11... 11 I ...12...12...12...13...14...14...15...17...20...20...21...22...23...23...25...27...33...34...34...35...35 II ...36...38...39...40...41...44...49...49...53...56...57...57...58...58...59...60...60...63...63...65...66

More information

中国南北特色风味名菜 _一)

中国南北特色风味名菜 _一) ...1...1...2...3...3...4...5...6...7...7...8...9... 10... 11... 13... 13... 14... 16... 17 I ... 18... 19... 20... 21... 22... 23... 24... 25... 27... 28... 29... 30... 32... 33... 34... 35... 36... 37...

More information

全唐诗24

全唐诗24 ... 1... 1... 2... 2... 3... 3... 4... 4... 5... 5... 6... 6... 7... 7... 8... 8... 9... 9...10...10...10...11...12...12...12...13...13 I II...14...14...14...15...15...15...16...16...16...17...17...18...18...18...19...19...19...20...20...20...21...21...22...22...23...23...23...24

More information

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

lammps 在 AIX6.1 系统上的安装 中国科学技术大学超级运算中心张运动 2012 年 9 月 Lammps 软件官网 : 网上对于 lammps 软件在 windows Linux 系统上的安装已

lammps 在 AIX6.1 系统上的安装 中国科学技术大学超级运算中心张运动 2012 年 9 月 Lammps 软件官网 :   网上对于 lammps 软件在 windows Linux 系统上的安装已 lammps 在 AIX6.1 系统上的安装 中国科学技术大学超级运算中心张运动 zhangzyd@ustc.edu.cn 2012 年 9 月 Lammps 软件官网 : http://lammps.sandia.gov/ 网上对于 lammps 软件在 windows Linux 系统上的安装已有很多详细的介绍, 在此不再赘述, 请参考进行安装与使用 而 lammps 官网以及软件包内都没有详细的关于此软件在基于

More information

ARM JTAG实时仿真器安装使用指南

ARM JTAG实时仿真器安装使用指南 ARM JTAG Version 1.31 2003. 11. 12 ARM JTAG ARM JTAG.3 ARM 2.1.4 2.2.4 ARM JTAG 3.1 18 3.2 18 3.2.1 Multi-ICE Server.18 3.2.2 ADS..21 ARM JTAG 4.1 Multi-ICE Server 33 4.1.1 Multi-ICE Server..... 33 4.1.2

More information

投影片 1

投影片 1 Chapter 1: Start C-Language How To Speaker: Lung-Sheng Chien OutLine Course skeleton Introduction of programming language How to use Visual C++ MSDN library Linux machine Schedule: July : http://www.oz.nthu.edu.tw/~d947207/

More information

Microsoft Word - linux命令及建议.doc

Microsoft Word - linux命令及建议.doc Linux 操 作 系 统 命 令 集 1 基 本 命 令 查 看 系 统 信 息 : uname -a 修 改 密 码 : passwd 退 出 : logout(exit) 获 取 帮 助 : man commands 2 文 件 和 目 录 命 令 显 示 当 前 工 作 目 录 : pwd 改 变 所 在 目 录 : cd cd - 切 换 到 上 一 次 使 用 的 目 录 cd 切 换

More information

sql> startup mount 改变数据库的归档模式 sql> alter database archivelog # 打开数据库 sql> alter database open 禁止归档模式 sql> shutdown immediate sql>startup mount sql> al

sql> startup mount 改变数据库的归档模式 sql> alter database archivelog # 打开数据库 sql> alter database open 禁止归档模式 sql> shutdown immediate sql>startup mount sql> al RMAN sql> sqlplus / as sysdba 查看数据库版本 sql> select * from v$version; 查看数据库名称 sql> show parameter db_name; 一 使用 RMAN 时, 需要将数据库设置成归档模式 sql> conn / as sysdba; sql> show user 查看数据库是否为归档模式 sql> archive log list

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

科学计算的语言-FORTRAN95

科学计算的语言-FORTRAN95 科 学 计 算 的 语 言 -FORTRAN95 目 录 第 一 篇 闲 话 第 1 章 目 的 是 计 算 第 2 章 FORTRAN95 如 何 描 述 计 算 第 3 章 FORTRAN 的 编 译 系 统 第 二 篇 计 算 的 叙 述 第 4 章 FORTRAN95 语 言 的 形 貌 第 5 章 准 备 数 据 第 6 章 构 造 数 据 第 7 章 声 明 数 据 第 8 章 构 造

More information

.. 3 N

.. 3 N 1 .. 3 N9.. 4 5.. 6 7.. 8 20.. 21 23.. 24.. 25 26.. 27.. 28.. 29 2 (Cyber Café) Linux (LAN) Linux Public Home 3 K12LTSP K12LTSPFedora Core 4 (Linux)LTSP Linux (command line interface) (Graphical User Interface,

More information

提纲 1 2 OS Examples for 3

提纲 1 2 OS Examples for 3 第 4 章 Threads2( 线程 2) 中国科学技术大学计算机学院 October 28, 2009 提纲 1 2 OS Examples for 3 Outline 1 2 OS Examples for 3 Windows XP Threads I An Windows XP application runs as a seperate process, and each process may

More information

Linux服务器构建与运维管理

Linux服务器构建与运维管理 1 Linux 服务器构建与运维管理 第 2 章 :Linux 基本命令 阮晓龙 13938213680 / rxl@hactcm.edu.cn http://linux.xg.hactcm.edu.cn http://www.51xueweb.cn 河南中医药大学管理科学与工程学科 2018.3 2 提纲 目录与文件的操作 mkdir touch mv cp rm rmdir file tree

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

并行程序设计基础

并行程序设计基础 1800 1800 学 计 发 软 调 术 计 术 应 软 务 2 1. 论 学 2. 实 验 学 3. 计 学 计 学 计 学 计 动 学 计 学 计 学 计 学 计 学 计 学 计 电 学 3 4 ( 级 计 ) CRAY, 银 I SMP( ) IBM p690 SUN MPP( 规 ) T3E 1000 HP ccnuma( 储 ) SGI Qrigin 统 联 腾 1800, IBM SP2

More information

Microsoft Word - 11.doc

Microsoft Word - 11.doc 除 錯 技 巧 您 將 於 本 章 學 到 以 下 各 項 : 如 何 在 Visual C++ 2010 的 除 錯 工 具 控 制 下 執 行 程 式? 如 何 逐 步 地 執 行 程 式 的 敘 述? 如 何 監 看 或 改 變 程 式 中 的 變 數 值? 如 何 監 看 程 式 中 計 算 式 的 值? 何 謂 Call Stack? 何 謂 診 斷 器 (assertion)? 如 何

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

<4D F736F F D C1ECD3F2B3A3D3C3B1E0D2EBC6F7B1E0D2EBD3C5BBAFCAD6B2E12E646F63>

<4D F736F F D C1ECD3F2B3A3D3C3B1E0D2EBC6F7B1E0D2EBD3C5BBAFCAD6B2E12E646F63> HPC 领域常用编译器编译优化手册 曙光解决方案中心 2006 年 12 月 目 录 目 录... 2 1 GNU 编译器 (GCC)... 3 1.1. 简介... 3 1.2. 常用 Linux 系统上 GCC 编译器的版本... 3 1.3. 编译优化快速入门... 4 1.4. 一些编译优化选项说明... 4 2 PGI 编译器... 5 2.1. 简介... 5 2.2. 编译优化快速入门...

More information

「香港中學文言文課程的設計與教學」單元設計範本

「香港中學文言文課程的設計與教學」單元設計範本 1. 2. 3. (1) (6) ( 21-52 ) (7) (12) (13) (16) (17) (20) (21) (24) (25) (31) (32) (58) 1 2 2007-2018 7 () 3 (1070) (1019-1086) 4 () () () () 5 () () 6 21 1. 2. 3. 1. 2. 3. 4. 5. 6. 7. 8. 9. ( ) 7 1. 2.

More information

VASP应用运行优化

VASP应用运行优化 1 VASP wszhang@ustc.edu.cn April 8, 2018 Contents 1 2 2 2 3 2 4 2 4.1........................................................ 2 4.2..................................................... 3 5 4 5.1..........................................................

More information

全唐诗28

全唐诗28 ... 1... 1... 1... 2... 2... 2... 3... 3... 4... 4... 4... 5... 5... 5... 5... 6... 6... 6... 6... 7... 7... 7... 7... 8... 8 I II... 8... 9... 9... 9...10...10...10...11...11...11...11...12...12...12...13...13...13...14...14...14...15...15...15...16...16...16...17...17

More information

GRAPES 软件使用指南

GRAPES      软件使用指南 WRF 软件使用指南 2009 年 4 月 中国科学院计算机网络信息中心超级计算中心 联系人 : 高晋芳 E-mail: jfgao@sccas.cn 1 目 录 WRF 软件使用指南...1 1. WRF 软件介绍...3 2. WRF 的安装...4 2.1 安装目录...4 2.2 安装过程...4 3. WRF 软件的使用方法...5 3.1 集群部分...5 3.1.1 使用算例 ( 以

More information

ebook35-2

ebook35-2 2 2.1 Linux login Login: < > Password: < > Linux r o o t l o g o u t 2.2 Linux X Window Linux Linux Bourne ( b s h ) C ( c s h ) Korn ( k s h ) Bourne Steven Bourne UNIX Bourne bash Bourne C Bill Joy Bourne

More information

穨學前教育課程指引.PDF

穨學前教育課程指引.PDF i 1 1.1 1 1.2 1 4 2.1 4 2.2 5 2.3 7 2.4 9 2.5 11 2.6 1 2 1 5 3.1 1 5 3.2 1 5 19 4.1 19 4.2 19 4.3 2 1 4.4 29 4.5 38 4.6 4 3 4.7 47 50 5.1 5 0 5.2 5 0 5.3 6 2 5.4 9 4 5.5 1 2 6 ( ) 1 2 7 ( ) 1 31 ( ) 1

More information

穨ecr2_c.PDF

穨ecr2_c.PDF i ii iii iv v vi vii viii 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 26 27 2 28 29 30 31 32 33 34 35 36 37 38 39 40 3 4 41 42 43 5 44 45 46 6 47 48 49 50 51 52 1 53 2 54 55 3 56

More information

電腦相關罪行跨部門工作小組-報告書

電腦相關罪行跨部門工作小組-報告書 - ii - - iii - - iv - - v - - vi - - vii - - viii - (1) 2.1 (2) (3) 13.6 (4) 1.6 (5) 21 (6) (7) 210 (8) (9) (10) (11) ( ) ( 12) 20 60 16 (13) ( ) (

More information

i

i i ii iii iv v vi vii viii ===== 1 2 3 4 5 6 7 8 9 10 ==== 11 12 13 14 15 16 17 18 19 ==== ==== 20 .. ===== ===== ===== ===== ===== ======.. 21 22 ===== ===== ===== ===== 23 24 25 26 27 28 29 ==== ====

More information

发展党员工作手册

发展党员工作手册 发 展 党 员 工 作 问 答 目 录 一 总 论...9 1. 发 展 党 员 工 作 的 方 针 是 什 么? 如 何 正 确 理 解 这 个 方 针?... 9 2. 为 什 么 强 调 发 展 党 员 必 须 保 证 质 量?... 9 3. 如 何 做 到 慎 重 发 展?... 10 4. 如 何 处 理 好 发 展 党 员 工 作 中 的 重 点 与 一 般 的 关 系?...11 5.

More information

i

i 9 1 2 3 4 i 5 6 ii iii iv v vi vii viii 1 1 1 2 3 4 2 5 6 2 3 2.10 ( 2.11 ) ( 2.11 ) ( 2.9 ) 7 8 9 3 10 5% 2% 4 11 93% (2001 02 2003 04 ) ( ) 2,490 (100%) 5 12 25% (2.57% 25%) 6 (2001 02 2003 04 ) 13 100%

More information

39898.indb

39898.indb 1988 4 1998 12 1990 5 40 70.................................................. 40.............................................................. 70..............................................................

More information

眼病防治

眼病防治 ( 20 010010) 787 1092 1/32 498.50 4 980 2004 9 1 2004 9 1 1 1 000 ISBN 7-204-05940-9/R 019 1880.00 ( 20.00 ) ...1...1...2...3...5...5...6...7...9... 11...13...14...15...17...18...19...20...21 I II...21...22...23...24...25...27...27...28...29...30...31...33...33...34...36...38...39...40...41...42...43...45

More information

中国南北特色风味名菜 _八)

中国南北特色风味名菜 _八) ( 20 010010) 7871092 1/32 356.25 4 760 2004 8 1 2004 8 1 11 000 ISBN 7-204-05943-3/Z102 1026.00 ( 18.00 ) ...1...2...2...4...6...7...8...9... 10... 11... 12... 13... 13... 14... 15... 17... 18... 19...

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

Microsoft PowerPoint - 01_Introduction.ppt

Microsoft PowerPoint - 01_Introduction.ppt Hello, World C 程序设计语言 第 1 章章观其大略 孙志岗 sun@hit.edu.cn http://sunner.cn prf("hello,, world\n"); 超级无敌考考你 : 如何把 hello 和 world 分别打印在两行? 2004-12-19 A Tutorial Introduction 2 hello.c 打印华氏温度与摄氏温度对照表 计算公式 : C=(5/9)(

More information

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile.. WebSphere Studio Application Developer IBM Portal Toolkit... 1/21 WebSphere Studio Application Developer IBM Portal Toolkit Portlet Doug Phillips (dougep@us.ibm.com),, IBM Developer Technical Support Center

More information

C/C++语言 - 运算符、表达式和语句

C/C++语言 - 运算符、表达式和语句 C/C++ Table of contents 1. 2. 3. 4. C C++ 5. 6. 7. 1 i // shoe1.c: # include # define ADJUST 7. 64 # define SCALE 0. 325 int main ( void ) { double shoe, foot ; shoe = 9. 0; foot = SCALE * shoe

More information

02

02 Thinking in C++: Volume One: Introduction to Standard C++, Second Edition & Volume Two: Practical Programming C++ C C++ C++ 3 3 C C class C++ C++ C++ C++ string vector 2.1 interpreter compiler 2.1.1 BASIC

More information

untitled

untitled 2006 6 Geoframe Geoframe 4.0.3 Geoframe 1.2 1 Project Manager Project Management Create a new project Create a new project ( ) OK storage setting OK (Create charisma project extension) NO OK 2 Edit project

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

VB程序设计教程

VB程序设计教程 高 等 学 校 教 材 Visual Basic 程 序 设 计 教 程 魏 东 平 郑 立 垠 梁 玉 环 石 油 大 学 出 版 社 内 容 提 要 本 书 是 按 高 等 学 校 计 算 机 程 序 设 计 课 程 教 学 大 纲 编 写 的 大 学 教 材, 主 要 包 括 VB 基 础 知 识 常 用 程 序 结 构 和 算 法 Windows 用 户 界 面 设 计 基 础 文 件 处

More information

綜合社會保障援助指引

綜合社會保障援助指引 綜 合 社 會 保 障 援 助 指 引 ( 網 上 版 ) 社 會 福 利 署 ( 2016 年 2 月 ) 綜 合 社 會 保 障 援 助 指 引 目 錄 章 節 頁 碼 1. 前 言 1 2. 綜 合 社 會 保 障 援 助 計 劃 的 目 的 2 3. 申 請 資 格 3-6 4. 自 力 更 生 支 援 計 劃 7-8 5. 申 請 程 序 9-10 6. 通 知 申 請 結 果 及 發 放

More information

WinMDI 28

WinMDI 28 WinMDI WinMDI 2 Region Gate Marker Quadrant Excel FACScan IBM-PC MO WinMDI WinMDI IBM-PC Dr. Joseph Trotter the Scripps Research Institute WinMDI HP PC WinMDI WinMDI PC MS WORD, PowerPoint, Excel, LOTUS

More information

《嵌入式系统设计》教学大纲

《嵌入式系统设计》教学大纲 多 核 架 构 及 编 程 技 术 教 学 大 纲 课 程 代 码 :20062022071 课 程 负 责 人 : 杨 剑 锋 课 程 中 文 名 称 : 多 核 架 构 及 编 程 技 术 课 程 英 文 名 称 :Multi-Core Architecture and Programming Technologies 课 程 类 别 : 专 业 必 修 课 程 学 分 数 :3 课 程 学 时

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

* 4 6 R P r p . 1 2 3 4 7 89bk 6 5 1 2 3 4 5 6 7 8 9 0 bk r bl bm bn^ bo bl br bq bpbo bn bm [ ] [ ] [ ] bp 8 2 4 6 bq p [ ] [SET] br clckbt bs bs bt ck cl. 1 2 1 2+- 3 3 . 1 2 3 4 5 6 7 8 9 bk bl bm

More information

前 言 根 据 澳 门 特 别 行 政 区 第 11/1999 号 法 律 第 三 条 规 定, 审 计 长 执 行 其 职 责, 已 经 对 财 政 局 提 交 的 2011 年 度 澳 门 特 别 行 政 区 总 帐 目 ( 总 帐 目 ) 进 行 了 审 计 与 2010 年 度 相 同, 本 年 度 的 总 帐 目 由 政 府 一 般 综 合 帐 目 及 特 定 机 构 汇 总 帐 目, 两

More information

群科課程綱要總體課程計畫書

群科課程綱要總體課程計畫書 核 准 文 號 :102 年 4 月 22 日 臺 教 國 署 高 字 第 1020036237 號 國 立 曾 文 高 級 農 工 職 業 學 校 群 科 課 程 綱 要 總 體 課 程 計 畫 書 (102 學 年 度 入 學 學 生 適 用 ) 中 華 民 國 102 年 04 月 22 日 國 立 曾 文 高 級 農 工 職 業 學 校 群 科 課 程 綱 要 總 體 課 程 計 畫 書 核

More information

2/80 2

2/80 2 2/80 2 3/80 3 DSP2400 is a high performance Digital Signal Processor (DSP) designed and developed by author s laboratory. It is designed for multimedia and wireless application. To develop application

More information