計(jì)算機(jī)組成與設(shè)計(jì):硬件/軟件接口 MIPS版(原書第6版)
定 價(jià):149 元
叢書名:計(jì)算機(jī)科學(xué)叢書
- 作者:[美]戴維·A. 帕特森(David A. Patterson) [美]約翰·L. 亨尼斯(John L. Hennessy)
- 出版時(shí)間:2022/7/1
- ISBN:9787111708865
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP301
- 頁碼:577
- 紙張:
- 版次:
- 開本:16
本書由2017年圖靈獎的兩位得主撰寫,是計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域的經(jīng)典教材,每年被超過40000名學(xué)生使用。新版的主要更新是在每章中添加了關(guān)于DSA的內(nèi)容,并更新了所有實(shí)例,使全書更加與時(shí)俱進(jìn),滿足學(xué)生和讀者的新需求。
譯者序
前言
作者簡介
第1章 計(jì)算機(jī)抽象及相關(guān)技術(shù) 1
1.1 引言 1
1.1.1 計(jì)算應(yīng)用的分類及其特性 2
1.1.2 歡迎來到后PC時(shí)代 3
1.1.3 你能從本書學(xué)到什么 4
1.2 計(jì)算機(jī)體系結(jié)構(gòu)的7個偉大思想 6
1.2.1 使用抽象簡化設(shè)計(jì) 6
1.2.2 加速大概率事件 6
1.2.3 通過并行提高性能 6
1.2.4 通過流水線提高性能 6
1.2.5 通過預(yù)測提高性能 7
1.2.6 存儲層次 7
1.2.7 通過冗余提高可靠性 7
1.3 程序表象之下 8
1.4 機(jī)箱之內(nèi)的硬件 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 處理器和存儲器制造技術(shù) 17
1.6 性能 20
1.6.1 性能的定義 21
1.6.2 性能的度量 23
1.6.3 CPU性能及其因素 24
1.6.4 指令的性能 25
1.6.5 經(jīng)典的CPU性能公式 26
1.7 功耗墻 28
1.8 滄海巨變:從單處理器向多處理器轉(zhuǎn)變 30
1.9 實(shí)例:Intel Core i7基準(zhǔn) 32
1.9.1 SPEC CPU基準(zhǔn)測試程序 32
1.9.2 SPEC功耗基準(zhǔn)測試程序 34
1.10 加速:使用Python語言編寫矩陣乘法程序 35
1.11 謬誤與陷阱 36
1.12 本章小結(jié) 38
1.13 歷史觀點(diǎn)和拓展閱讀 39
1.14 自學(xué) 39
1.15 練習(xí)題 42
第2章 指令:計(jì)算機(jī)的語言 46
2.1 引言 46
2.2 計(jì)算機(jī)硬件的操作 48
2.3 計(jì)算機(jī)硬件的操作數(shù) 50
2.3.1 存儲器操作數(shù) 51
2.3.2 常數(shù)或立即數(shù)操作數(shù) 53
2.4 有符號數(shù)和無符號數(shù) 54
2.5 計(jì)算機(jī)中指令的表示 59
2.6 邏輯操作 65
2.7 決策指令 67
2.7.1 循環(huán) 68
2.7.2 case/switch語句 70
2.8 計(jì)算機(jī)硬件對過程的支持 71
2.8.1 使用更多寄存器 72
2.8.2 嵌套過程 74
2.8.3 在棧中為新數(shù)據(jù)分配空間 76
2.8.4 在堆中為新數(shù)據(jù)分配空間 76
2.9 人機(jī)交互 78
2.10 MIPS中32位立即數(shù)和地址的尋址 82
2.10.1 32位立即數(shù) 83
2.10.2 分支和跳轉(zhuǎn)中的尋址 83
2.10.3 MIPS尋址模式總結(jié) 85
2.10.4 機(jī)器語言解碼 87
2.11 并行與指令:同步 89
2.12 翻譯并執(zhí)行程序 91
2.12.1 編譯器 91
2.12.2 匯編器 91
2.12.3 鏈接器 93
2.12.4 加載器 95
2.12.5 動態(tài)鏈接庫 95
2.12.6 啟動一個Java程序 97
2.13 綜合實(shí)例:C排序程序 98
2.13.1 swap過程 98
2.13.2 sort過程 100
2.14 數(shù)組與指針 104
2.14.1 用數(shù)組實(shí)現(xiàn)clear 104
2.14.2 用指針實(shí)現(xiàn)clear 106
2.14.3 比較兩個版本的clear 106
2.15 高級內(nèi)容:編譯C語言和解釋Java語言 107
2.16 實(shí)例:ARMv7(32位)指令集 107
2.16.1 尋址模式 108
2.16.2 比較和條件分支 108
2.16.3 ARM的特色 109
2.17 實(shí)例:ARMv8(64位)指令集 111
2.18 實(shí)例:RISC-V指令集 112
2.19 實(shí)例:x86指令集 112
2.19.1 Intel x86的演進(jìn) 112
2.19.2 x86寄存器和數(shù)據(jù)尋址模式 114
2.19.3 x86整數(shù)操作 115
2.19.4 x86指令編碼 117
2.19.5 x86總結(jié) 119
2.20 加速:使用C語言編寫矩陣乘法程序 119
2.21 謬誤與陷阱 120
2.22 本章小結(jié) 122
2.23 歷史觀點(diǎn)和拓展閱讀 124
2.24 自學(xué) 124
2.25 練習(xí)題 126
第3章 計(jì)算機(jī)的算術(shù)運(yùn)算 132
3.1 引言 132
3.2 加法和減法 132
3.3 乘法 136
3.3.1 順序的乘法算法和硬件 137
3.3.2 有符號乘法 139
3.3.3 更快速的乘法 139
3.3.4 MIPS中的乘法 140
3.3.5 小結(jié) 140
3.4 除法 140
3.4.1 除法算法和硬件 141
3.4.2 有符號除法 143
3.4.3 更快速的除法 144
3.4.4 MIPS中的除法 144
3.4.5 小結(jié) 145
3.5 浮點(diǎn)運(yùn)算 146
3.5.1 浮點(diǎn)表示 147
3.5.2 浮點(diǎn)加法 151
3.5.3 浮點(diǎn)乘法 154
3.5.4 MIPS中的浮點(diǎn)指令 156
3.5.5 算術(shù)精確性 161
3.5.6 小結(jié) 163
3.6 并行性和計(jì)算機(jī)算術(shù):子字并行 164
3.7 實(shí)例:x86中的流處理SIMD擴(kuò)展和高級向量擴(kuò)展 166
3.8 加速:子字并行和矩陣乘法 167
3.9 謬誤與陷阱 168
3.10 本章小結(jié) 171
3.11 歷史觀點(diǎn)和拓展閱讀 174
3.12 自學(xué) 174
3.13 練習(xí)題 176
第4章 處理器 181
4.1 引言 181
4.1.1 一個基本的MIPS實(shí)現(xiàn) 182
4.1.2 實(shí)現(xiàn)方式概述 182
4.2 邏輯設(shè)計(jì)的一般方法 184
4.3 建立數(shù)據(jù)通路 187
4.4 一個簡單的實(shí)現(xiàn)機(jī)制 193
4.4.1 ALU控制 193
4.4.2 主控制單元的設(shè)計(jì) 195
4.4.3 為什么不使用單周期實(shí)現(xiàn)方式 201
4.5 多周期實(shí)現(xiàn) 202
4.6 流水線概述 203
4.6.1 面向流水線的指令集設(shè)計(jì) 206
4.6.2 流水線冒險(xiǎn) 207
4.6.3 小結(jié) 212
4.7 流水線數(shù)據(jù)通路與控制 213
4.7.1 圖形化表示的流水線 221
4.7.2 流水線控制 224
4.8 數(shù)據(jù)冒險(xiǎn):旁路與阻塞 227
4.9 控制冒險(xiǎn) 237
4.9.1 假定分支不發(fā)生 238
4.9.2 縮短分支的延遲 238
4.9.3 動態(tài)分支預(yù)測 241
4.9.4 小結(jié) 244
4.10 異常 245
4.10.1 MIPS體系結(jié)構(gòu)中的異常處理 245
4.10.2 流水線實(shí)現(xiàn)中的異常 246
4.11 指令級并行 249
4.11.1 推測的概念 250
4.11.2 靜態(tài)多發(fā)射處理器 251
4.11.3 動態(tài)多發(fā)射處理器 255
4.11.4 能耗效率與高級流水線 258
4.12 實(shí)例:Intel Core i7 6700和ARM Cortex-A53 259
4.12.1 ARM Cortex-A53 259
4.12.2 A53流水線的性能 261
4.12.3 Intel Core i7 6700 263
4.12.4 Intel Core i7的性能 265
4.13 加速:指令級并行和矩陣乘法 266
4.14 高級主題:數(shù)字設(shè)計(jì)概述—使用硬件設(shè)計(jì)語言進(jìn)行流水線建模以及更多流水線示例 268
4.15 謬誤與陷阱 268
4.16 本章小結(jié) 269
4.17 歷史觀點(diǎn)和拓展閱讀 269
4.18 自學(xué) 269
4.19 練習(xí)題 270
第5章 大容量和高速度:開發(fā)存儲器層次結(jié)構(gòu) 281
5.1 引言 281
5.2 存儲器技術(shù) 285
5.2.1 SRAM技術(shù) 285
5.2.2 DRAM技術(shù) 285
5.2.3 閃存 287
5.2.4 磁盤存儲器 287
5.3 cache的基本原理 289
5.3.1 cache訪問 291
5.3.2 cache缺失處理 295
5.3.3 寫操作處理 296
5.3.4 cache實(shí)例:Intrinsity FastMATH處理器 297
5.3.5 小結(jié) 299
5.4 cache性能的評估和改進(jìn) 299
5.4.1 通過更靈活地放置塊來減少cache缺失 302
5.4.2 在cache中查找塊 305
5.4.3 替換塊的選擇 306
5.4.4 使用多級cache結(jié)構(gòu)減少缺失代價(jià) 307
5.4.5 通過分塊進(jìn)行軟件優(yōu)化 309
5.4.6 小結(jié) 312
5.5 可信存儲器層次 312
5.5.1 失效的定義 313
5.5.2 糾正一位錯、檢測兩位錯的漢明編碼(SEC/DED) 314
5.6 虛擬機(jī) 317
5.6.1 虛擬機(jī)監(jiān)視器的必備條件 318
5.6.2 指令集體系結(jié)構(gòu)(缺乏)對虛擬機(jī)的支持 319
5.6.3 保護(hù)和指令集體系結(jié)構(gòu) 319
5.7 虛擬存儲器 320
5.7.1 頁的存放和查找 323
5.7.2 缺頁故障 324
5.7.3 關(guān)于寫 327
5.7.4 加快地址轉(zhuǎn)換:TLB 327
5.7.5 集成虛擬存儲器、TLB和cache 331
5.7.6 虛擬存儲器中的保護(hù) 332
5.7.7 處理TLB缺失和缺頁 333
5.7.8 小結(jié) 337
5.8 存儲器層次結(jié)構(gòu)的一般框架 338
5.8.1 問題1:塊放在何處 339
5.8.2 問題2:如何找到塊 340
5.8.3 問題3:cache缺失時(shí)替換哪一塊 340
5.8.4 問題4:寫操作如何處理 341
5.8.5 3C:一種理解存儲器層次結(jié)構(gòu)行為的直觀模型 342
5.9 使用有限狀態(tài)機(jī)來控制簡單的cache 343
5.9.1 一個簡單的cache 343
5.9.2 有限狀態(tài)機(jī) 344
5.9.3 一個簡單cache控制器的有限狀態(tài)機(jī) 346
5.10 并行與存儲器層次結(jié)構(gòu):cache一致性 347
5.10.1 實(shí)現(xiàn)一致性的基本方案 348
5.10.2 監(jiān)聽協(xié)議 348
5.11 并行與存儲器層次結(jié)構(gòu):廉價(jià)冗余磁盤陣列 350
5.12 高級內(nèi)容:實(shí)現(xiàn)cache控制器 350
5.13 實(shí)例:ARM Cortex-A53和Intel Core i7的存儲器層次結(jié)構(gòu) 350
5.14 加速:cache分塊和矩陣乘法 354
5.15 謬誤與陷阱 355
5.16 本章小結(jié) 359
5.17 歷史觀點(diǎn)和拓展閱讀 359
5.18 自學(xué) 359
5.19 練習(xí)題 362
第6章 從客戶端到云的并行處理器 374
6.1 引言 374
6.2 創(chuàng)建并行處理程序的難點(diǎn) 376
6.3 SISD、MIMD、SIMD、SPMD和向量機(jī) 379
6.3.1 x86中的SIMD:多媒體擴(kuò)展 380
6.3.2 向量機(jī) 380
6.3.3 向量與標(biāo)量 382
6.3.4 向量與多媒體擴(kuò)展 382
6.4 硬件多線程 385
6.5 多核和其他共享內(nèi)存多處理器 387
6.6 圖形處理單元 390
6.6.1 NVIDIA GPU體系結(jié)構(gòu)簡介 391
6.6.2 NVIDIA GPU存儲結(jié)構(gòu) 393
6.6.3 GPU展望 394
6.7 領(lǐng)域?qū)S皿w系結(jié)構(gòu) 396
6.8 集群、倉儲級計(jì)算機(jī)和其他消息傳遞多處理器 398
6.9 多處理器網(wǎng)絡(luò)拓?fù)浜喗? 402
6.10 與外界通信:集群網(wǎng)絡(luò) 404
6.11 多處理器基準(zhǔn)測試程序和性能模型 405
6.11.1 性能模型 407
6.11.2 Roofline模型 408
6.11.3 兩代Opteron的比較 409
6.12 實(shí)例:Google TPUv3超級計(jì)算機(jī)和NVIDIA Volta GPU的評測 413
6.12.1 DNN的訓(xùn)練和推理 413
6.12.2 DSA超級計(jì)算機(jī)網(wǎng)絡(luò) 414
6.12.3 DSA超級計(jì)算機(jī)節(jié)點(diǎn) 414
6.12.4 DSA算術(shù)運(yùn)算 416
6.12.5 TPUv3與Volta GPU的比較 417
6.12.6 性能 418
6.13 加速:多處理器和矩陣乘法 419
6.14 謬誤與陷阱 421
6.15 本章小結(jié) 423
6.16 歷史觀點(diǎn)和拓展閱讀 425
6.17 自學(xué) 425
6.18 練習(xí)題 426
附錄A 匯編器、鏈接器和SPIM仿真器 435
附錄B 邏輯設(shè)計(jì)基礎(chǔ) 486
索引 544
網(wǎng)絡(luò)內(nèi)容
附錄C 圖形與計(jì)算GPU
附錄D 將控制映射至硬件
附錄E 指令集體系結(jié)構(gòu)綜述