我写这本书的目的很简单:帮助软件开发人员更好地理解应用程序在现代硬件上的性能。我知道,对于初学者甚至资深的开发人员来说,该话题可能会让他们感到困惑,这种困惑主要发生在没有从事过与性能相关的工作的开发人员身上。不过这并不是问题,毕竟所有的专家都曾是初学者。
我至今还记得刚开始进行性能分析的那些日子:盯着不熟悉的指标,试图匹配一些不匹配的数据,每日都感到非常困惑。我花了好几年的时间才终于融会贯通,把相关的知识拼图拼凑到了一起。当时,唯一的信息来源是软件开发者手册,但是它不是主流开发者喜欢阅读的文档。所以,我决定写这本书,希望本书能够让开发人员更容易地学习性能分析的相关概念。
认为自己是性能分析初学者的开发者,可以从本书的开头逐章阅读。第2~4章为开发者提供了阅读后面各章所需的必备知识,已经熟悉这些概念的读者可以选择跳过这些章节。此外,本书可用作优化软件应用程序的参考指南。读者可把第7~11章的内容作为调优代码的灵感来源。
本书主要面向性能关键型应用程序和底层优化软件的开发者。这里只列举几个相关领域,如高性能计算(High-Performance Computing,HPC)、游戏开发、数据中心应用(如Facebook和Google等)、高频交易。但是,本书的应用范围并不局限于上述行业。对于任何希望更好地了解应用程序性能,希望知道如何诊断和改进应用程序的开发者来说,本书都是有用的。我希望本书中介绍的内容可以帮助读者培养可用于日常工作的新技能。
读者应当具备C/C++编程语言的基本知识,以方便理解本书的示例。如果读者具备基本的x86汇编语言阅读能力则更佳,但这并非严格要求。读者还需要熟悉计算机架构和操作系统的基本概念,如中央处理器、内存、进程、线程、虚拟内存和物理内存、上下文切换等。如果读者还不熟悉上述术语的话,建议先学习一下相关知识。