科技
类型
可以朗读
语音朗读
261千字
字数
2022-10-01
发行日期
展开全部
主编推荐语
本书利用多面体模型描述了如何实现不同阶段循环变换技术。
内容简介
本书分十大章节和三章附录章节,以现代体系结构特征为目标,从理论、方法及应用等不同角度,详细描述了各种提升程序并行性、数据局部性及适配目标架构特征的高级编译优化技术。
本书还结合深度学习应用场景展开讨论,介绍了如何在深度学习框架中使用高级编译优化技术。
目录
- 版权信息
- 内容简介
- 前言
- 第1章 体系结构发展对编译技术的影响
- 1.1 面向经典体系结构的性能优化
- 1.1.1 并行性发掘
- 1.1.2 存储层次结构
- 1.1.3 领域专用架构
- 1.2 编译器面临的挑战
- 1.2.1 并行性发掘
- 1.2.2 局部性发掘
- 1.2.3 编程模型和抽象层次
- 1.3 循环优化的数学抽象
- 1.3.1 多面体模型的基本概念
- 1.3.2 多面体模型在编译器中的应用
- 1.3.3 基于多面体模型的编译流程
- 第2章 程序抽象表示基础
- 2.1 抽象表示在编译器中发挥的作用
- 2.2 整数集合与仿射函数
- 2.2.1 静态仿射约束
- 2.2.2 整数集合
- 2.2.3 仿射函数
- 2.2.4 集合与映射的运算
- 2.3 Fourier-Motzkin消去法
- 2.4 调度树
- 2.4.1 调度的表示方式
- 2.4.2 调度树的结点
- 2.4.3 调度树的操作
- 2.4.4 调度表示的比较
- 2.5 抽象语法树
- 2.5.1 被执行关系
- 2.5.2 上下文信息
- 2.5.3 结点和表达式
- 2.6 各种抽象的工程实现
- 2.6.1 整数集合和仿射函数的实现
- 2.6.2 调度树的实现
- 2.6.3 抽象语法树的实现
- 第3章 依赖关系分析
- 3.1 依赖关系分析在编译优化中的作用
- 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 ZIV测试
- 3.3.3 SIV测试
- 3.3.4 GCD测试
- 3.3.5 Banerjee测试
- 3.3.6 I测试
- 3.4 耦合下标依赖测试
- 3.4.1 扩展的GCD测试
- 3.4.2 λ测试
- 3.4.3 Delta测试
- 3.4.4 Omega测试
- 3.5 特殊的依赖测试
- 3.5.1 D测试
- 3.5.2 Range依赖测试
- 3.6 数据流分析
- 3.6.1 精确数据流分析
- 3.6.2 近似数据流分析
- 3.6.3 带标记的数据流分析
- 3.7 依赖与并行化
- 第4章 循环变换
- 4.1 适配体系结构特征的关键技术
- 4.2 预处理
- 4.2.1 循环正规化
- 4.2.2 死代码删除
- 4.2.3 别名分析
- 4.2.4 迭代空间分裂
- 4.3 多面体模型中的循环变换
- 4.3.1 循环变换分类
- 4.3.2 循环变换的复杂性
- 4.3.3 Pluto调度算法
- 4.4 仿射循环变换
- 4.4.1 循环交换
- 4.4.2 循环反转
- 4.4.3 循环延展
- 4.4.4 循环倾斜
- 4.4.5 循环合并
- 4.4.6 循环分布
- 4.5 近似仿射循环变换
- 4.5.1 循环分块
- 4.5.2 循环分段
- 4.5.3 循环展开压紧
- 4.6 代码生成过程中的循环变换
- 4.6.1 分块分离
- 4.6.2 循环展开
- 4.6.3 其他循环变换
- 4.7 循环压紧
- 第5章 开发并行性
- 5.1 利用多面体模型发掘数据并行
- 5.2 复杂的分块形状
- 5.2.1 交叉分块
- 5.2.2 分裂分块
- 5.2.3 钻石分块
- 5.2.4 六角形分块
- 5.3 Feautrier调度算法
- 5.3.1 一维时间表示的调度计算
- 5.3.2 多维时间表示的调度计算
- 5.4 开发向量化
- 5.4.1 可向量化Codelet
- 5.4.2 利于向量化的调度算法
- 5.5 面向分布式存储结构的并行
- 5.5.1 构造通信数据集
- 5.5.2 通信优化
- 第6章 挖掘局部性
- 6.1 金字塔形存储层次结构之外的挑战
- 6.2 面向不同优化目标的循环合并策略
- 6.2.1 基于依赖图的循环合并算法
- 6.2.2 拆分弱连通图
- 6.2.3 合并强连通分量
- 6.3 循环合并与循环分块的组合
- 6.3.1 先合并后分块
- 6.3.2 分块后再合并
- 6.3.3 提升高速缓存的使用率
- 6.4 数据空间变换
- 6.4.1 间接数据空间变换
- 6.4.2 显式数据空间变换
- 6.5 提升局部性的调度优化
- 6.5.1 循环分块后的重新调度
- 6.5.2 面向数据访存连续性的调度优化
- 6.6 数组压缩
- 6.6.1 内存竞争关系
- 6.6.2 划分数据空间
- 6.6.3 代价模型
- 第7章 代码生成
- 7.1 一个比输出指令序列更复杂的任务
- 7.2 代码生成方法
- 7.2.1 凸包算法
- 7.2.2 分割算法
- 7.3 分割代码生成
- 7.3.1 for循环生成
- 7.3.2 if语句的生成位置
- 7.3.3 循环展开
- 7.3.4 分块分离
- 7.3.5 循环退化
- 7.3.6 带偏移的跨步循环
- 7.4 if控制流优化
- 7.5 内存管理
- 7.5.1 CPU与GPU间的传输
- 7.5.2 内存提升
- 7.6 同步指令
- 第8章 多面体编译理论的最新进展
- 8.1 MLIR
- 8.1.1 MLIR基本概念
- 8.1.2 与多面体模型的集成
- 8.2 Halide
- 8.2.1 Halide设计理念
- 8.2.2 Halide调度树
- 8.3 Tiramisu
- 8.4 Tensor Comprehensions
- 8.5 AKG
- 8.6 面向Tensor Core的自动代码生成
- 参考文献
展开全部
出版方
清华大学出版社
清华大学出版社成立于1980年6月,是由教育部主管、清华大学主办的综合出版单位。植根于“清华”这座久负盛名的高等学府,秉承清华人“自强不息,厚德载物”的人文精神,清华大学出版社在短短二十多年的时间里,迅速成长起来。清华大学出版社始终坚持弘扬科技文化产业、服务科教兴国战略的出版方向,把出版高等学校教学用书和科技图书作为主要任务,并为促进学术交流、繁荣出版事业设立了多项出版基金,逐渐形成了以出版高水平的教材和学术专著为主的鲜明特色,在教育出版领域树立了强势品牌。