關(guān)于我們
書單推薦
新書推薦
|
計(jì)算機(jī)組成與設(shè)計(jì):硬件/軟件接口(原書第5版·ARM版)
本書由2017年圖靈獎(jiǎng)得主Patterson和Hennessy共同撰寫,是計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域的經(jīng)典教材,強(qiáng)調(diào)軟硬件協(xié)同設(shè)計(jì)及其對(duì)性能的影響。本書采用ARMv8體系結(jié)構(gòu),講解硬件技術(shù)、匯編語言、計(jì)算機(jī)算術(shù)運(yùn)算、流水線、存儲(chǔ)器層次結(jié)構(gòu)以及I/O的基本原理。新內(nèi)容涵蓋平板電腦、云基礎(chǔ)設(shè)施、ARM(移動(dòng)計(jì)算設(shè)備)以及x86(云計(jì)算)體系結(jié)構(gòu),新實(shí)例包括IntelCorei7、ARMCortex-A53以及NVIDIAFermiGPU。本書適合作為高等院校計(jì)算機(jī)專業(yè)的教材,也適合廣大專業(yè)技術(shù)人員參考。
神秘是我們所能體驗(yàn)的最美好的事物,它是所有真正的藝術(shù)和科學(xué)的源泉。
—阿爾伯特·愛因斯坦,《我的信仰》,1930年 關(guān)于本書 我們學(xué)習(xí)計(jì)算機(jī)科學(xué)與工程時(shí),不僅需要了解這個(gè)領(lǐng)域內(nèi)的最新進(jìn)展,同時(shí)也需要掌握計(jì)算技術(shù)背后的基本原理和組成結(jié)構(gòu)。計(jì)算機(jī)系統(tǒng)的組成決定了系統(tǒng)的功能和性能,是系統(tǒng)成功與否的關(guān)鍵。因此,計(jì)算領(lǐng)域各個(gè)方向的讀者都能從計(jì)算機(jī)系統(tǒng)組成理論的學(xué)習(xí)中 受益。 隨著現(xiàn)代計(jì)算機(jī)技術(shù)的發(fā)展,計(jì)算領(lǐng)域的各個(gè)方向都需要對(duì)硬件和軟件均有深入理解的專業(yè)人士。硬件和軟件在各個(gè)層次上的相互關(guān)系,為理解計(jì)算技術(shù)的基本原理提供了框架。無論你感興趣的是硬件還是軟件,是計(jì)算機(jī)科學(xué)還是電氣工程,計(jì)算機(jī)組成與設(shè)計(jì)的核心思想都是相同的。因此,本書著重展示計(jì)算機(jī)硬件與軟件間的相互關(guān)系,并重點(diǎn)介紹當(dāng)今計(jì)算機(jī)中的基礎(chǔ)概念。 當(dāng)前,微處理器由單核發(fā)展為多核,這一趨勢(shì)印證了本書自第1版就提出的觀點(diǎn)。過去,程序員可以忽略我們的建議,在計(jì)算機(jī)體系結(jié)構(gòu)專家、編譯器開發(fā)者以及芯片工程師的幫助下,他們一行代碼也不用修改,就能讓程序更快或更高效地運(yùn)行在新型微處理器上。但是,這樣的時(shí)代已經(jīng)一去不返了。為了使程序運(yùn)行得更快,就必須要實(shí)現(xiàn)并行化。雖然許多研究者的目標(biāo)是希望程序員在編寫程序時(shí)無須考慮底層硬件的并行特性,但這一目標(biāo)還要很多年才能實(shí)現(xiàn)。我們認(rèn)為,至少在下一個(gè)十年里,大多數(shù)程序員仍必須理解硬件/軟件接口,才能編寫出在并行計(jì)算機(jī)上高效運(yùn)行的程序。 本書適合以下讀者:在匯編語言或(數(shù)字)邏輯設(shè)計(jì)方面只有少許經(jīng)驗(yàn),需要對(duì)計(jì)算機(jī)組成的基本原理有所理解;具有匯編語言或邏輯設(shè)計(jì)基礎(chǔ),需要學(xué)習(xí)如何設(shè)計(jì)計(jì)算機(jī),或者需要進(jìn)一步理解計(jì)算機(jī)系統(tǒng)是如何工作的。 與本書相關(guān)的另一本書 有些讀者可能對(duì)《計(jì)算機(jī)體系結(jié)構(gòu):量化研究方法》一書有所了解,也就是人們常說的“Hennessy and Patterson”(本書則常被稱為“Patterson and Hennessy”)。我們撰寫“量化研究方法”那本書,意在通過堅(jiān)實(shí)的工程基礎(chǔ)和量化的開銷/性能權(quán)衡方法來描述計(jì)算機(jī)體系結(jié)構(gòu)的原理。書中以商用系統(tǒng)為基礎(chǔ),將案例和測(cè)量方法相結(jié)合,以期幫助讀者積累實(shí)際的設(shè)計(jì)經(jīng)驗(yàn)。我們希望闡明的是,計(jì)算機(jī)體系結(jié)構(gòu)可以通過“量化”的方法而不是“描述”的方法來學(xué)習(xí)。因此,它主要面向需要對(duì)計(jì)算機(jī)體系結(jié)構(gòu)有詳細(xì)了解的計(jì)算機(jī)專業(yè)人士。 本書的大多數(shù)讀者可能并不打算成為計(jì)算機(jī)體系結(jié)構(gòu)專家。然而,軟件設(shè)計(jì)人員對(duì)底層硬件技術(shù)的理解程度,將對(duì)軟件系統(tǒng)的性能和能效產(chǎn)生顯著影響。因此,編譯器開發(fā)者、操作系統(tǒng)設(shè)計(jì)者、數(shù)據(jù)庫程序員以及其他大多數(shù)軟件工程師都應(yīng)當(dāng)對(duì)本書所介紹的原理有充分了解。同樣,硬件設(shè)計(jì)人員也必須清楚地理解他們的工作將對(duì)軟件應(yīng)用產(chǎn)生何種影響。 因此,本書絕非“量化研究方法”一書的子集,而是進(jìn)行了大量擴(kuò)充和修訂,以滿足不同層次的讀者。我們?cè)凇傲炕芯糠椒ā钡暮罄m(xù)版本中刪除了很多介紹性的內(nèi)容,較之這兩本書的第1版,現(xiàn)在重疊的內(nèi)容已經(jīng)大幅減少,這是一個(gè)令人高興的變化。 這一版為何采用ARMv8 指令集的選擇對(duì)于一本計(jì)算機(jī)體系結(jié)構(gòu)教科書而言是非常關(guān)鍵的。無論一種指令集多受歡迎,如果它對(duì)初學(xué)者來說花哨難懂,我們?nèi)詴?huì)放棄這種巴洛克式的華美。初次接觸的指令集應(yīng)當(dāng)是指令集中的“典范”,足以被牢記心間,就像牢記初戀一樣。你或許不會(huì)相信,初戀和初次接觸的指令集都有令人記憶猶新的魔力。 雖然當(dāng)年也有很多種指令集可供選擇,但在撰寫“量化研究方法”的第1版時(shí),我們自己構(gòu)造了一種RISC風(fēng)格的指令集—MIPS。MIPS指令集非常簡(jiǎn)潔而且廣受歡迎,因此從第1版開始,那本書的后續(xù)版本以及我們的其他相關(guān)書籍都采用MIPS指令集作為范例。MIPS一直陪伴著我們以及我們的廣大讀者。 當(dāng)前,ARM發(fā)展速度驚人,其指令集的受歡迎程度也令人難以置信。2015年ARM芯片的出貨量就達(dá)到了140億片。很多教師提出需求,希望能夠基于ARM出版一個(gè)版本。在本書亞洲版的一些章節(jié)中,我們?cè)鲞^嘗試。但是,ARMv7(32位地址)指令集“怪異”的風(fēng)格讓我們無法忍受。因此,我們考慮不再繼續(xù)采用ARMv7。 然而,讓人驚喜的是,ARM推出的64位指令集有了很大的改動(dòng)。較之ARMv7,新的64位指令集和MIPS有很多相似之處: 將寄存器數(shù)由16個(gè)增加為32個(gè)。 將PC設(shè)計(jì)為獨(dú)立的寄存器,而不是寄存器組中的一個(gè)。 去除了指令的條件執(zhí)行功能。 去除了多字連續(xù)load和store(load multiple和store multiple)指令。 增加了PC相對(duì)尋址的分支指令,支持較大的轉(zhuǎn)移空間。 將所有數(shù)據(jù)傳輸指令的尋址模式設(shè)置為一致的。 減少了指令集的條件碼。 …… 雖然ARMv8比MIPS龐大得多(ARMv8指令集參考手冊(cè)多達(dá)5400頁),但是本書只挑選了ARMv8指令集的一個(gè)子集,這個(gè)子集在指令數(shù)量和特性上都與以前版本所采用的MIPS相似。為了避免混淆,本書將這個(gè)子集稱為L(zhǎng)EGv8。所以,本書基于LEGv8撰寫了ARMv8版。 ARMv8指令集本身提供了32位地址指令和64位地址指令兩種模式。我們?cè)究梢赃x擇ARMv8指令集并保持32位地址模式,不過我們的出版商對(duì)讀者進(jìn)行了調(diào)查,結(jié)論是75%的讀者傾向于采用64位地址模式或者持中立態(tài)度。因此我們最終決定將地址空間擴(kuò)展為64位,從目前技術(shù)發(fā)展的角度來看也更為合理。 ARM版和MIPS版的區(qū)別僅在于涉及指令集的章節(jié),主要是第2、3、5章的虛擬存儲(chǔ)器部分,以及第6章的VMIPS例子部分。第4章切換到了ARMv8指令,修改了若干圖表,增加了一些“精解”模塊,這些改動(dòng)都較為簡(jiǎn)單。第1章和剩下的附錄幾乎沒有改動(dòng)?紤]到網(wǎng)絡(luò)上大量的文檔材料以及ARMv8本身的復(fù)雜度,將原來的附錄A(匯編器、鏈接器和SPIM模擬器)從MIPS版替換為ARM版是非常困難的。對(duì)此,本書在第2、3、5章中均包含了對(duì)除ARMv8核心指令之外的其他ARMv8指令的快速概述,而這些核心指令則在其他章節(jié)中詳細(xì)介紹。我們相信本書的讀者即使沒有閱讀網(wǎng)絡(luò)上動(dòng)輒幾千頁的資料的經(jīng)驗(yàn),也依舊能夠較好地理解ARMv8。其他勇于探索的讀者則可以通過閱讀這些概述對(duì)ARMv8形成框架性的認(rèn)識(shí),以便后續(xù)更好地理解ARMv8眾多復(fù)雜的特點(diǎn)。 當(dāng)然,我們并沒有打算永久地采用ARMv8結(jié)構(gòu),例如本書第5版的ARM版和MIPS版就同時(shí)在售。本書未來的版本可能還會(huì)有對(duì)MIPS版和ARM版的需求,也可能會(huì)有包含另一種指令集的新版本出現(xiàn)。我們期待你的反饋。 第5版的變化 第5版有6項(xiàng)主要變化: 通過實(shí)例論證理解硬件的重要性。 對(duì)于第1章中提到的8個(gè)偉大思想,在后面每次應(yīng)用這些思想時(shí)予以突出顯示。 更新例題,體現(xiàn)從PC時(shí)代到后PC時(shí)代的發(fā)展變化。 將I/O吞吐率方面的內(nèi)容貫穿在整本書中,而不是集中在一章中闡述。 對(duì)技術(shù)內(nèi)容進(jìn)行了更新,體現(xiàn)自2009年本書第4版出版以來工業(yè)界的變化。 將附錄和可選章節(jié)的內(nèi)容放在互聯(lián)網(wǎng)上(帶有??圖標(biāo)),而不是隨書附加CD,從而降低了成本,也使新版本可獨(dú)立成為一部電子書。 在詳細(xì)介紹第5版的變化即修訂目標(biāo)之前,首先看下表。該表列出了本書的主要內(nèi)容,并為關(guān)注硬件和關(guān)注軟件的兩類讀者分別進(jìn)行了導(dǎo)讀。其中,第1、4、5、6章是兩類讀者都需關(guān)注的。第1章討論了能耗的重要性及其如何引發(fā)微處理器從單核向多核轉(zhuǎn)變,還介紹了計(jì)算機(jī)體系結(jié)構(gòu)中的8個(gè)偉大思想。第2章對(duì)于硬件方向的讀者來說很可能是復(fù)習(xí)性的內(nèi)容,而對(duì)于軟件方向的讀者來說則是必選的學(xué)習(xí)內(nèi)容,特別是希望對(duì)編譯器和面向?qū)ο缶幊陶Z言有更多了解的讀者。第3章適合對(duì)數(shù)據(jù)通路構(gòu)建或浮點(diǎn)運(yùn)算感興趣的讀者。如果你對(duì)這些內(nèi)容沒有興趣,或是已經(jīng)掌握了這部分知識(shí),則可以跳過該章。不過,第3章中給出了一個(gè)矩陣乘法的實(shí)例,展示如何通過子字并行方法將性能提高4倍,因此不要跳過3.6~3.8節(jié)。第4章介紹流水線處理器。其中,4.1、4.5和4.10節(jié)為概述,4.12節(jié)給出了進(jìn)一步提高矩陣乘法性能的方法,這些小節(jié)對(duì)于關(guān)注軟件的讀者來說比較重要。而對(duì)于關(guān)注硬件的讀者,第4章是核心內(nèi)容,你可以根據(jù)自己具備的硬件知識(shí)背景,選擇是否先閱讀附錄A中的邏輯設(shè)計(jì)部分。最后一章是全新的內(nèi)容,涉及多核、多處理器和集群系統(tǒng),所有讀者都應(yīng)該閱讀。我們重新組織了內(nèi)容,希望能使很多技術(shù)思想的闡述更加自然,并且引入了更多關(guān)于GPU、倉儲(chǔ)式計(jì)算機(jī)以及網(wǎng)絡(luò)軟硬件接口(集群系統(tǒng)中的關(guān)鍵)的內(nèi)容。 章/附錄節(jié)關(guān)注軟件關(guān)注硬件 第1章 計(jì)算機(jī)的抽象與技術(shù)1.1~1.11 1.12(歷史) 第2章 指令:計(jì)算機(jī)的語言2.1~2.14 2.15(編譯器和Java) 2.16~2.21 2.22(歷史) 附錄D RISC指令集體系結(jié)構(gòu)D.1~D.17 第3章 計(jì)算機(jī)的算術(shù)運(yùn)算3.1~3.5 3.6~3.9(子字并行) 3.10~3.11(謬誤) 3.12(歷史) 附錄A 邏輯設(shè)計(jì)基礎(chǔ)A.1~A.13 第4章 處理器4.1(引言) 4.2(邏輯設(shè)計(jì)的一般方法) 4.3~4.4(簡(jiǎn)單實(shí)現(xiàn)) 4.5(流水線概述) 4.6(流水線數(shù)據(jù)通路) 4.7~4.9(冒險(xiǎn)和異常) 4.10~4.12(并行和實(shí)例) 4.13(Verilog流水線控制) 4.14~4.15(謬誤) 4.16(歷史) 附錄C 控制器的硬件實(shí)現(xiàn)C.1~C.6 第5章 大容量和高速度:開發(fā)存儲(chǔ)器層次結(jié)構(gòu)5.1~5.10 5.11(廉價(jià)冗余磁盤陣列) 5.12(Verilog cache控制器) 5.13~5.16 5.17(歷史) 第6章 并行處理器:從客戶端到云6.1~6.8 6.9(網(wǎng)絡(luò)) 6.10~6.14 6.15(歷史) 附錄B 圖形處理單元B.1~B.13 仔細(xì)閱讀 有時(shí)間閱讀 作為參考 回顧或閱讀 拓展閱讀 第5版的第一個(gè)目標(biāo)是希望通過具體的例子,幫助讀者理解硬件對(duì)提高性能和能效的重要性。正如前面所述,第3章介紹了如何采用子字并行將矩陣乘法加速4倍。第4章介紹了通過循環(huán)展開將性能翻倍,從而證明了指令集并行的價(jià)值。第5章闡述了如何利用分塊技術(shù)優(yōu)化cache,將性能再次翻倍。第6章證明了通過在16個(gè)處理器上采用線程級(jí)并行可以獲得14倍的加速比。而這四種優(yōu)化技術(shù)的實(shí)現(xiàn),僅需要在原始矩陣乘法例子的C代碼上增加24行代碼。 第二個(gè)目標(biāo)是幫助讀者更好地理解計(jì)算機(jī)體系結(jié)構(gòu)技術(shù)的精髓:首先集中介紹計(jì)算機(jī)體系結(jié)構(gòu)設(shè)計(jì)中的8個(gè)偉大思想,然后在整本書中明確指出這些思想的應(yīng)用。在每次引用這些偉大思想時(shí)會(huì)突出顯示,全書大約有100次引用,每章中至少有7處應(yīng)用實(shí)例,并且每個(gè)思想至少被引用5次。通過并行、流水線以及預(yù)測(cè)技術(shù)提高性能是被引用最多的三個(gè)思想,其次是摩爾定律。講述處理器的第4章是實(shí)例最多的一章,也是最吸引計(jì)
出版者的話
贊譽(yù) 譯者序 前言 作者簡(jiǎn)介 第1章 計(jì)算機(jī)的抽象與技術(shù) 1 1.1 引言 1 1.1.1 計(jì)算機(jī)應(yīng)用的分類和特點(diǎn) 2 1.1.2 歡迎來到后PC時(shí)代 3 1.1.3 你能從本書中學(xué)到什么 4 1.2 計(jì)算機(jī)體系結(jié)構(gòu)中的8個(gè)偉大思想 6 1.2.1 面向摩爾定律的設(shè)計(jì) 6 1.2.2 使用抽象簡(jiǎn)化設(shè)計(jì) 7 1.2.3 加速大概率事件 7 1.2.4 通過并行提高性能 7 1.2.5 通過流水線提高性能 7 1.2.6 通過預(yù)測(cè)提高性能 7 1.2.7 存儲(chǔ)器層次結(jié)構(gòu) 7 1.2.8 通過冗余提高可靠性 7 1.3 程序表象之下 8 1.4 硬件包裝之下 10 1.4.1 顯示器 11 1.4.2 觸摸屏 12 1.4.3 打開機(jī)箱 13 1.4.4 數(shù)據(jù)的安全存儲(chǔ) 15 1.4.5 與其他計(jì)算機(jī)通信 16 1.5 處理器和存儲(chǔ)器制造技術(shù) 17 1.6 性能 20 1.6.1 性能的定義 20 1.6.2 性能的度量 22 1.6.3 CPU的性能及其度量因素 24 1.6.4 指令的性能 24 1.6.5 經(jīng)典的CPU性能公式 25 1.7 功耗墻 28 1.8 滄海巨變:從單處理器向多處理器轉(zhuǎn)變 29 1.9 實(shí)例:Intel Core i7基準(zhǔn)測(cè)試 32 1.9.1 SPEC CPU基準(zhǔn)測(cè)試程序 32 1.9.2 SPEC功耗基準(zhǔn)測(cè)試程序 34 1.10 謬誤與陷阱 34 1.11 本章小結(jié) 36 1.12 歷史觀點(diǎn)與拓展閱讀 37 1.13 練習(xí)題 38 第2章 指令:計(jì)算機(jī)的語言 42 2.1 引言 42 2.2 計(jì)算機(jī)硬件的操作 44 2.3 計(jì)算機(jī)硬件的操作數(shù) 46 2.3.1 存儲(chǔ)器操作數(shù) 47 2.3.2 常數(shù)或立即數(shù)操作數(shù) 50 2.4 有符號(hào)數(shù)和無符號(hào)數(shù) 51 2.5 計(jì)算機(jī)中指令的表示 56 2.6 邏輯操作 61 2.7 決策指令 64 2.7.1 循環(huán) 65 2.7.2 邊界檢查的簡(jiǎn)便方法 67 2.7.3 case/switch語句 67 2.8 計(jì)算機(jī)硬件對(duì)過程的支持 68 2.8.1 使用更多的寄存器 69 2.8.2 過程嵌套 71 2.8.3 在棧中為新數(shù)據(jù)分配空間 73 2.8.4 在堆中為新數(shù)據(jù)分配空間 74 2.9 人機(jī)交互 76 2.10 LEGv8中的寬立即數(shù)和地址的尋址 79 2.10.1 寬立即數(shù) 79 2.10.2 分支中的尋址 80 2.10.3 LEGv8尋址模式總結(jié) 82 2.10.4 機(jī)器語言解碼 82 2.11 并行與指令:同步 86 2.12 翻譯并啟動(dòng)程序 88 2.12.1 編譯器 88 2.12.2 匯編器 89 2.12.3 鏈接器 90 2.12.4 加載器 92 2.12.5 動(dòng)態(tài)鏈接庫 92 2.12.6 啟動(dòng)Java程序 94 2.13 綜合實(shí)例:C排序程序 95 2.13.1 swap過程 95 2.13.2 sort過程 97 2.14 數(shù)組和指針 101 2.14.1 用數(shù)組實(shí)現(xiàn)clear 102 2.14.2 用指針實(shí)現(xiàn)clear 102 2.14.3 比較兩個(gè)版本的clear 103 2.15 高級(jí)主題:編譯C和解釋Java 104 2.16 實(shí)例:MIPS指令集 104 2.17 實(shí)例:ARMv7(32位)指令集 105 2.18 實(shí)例:x86指令集 106 2.18.1 Intel x86的演進(jìn) 107 2.18.2 x86寄存器和數(shù)據(jù)尋址模式 108 2.18.3 x86整數(shù)操作 110 2.18.4 x86指令編碼 112 2.18.5 x86總結(jié) 112 2.19 實(shí)例:ARMv8指令集的其他部分 113 2.19.1 完整的ARMv8整數(shù)算術(shù)邏輯指令 114 2.19.2 完整的ARMv8整數(shù)數(shù)據(jù)傳輸指令 116 2.19.3 完整的ARMv8分支指令 117 2.20 謬誤與陷阱 118 2.21 本章小結(jié) 119 2.22 歷史觀點(diǎn)與拓展閱讀 121 2.23 練習(xí)題 121 第3章 計(jì)算機(jī)的算術(shù)運(yùn)算 128 3.1 引言 128 3.2 加法和減法 128 3.3 乘法 131 3.3.1 順序乘法算法及硬件 131 3.3.2 有符號(hào)乘法 134 3.3.3 更快速的乘法 134 3.3.4 LEGv8中的乘法 134 3.3.5 小結(jié) 135 3.4 除法 135 3.4.1 除法算法及硬件 135 3.4.2 有符號(hào)除法 137 3.4.3 更快速的除法 138 3.4.4 LEGv8中的除法 138 3.4.5 小結(jié) 139 3.5 浮點(diǎn)運(yùn)算 140 3.5.1 浮點(diǎn)表示 141 3.5.2 異常和中斷 142 3.5.3 IEEE 754浮點(diǎn)標(biāo)準(zhǔn) 142 3.5.4 浮點(diǎn)加法 145 3.5.5 浮點(diǎn)乘法 148 3.5.6 LEGv8中的浮點(diǎn)指令 150 3.5.7 算術(shù)精確性 154 3.5.8 小結(jié) 156 3.6 并行與計(jì)算機(jī)算術(shù):子字并行 157 3.7 實(shí)例:x86中的流處理SIMD擴(kuò)展和高級(jí)向量擴(kuò)展 158 3.8 實(shí)例:其他的ARMv8算術(shù)指令 160 3.8.1 完整的ARMv8整數(shù)和浮點(diǎn)算術(shù)指令 160 3.8.2 完整的ARMv8 SIMD指令 161 3.9 加速:子字并行和矩陣乘法 163 3.10 謬誤與陷阱 166 3.11 本章小結(jié) 168 3.12 歷史觀點(diǎn)與拓展閱讀 171 3.13 練習(xí)題 171 第4章 處理器 175 4.1 引言 175 4.1.1 一種基本的LEGv8實(shí)現(xiàn) 176 4.1.2 實(shí)現(xiàn)概述 176 4.2 邏輯設(shè)計(jì)的一般方法 178 4.3 建立數(shù)據(jù)通路 180 4.4 一種簡(jiǎn)單的實(shí)現(xiàn)機(jī)制 187 4.4.1 ALU控制 187 4.4.2 主控制單元的設(shè)計(jì) 188 4.4.3 數(shù)據(jù)通路的操作 191 4.4.4 完成控制單元 194 4.4.5 為什么不使用單周期實(shí)現(xiàn) 195 4.5 流水線概述 197 4.5.1 面向流水線的指令集設(shè)計(jì) 200 4.5.2 流水線冒險(xiǎn) 200 4.5.3 流水線概述小結(jié) 206 4.6 流水線數(shù)據(jù)通路及其控制 207 4.6.1 圖形化表示的流水線 215 4.6.2 流水線控制 218 4.7 數(shù)據(jù)冒險(xiǎn):旁路與阻塞 221 4.8 控制冒險(xiǎn) 231 4.8.1 假定分支不發(fā)生 231 4.8.2 減少分支延遲 232 4.8.3 動(dòng)態(tài)分支預(yù)測(cè) 234 4.8.4 流水線小結(jié) 236 4.9 異常 236 4.9.1 LEGv8體系結(jié)構(gòu)中的異常處理 237 4.9.2 流水線實(shí)現(xiàn)中的異常 238 4.10 指令級(jí)并行 241 4.10.1 推測(cè)的概念 242 4.10.2 靜態(tài)多發(fā)射 243 4.10.3 動(dòng)態(tài)多發(fā)射 246 4.10.4 動(dòng)態(tài)流水線調(diào)度 247 4.10.5 能耗效率與高級(jí)流水線 249 4.11 實(shí)例:ARM Cortex-A53和Intel Core i7流水線 250 4.11.1 ARM Cortex-A53 251 4.11.2 Intel Core i7 920 253 4.11.3 Intel Core i7 920的性能 255 4.12 加速:指令級(jí)并行和矩陣乘法 256 4.13 高級(jí)主題:采用硬件設(shè)計(jì)語言描述和建模流水線的數(shù)字設(shè)計(jì)技術(shù)以及更多流水線示例 258 4.14 謬誤與陷阱 258 4.15 本章小結(jié) 259 4.16 歷史觀點(diǎn)與拓展閱讀 260 4.17 練習(xí)題 260 第5章 大容量和高速度:開發(fā)存儲(chǔ)器層次結(jié)構(gòu) 271 5.1 引言 271 5.2 存儲(chǔ)器技術(shù) 275 5.2.1 SRAM技術(shù) 275 5.2.2 DRAM技術(shù) 275 5.2.3 閃存 277 5.2.4 磁盤存儲(chǔ)器 277 5.3 cache的基本原理 279 5.3.1 cache訪問 280 5.3.2 cache缺失處理 285 5.3.3 寫操作處理 285 5.3.4 cache實(shí)例:Intrinsity FastMATH處理器 287 5.3.5 小結(jié) 289 5.4 cache性能的評(píng)估和改進(jìn) 289 5.4.1 通過更靈活的塊放置策略來減少cache缺失 292 5.4.2 在cache中查找塊 295 5.4.3 替換塊的選擇 296 5.4.4 使用多級(jí)cache減少缺失代價(jià) 297 5.4.5 通過分塊進(jìn)行軟件優(yōu)化 299 5.4.6 小結(jié) 303 5.5 可信存儲(chǔ)器層次結(jié)構(gòu) 303 5.5.1 失效的定義 303 5.5.2 糾1檢2漢明碼(SEC/DED) 305 5.6 虛擬機(jī) 308 5.6.1 虛擬機(jī)監(jiān)視器的要求 309 5.6.2 指令集體系結(jié)構(gòu)(缺乏)對(duì)虛擬機(jī)的支持 309 5.6.3 保護(hù)和指令集體系結(jié)構(gòu) 310 5.7 虛擬存儲(chǔ)器 310 5.7.1 頁的存放和查找 313 5.7.2 缺頁故障 315 5.7.3 用于大型虛擬地址的虛擬內(nèi)存 316 5.7.4 關(guān)于寫 318 5.7.5 加快地址轉(zhuǎn)換:TLB 318 5.7.6 Intrinsity FastMATH TLB 319 5.7.7 集成虛擬存儲(chǔ)器、TLB和cache 322 5.7.8 虛擬存儲(chǔ)器中的保護(hù) 323 5.7.9 處理TLB缺失和缺頁 324 5.7.10 小結(jié) 326 5.8 存儲(chǔ)器層次結(jié)構(gòu)的一般框架 328 5.8.1 問題1:塊放在何處 328 5.8.2 問題2:如何找到塊 329 5.8.3 問題3:cache缺失時(shí)替換哪一塊 330 5.8.4 問題4:寫操作如何處理 330 5.8.5 3C:一種理解存儲(chǔ)器層次結(jié)構(gòu)行為的直觀模型 331 5.9 使用有限狀態(tài)機(jī)控制簡(jiǎn)單的cache 332 5.9.1 一個(gè)簡(jiǎn)單的cache 333 5.9.2 有限狀態(tài)機(jī) 333 5.9.3 一個(gè)簡(jiǎn)單cache控制器的有限狀態(tài)機(jī) 335 5.10 并行與存儲(chǔ)器層次結(jié)構(gòu):cache一致性 336 5.10.1 實(shí)現(xiàn)一致性的基本方案 337 5.10.2 監(jiān)聽協(xié)議 337 5.11 并行與存儲(chǔ)器層次結(jié)構(gòu):廉價(jià)冗余磁盤陣列 339 5.12 高級(jí)主題:實(shí)現(xiàn)cache控制器 339 5.13 實(shí)例:ARM Cortex-A53和Intel Core i7的存儲(chǔ)器層次結(jié)構(gòu) 339 5.14 實(shí)例:ARMv8系統(tǒng)的剩余部分以及特殊指令 343 5.15 加速:cache分塊和矩陣乘法 345 5.16 謬誤與陷阱 346 5.17 本章小結(jié) 349 5.18 歷史觀點(diǎn)與拓展閱讀 350 5.19 練習(xí)題 350 第6章 并行處理器:從客戶端到云 362 6.1 引言 362 6.2 創(chuàng)建并行處理程序的難點(diǎn) 364 6.3 SISD、MIMD、SIMD、SPMD和向量 367 6.3.1 x86中的SIMD:多媒體擴(kuò)展 368 6.3.2 向量 368 6.3.3 向量與標(biāo)量 370 6.3.4 向量與多媒體擴(kuò)展 370 6.4 硬件多線程 372 6.5 多核和其他共享內(nèi)存多處理器 375 6.6 圖形處理單元 378 6.6.1 NVIDIA GPU體系結(jié)構(gòu)簡(jiǎn)介 379 6.6.2 NVIDIA GPU存儲(chǔ)結(jié)構(gòu) 380 6.6.3 正確理解GPU 381 6.7 集群、倉儲(chǔ)式計(jì)算機(jī)和其他消息傳遞多處理器 383 6.8 多處理器網(wǎng)絡(luò)拓?fù)浜?jiǎn)介 386 6.9 與外界通信:集群網(wǎng)絡(luò) 389 6.10 多處理器基準(zhǔn)測(cè)試程序和性能模型 389 6.10.1 性能模型 391 6.10.2 Roof?line模型 392 6.10.3 兩代Opteron的比較 393 6.11 實(shí)例:Intel Core i7 960 和NVIDIA Tesla GPU的評(píng)測(cè)及Roof?line模型 396 6.12 加速:多處理器和矩陣乘法 399 6.13 謬誤與陷阱 402 6.14 本章小結(jié) 403 6.15 歷史觀點(diǎn)與拓展閱讀 405 6.16 練習(xí)題 405 附錄A 邏輯設(shè)計(jì)基礎(chǔ) 414 索引 470 網(wǎng)絡(luò)內(nèi)容 附錄B 圖形處理單元 附錄C 控制器的硬件實(shí)現(xiàn) 附錄D RISC指令集體系結(jié)構(gòu) 術(shù)語表 擴(kuò)展閱讀
你還可能感興趣
我要評(píng)論
|