作品简介

本书旨在指导大家优化运行在现代CPU上的应用程序的性能。具体来说,主要分为两部分内容:

第一部分介绍性能分析,包括对CPU微架构、术语和指标的简要概述,还探讨了分析性能的不同方法和现代平台上可用的硬件监控功能。

第二部分展示如何发现优化机会,以及可以做哪些转换来提高程序的性能。此外,还提供了一份可应用于用户应用程序的优化清单,包括循环优化、向量化、函数内联等,并讨论了有助于消除CPU微架构层面的问题(如缓存未命中、分支预测错误等)的代码转换。

本书对于从事性能关键型应用程序开发和进行系统底层优化的技术人员来说是不可或缺的。对于任何想更好地了解应用程序性能并探索其诊断和改进方法的开发者来说,这本书也很有用。

丹尼斯·巴赫瓦洛夫,Intel高级开发人员,在Intel从事C++编译器项目相关工作,致力于为不同的芯片架构生成最佳代码。性能工程和编译器一直是他感兴趣的研究领域。他于2008年开始了他的软件开发职业生涯,参与过多个领域的工作,包括桌面应用程序开发、嵌入式系统开发、性能分析和编译器开发。2016年,他开设了easyperf.net博客,开始在博客中撰写性能分析、调优、C/C++编译器和CPU微架构相关的文章。

作品目录

  • 译者序
  • 前言
  • 致谢
  • 作者简介
  • 第1章 导读
  • 1.1 为什么需要性能调优
  • 1.2 谁需要做性能调优
  • 1.3 什么是性能分析
  • 1.4 本书的主要内容
  • 1.5 本书不包含什么内容
  • 1.6 本章总结
  • 第一部分 现代CPU性能分析
  • 第2章 性能测量
  • 2.1 现代系统中的噪声
  • 2.2 生产环境中的性能测量
  • 2.3 自动检测性能退化问题
  • 2.4 手动性能测试
  • 2.5 软件计时器和硬件计时器
  • 2.6 微基准测试
  • 2.7 本章总结
  • 第3章 CPU微架构
  • 3.1 指令集架构
  • 3.2 流水线
  • 3.3 利用指令级并行
  • 3.4 利用线程级并行
  • 3.5 存储器层次
  • 3.6 虚拟内存
  • 3.7 单指令多数据多处理器
  • 3.8 现代CPU设计
  • 3.9 性能监控单元
  • 第4章 性能分析中的术语和指标
  • 4.1 退休指令与执行指令
  • 4.2 CPU利用率
  • 4.3 CPI和IPC
  • 4.4 微操作
  • 4.5 流水线槽位
  • 4.6 核时钟周期和参考时钟周期
  • 4.7 缓存未命中
  • 4.8 分支预测错误
  • 第5章 性能分析方法
  • 5.1 代码插桩
  • 5.2 跟踪
  • 5.3 负载表征
  • 5.4 采样
  • 5.5 屋顶线性能模型
  • 5.6 静态性能分析
  • 5.7 编译器优化报告
  • 5.8 本章总结
  • 第6章 性能分析相关的CPU特性
  • 6.1 自顶向下微架构分析技术
  • 6.2 最后分支记录
  • 6.3 基于处理器事件的采样
  • 6.4 Intel处理器跟踪技术
  • 6.5 本章总结
  • 第二部分 基于源代码的CPU调优
  • 第7章 CPU前端优化
  • 7.1 机器码布局
  • 7.2 基本块
  • 7.3 基本块布局
  • 7.4 基本块对齐
  • 7.5 函数拆分
  • 7.6 函数分组
  • 7.7 基于剖析文件的编译优化
  • 7.8 对ITLB的优化
  • 7.9 本章总结
  • 第8章 CPU后端优化
  • 8.1 内存绑定
  • 8.2 核心绑定
  • 8.3 本章总结
  • 第9章 优化错误投机
  • 9.1 用查表替换分支
  • 9.2 用断言替换分支
  • 9.3 本章总结
  • 第10章 其他调优
  • 10.1 编译时计算
  • 10.2 编译器内建函数
  • 10.3 缓存预热
  • 10.4 减少慢速浮点运算
  • 10.5 系统调优
  • 第11章 优化多线程应用程序
  • 11.1 性能扩展和开销
  • 11.2 并行效率指标
  • 11.3 使用Intel VTune Profiler进行分析
  • 11.4 使用Linux perf进行分析
  • 11.5 使用Coz进行分析
  • 11.6 使用eBPF和GAPP进行分析
  • 11.7 检测一致性问题
  • 11.8 本章总结
  • 附录A 减少测量噪声
  • 附录B LLVM向量化程序
  • 术语
  • 参考文献
  • 推荐阅读
展开全部