官术网_书友最值得收藏!

譯者序

多年前,在上一家公司參與某編譯器項目時,為了度量編譯器生成匯編指令的效率,我曾經嘗試過基于控制流圖(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章中的循環優化和向量化等內容提供了大量的建設性意見。在此,一并衷心感謝所有參與翻譯和校譯工作的朋友們,是大家的一致努力讓本書的翻譯工作得以完成。盡管各位譯者都盡可能想要把原文翻譯準確,但難免有疏漏之處,歡迎大家斧正。

翻譯本書占用了譯者周末和凌晨的絕大部分時間,非常感謝家人的理解和成全,沒有他們的全力支持,翻譯工作是不可能完成的。

朱金鵬

于北京

主站蜘蛛池模板: 综艺| 江都市| 锦州市| 固阳县| 信宜市| 舟曲县| 理塘县| 上栗县| 罗田县| 四会市| 华阴市| 都昌县| 广丰县| 正阳县| 南漳县| 西平县| 临武县| 望城县| 松溪县| 泰来县| 栖霞市| 博野县| 盐池县| 黄石市| 镇坪县| 华蓥市| 确山县| 庆元县| 大安市| 盐津县| 滨海县| 台湾省| 眉山市| 沂水县| 阿克苏市| 沙湾县| 洞头县| 佛学| 通州市| 新干县| 新竹县|