Preface 前 言
写作目的
我写这本书的目的很简单:帮助软件开发人员更好地理解应用程序在现代硬件上的性能。我知道,对于初学者甚至资深的开发人员来说,该话题可能会让他们感到困惑,这种困惑主要发生在没有从事过与性能相关的工作的开发人员身上。不过这并不是问题,毕竟所有的专家都曾是初学者。
我至今还记得刚开始进行性能分析的那些日子:盯着不熟悉的指标,试图匹配一些不匹配的数据,每日都感到非常困惑。我花了好几年的时间才终于融会贯通,把相关的知识拼图拼凑到了一起。当时,唯一的信息来源是软件开发者手册,但是它不是主流开发者喜欢阅读的文档。所以,我决定写这本书,希望本书能够让开发人员更容易地学习性能分析的相关概念。
认为自己是性能分析初学者的开发者,可以从本书的开头逐章阅读。第2~4章为开发者提供了阅读后面各章所需的必备知识,已经熟悉这些概念的读者可以选择跳过这些章节。此外,本书可用作优化软件应用程序的参考指南。读者可把第7~11章的内容作为调优代码的灵感来源。
目标读者
本书主要面向性能关键型应用程序和底层优化软件的开发者。这里只列举几个相关领域,如高性能计算(High-Performance Computing,HPC)、游戏开发、数据中心应用(如Facebook和Google等)、高频交易。但是,本书的应用范围并不局限于上述行业。对于任何希望更好地了解应用程序性能,希望知道如何诊断和改进应用程序的开发者来说,本书都是有用的。我希望本书中介绍的内容可以帮助读者培养可用于日常工作的新技能。
读者应当具备C/C++编程语言的基本知识,以方便理解本书的示例。如果读者具备基本的x86汇编语言阅读能力则更佳,但这并非严格要求。读者还需要熟悉计算机架构和操作系统的基本概念,如中央处理器、内存、进程、线程、虚拟内存和物理内存、上下文切换等。如果读者还不熟悉上述术语的话,建议先学习一下相关知识。
Acknow Ledgements 致 谢
非常感谢Mark E. Dawson,他帮助我撰写了7.8节、8.1.3节、10.3节、10.5节、11.1节、11.5节、11.6节和11.7节。他是高频交易行业公认的专家,非常热心地分享了他的专业知识。
感谢Sridhar Lakshmanamurthy,他帮助我撰写了第3章关于CPU微架构的主要部分。他在Intel工作数十年,是半导体行业的资深人士。
非常感谢LLVM编译器中向量化框架的原作者Nadav Rotem,他帮助我编写了8.2.3节。
感谢Clément Grégoire,他帮助我撰写了8.2.3.7节。他拥有丰富的游戏开发经验,他的评论和反馈帮助本书解决了游戏开发行业面临的一些挑战。
本书的出版还依赖以下审稿人:Dick Sites、Wojciech Mu?a、Thomas Dullien、Matt Fleming、Daniel Lemire、Ahmad Yasin、Michele Adduci、Clément Grégoire、Arun S.Kumar、Surya Narayanan、Alex Blewitt、Nadav Rotem、Alexander Yer-molovich、Suchakrapani Datt Sharma、Renat Idrisov、Sean Heelan、Jumana Mundichipparakkal、Todd Lipcon、Rajiv Chauhan、Shay Morag等。
此外,还要感谢性能社区的无数博客文章和论文。从Travis Downs、Daniel Lemire、Andi Kleen、Agner Fog、Bruce Dawson、Brendan Gregg等人的博客中,我学到了很多东西。我站在巨人的肩膀上才得以完成此书,所以本书的成功不应该只归功于我自己,这本书也是我为了感谢和回馈整个社区而作。
最后,还要感谢我的家人,他们给了我足够的耐心和支持,为我放弃了周末旅行和每晚的散步活动。没有他们的支持,我是不可能完成本书的。
About the Author 作者简介
丹尼斯·巴赫瓦洛夫(Denis Bakhvalov)是Intel的一名高级开发人员,在Intel从事C++编译器项目相关工作,旨在为不同的芯片架构生成最佳代码。性能工程和编译器一直是他的主要兴趣所在。他于2008年开始了他的软件开发职业生涯,参与过多个领域的工作,包括桌面应用程序开发、嵌入式系统开发、性能分析和编译器开发。2016年,他开设了easyperf.net博客,开始在博客中撰写性能分析、调优、C/C++编译器和CPU微架构相关的文章。他热爱生活,在空余时间致力于践行积极的生活方式,常去踢足球、打网球、跑步或下棋。
联系方式:
电子邮件:dendibakh@gmail.com
Twitter:@dendibakh
LinkedIn:@dendibakh