- 現代CPU性能分析與優化
- (美)丹尼斯·巴赫瓦洛夫
- 1723字
- 2023-11-09 19:34:47
譯者序
多年前,在上一家公司參與某編譯器項目時,為了度量編譯器生成匯編指令的效率,我曾經嘗試過基于控制流圖(Control Flow Graph,CFG)模擬計算某個Java函數包含的匯編指令運行所需的總時鐘周期數。雖然這是一種粗略的靜態計算方法,跟CPU的真實運行場景有相當大的差別,但卻在我心里種下了進一步了解指令在CPU內部究竟如何運行的種子。
后來,到新公司工作后,我開始整體負責虛擬機和編譯優化相關業務,苦苦探索用于分析和度量程序性能的方法,以判斷某段程序是否可以進行編譯優化,以及可用何種方法進行優化。我們注意到了Intel在x86平臺上的自頂向下微架構性能分析方法,但是相關論文中有大量的術語和背景知識,如架構、微架構、流水線、前后端、翻譯后備緩沖區(Translation Lookaside Buffer,TLB)等,理解起來非常困難。在網上搜索相關資料時,大部分都是碎片化的信息,對從整體上全面理解自頂向下分析方法并不能提供太大的幫助。
就在我們苦苦探索時,偶然在微信公眾號“Linux閱碼場”上看到一篇文章推薦了兩本書,其中一本是Brendan Gregg的《性能之巔》,另一本就是來自Denis Bakhvalov的Performance Analysis and Tuning on Modern CPUs。我們瞬間就被目錄中的內容吸引了,這不就是我們正在追尋的東西嗎?于是,我們便一頭扎了進去,如饑似渴地讀了起來,讀完感覺酣暢淋漓。之前很多不清晰的點,逐漸清晰了起來,尤其是架構、性能分析和優化方法。
為了讓更多人能夠學習書中的內容,我們有了翻譯這本書的念頭,于是便跟Denis聯絡,申請翻譯這本書,很快便得到了Denis的同意。然后,通過朋友聯系到了機械工業出版社,洽談協商后便開始了本書的翻譯工作。因為本書主要講的是芯片架構和編譯優化,屬于計算機領域基礎軟件部分,所以并不是全民追捧的技術熱點,機械工業出版社對基礎軟件技術的專注和追求讓人印象深刻。
本書系統地整理和總結了Denis在easyperf.net博客中所分享的內容。本書第一部分介紹性能評測方法、CPU微架構運行機制與內存層級管理、基于CPU的性能分析方法論(自頂向下的微架構分析方法和屋頂線性能模型等)及相關工具。第二部分介紹如何基于LLVM編譯器對自頂向下微架構分析的不同瓶頸類型進行優化。相比傳統的架構和編譯原理相關書籍,本書更貼近實戰,詳細介紹Intel Skylake處理器的硬件架構和相關特性,而不是泛泛地講一些概念。其中對于編譯優化部分,本書沒有糾結于繁雜的編譯原理,而是直接介紹LLVM提供的編譯優化方法及原理。所以,我們可以在閱讀本書的過程中直接對自己的C/C++代碼進行剖析和優化。在實際工作中,我們直接通過PGO編譯和火焰圖剖析對某個算法實現了10%的性能優化。略有遺憾的是,本書主要介紹的是Intel x86平臺的內容,對ARM和RSIC V等平臺特性沒有深入介紹,同時后兩個芯片平臺的性能剖析硬件支持也遠遠落后于x86平臺。不過,得益于LLVM的跨平臺特性,本書中講到的幾乎所有優化方法都適用于其他平臺。
在此也提醒一下讀者,本書介紹的分析和優化方法主要用于解決代碼在CPU微架構流水線上運行的效率問題。如果你要優化的程序本身在業務邏輯上就存在性能缺陷,那么本書介紹的方法可能對你幫助不大。在你解決了業務上的性能問題后,本書介紹的方法也許可以助你一臂之力,讓你的代碼被優化或者被編譯得更適合目標CPU的微架構,從而提升應用程序的性能或者降低能耗。
本書的翻譯不是我一個人的功勞,當我剛開始投入時,字節跳動的董一峰和世紀互聯的崔永新已經開始了一些翻譯工作。參與進來后,我就承擔起了組織大家一起翻譯本書的工作。后來在操作過程中,由于一峰和永新工作比較繁忙,相對參與得比較少。董一峰為本書做出了非常關鍵和基礎的貢獻,打造了從Markdown到PDF的構建環境,解決了本書翻譯過程中的排版大難題,讓我們能夠更多地關注書中的內容而非排版。后來,騰訊云的李成棟通過朋友介紹參與了進來,完成了本書第3章、跋和附錄A、附錄B的翻譯,以及大部分的校譯工作。此外,編譯優化方向的碩士研究生韋清福同學也參與了本書的校譯工作,尤其對第8章中的循環優化和向量化等內容提供了大量的建設性意見。在此,一并衷心感謝所有參與翻譯和校譯工作的朋友們,是大家的一致努力讓本書的翻譯工作得以完成。盡管各位譯者都盡可能想要把原文翻譯準確,但難免有疏漏之處,歡迎大家斧正。
翻譯本書占用了譯者周末和凌晨的絕大部分時間,非常感謝家人的理解和成全,沒有他們的全力支持,翻譯工作是不可能完成的。
朱金鵬
于北京
- Vue.js設計與實現
- Learning C# by Developing Games with Unity 2020
- Java 9 Concurrency Cookbook(Second Edition)
- Microsoft Dynamics 365 Extensions Cookbook
- Java游戲服務器架構實戰
- Git高手之路
- QTP自動化測試進階
- 人人都懂設計模式:從生活中領悟設計模式(Python實現)
- C語言程序設計實驗指導 (第2版)
- 軟件測試實用教程
- .NET 4.5 Parallel Extensions Cookbook
- Unity Character Animation with Mecanim
- 精益軟件開發管理之道
- C++面向對象程序設計
- Java Web應用開發