齣版者的話
贊譽
譯者序
前言
作者簡介
第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指令集體係結構
術語錶
擴展閱讀
· · · · · · (
收起)