- 商品参数
-
- 作者:
郭健美等著|
无编
- 出版社:机械工业出版社
- 出版时间:2025-01
- 页数:无
- ISBN:9782576691757
- 版权提供:机械工业出版社
-----
本书详细介绍了软件系统优化的原理、技术和常用方法。本书强调从系统视角进行优化,提出了“数据驱动的系统优化”方法,围绕“软件 + 硬件 + 数据”三个方面展开讲解。本书共 18 章,分为五个部分。第1章和第2章从一个性能优化案例引入,概述了软件系统优化的方法论。第二部分包括第 3~6 章,介绍了性能工程的基础知识。第三部分包括第 7~10 章,介绍了计算机体系结构优化的相关知识。第四部分包括第 11~16 章,介绍了编译优化的相关知识。第五部分包括第17章和第18 章,针对新兴场景下的系统优化技术展开专题讨论。
-----
CONTENTS 目 录 推荐序一 推荐序二 前言 第一部分 绪论 第1章 开篇案例:矩阵乘法的性能 优化 2 1.1 不同编程语言的实现 2 1.2 循环交换 5 1.3 编译器的不同优化级别 7 1.4 多核并行优化 8 1.5 循环分块 11 1.6 内建函数 15 1.7 本章小结 17 1.8 思考题 18 第2章 系统优化方法论概述 19 2.1 后摩尔时代性能优化的驱动力 19 2.2 数据驱动的系统优化方法 21 2.3 从单点到全局的系统观 21 2.4 本章小结 23 2.5 思考题 23 第二部分 性能工程基础 第3章 性能测量 26 3.1 测量方法 26 3.1.1 外部测量 27 3.1.2 内部测量 28 3.1.3 仿真测量 29 3.2 计时器的选择 30 3.3 数据收集策略 33 3.3.1 计数型 33 3.3.2 采样型 35 3.3.3 追踪型 37 3.4 性能波动 38 3.5 测量开销 42 3.6 测量误差 43 3.7 本章小结 44 3.8 思考题 44 第4章 基准评测 45 4.1 基准评测程序 45 4.1.1 单一指令 46 4.1.2 指令组合 46 4.1.3 合成程序 47 4.1.4 程序内核 47 4.1.5 微基准评测程序 47 4.1.6 应用基准评测程序 48 4.2 标准化基准评测套件 48 4.2.1 SPEC CPU 2017 49 4.2.2 基准评测套件的开发 标准 51 4.3 基准评测的策略 52 4.3.1 固定计算的基准评测 52 4.3.2 固定时间的基准评测 52 4.3.3 可变计算和可变时间的 基准评测 53 4.4 阿姆达尔定律 53 4.5 古斯塔夫森定律 54 4.6 本章小结 55 4.7 思考题 56 第5章 配置优化 57 5.1 基本概念 57 5.2 技术挑战 59 5.2.1 配置空间的组合爆炸 59 5.2.2 性能测量的高昂代价 60 5.2.3 复杂隐蔽的特征交互 61 5.3 实验设计 62 5.3.1 单次单因子设计 62 5.3.2 全因子设计 62 5.3.3 部分因子设计 63 5.3.4 2kr因子设计 64 5.3.5 随机搜索 69 5.3.6 自动调优 70 5.4 基于机器学习的方法 70 5.5 领域知识驱动的方法 72 5.6 本章小结 73 5.7 思考题 73 第6章 性能评价 74 6.1 评价目标的设定 74 6.2 评价方法的选择 75 6.2.1 评价方法的选择条件 75 6.2.2 评价方法的优缺点 76 6.3 评价指标的选择 77 6.3.1 评价指标的分类 77 6.3.2 评价指标的选择条件 78 6.3.3 量纲分析与合理性检查 78 6.4 数据的分析与解释 79 6.4.1 数据的汇总 79 6.4.2 数据的比较 81 6.5 常见错误与规避方法 87 6.6 本章小结 88 6.7 思考题 88 第三部分 计算机体系结构优化 第7章 处理器优化 90 7.1 五阶段处理器 90 7.2 流水线执行 93 7.2.1 指令流水线 93 7.2.2 前端与后端 94 7.2.3 流水线的性能评价和 细分 94 7.2.4 流水线的停顿与冒险 95 7.3 超标量处理 96 7.3.1 超标量指令流水线 96 7.3.2 机器指令与微操作 98 7.4 乱序执行 99 7.4.1 数据依赖的分类 99 7.4.2 旁路 99 7.4.3 顺序执行与乱序执行 100 7.4.4 寄存器重命名 102 7.5 推测执行 103 7.5.1 条件分支造成的控制 冒险 103 7.5.2 分支预测器 104 7.6 本章小结 105 7.7 思考题 105 第8章 存储器优化 106 8.1 高速缓存 108 8.1.1 存储器的层次结构 108 8.1.2 高速缓存的组织结构 109 8.1.3 缓存预取 111 8.2 多核访存架构 113 8.2.1 多处理器系统架构 113 8.2.2 异构系统架构 115 8.2.3 缓存一致性 116 8.3 编写缓存友好的代码 120 8.3.1 顺序访问数据 120 8.3.2 数据打包 121 8.3.3 对齐与填充 121 8.4 本章小结 123 8.5 思考题 123 第9章 微体系结构性能分析 124 9.1 处理器性能的铁律 124 9.1.1 优化每时钟周期的时长 125 9.1.2 优化指令路径长度 126 9.1.3 优化CPI 128 9.2 CPI分解方法 129 9.2.1 根据不同类型的指令进行 CPI分解 129 9.2.2 根据不同停顿进行CPI 分解 130 9.3 自顶向下的微体系结构分析 方法 132 9.4 本章小结 134 9.5 思考题 135 第10章 异构计算与编程 136 10.1 异构计算概述 136 10.1.1 体系结构的分类 136 10.1.2 异构计算的特性 138 10.2 并行编程框架 139 10.2.1 多核编程 139 10.2.2 多节点编程 144 10.3 异构编程:SYCL 148 10.3.1 硬件设备抽象:设备和 队列 148 10.3.2 数据访问方法 149 10.3.3 并行性表达 150 10.3.4 软硬件结合 151 10.3.5 案例分析:矩阵乘法 153 10.4 本章小结 155 10.5 思考题 155 第四部分 编译优化 第11章 源程序级别的常见优化 方法 158 11.1 程序的工作量 158 11.2 数据结构优化示例 159 11.2.1 打包和编码 159 11.2.2 数据增添 160 11.2.3 预先计算 161 11.2.4 编译时做初始化 162 11.2.5 缓存 163 11.2.6 稀疏性 164 11.3 程序逻辑优化 166 11.3.1 常数折叠与传播 167 11.3.2 公共子表达式消除 167 11.3.3 代数恒等替换 167 11.3.4 创建快速通道 168 11.3.5 逻辑短路 168 11.3.6 判断顺序 170 11.3.7 组合判断 170 11.4 循环优化 171 11.4.1 循环不变量外提 172 11.4.2 设置“哨兵” 172 11.4.3 循环展开 173 11.4.4 循环合并 173 11.4.5 消除无用迭代 174 11.5 函数优化 174 11.5.1 函数内联 174 11.5.2 尾递归消除 175 11.5.3 粗化递归 176 11.6 本章小结 176 11.7 思考题 177 第12章 编译器概述 178 12.1 编译器的定义、分类及典型 架构 178 12.1.1 编译器的定义与分类 178 12.1.2 编译器的典型架构 181 12.1.3 程序中间表示的 必要性 182 12.1.4 程序中间表示的设计 思考 183 12.1.5 LLVM IR:LLVM的程序中间表示 184 12.2 符号表 187 12.3 程序运行时的内存组织 188 12.4 程序分析和优化 189 12.5 交叉编译 191 12.6 用编译器优化程序的迭代 循环 192 12.7 本章小结 193 12.8 思考题 193 第13章 目标指令集架构与汇编 语言 194 13.1 编译与汇编语言 194 13.2 x86-64指令集架构 197 13.2.1 数据类型 197 13.2.2 寄存器 198 13.2.3 指令 200 13.2.4 寻址方式 202 13.3 常用的汇编指令模式 204 13.4 浮点和向量化指令 205 13.4.1 浮点运算指令 205 13.4.2 向量化指令 206 13.5 本章小结 208 13.6 思考题 208 第14章 C程序的汇编代码生成 209 14.1 C程序是如何被转换成汇编 代码的 209 14.2 C程序转换成LLVM IR 210 14.2.1 直线代码到LLVM IR的 转换 211 14.2.2 C函数到LLVM IR的 转换 212 14.2.3 条件分支语句到LLVM IR的转换 213 14.2.4 循环语句到LLVM IR的 转换 215 14.2.5 LLVM IR中的属性 217 14.2.6 小结 218 14.3 LLVM IR转换成汇编程序 218 14.3.1 汇编制导指令与程序的 内存布局 219 14.3.2 函数调用规范 220 14.4 本章小结 222 14.5 思考题 223 第15章 编译器的优化能力 225 15.1 编译分析/优化报告 225 15.2 编译器常见的优化能力 227 15.3 编译优化示例 228 15.3.1 标量优化 230 15.3.2 结构体优化 232 15.3.3 函数调用优化 234 15.3.4 循环优化 236 15.4 编译优化的挑战 238 15.4.1 静态信息的不准确性 238 15.4.2 编译单元的局限性 239 15.4.3 优化顺序的不唯一性 240 15.5 链接时间优化 240 15.6 本章小结 241 15.7 思考题 242 第16章 程序插桩与优化机会识别 243 16.1 什么是程序插桩 243 16.1.1 程序插桩应用示例 244 16.1.2 程序插桩的手段 246 16.2 二进制翻译助力程序插桩 246 16.3 利用插桩信息识别编译优化 机会 249 16.3.1 最原始的编译器优化 机会识别方法 249 16.3.2 常用的编译优化机会 识别方法 250 16.3.3 热点驱动的半自动编译 优化机会识别框架 250 16.4 本章小结 257 16.5 思考题 257 第五部分 专题讨论 第17章 数据中心的性能优化 260 17.1 数据中心简介 260 17.2 混部应用的性能干扰检修 261 17.3 数据中心的性能分析 264 17.4 数据中心的性能评价 267 17.5 本章小结 272 17.6 思考题 272 第18章 深度学习框架的优化 273 18.1 深度学习框架简介 273 18.2 优化基础 274 18.3 算子优化 275 18.3.1 提高占用率 276 18.3.2 提高内存带宽的 利用率 277 18.3.3 使用(局部)共享 内存 278 18.3.4 小结 278 18.4 基于计算图的优化 278 18.4.1 图编译器 279 18.4.2 图编译优化 279 18.4.3 算子融合 280 18.4.4 MLIR简介 281 18.4.5 小结 281 18.5 本章小结 282 18.6 思考题 282 参考文献 283
郭健美 2011年在上海交通大学获得博士学位后于加拿大滑铁卢大学从事博士后研究。2021年至今在华东师范大学任教授,与黄波教授一起开设了“软件系统优化”课程,入选2023年上海高校市级重点课程。曾在华东理工大学任副教授,在阿里巴巴集团任高级技术专家并负责阿里云基础软件部系统性能团队。研究兴趣为软件系统的性能优化与质量保障,主持国家自然科学基金等科研项目,2017年入选上海市浦江人才计划,2022年入选东方英才计划青年项目。 黄波 华东师范大学特聘教授,研究方向为数据驱动的系统优化。他在复旦大学获得博士学位,在编译技术及系统优化方面积累了丰富的项目经验,曾创建Intel中国编译器团队以及Intel中国系统优化技术中心。曾担任过驭势(上海)汽车科技有限公司总经理和华为鲲鹏计算的首席架构师。获得2013-2014年度中国软件和信息服务业领军人物奖项以及2022年高等教育(本科)国家级教学成果二等奖。 刘通宇 华东师范大学数据科学与工程学院博士研究生,师从郭健美教授开展计算机体系结构与性能工程的研究,专注于处理器微体系结构的性能测量与分析。负责研发了开源的跨平台性能分析套件hperf,在多个CCF A 类国际期刊发表学术论文,申请和授权国家发明专利多项,作为核心成员参与了国家自然科学基金面上项目、校企联合实验室以及产学研合作等多个项目,获得2024年华东师范大学优秀硕士学位论文奖。 林晓东 英特尔高级首席工程师,负责管理英特尔中国数据中心和人工智能事业部软件部,华东师范大学数据科学与工程学院的兼职教授。研究兴趣为针对体系结构的计算和系统优化。在x86和英特尔GPU上设计和优化了多个深度学习框架,包括 PyTorch、TensorFlow 和 JAX等。带领团队进行了深度学习的关键负载(包含大语言模型、推荐系统、计算机视觉等)的优化,设计和研发了高性能二进制编译器产品——英特尔 Bridge。拥有国内外专利20余项,并两次赢得英特尔成就奖。 赵鹏 英特尔人工智能与深度学习方向高级工程师,研究兴趣为人工智能硬件计算加速与软件解决方案设计。获2019年英特尔中国最高奖(Intel China Awards)等多项荣誉,并发表多篇专利与技术论文。曾担任NVIDIA高级架构工程师和Cadence高级软件工程师,在多核、分布式及GPU通用计算领域积累了丰富的研究与实践经验。擅长并行算法的设计、实现与优化,以及解决性能瓶颈问题。
本书基于作者丰富的教学和工程实践经验,创新性地提出了软件系统优化的方法论,从性能工程基础、编译优化、计算机体系结构优化等传统技术到数据中心优化、深度学习框架优化等新兴技术,全面、深入地阐述了软件系统优化的理论方法与实用技术。本书可以帮助读者贯穿计算机系统的多个层次的知识,培养系统观和优化思维,锻炼软件系统优化的综合能力。本书还配备了大量的实验代码与性能测量案例,可以帮助读者培养实际动手能力,从实践中积累系统优化的经验。
1