内容推荐 本书详细讨论了毕昇编译器的设计原理与实现,深入介绍了现代编译器设计和实践。全书共8章,包括编译器概述,鲲鹏处理器,编译器前端的词法分析、语法分析和语义分析,编译器中端的中间表示、中间代码生成、中间代码优化、静态单赋值形式等,编译器后端的指令选择、指令调度、寄存器分配等内容。本书重点讨论了毕昇编译器中使用的先进编译优化技术,如循环优化、自动向量化、多级存储优化和反馈式优化等,并讨论了基于AI的编译器自动调优等内容。为方便读者学习和掌握相关内容,书中每章都给出了可以继续深入学习的文献,并给出了丰富的习题供读者练习。 通过阅读本书,读者可以深入理解编译器设计的基本原理和实践技术、鲲鹏指令集体系结构、毕昇编译器的优化技术等内容,从而为将来从事编译器理论深入研究和工程实践打下坚实的基础。 本书可作为高等院校、科研机构等相关单位从事编译原理教学和科研的教师或研究人员的参考书,也可作为高等院校信息与计算机科学、软件工程等相关专业的本科生、研究生学习编译原理的教材或参考书,还可供对编译原理和实践等领域感兴趣的工程技术人员参考使用。 作者简介 华保健,中国科学技术大学软件学院助理教授,在中国科学技术大学计算机系获博士学位,曾在美国Clemson大学做访问学者。研究方向包括程序设计语言、编译器设计与实现、基于软件的计算机安全等。主持或参与国家自然科学基金等各类研究课题10余项;在国内外著名期刊和会议上发表论文40余篇,出版专著2部,申请专利数十项。曾获得CCF-腾讯犀牛鸟专项研究计划支持、中国科学技术大学专业学位研究生教育先进个人、科大讯飞奖教金等奖励荣誉。近年来致力于编译原理在国内的教育和普及,在网易云课堂等平台开设编译原理相关开放课程,累计学员已超过万人。 目录 第1章 编译器概述 1.1 编译器基本概念 1.2 编译器发展历史 1.3 编译器的基本功能与结构 1.3.1 前端 1.3.2 中端 1.3.3 后端 1.4 编译器的设计目标 1.5 毕昇编译器 1.6 小结 1.7 深入阅读 1.8 习题 第2章 鲲鹏处理器 2.1 概述 2.2 体系架构 2.2.1 执行状态 2.2.2 支持的指令集 2.2.3 数据类型 2.3 CPU访存原理 2.3.1 多级存储系统 2.3.2 地址空间 2.3.3 地址变换 2.3.4 存储器类型和属性 2.3.5 内存顺序模型 2.4 CPU编程模型 2.4.1 寄存器 2.4.2 指令集 2.5 鲲鹏处理器与毕昇编译器 2.5.1 毕昇编译器的优化特性 2.5.2 FORTRAN语言支持 2.6 小结 2.7 深入阅读 2.8 习题 第3章 编译器前端 3.1 词法分析 3.1.1 记号 3.1.2 正则表达式 3.1.3 有限状态自动机 3.1.4 Thompson算法 3.1.5 子集构造算法 3.1.6 Hopcroft算法 3.2 语法分析 3.2.1 上下文无关文法 3.2.2 推导 3.2.3 分析树 3.2.4 自顶向下分析 3.2.5 自底向上分析 3.3 语义分析 3.3.1 抽象语法树 3.3.2 符号表 3.3.3 语义检查 3.4 小结 3.5 深入阅读 3.6 习题 第4章 中间表示 4.1 中间表示概述 4.1.1 树状表示 4.1.2 有向无环图 4.1.3 控制流图 4.1.4 依赖图 4.1.5 线性表示 4.2 中间代码生成 4.2.1 算术运算符 4.2.2 布尔运算符和关系运算符 4.2.3 数组的存储和访问 4.2.4 字符串 4.2.5 结构引用 4.2.6 控制流结构 4.2.7 过程调用 4.3 静态单赋值形式 4.3.1 基本概念 4.3.2 SSA形式的构建 4.3.3 SSA形式的消去 4.4 小结 4.5 深入阅读 4.6 习题 第5章 中端分析与优化 5.1 控制流分析 5.1.1 控制流分析方法 5.1.2 流图的遍历 5.2 数据流分析及优化 5.2.1 优化的基本结论 5.2.2 三地址码中间表示 5.2.3 数据流分析 5.2.4 程序优化 5.2.5 数据流分析的改进 5.3 别名分析 5.3.1 基于类型的别名分析 5.3.2 基于流的别名分析 5.3.3 别名信息的使用 5.4 过程间分析及优化 5.4.1 分析 5.4.2 优化 5.5 循环优化 5.5.1 循环 5.5.2 归纳变量 5.5.3 数组边界检查 5.5.4 循环展开 5.5.5 毕昇编译器的其他循环优化 5.6 多级存储优化 5.6.1 数据预取 5.6.2 数据重组 5.7 反馈式优化 5.7.1 基本块重排优化 5.7.2 函数内联优化 5.7.3 寄存器溢出策略 5.8 小结 5.9 深入阅读 5.10 习题 第6章 后端与优化 6.1 指令选择 6.1.1 瓦片覆盖 6.1.2 最大吞进 6.1.3 动态规划 6.1.4 执行效率 6.2 指令调度 6.2.1 指令级并行 6.2.2 依赖图 6.2.3 局部表调度 6.2.4 全局调度 6.2.5 软件流水 6.3 寄存器分配 6.3.1 干涉图 6.3.2 图着色 6.3.3 Kempe算法 6.3.4 溢出 6.3.5 接合 6.3.6 干涉的保守性 6.4 自动向量化 6.4.1 概述 6.4.2 毕昇编译器中的自动向量化 6.5 小结 6.6 深入阅读 6.7 习题 第7章 毕昇编译器AI自动调优 7.1 基本原理 7.1.1 迭代自动调优 7.1.2 预测性自动调优 7.2 毕昇自动调优 7.2.1 毕昇自动调优的职责和功能 7.2.2 安装Autotuner 7.3 调优方法 7.3.1 准备工作 7.3.2 使用方法 7.4 小结 7.5 深入阅读 第8章 毕昇编译器使用 8.1 毕昇编译器介绍 8.2 毕昇编译器安装使用 8.2.1 环境依赖 8.2.2 获取毕昇编译器 8.2.3 安装毕昇编译器 8.2.4 使用毕昇编译器 8.3 毕昇编译器选项说明 8.3.1 默认选项 8.3.2 指定数学库 8.3.3 指定jemalloc 8.3.4 LTO优化 8.3.5 浮点运算控制选项 8.3.6 自定义优化选项 8.4 FORTRAN语言引导语 8.5 GDB调试 8.5.1 约定 8.5.2 不支持场景 8.5.3 通过升级GDB版本解决部分问题 |