本书未涵盖哪些内容?

系统性能取决于不同的组件:CPU、DRAM、I/O 和网络设备等。应用程序可能受益于对系统各种组件的调优,具体取决于瓶颈所在。一般而言,工程师应该分析整个系统的性能。然而,影响系统性能的最大因素是其核心——CPU。正因如此,本书主要从 CPU 视角关注性能分析。我们也相当深入地讨论了内存子系统(memory subsystem),但不涉及 I/O 和网络性能。

同样,软件栈(software stack)包含许多层,例如固件(firmware)、BIOS、操作系统(OS)、库和应用程序源代码。然而,由于大多数底层不在我们的直接控制之下,主要关注点将放在源代码层面。

本书的范围不超出单个 CPU 插槽(CPU socket),因此不会讨论分布式系统(distributed systems)、NUMA 和异构系统(heterogeneous systems)的优化技术。使用 OpenCL 和 openMP 等方案将计算卸载(offloading)到加速器(GPU、FPGA 等)也不在本书讨论范围之内。

我尽力使本书适用于大多数现代 CPU,包括 Intel、AMD、Apple 和其他基于 ARM 的处理器。如果没有涵盖你喜爱的架构,深表遗憾。尽管如此,本书讨论的许多原则同样适用于其他处理器。类似地,本书中大多数示例在 Linux 上运行,但大多数情况下这并不重要,因为同样的技术同样有益于运行在 Windows 和 macOS 操作系统上的应用程序。

本书中的代码片段使用 C 或 C++ 编写,但在很大程度上,书中的思路也可以应用于其他编译为原生代码(native code)的语言,如 Rust、Go,甚至 Fortran。由于本书针对运行在接近硬件层的用户态应用程序(user-mode applications),我们不会讨论托管环境(managed environments),例如 Java。

最后,我假设读者对所开发的软件拥有完全控制权,包括所使用的库和编译器的选择。因此,本书不涉及调优已购买的商业软件包,例如调优 SQL 数据库查询。

results matching ""

    No results matching ""