您好,欢迎来到聚文网。 登录 免费注册
软件系统优化

软件系统优化

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

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网