內容簡介
本書由2017年圖靈獎得主Patterson和Hennessy共同撰寫,是計算機體系結構領域的經典教材,強調軟硬體協同設計及其對性能的影響。本書採用ARMv8體系結構,講解硬體技術、彙編語言、計算機算術運算、流水線、存儲器層次結構以及I/O的基本原理。新內容涵蓋平板電腦、雲基礎設施、ARM(移動計算設備)以及x86(雲計算)體系結構,新實例包括IntelCorei7、ARMCortex-A53以及NVIDIAFermiGPU。本書適合作為高等院校計算機專業的教材,也適合廣大專業技術人員參考。
圖書目錄
出版者的話
讚譽
譯者序
前言
作者簡介
第1章 計算機的抽象與技術 1
1.1 引言 1
1.1.1 計算機套用的分類和特點 2
1.1.2 歡迎來到後PC時代 3
1.1.3 你能從本書中學到什麼 4
1.2 計算機體系結構中的8個偉大思想 6
1.2.1 面向摩爾定律的設計 6
1.2.2 使用抽象簡化設計 7
1.2.3 加速大機率事件 7
1.2.4 通過並行提高性能 7
1.2.5 通過流水線提高性能 7
1.2.6 通過預測提高性能 7
1.2.7 存儲器層次結構 7
1.2.8 通過冗餘提高可靠性 7
1.3 程式表象之下 8
1.4 硬體包裝之下 10
1.4.1 顯示器 11
1.4.2 觸控螢幕 12
1.4.3 打開機箱 13
1.4.4 數據的安全存儲 15
1.4.5 與其他計算機通信 16
1.5 處理器和存儲器製造技術 17
1.6 性能 20
1.6.1 性能的定義 20
1.6.2 性能的度量 22
1.6.3 CPU的性能及其度量因素 24
1.6.4 指令的性能 24
1.6.5 經典的CPU性能公式 25
1.7 功耗牆 28
1.8 滄海巨變:從單處理器向多處理器轉變 29
1.9 實例:Intel Core i7基準測試 32
1.9.1 SPEC CPU基準測試程式 32
1.9.2 SPEC功耗基準測試程式 34
1.10 謬誤與陷阱 34
1.11 本章小結 36
1.12 歷史觀點與拓展閱讀 37
1.13 練習題 38
第2章 指令:計算機的語言 42
2.1 引言 42
2.2 計算機硬體的操作 44
2.3 計算機硬體的運算元 46
2.3.1 存儲器運算元 47
2.3.2 常數或立即數運算元 50
2.4 有符號數和無符號數 51
2.5 計算機中指令的表示 56
2.6 邏輯操作 61
2.7 決策指令 64
2.7.1 循環 65
2.7.2 邊界檢查的簡便方法 67
2.7.3 case/switch語句 67
2.8 計算機硬體對過程的支持 68
2.8.1 使用更多的暫存器 69
2.8.2 過程嵌套 71
2.8.3 在棧中為新數據分配空間 73
2.8.4 在堆中為新數據分配空間 74
2.9 人機互動 76
2.10 LEGv8中的寬立即數和地址的定址 79
2.10.1 寬立即數 79
2.10.2 分支中的定址 80
2.10.3 LEGv8定址模式總結 82
2.10.4 機器語言解碼 82
2.11 並行與指令:同步 86
2.12 翻譯並啟動程式 88
2.12.1 編譯器 88
2.12.2 彙編器 89
2.12.3 連結器 90
2.12.4 載入器 92
2.12.5 動態程式庫 92
2.12.6 啟動Java程式 94
2.13 綜合實例:C排序程式 95
2.13.1 swap過程 95
2.13.2 sort過程 97
2.14 數組和指針 101
2.14.1 用數組實現clear 102
2.14.2 用指針實現clear 102
2.14.3 比較兩個版本的clear 103
2.15 高級主題:編譯C和解釋Java 104
2.16 實例:MIPS指令集 104
2.17 實例:ARMv7(32位)指令集 105
2.18 實例:x86指令集 106
2.18.1 Intel x86的演進 107
2.18.2 x86暫存器和數據定址模式 108
2.18.3 x86整數操作 110
2.18.4 x86指令編碼 112
2.18.5 x86總結 112
2.19 實例:ARMv8指令集的其他部分 113
2.19.1 完整的ARMv8整數算術邏輯指令 114
2.19.2 完整的ARMv8整數數據傳輸指令 116
2.19.3 完整的ARMv8分支指令 117
2.20 謬誤與陷阱 118
2.21 本章小結 119
2.22 歷史觀點與拓展閱讀 121
2.23 練習題 121
第3章 計算機的算術運算 128
3.1 引言 128
3.2 加法和減法 128
3.3 乘法 131
3.3.1 順序乘法算法及硬體 131
3.3.2 有符號乘法 134
3.3.3 更快速的乘法 134
3.3.4 LEGv8中的乘法 134
3.3.5 小結 135
3.4 除法 135
3.4.1 除法算法及硬體 135
3.4.2 有符號除法 137
3.4.3 更快速的除法 138
3.4.4 LEGv8中的除法 138
3.4.5 小結 139
3.5 浮點運算 140
3.5.1 浮點表示 141
3.5.2 異常和中斷 142
3.5.3 IEEE 754浮點標準 142
3.5.4 浮點加法 145
3.5.5 浮點乘法 148
3.5.6 LEGv8中的浮點指令 150
3.5.7 算術精確性 154
3.5.8 小結 156
3.6 並行與計算機算術:子字並行 157
3.7 實例:x86中的流處理SIMD擴展和高級向量擴展 158
3.8 實例:其他的ARMv8算術指令 160
3.8.1 完整的ARMv8整數和浮點算術指令 160
3.8.2 完整的ARMv8 SIMD指令 161
3.9 加速:子字並行和矩陣乘法 163
3.10 謬誤與陷阱 166
3.11 本章小結 168
3.12 歷史觀點與拓展閱讀 171
3.13 練習題 171
第4章 處理器 175
4.1 引言 175
4.1.1 一種基本的LEGv8實現 176
4.1.2 實現概述 176
4.2 邏輯設計的一般方法 178
4.3 建立數據通路 180
4.4 一種簡單的實現機制 187
4.4.1 ALU控制 187
4.4.2 主控制單元的設計 188
4.4.3 數據通路的操作 191
4.4.4 完成控制單元 194
4.4.5 為什麼不使用單周期實現 195
4.5 流水線概述 197
4.5.1 面向流水線的指令集設計 200
4.5.2 流水線冒險 200
4.5.3 流水線概述小結 206
4.6 流水線數據通路及其控制 207
4.6.1 圖形化表示的流水線 215
4.6.2 流水線控制 218
4.7 數據冒險:旁路與阻塞 221
4.8 控制冒險 231
4.8.1 假定分支不發生 231
4.8.2 減少分支延遲 232
4.8.3 動態分支預測 234
4.8.4 流水線小結 236
4.9 異常 236
4.9.1 LEGv8體系結構中的異常處理 237
4.9.2 流水線實現中的異常 238
4.10 指令級並行 241
4.10.1 推測的概念 242
4.10.2 靜態多發射 243
4.10.3 動態多發射 246
4.10.4 動態流水線調度 247
4.10.5 能耗效率與高級流水線 249
4.11 實例: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 加速:指令級並行和矩陣乘法 256
4.13 高級主題:採用硬體設計語言描述和建模流水線的數字設計技術以及更多流水線示例 258
4.14 謬誤與陷阱 258
4.15 本章小結 259
4.16 歷史觀點與拓展閱讀 260
4.17 練習題 260
第5章 大容量和高速度:開發存儲器層次結構 271
5.1 引言 271
5.2 存儲器技術 275
5.2.1 SRAM技術 275
5.2.2 DRAM技術 275
5.2.3 快閃記憶體 277
5.2.4 磁碟存儲器 277
5.3 cache的基本原理 279
5.3.1 cache訪問 280
5.3.2 cache缺失處理 285
5.3.3 寫操作處理 285
5.3.4 cache實例:Intrinsity FastMATH處理器 287
5.3.5 小結 289
5.4 cache性能的評估和改進 289
5.4.1 通過更靈活的塊放置策略來減少cache缺失 292
5.4.2 在cache中查找塊 295
5.4.3 替換塊的選擇 296
5.4.4 使用多級cache減少缺失代價 297
5.4.5 通過分塊進行軟體最佳化 299
5.4.6 小結 303
5.5 可信存儲器層次結構 303
5.5.1 失效的定義 303
5.5.2 糾1檢2漢明碼(SEC/DED) 305
5.6 虛擬機 308
5.6.1 虛擬機監視器的要求 309
5.6.2 指令集體系結構(缺乏)對虛擬機的支持 309
5.6.3 保護和指令集體系結構 310
5.7 虛擬存儲器 310
5.7.1 頁的存放和查找 313
5.7.2 缺頁故障 315
5.7.3 用於大型虛擬地址的虛擬記憶體 316
5.7.4 關於寫 318
5.7.5 加快地址轉換:TLB 318
5.7.6 Intrinsity FastMATH TLB 319
5.7.7 集成虛擬存儲器、TLB和cache 322
5.7.8 虛擬存儲器中的保護 323
5.7.9 處理TLB缺失和缺頁 324
5.7.10 小結 326
5.8 存儲器層次結構的一般框架 328
5.8.1 問題1:塊放在何處 328
5.8.2 問題2:如何找到塊 329
5.8.3 問題3:cache缺失時替換哪一塊 330
5.8.4 問題4:寫操作如何處理 330
5.8.5 3C:一種理解存儲器層次結構行為的直觀模型 331
5.9 使用有限狀態機控制簡單的cache 332
5.9.1 一個簡單的cache 333
5.9.2 有限狀態機 333
5.9.3 一個簡單cache控制器的有限狀態機 335
5.10 並行與存儲器層次結構:cache一致性 336
5.10.1 實現一致性的基本方案 337
5.10.2 監聽協定 337
5.11 並行與存儲器層次結構:廉價冗餘磁碟陣列 339
5.12 高級主題:實現cache控制器 339
5.13 實例:ARM Cortex-A53和Intel Core i7的存儲器層次結構 339
5.14 實例:ARMv8系統的剩餘部分以及特殊指令 343
5.15 加速:cache分塊和矩陣乘法 345
5.16 謬誤與陷阱 346
5.17 本章小結 349
5.18 歷史觀點與拓展閱讀 350
5.19 練習題 350
第6章 並行處理器:從客戶端到雲 362
6.1 引言 362
6.2 創建並行處理程式的難點 364
6.3 SISD、MIMD、SIMD、SPMD和向量 367
6.3.1 x86中的SIMD:多媒體擴展 368
6.3.2 向量 368
6.3.3 向量與標量 370
6.3.4 向量與多媒體擴展 370
6.4 硬體多執行緒 372
6.5 多核和其他共享記憶體多處理器 375
6.6 圖形處理單元 378
6.6.1 NVIDIA GPU體系結構簡介 379
6.6.2 NVIDIA GPU存儲結構 380
6.6.3 正確理解GPU 381
6.7 集群、倉儲式計算機和其他訊息傳遞多處理器 383
6.8 多處理器網路拓撲簡介 386
6.9 與外界通信:集群網路 389
6.10 多處理器基準測試程式和性能模型 389
6.10.1 性能模型 391
6.10.2 Roof?line模型 392
6.10.3 兩代Opteron的比較 393
6.11 實例:Intel Core i7 960
和NVIDIA Tesla GPU的評測及Roof?line模型 396
6.12 加速:多處理器和矩陣乘法 399
6.13 謬誤與陷阱 402
6.14 本章小結 403
6.15 歷史觀點與拓展閱讀 405
6.16 練習題 405
附錄A 邏輯設計基礎 414
索引 470
網路內容
附錄B 圖形處理單元
附錄C 控制器的硬體實現
附錄D RISC指令集體系結構
術語表
擴展閱讀