资源大小: 2.01MB
发布时间: 2013-01-15
文件格式: pdf
下载次数: 0
分享到:

下载地址:

下载地址1
(本站为飞网专业下载站,域名:down.cfei.net)

资源简介:

中文名: 现代体系结构的优化编译器原名: Optimizing Compilers for Modern Architectures,A Dependence-Based Approach 作者: (美)Randy Allen,Ken Kennedy资源格式: PDF版本: 扫描版出版社: Morgan Kaufmann书号: 1558602860发行时间: 2001年地区: 美国语言: 英文简介: 内容简介:本书介绍对现代体系结构的编译器进行优化的方法,理论基础是基于循环依赖的。分析基于依赖的变换的正确性论述和依赖测试的详细过程。剖析怎样扩展依赖去处理循环嵌套中的控制流以及跨越整个程序的过程。本书还讨论怎样能用依赖来回答现代计算机系统编译中的众多重要问题,包括支持不同类型体系结构(例如,向量、多处理器、超标量)的并行化,存储层次结构的编译器管理,带指令级并行性的机器的指令调度。最后,介绍一些不大为人熟知的应用,如硬件设计、数组语言实现以及消息传递系统的编译。  设计具有高性能微处理器的现代计算机体系结构,能够极大地提高计算机在性能方面的潜在优势。然而其高度的复杂性使得产生有效代码和实现其全部优势变得愈加困难。这本出自两位学术权威的具有里程碑意义的教科书,重点阐述了编译器对于解决这个至关重要问题所起到的关键作用。  数据依赖是在高性能微处理器和并行体系结构上优化程序的基本编译器分析工具。它能使所编写的编译器自动地将简单的串行程序转换成具有现代体系结构特征的程序。数据依赖支持许多变换策略,也应用于一些重要的优化问题,本书对此做了全面介绍,并对基于数据依赖的编译器优化的重要性和广泛应用性进行了论证,给出了理解和实现它们所需要的基础,同时还为手工转换程序提供了详细说明。  书中介绍的方法是基于过去二十多年的研究成果.取材于在美国Rice大学的研究原型和几个有关的商业系统中实现的策略。致力于现代计算机体系结构设计和优化编译器的研究人员、业界专家和研究生都可以从本书中获益。本书特点  提供一种简单实用的算法和方法的指南,在高性能微处理器和并行系统中是最有效的  用处理过的例子示范每个变换  用实例分析编译器如何实现每一章中描述的理论和实践  介绍存储层次结构问题的最完善的处理方法  全书用依赖图来阐明排序关系  涉及各种语言。包括Fortran77、C、硬件定义语言、Fortran 90和High Performance Fortran目录: 第1章 高性能体系结构对编译器的挑战1.1 概述和目标1.2 流水线1.2.1 流水线指令部件1.2.2 流水线执行部件1.2.3 并行功能部件1.2.4 标量流水线编译1.3 向量指令1.3.1 向量硬件概述1.3.2 向量流水线编译1.4 超标量处理器和VLIW处理器1.4.1 多发射指令部件1.4.2 多发射处理器的编译1.5 处理器并行性1.5.1 处理器并行性概述1.5.2 异步并行性的编译1.6 存储层次结构1.6.1 存储系统概述1.6.2 存储层次结构的编译1.7 实例研究:矩阵乘法1.8 先进编译技术1.8.1 依赖1.8.2 变换1.9 小结1.10 实例研究1.11 历史评述与参考文献习题第2章 依赖:理论与实践2.1 引言2.2 依赖及其性质2.2.1 存-取分类2.2.2 循环内的依赖2.2.3 依赖和变换2.2.4 距离向量和方向向量2.2.5 循环携带依赖和循环无关依赖2.3 简单的依赖测试2.4 并行化和向量化2.4.1 并行化2.4.2 向量化2.4.3 一个先进的向量化算法2.5 小结2.6 实例研究2.7 历史评述与参考文献习题第3章 依赖测试3.1 引言3.2 依赖测试概述3.2.1 下标划分3.2.2 合并方向向量3.3 单下标依赖测试3.3.1 ZIV测试3.3.2 SIV测试3.3.3 多归纳变量测试3.4 耦合组中的测试3.4.1 Delta测试3.4.2 更强有力的多下标测试3.5 实验研究3.6 各种测试的集成3.7 小结3.8 实例研究3.9 历史评述与参考文献习题第4章 初等变换4.1 引言4.2 信息需求4.3 循环正规化4.4 数据流分析4.4.1 定义-使用链4.4.2 死代码消除4.4.3 常数传播4.4.4 静态单赋值形式4.5 归纳变量暴露4.5.1 前向表达式替换4.5.2 归纳变量替换4.5.3 驱动替换过程4.6 小结4.7 实例研究4.8 历史评述与参考文献习题第5章 提高细粒度并行性5.1 引言5.2 循环交换5.2.1 循环交换的安全性5.2.2 循环交换的有利性5.2.3 循环交换和向量化5.3 标量扩展5.4 标量和数组重命名5.5 节点分裂5.6 归约识别5.7 索引集分裂5.7.1 阈值分析5.7.2 循环剥离5.7.3 基于区域的分裂5.8 运行时符号解析5.9 循环倾斜5.10 各种变换的集成5.11 实际机器的复杂性5.12 小结5.13 实例研究5.13.1 PFC5.13.2 ArdentTitan编译器5.13.3 向量化的性能5.14 历史评述与参考文献习题第6章 开发粗粒度并行性6.1 引言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 循环反转6.3.4 为并行化的循环倾斜6.3.5 模变换6.3.6 基于有利性的并行化方法6.4 非紧嵌循环套6.4.1 多层循环合并6.4.2 一个并行代码生成算法6.5 一个扩充的例子6.6 并行性的封装6.6.1 循环分段6.6.2 流水线并行性6.6.3 调度并行任务6.6.4 制导的自调度6.7 小结6.8 实例研究6.8.1 PFC和ParaScope6.8.2 ArdentTitan编译器6.9 历史评述与参考文献习题第7章 处理控制流7.1 引言7.2 if换7.2.1 定义7.2.2 分支的分类7.2.3 前向分支7.2.4 出口分支7.2.5 后向分支7.2.6 完全前向分支消除7.2.7 化简7.2.8 迭代依赖7.2.9 if重构7.3 控制依赖7.3.1 构造控制依赖7.3.2 循环中的控制依赖7.3.3 控制依赖的一个执行模型7.3.4 控制依赖在并行化中的应用7.4 小结7.5 实例研究7.6 历史评述与参考文献习题第8章 改进寄存器的使用8.1 引言8.2 标量寄存器分配8.2.1 面向寄存器重用的数据依赖8.2.2 循环携带和循环无关的重用8.2.3 寄存器分配的例子8.3 标量替换8.3.1 依赖图剪枝8.3.2 简单替换8.3.3 处理循环携带依赖8.3.4 跨越多个迭代的依赖8.3.5 删除标量拷贝8.3.6 缓解寄存器压力8.3.7 标量替换算法8.3.8 实验数据8.4 展开和压紧8.4.1 展开和压紧的合法性8.4.2 展开和压紧算法8.4.3 展开和压紧的效果8.5 面向寄存器重用的循环交换8.5.1 对循环交换的考虑8.5.2 循环交换算法8.6 面向寄存器重用的循环合并8.6.1 面向重用的有利的循环合并8.6.2 面向合并的循环对齐8.6.3 合并机制8.6.4 加权循环合并算法8.6.5 面向寄存器重用的多层循环合并8.7 改进寄存器使用的变换综合8.7.1 决定变换的顺序8.7.2 例子:矩阵乘法8.8 复杂的循环嵌套8.8.1 包含if语句的循环8.8.2 梯形循环8.9 小结8.10 实例研究8.11 历史评述与参考文献习题第9章 管理高速缓存9.1 引言9.2 适合于空间局部性的循环交换9.3 分块9.3.1 非对齐的数据9.3.2 分块的合法性9.3.3 分块的有利性9.3.4 一个简单的分块算法9.3.5 带倾斜的分块9.3.6 循环合并和对齐9.3.7 结合其他变换的分块9.3.8 有效性9.4 复杂循环嵌套中的高速缓存管理9.4.1 三角形的高速缓存分块9.4.2 特殊用途的变换9.5 软件预取9.5.1 一个软件预取算法9.5.2 软件预取的有效性9.6 小结9.7 实例研究9.8 历史评述与参考文献习题第10章 调度10.1 引言10.2 指令调度10.2.1 机器模型10.2.2 直线型代码的图调度10.2.3 表调度10.2.4 踪迹调度10.2.5 循环内的调度10.3 向量部件调度10.3.1 链接10.3.2 协处理器10.4 小结10.5 实例研究10.6 历史评述与参考文献习题第11章 过程间分析和优化11.1 引言11.2 过程间分析11.2.1 过程间问题11.2.2 过程间问题分类11.2.3 流不敏感副作用分析11.2.4 流不敏感别名分析11.2.5 常数传播11.2.6 注销分析11.2.7 符号化分析11.2.8 数组区域分析11.2.9 调用图的构造11.3 过程间优化11.3.1 内联替换11.3.2 过程克隆11.3.3 混合优化11.4 管理整个程序的编译11.5 小结11.6 实例研究11.7 历史评述与参考文献习题第12章 C语言和硬件设计中的依赖12.1 引言12.2 优化C语言12.2.1 指针12.2.2 命名和结构12.2.3 循环12.2.4 作用域和静态变量12.2.5 方言12.2.6 其他问题12.3 硬件设计12.3.1 硬件描述语言12.3.2 优化模拟12.3.3 综合优化12.4 小结12.5 实例研究12.6 历史评述与参考文献习题第13章 编译数组赋值13.1 引言13.2 简单的标量化13.3 标量化变换13.3.1 循环反转13.3.2 输入预取13.3.3 循环分裂13.4 多维标量化13.4.1 多维中的简单标量化13.4.2 外层循环预取13.4.3 用于标量化的循环交换13.4.4 通用的多维标量化13.4.5 一个标量化的例子13.5 对向量机器的考虑13.6 标量化后的循环交换和合并13.7 小结13.8 实例研究13.9 历史评述与参考文献习题第14章 编译高性能Fortran14.1 引言14.2 HPF编译器概览14.3 基本循环的编译技术14.3.1 分布信息的传播和分析14.3.2 迭代的划分14.3.3 通信生成14.4 优化14.4.1 通信向量化14.4.2 重迭通信和计算14.4.3 对齐和复制14.4.4 流水14.4.5 一般依赖环的识别14.4.6 存储管理14.4.7 处理多个维14.5 HPF的过程间优化14.6 小结14.7 实例研究14.8 历史评述与参考文献习题附录 Fortran 90基础参考文献索引


飞网下载站,免费下载共享资料,内容涉及教育资源、专业资料、IT资源、娱乐生活、经济管理、办公文书、游戏资料等。