尋寶處理器的引人入勝之旅
當(dāng)出版社的編輯介紹萬(wàn)木楊的這本書給我時(shí),我對(duì)書名《大話處理器》是有一定擔(dān)心的,其一:處理器和計(jì)算機(jī)的發(fā)展幾十年來(lái)風(fēng)起云涌,其間有天才的創(chuàng)新、看似偶然的分叉和囿于商業(yè)市場(chǎng)考量的成功與失敗,一部技術(shù)發(fā)展史絕不比波譎云詭的社會(huì)史遜色。一部“大話”處理器的書會(huì)不會(huì)流于一部圍繞處理器發(fā)展種種軼事的大話技術(shù)史?讀書時(shí)固然會(huì)津津樂道,興趣斐然,然而掩卷沉思后,會(huì)不會(huì)仍然無(wú)法對(duì)處理器的體系結(jié)構(gòu)有更清晰的認(rèn)識(shí)?其二:處理器的發(fā)展是和軟件、操作系統(tǒng)的發(fā)展互為作用的,其中很多技術(shù)點(diǎn)和概念都值得深入討論。采用“大話”的方式能否既保證技術(shù)書籍?dāng)⑹龅臏?zhǔn)確性,又不至于陷入對(duì)某些概念旁征博引的“Rat hole”式的羅列,而變得像很多剪貼式編著的IT書籍一樣?
但其后數(shù)次斷續(xù)讀稿時(shí)沉浸其中的體驗(yàn)打消了我的顧慮。我?guī)状伍喿x書稿都是在出差途中(如飛機(jī)上),一個(gè)很深的體驗(yàn)是一旦開始閱讀就不愿終止,一直讀到不得不將書稿收起走路為止。另一個(gè)體驗(yàn)是,從任何一個(gè)間斷點(diǎn),都可以把本書當(dāng)作入口,去找尋別的書籍進(jìn)一步深入學(xué)習(xí)其中的一些關(guān)鍵技術(shù),就好像函數(shù)調(diào)用一般,這是我所期望的帶領(lǐng)讀者進(jìn)入處理器世界的導(dǎo)游書籍,因此非常愿意向廣大的讀者推薦這本書。
在技術(shù)書籍的閱讀中,我偏愛愛因斯坦闡釋的方法——“在所閱讀的書中,找出可以把自己引向深入的東西,把其他的一切統(tǒng)統(tǒng)拋掉。”這就是拋掉使大腦負(fù)擔(dān)過重和把自己誘離要點(diǎn)的一切。
萬(wàn)木楊的這本書,在選材上圍繞處理器的核心技術(shù),從計(jì)算機(jī)發(fā)展的形態(tài)、歷史展開敘述,在簡(jiǎn)略介紹了處理器的周邊設(shè)備后,迅速深入處理器的抽象模型,以計(jì)算機(jī)軟件生態(tài)系統(tǒng)中最重要的指令集體系結(jié)構(gòu)ISA切入到探索處理器的微架構(gòu),對(duì)處理器微架構(gòu)的一些核心技術(shù),如流水線、亂序執(zhí)行、指令級(jí)并行、線程級(jí)并行、緩存結(jié)構(gòu)和算法、緩存一致性等概念,言簡(jiǎn)意賅地做了原理闡釋。而了解這些核心概念,是理解其后第六章優(yōu)化代碼效率的基礎(chǔ)。竊以為這些章節(jié)是本書的“hardcore”,很值得一讀。
在本書的寫作風(fēng)格上,作者運(yùn)用了很多嶄新的網(wǎng)絡(luò)元素和鮮活的比擬來(lái)厘清概念,比如用《我的兄弟叫順溜》中的順溜裝配子彈的例子來(lái)開展指令流水線的討論,既不流于表面、為舉例而舉例,又一以貫之地將每個(gè)案例充分展開、把問題說透,這樣的例子在本書中比比皆是,也是我推薦該書的原因之一。這體現(xiàn)了“拋掉使大腦負(fù)擔(dān)過重”的原則,以及作者對(duì)所敘述的技術(shù)的深度把握。沒有這種把握,是很難用好這種比擬的,反而容易變成“畫虎不成反類犬”。
由于長(zhǎng)期從事性能優(yōu)化工作,此前也出版了一本針對(duì)并行優(yōu)化指南的書,因此對(duì)本書中闡述并行處理和編寫高效代碼的章節(jié)仍覺意猶未盡,這讓我想起了兩件事:
其一,我在2001年左右從事針對(duì)多核DSP的手寫匯編代碼優(yōu)化工作,就是本書里所總結(jié)的VLIW并行實(shí)現(xiàn)機(jī)制,當(dāng)時(shí)一個(gè)很深的感觸是,人類大腦的并行度很低,至少在匯編這個(gè)層級(jí),能夠持續(xù)對(duì)多個(gè)計(jì)算單元實(shí)現(xiàn)高效并行處理編程的上限恐怕就是四級(jí)并行了,人的大腦有所謂“一心不可二用”的限制,因此,此后在IA平臺(tái)上,多核、多進(jìn)程一直到大規(guī)模集群的并行開發(fā)的方向就很清楚了,就是必須依賴高級(jí)語(yǔ)言的開發(fā)工具,支持并行實(shí)現(xiàn)的編譯器、數(shù)學(xué)庫(kù)和線程,MPI進(jìn)程追蹤工具和類似Vtune這樣的指令微架構(gòu)行為的示波器,來(lái)解放人的大腦。另一方面就是開發(fā)新的并行編程模型和語(yǔ)言,進(jìn)一步釋放多核處理器的性能。
其二,在一本論述并行超級(jí)計(jì)算機(jī)體系架構(gòu)的英文專著上,我曾讀到一段話,似可借來(lái)總結(jié)處理器性能發(fā)展的方向。即,要做快、做好一件事,基本上有三種方法。一是把事情本身縮短、少做事,這就是處理器流水線效率、分支預(yù)測(cè)命中率等等技術(shù)的發(fā)展,體現(xiàn)在軟件上就是更好的算法和更短的代碼關(guān)鍵路徑。二是做得更快、更勤些,這就是處理器上更多的浮點(diǎn)計(jì)算單元、更高效的緩存、新的高效指令集直到AVX這樣的高密度向量計(jì)算指令。三是讓別人去做或者和別人一起做,這就是并行,多線程和多進(jìn)程的并行工作。處理器的發(fā)展,從性能上看,基本上也可以歸為上述三點(diǎn),比照本書的結(jié)構(gòu),讀者也可以做個(gè)歸納。
未來(lái)的發(fā)展,我們看到了SOC的興起,我們看到CPU和GPU的混合計(jì)算,我們也看到英特爾即將推出的、針對(duì)大規(guī)模并行應(yīng)用、集成眾核架構(gòu)的協(xié)處理模式的處理器。正如丘吉爾所言,“你能看見多久的過去,就能看見多遠(yuǎn)的未來(lái)”?;仡櫛緯刑岬降哪切┮巳雱俚奶幚砥骷夹g(shù)的來(lái)龍去脈,背后的技術(shù)原因或是市場(chǎng)競(jìng)爭(zhēng)要素,奇妙之處在于,處理器的技術(shù)史是我們創(chuàng)造出來(lái)的,而身處其中之人卻難以知曉,那就讓我們“把其他的一切統(tǒng)統(tǒng)拋掉”,一起踏上本書尋寶處理器的引人入勝之旅!是為序。
何萬(wàn)青 博士
英特爾數(shù)據(jù)中心產(chǎn)品部 高性能計(jì)算/工作站架構(gòu)師