展开全部

主编推荐语

本书利用多面体模型描述了如何实现不同阶段循环变换技术。

内容简介

本书分十大章节和三章附录章节,以现代体系结构特征为目标,从理论、方法及应用等不同角度,详细描述了各种提升程序并行性、数据局部性及适配目标架构特征的高级编译优化技术。

本书还结合深度学习应用场景展开讨论,介绍了如何在深度学习框架中使用高级编译优化技术。

目录

  • 版权信息
  • 内容简介
  • 前言
  • 第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月,是由教育部主管、清华大学主办的综合出版单位。植根于“清华”这座久负盛名的高等学府,秉承清华人“自强不息,厚德载物”的人文精神,清华大学出版社在短短二十多年的时间里,迅速成长起来。清华大学出版社始终坚持弘扬科技文化产业、服务科教兴国战略的出版方向,把出版高等学校教学用书和科技图书作为主要任务,并为促进学术交流、繁荣出版事业设立了多项出版基金,逐渐形成了以出版高水平的教材和学术专著为主的鲜明特色,在教育出版领域树立了强势品牌。