計(jì)算機(jī)組成與設(shè)計(jì):硬件/軟件接口 RISC-V版(原書第2版)
定 價(jià):169 元
叢書名:計(jì)算機(jī)科學(xué)叢書
- 作者:[美]戴維·A. 帕特森 [美]約翰·L. 亨尼斯
- 出版時(shí)間:2023/7/1
- ISBN:9787111727972
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP303
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書由2017年圖靈獎(jiǎng)得主Patterson和Hennessy共同撰寫,是計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域的經(jīng)典書籍,強(qiáng)調(diào)軟硬件協(xié)同設(shè)計(jì)及其對(duì)性能的影響。本書采用開源的RISC-V指令系統(tǒng)體系結(jié)構(gòu), 講解硬件技術(shù)、指令、算術(shù)運(yùn)算、流水線、存儲(chǔ)層次、I/O以及并行處理器等。第2版將RV64切換為RV32以降低學(xué)習(xí)難度,新增關(guān)于領(lǐng)域定制體系結(jié)構(gòu)(DSA)的討論以反映新的技術(shù)趨勢(shì)。此外,每一章都增加了“性能提升”和“自學(xué)”章節(jié),并更新了大量練習(xí)題。本書適合計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域的專業(yè)技術(shù)人員參考,也適合高等院校計(jì)算機(jī)相關(guān)專業(yè)的學(xué)生閱讀。
本書由圖靈獎(jiǎng)得主Patterson和Hennessy聯(lián)袂撰寫,是計(jì)算機(jī)體系結(jié)構(gòu)新黃金時(shí)代之作。根據(jù)讀者的需求,這一版將RV64切換為RV32,減少10條指令,降低學(xué)習(xí)難度;新增關(guān)于領(lǐng)域定制體系結(jié)構(gòu)(DSA)的討論,使用Google的TPUv1作為示例,還新增了TPUv3 DSA超級(jí)計(jì)算機(jī)與NVIDIA Volta GPU集群的比較;每一章都增加了“性能提升”一節(jié),分別采用數(shù)據(jù)級(jí)并行、指令級(jí)并行、線程級(jí)并行等方法,僅增加21行代碼便使矩陣乘法程序加速近50 000倍,直觀呈現(xiàn)出硬件對(duì)提高能效的重要性。
前 言
Computer Organization and Design: The Hardware/Software Interface, RISC-V Edition, Second Edition
我們能體驗(yàn)的最美好的事情莫過于神秘,它是所有真實(shí)的藝術(shù)和科學(xué)的源泉。
—阿爾伯特·愛因斯坦,《我的信仰》,1930年
關(guān)于本書
我們認(rèn)為,在學(xué)習(xí)計(jì)算機(jī)科學(xué)與工程時(shí),除了掌握計(jì)算的基本原理外,還應(yīng)該了解該領(lǐng)域的最新進(jìn)展。同時(shí),我們還認(rèn)為,各種計(jì)算領(lǐng)域中的讀者都應(yīng)學(xué)習(xí)計(jì)算機(jī)系統(tǒng)的組成理論,因?yàn)檫@是決定計(jì)算機(jī)系統(tǒng)的功能、性能、能耗甚至最終成功的關(guān)鍵。
現(xiàn)代計(jì)算機(jī)技術(shù)需要各個(gè)計(jì)算領(lǐng)域的專業(yè)人員對(duì)計(jì)算機(jī)軟件和硬件都有所了解。軟硬件在不同層次上的相互影響,恰好也提供了一個(gè)理解計(jì)算基礎(chǔ)的框架。不管你的關(guān)注點(diǎn)是硬件還是軟件,專業(yè)是計(jì)算機(jī)科學(xué)還是電氣工程,計(jì)算機(jī)組成和設(shè)計(jì)的核心思想都是相同的。因此,本書的重點(diǎn)是展示硬件和軟件之間的關(guān)系,并重點(diǎn)關(guān)注現(xiàn)代計(jì)算機(jī)的基本概念。
本書從MIPS版的第1版起就提出了以上觀點(diǎn),最近從單處理器向多核微處理器的轉(zhuǎn)變?cè)僖淮斡∽C了這個(gè)頗有遠(yuǎn)見的觀點(diǎn)。然而,程序員無視我們的忠告,不想改造程序,只想依賴計(jì)算機(jī)體系結(jié)構(gòu)設(shè)計(jì)者、編譯器設(shè)計(jì)者或者芯片設(shè)計(jì)者來讓自己的程序運(yùn)行得更快、更高效—這樣的時(shí)代已經(jīng)一去不復(fù)返了。為了運(yùn)行得更快,需要把程序改造成并行的。讓程序員盡可能不知道他們正在使用的底層硬件的并行屬性是許多研究者的目標(biāo),但這需要花費(fèi)很長(zhǎng)時(shí)間才能實(shí)現(xiàn)。我們的觀點(diǎn)是,至少在接下來的十年里,如果想讓程序在并行計(jì)算機(jī)上運(yùn)行得更為高效,大多數(shù)程序員還是需要了解硬件/軟件接口的。
本書的讀者包括:不了解匯編語言或者邏輯設(shè)計(jì),但需要了解計(jì)算機(jī)基本組成的人;具有匯編語言或者邏輯設(shè)計(jì)背景,但想學(xué)習(xí)如何設(shè)計(jì)計(jì)算機(jī)或者想搞清楚系統(tǒng)的工作原理
的人。
關(guān)于另一本書
有些讀者可能熟悉我們的另一本書——Computer Architecture: A Quantitative Approach
(《計(jì)算機(jī)體系結(jié)構(gòu):量化研究方法》,后文簡(jiǎn)稱為《量化研究》)。該書已廣為流傳,經(jīng)常以作者的姓名命名,稱為“Hennessy和Patterson”(本書則常被稱為“Patterson和Hennessy”)。我們寫《量化研究》的動(dòng)機(jī)是,希望能夠使用堅(jiān)實(shí)的工程基礎(chǔ)、量化的成本/性能折中來描述計(jì)算機(jī)體系結(jié)構(gòu)的基本原則。我們使用的方法是,基于商業(yè)系統(tǒng),將實(shí)例與評(píng)估相結(jié)合,建立真實(shí)的設(shè)計(jì)體驗(yàn)。我們的目標(biāo)是,證實(shí)可以使用量化分析方法而不是描述性方法來學(xué)習(xí)計(jì)算機(jī)體系結(jié)構(gòu)。希望這一方法有助于培養(yǎng)能深入理解計(jì)算機(jī)的專業(yè)人才。
本書的大多數(shù)讀者并不一定要成為計(jì)算機(jī)體系結(jié)構(gòu)設(shè)計(jì)者。但是,未來軟件系統(tǒng)的性能和能效,很大程度上取決于軟件設(shè)計(jì)者對(duì)所使用系統(tǒng)的基本硬件技術(shù)的了解程度。因此,編譯器設(shè)計(jì)者、操作系統(tǒng)設(shè)計(jì)者、數(shù)據(jù)庫程序員以及大多數(shù)其他軟件設(shè)計(jì)者需要對(duì)本書中提到的基本原則有深入的理解。同樣,硬件設(shè)計(jì)者也需要清楚地知道自己的設(shè)計(jì)對(duì)軟件應(yīng)用程序的影響。
因此,本書不僅僅是《量化研究》一書的子集,而是進(jìn)行了大幅修訂以滿足不同讀者的需要。我們非常高興地看到《量化研究》的后續(xù)版本也在不斷修訂,刪除了大量的介紹性材料。相比第1版,此后兩本書之間的內(nèi)容重疊會(huì)越來越少。
關(guān)于RISC-V版本
選擇合適的指令系統(tǒng)對(duì)于計(jì)算機(jī)體系結(jié)構(gòu)教材來說至關(guān)重要。不管是不是主流指令系統(tǒng),我們都不希望介紹那些具有不必要的新奇特性的指令系統(tǒng)。理想情況是,你學(xué)習(xí)的第一個(gè)指令系統(tǒng)應(yīng)該是一個(gè)典范,就像你的初戀一樣。令人驚訝的是,你學(xué)習(xí)的第一個(gè)指令系統(tǒng)和你的初戀都會(huì)令你分外懷念。
由于當(dāng)時(shí)有太多選擇,所以在《量化研究》的第1版中我們提出了自己的RISC風(fēng)格指令系統(tǒng)。之后,MIPS指令系統(tǒng)因簡(jiǎn)潔的風(fēng)格而日益受到關(guān)注,我們?cè)诒緯鳰IPS版的第1版時(shí)選擇了它,并且《量化研究》的后續(xù)版本也是如此。MIPS一直為我們和讀者提供了很好的服務(wù)。
多年來,使用MIPS指令系統(tǒng)的芯片數(shù)以億計(jì),并且還在不斷生產(chǎn)出來。它們一般用于嵌入式設(shè)備,而該領(lǐng)域的指令系統(tǒng)幾乎不可見。因此,目前很難找到一臺(tái)真實(shí)的計(jì)算機(jī),讓讀者能夠下載并運(yùn)行MIPS程序。
好消息是,最近一個(gè)開放的RISC指令系統(tǒng)首次亮相,并快速獲得了不少追捧者。它就是由加州大學(xué)伯克利分校(UC Berkeley)開發(fā)的RISC-V指令系統(tǒng),它不僅消除了MIPS指令系統(tǒng)的弊病,而且還具備指令系統(tǒng)應(yīng)有的簡(jiǎn)潔、優(yōu)雅和現(xiàn)代的特點(diǎn)。
此外,RISC-V指令系統(tǒng)不是閉源的,它提供了一套開源的模擬器、編譯器、調(diào)試器等,這些都很容易獲得。它甚至還提供使用硬件描述語言編寫的開源的RISC-V處理器實(shí)現(xiàn),而且,2020年還引入了基于RISC-V的低成本開發(fā)板,相當(dāng)于樹莓派(Raspberry Pi),而MIPS指令系統(tǒng)則不具備這些資源。讀者不僅可以學(xué)習(xí)這些設(shè)計(jì),還能修改它們并貫穿整個(gè)實(shí)現(xiàn)流程,以充分了解這些修改對(duì)性能、晶片面積和能耗方面的影響。
這對(duì)于計(jì)算產(chǎn)業(yè)和教育行業(yè)來說是一個(gè)令人激動(dòng)的機(jī)會(huì)。截止到寫這篇前言之時(shí),已經(jīng)有300多家公司加入RISC-V基金會(huì),贊助商名單幾乎囊括了除ARM和Intel以外的所有主要廠商,包
目 錄
Computer Organization and Design: The Hardware/Software Interface, RISC-V Edition, Second Edition
贊譽(yù)
譯者序
前言
作者簡(jiǎn)介
第1章 計(jì)算機(jī)抽象及相關(guān)技術(shù) 1
1.1 引言 1
1.1.1 傳統(tǒng)的計(jì)算應(yīng)用分類及其特點(diǎn) 2
1.1.2 歡迎來到后PC時(shí)代 3
1.1.3 你能從本書中學(xué)到什么 4
1.2 計(jì)算機(jī)體系結(jié)構(gòu)中的7個(gè)偉大思想 6
1.2.1 使用抽象簡(jiǎn)化設(shè)計(jì) 6
1.2.2 加速經(jīng)常性事件 6
1.2.3 通過并行提高性能 7
1.2.4 通過流水線提高性能 7
1.2.5 通過預(yù)測(cè)提高性能 7
1.2.6 存儲(chǔ)層次 7
1.2.7 通過冗余提高可靠性 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ù)安全 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性能及其度量因素 23
1.6.4 指令性能 24
1.6.5 經(jīng)典的CPU性能公式 25
1.7 功耗墻 28
1.8 滄海巨變:從單處理器向多處理器
轉(zhuǎn)變 30
1.9 實(shí)例:評(píng)測(cè)Intel Core i7 32
1.9.1 SPEC CPU基準(zhǔn)評(píng)測(cè)程序 32
1.9.2 SPEC功耗基準(zhǔn)評(píng)測(cè)程序 34
1.10 性能提升:使用Python語言編寫
矩陣乘法程序 34
1.11 謬誤與陷阱 35
1.12 本章小結(jié) 37
1.13 歷史視角和拓展閱讀 39
1.14?自學(xué) 39
1.15 練習(xí) 41
第2章 指令:計(jì)算機(jī)的語言 46
2.1 引言 46
2.2 計(jì)算機(jī)硬件的操作 48
2.3 計(jì)算機(jī)硬件的操作數(shù) 50
2.3.1 存儲(chǔ)器操作數(shù) 51
2.3.2 常數(shù)或立即數(shù)操作數(shù) 53
2.4 有符號(hào)數(shù)與無符號(hào)數(shù) 54
2.5 計(jì)算機(jī)中的指令表示 59
2.6 邏輯操作 65
2.7 用于決策的指令 67
2.7.1 循環(huán) 68
2.7.2 邊界檢查的簡(jiǎn)便方法 70
2.7.3 case/switch語句 70
2.8 計(jì)算機(jī)硬件對(duì)過程的支持 71
2.8.1 使用更多的寄存器 72
2.8.2 嵌套過程 74
2.8.3 在棧中為新數(shù)據(jù)分配空間 75
2.8.4 在堆中為新數(shù)據(jù)分配空間 76
2.9 人機(jī)交互 78
2.10 對(duì)大立即數(shù)的RISC-V編址和
尋址 82
2.10.1 大立即數(shù) 82
2.10.2 分支中的尋址 83
2.10.3 RISC-V尋址模式總結(jié) 85
2.10.4 機(jī)器語言譯碼 86
2.11 并行性與指令:同步 88
2.12 翻譯并啟動(dòng)程序 90
2.12.1 編譯器 90
2.12.2 匯編器 90
2.12.3 鏈接器 92
2.12.4 加載器 94
2.12.5 動(dòng)態(tài)鏈接庫 94
2.12.6 啟動(dòng)Java程序 96
2.13 以C排序程序?yàn)槔膮R總整理 97
2.13.1 swap過程 97
2.13.2 sort過程 98
2.14 數(shù)組與指針 102
2.14.1 用數(shù)組實(shí)現(xiàn)clear 103
2.14.2 用指針實(shí)現(xiàn)clear 104
2.14.3 比較兩個(gè)版本的clear 105
2.15 高級(jí)專題:編譯C語言和解釋
Java語言 105
2.16 實(shí)例:MIPS指令 105
2.17 實(shí)例:ARMv7(32位)指令 106
2.17.1?尋址模式 107
2.17.2?比較和條件分支指令 108
2.17.3?ARM的獨(dú)特之處 108
2.18 實(shí)例:ARMv8(64位)指令 109
2.19 實(shí)例:x86指令 109
2.19.1 Intel x86的演變 110
2.19.2 x86寄存器和尋址模式 111
2.19.3 x86整數(shù)操作 113
2.19.4 x86指令編碼 115
2.19.5 x86總結(jié) 116
2.20 實(shí)例:RISC-V指令系統(tǒng)的剩余
部分 116
2.21 性能提升:使用C語言編寫矩陣
乘法程序 117
2.22 謬誤與陷阱 118
2.23 本章小結(jié) 120
2.24 歷史視角和擴(kuò)展閱讀 122
2.25?自學(xué) 122
2.26 練習(xí) 124
第3章 計(jì)算機(jī)的算術(shù)運(yùn)算 130
3.1 引言 130
3.2 加法和減法 130
3.3 乘法 133
3.3.1 串行版的乘法算法及其硬件
實(shí)現(xiàn) 133
3.3.2 帶符號(hào)乘法 136
3.3.3 快速乘法 136
3.3.4 RISC-V中的乘法 136
3.3.5 總結(jié) 137
3.4 除法 137
3.4.1 除法算法及其硬件實(shí)現(xiàn) 137
3.4.2 有符號(hào)除法 140
3.4.3 快速除法 140
3.4.4 RISC-V中的除法 141
3.4.5 總結(jié) 141
3.5 浮點(diǎn)運(yùn)算 142
3.5.1 浮點(diǎn)表示 143
3.5.2 例外和中斷 144
3.5.3 IEEE 754浮點(diǎn)數(shù)標(biāo)準(zhǔn) 144
3.5.4 浮點(diǎn)加法 147
3.5.5 浮點(diǎn)乘法 150
3.5.6 RISC-V中的浮點(diǎn)指令 153
3.5.7 精確算術(shù) 157
3.5.8 總結(jié) 159
3.6 并行性與計(jì)算機(jī)算術(shù):子字并行 160
3.7 實(shí)例:x86中的SIMD擴(kuò)展和高級(jí)
向量擴(kuò)展 160
3.8 性能提升:子字并行和矩陣乘法 162
3.9 謬誤與陷阱 163
3.10 本章小結(jié) 1