此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://lingcc.com
若需要此讲义的原版,请email我
Fred Chow 原版讲义见最后一页
—————————————————
1.优化控制哲学
- 低优化级别–更短优化时间,更安全优化,更精确的计算,较缓慢的代码产生速度
- 高优化级别–较长优化时间,更激进优化,精确性让步于高性能,更快的代码生成
- 通过大量选项较好的控制优化–PathOpt2(?)提供了很多帮助
2,优化标志与涉及的阶段
- -O0(-g下默认)—前端和代码生成器,关闭所有优化
- -O1–前端和代码生成器,仅作本地优化
- -O2(默认)—增加WOPT和其余的CG优化
- -O3 —增加LNO
- -ipa(能在任何优化级别进行)–增加IPA
- -Ofast—和-O3 -ipa -OPT:Ofast -fno-math-errno -ffast-math效果相同
- -OPT:Ofast是-OPT:ro=2:Olime=0:div_split=ON:alias=typed
3,选项组
- 选项通过编译器不同阶段或者通过特征分组
- 通用语法– -GROUPNAME:opt[=val]{:opt=[val]}
- 一些GNU类型的选项直接映射过来 -march -ffast-math -ffloat-store -fno-inline
- 组名称: -LIST: 用户列出(?) -OPT: 优化 -TARG:目标机器 -TENV:目标环境 -INLINE后端内联 -IPA:过程间分析 -LANG: 语言特征 -CG:代码生成 -WOPT:全局范围优化 -LNO:循环嵌套优化
4,编译器驱动器的角色
- 在open64/driver中实现
- 处理所有的命令行中的选项
- 调用所有的编译阶段–预处理,前端,内联器,后端(be,lno,wopt,cg),汇编器,连接器
- 保持和GNU选项的兼容
5,编译器驱动器
- open64/driver/OPTIONS 具体选项表,能将一个选项对应到另一个选项
- 单个运行,多个软链接
- arg[0]字符串用于识别语言
- 查询编译相关的环境变量
- 在-march=auto时查询主机处理器类型(默认)
- 查询compiler.defaults文件来得到系统相关选项
6,C/C++前端历史
- 2000年开源时使用GNU2.95前端–直接从GNU内部语法树转换成WHIRL,在Open64中嵌入相互独立的C和C++前端
- 2004年升级到GNU3.3.1
- 206年类似于虚拟机,定义.spin文件格式—-GNU编译器不再作为Open64的一部分维护,简化升级到每个GNU发行版本的工作,C和C++前段中冗余代码消除
- 2007年3月移植GNU4.0.2前端
- 2007年10月移植GNU4.2.0前端
- 考虑了会增加的未来GNU语言(?)
7,用GNU编译器作为前端
- 使用为X86-64配置的GNU编译器
- 过去的方式: C语言前端open64/kgccfe C++前端open64/kg++fe 调用嵌入在GNU代码中WHIRL生成代码 c++需要将整个编译结果转换为汇编语言来结束数据转换(?) c和c++前端中有冗余代码
- 新的方式:gspin树节点–GNU语法树建模工具: 在libspin库中功能实现, gspin树节点可以提取到.spin文件中 识别GNU语法树中阻止gcc编译的点(?) gspin树节点由gcc/tree.c所产生的GNU语法数生成 open64/wgen 将 gspin语法树节点(.spin文件)翻译成WHIRL节点(.B文件) wgen中操作的形式在kgccfe/kg++fe之后进行建模(?)
8,Gspin树节点
- 目的:将GNU树中的所有信息编码到.spin文件中
- 8-字节大小的gspin节点作为构建程序块的基本单元:在libspin/gspin-tree.h文件中定义 表示GNU语法树节点中的一个信息域 相邻的gspin簇表示一个GNU语法树节点 重新表示机制定义在libspin/gspin-tel.h文件
- libspin管理gspin节点的布局
- gspin节点的 I/O通过mmap()实现
- ASCII抽取琦–为防止无限递归每个节点仅被处理一次
9,gspin节点例子
GNU的PLUS树节点有14个域,gspin根节点来编码PLUS,再加上13个表示剩余域的gspin节点
tree_code = PLUS
tree-code_class = BINARY
tree_type
tree_chain = NULL
flags
arity = 13
file name
line no
operand 0
operand 1
unused
unused
unused
unused

Pingback: Open64课程-结语 « 编译点滴
Pingback: Open64 课程–全局标量优化(WOPT I) part II « 编译点滴
Pingback: Open64 课程–全局标量优化(WOPT II) « 编译点滴
你好,为什么看不到下一页
@binyan, 抱歉,原来的主题没有调用wordpress中的分页链接:)
换了个新主题,现在有下一页了:)
Pingback: 编译点滴
Pingback: 编译点滴 » Open64课程–OpenMp和自动并行化
Pingback: 《编译点滴》半年记 « 编译点滴