本书涵盖哪些内容?

本书旨在帮助开发者更好地理解其应用程序的性能,学习发现低效之处并加以消除。

  • 为什么我的改动导致性能下降了 2 倍?
  • 我们的客户抱怨应用程序速度太慢。我该如何调查?
  • 为什么我手写的压缩算法比通用算法性能更差?
  • 我是否已经将程序优化到了极致?
  • 我的平台上有哪些性能分析工具可用?
  • 有哪些技术可以减少缓存未命中(cache misses)和分支预测错误(branch mispredictions)的次数?

我希望读完本书后,你能回答上述问题。

本书分为两个部分。第一部分(第 2–7 章)教你如何发现性能问题,第二部分(第 8–13 章)教你如何修复它们。

  • 第 2 章讨论公正的性能实验及其分析,介绍性能测试和结果比较的最佳实践。
  • 第 3 章介绍 CPU 微架构(microarchitecture),深入研究 Intel 的 Golden Cove 微架构。
  • 第 4 章涵盖性能分析中使用的术语和指标(metrics)。在本章末尾,我们通过四个真实世界应用程序上收集的各种性能指标呈现了一个案例研究。
  • 第 5 章探讨最流行的性能分析方法。我们描述性能分析工具(profiling tools)的工作原理以及它们能够收集哪些数据。
  • 第 6 章研究现代 Intel、AMD 和基于 ARM 的 CPU 为支持和增强性能分析而提供的特性,展示它们的工作原理以及它们有助于解决哪些问题。
  • 第 7 章概述 Linux、Windows 和 macOS 上最流行的性能分析工具。
  • 第 8 章关于内存访问优化、缓存友好型代码(cache-friendly code)、数据结构重组以及其他技术。
  • 第 9 章关于计算优化,探讨数据依赖(data dependencies)、函数内联(function inlining)、循环优化(loop optimizations)和向量化(vectorization)。
  • 第 10 章关于无分支编程(branchless programming),用于避免分支预测错误(branch misprediction)。
  • 第 11 章关于机器码布局优化(machine code layout optimizations),如基本块放置(basic block placement)、函数分割(function splitting)和基于性能剖析的优化(profile-guided optimizations)。
  • 第 12 章包含前四章未涉及但仍足够重要的优化主题。本章我们讨论特定 CPU 的优化,检查几个与微架构相关的性能问题,探索用于优化低延迟应用程序的技术,并就系统调优提供建议。
  • 第 13 章讨论分析多线程应用程序的技术,深入探讨优化多线程应用程序的几个最重要的挑战。我们提供了五个真实世界多线程应用程序的案例研究,解释为什么它们的性能无法随 CPU 线程数线性提升。我们还讨论缓存一致性问题(cache coherency issues)(如"伪共享(false sharing)")以及几个专为分析多线程应用程序而设计的工具。

本书末尾有一个词汇表(glossary)和主要 CPU 供应商的微架构列表。每当你遇到不熟悉的缩写词,或需要回顾最近的 Intel、AMD 和 ARM 芯片系列时,可以参阅这些资源。

本书中提供的示例主要基于开源软件:Linux 操作系统、基于 LLVM 的 Clang 编译器(用于 C 和 C++ 语言)以及各种开源应用程序和基准测试1。选择这些项目不仅因为它们的流行性,还因为其源代码是开放的,这使我们能够更好地理解其工作机制,对于学习本书中呈现的概念尤为有用。这并不意味着我们不会展示专有工具,例如,我们会大量使用 Intel® VTune™ Profiler。

有时,通过各种提示强制编译器生成所需的机器码,可以获得可观的加速。你将在全书中找到许多此类示例。虽然事先有编译器经验对性能工作大有帮助,但大多数情况下,你不需要成为编译器专家就能推动应用程序的性能改进。大多数优化可以在源代码层面完成,无需深入研究编译器源代码。

1. 有些人不喜欢将其应用程序称为"基准测试(benchmark)",他们认为基准测试是人为合成的,不能很好地代表真实场景。在本书中,我们交替使用"基准测试"、"工作负载(workload)"和"应用程序(application)",并无冒犯之意。

results matching ""

    No results matching ""