●出版者的話
贊譽
譯者序
前言
作者簡介
第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數據安全16
1.4.5與其他計算機通信16
1.5處理器和存儲制造技術17
1.6性能20
1.6.1性能的定義21
1.6.2性能的度量23
1.6.3CPU性能及其度量因素24
1.6.4指令性能25
1.6.5經典的CPU性能公式26
1.7功耗牆28
1.8滄海巨變:從單處理器向多處理器轉變30
1.9實例:評測IntelCorei732
1.9.1SPECCPU基準評測程序33
1.9.2SPEC功耗基準評測程序34
1.10謬誤與陷阱35
1.11本章小結37
1.12歷史視角和拓展閱讀38
1.13練習38
第2章指令:計算機的語言43
2.1引言43
2.2計算機硬件的操作45
2.3計算機硬件的操作數47
2.3.1存儲器操作數48
2.3.2常數或立即數操作數51
2.4有符號數與無符號數52
2.5計算機中的指令表示57
2.6邏輯操作62
2.7用於決策的指令65
2.7.1循環66
2.7.2邊界檢查的簡便方法67
2.7.3case/switch語句68
2.8計算機硬件對過程的支持68
2.8.1使用更多的寄存器69
2.8.2嵌套過程71
2.8.3在棧中為新數據分配空間73
2.8.4在堆中為新數據分配空間74
2.9人機交互76
2.10對大立即數的RISC-V編址和尋址79
2.10.1大立即數79
2.10.2分支中的尋址80
2.10.3RISC-V尋址模式總結82
2.10.4機器語言譯碼83
2.11指令與並行性:同步85
2.12翻譯並啟動程序87
2.12.1編譯器87
2.12.2彙編器87
2.12.3鏈接器89
2.12.4加載器91
2.12.5動態鏈接庫91
2.12.6啟動Java程序93
2.13以C排序程序為例的彙總整理94
2.13.1swap過程94
2.13.2sort過程95
2.14數組與指針100
2.14.1用數組實現clear100
2.14.2用指針實現clear101
2.14.3比較兩個版本的clear102
2.15高級專題:編譯C語言和解釋Java語言102
2.16實例:MIPS指令103
2.17實例:x86指令104
2.17.1Intelx86的演變104
2.17.2x86寄存器和尋址模式106
2.17.3x86整數操作107
2.17.4x86指令編碼109
2.17.5x86總結110
2.18實例:RISC-V指令繫統的剩餘部分111
2.19謬誤與陷阱112
2.20本章小結113
2.21歷史視角和擴展閱讀115
2.22練習115
第3章計算機的算術運算121
3.1引言121
3.2加法和減法121
3.3乘法124
3.3.1串行版的乘法算法及其硬件實現124
3.3.2帶符號乘法127
3.3.3快速乘法127
3.3.4RISC-V中的乘法127
3.3.5總結128
3.4除法128
3.4.1除法算法及其硬件實現128
3.4.2有符號除法131
3.4.3快速除法131
3.4.4RISC-V中的除法132
3.4.5總結132
3.5浮點運算133
3.5.1浮點表示134
3.5.2例外和中斷135
3.5.3IEEE754浮點數標準135
3.5.4浮點加法138
3.5.5浮點乘法141
3.5.6RISC-V中的浮點指令144
3.5.7準確算術148
3.5.8總結150
3.6並行性與計算機算術:子字並行151
3.7實例:x86中的SIMD擴展和高級向量擴展151
3.8加速:子字並行和矩陣乘法153
3.9謬誤與陷阱155
3.10本章小結158
3.11歷史視角和拓展閱讀159
3.12練習159
第4章處理器163
4.1引言163
4.1.1一種基本的RISC-V實現164
4.1.2實現概述164
4.2邏輯設計的一般方法166
4.3建立數據通路169
4.4一個簡單的實現方案175
4.4.1ALU控制175
4.4.2設計主176
4.4.3數據通路操作180
4.4.4控制的結束182
4.4.5為什麼現在不使用單周期實現182
4.5流水線概述183
4.5.1面向流水線的指令繫統設計187
4.5.2流水線冒險187
4.5.3總結193
4.6流水線數據通路和控制194
4.6.1流水線的圖形化表示203
4.6.2流水線控制205
4.7數據冒險:前遞與停頓208
4.8控制冒險218
4.8.1假設分支不發生218
4.8.2縮短分支延遲219
4.8.3動態分支預測221
4.8.4流水線總結223
4.9例外223
4.9.1RISC-V體繫結構中如何處理例外224
4.9.2流水線實現中的例外225
4.10指令間的並行性228
4.10.1推測的概念229
4.10.2靜態多發射230
4.10.3動態多發射處理器234
4.10.4高級流水線和能效237
4.11實例:ARMCortex-A53和IntelCorei7流水線結構238
4.11.1ARMCortex-A53238
4.11.2IntelCorei7920240
4.11.3IntelCorei7處理器的性能242
4.12加速:指令級並行和矩陣乘法243
4.13高級專題:數字設計概述——使用硬件設計語言進行流水線建模以及更多流水線示例246
4.14謬誤與陷阱246
4.15本章小結247
4.16歷史視角和拓展閱讀247
4.17練習247
第5章大而快:層次化存儲258
5.1引言258
5.2存儲技術262
5.2.1SRAM存儲技術262
5.2.2DRAM存儲技術262
5.2.3閃存264
5.2.4磁盤264
5.3cache基礎266
5.3.1cache訪問268
5.3.2處理cache失效272
5.3.3處理寫操作273
5.3.4cache實例:IntrinsityFastMATH處理器275
5.3.5總結276
5.4cache的性能評估和改進277
5.4.1使用更為靈活的替換策略降低cache失效率279
5.4.2在cache中查找數據塊283
5.4.3選擇替換的數據塊284
5.4.4使用多級cache減少失效代價285
5.4.5通過分塊進行軟件優化287
5.4.6總結291
5.5可靠的存儲器層次291
5.5.1失效的定義291
5.5.2糾正1位錯、檢測2位錯的漢明編碼293
5.6虛擬機296
5.6.1虛擬機監視器的推薦條件297
5.6.2指令繫統體繫結構(缺乏)對虛擬機的支持297
5.6.3保護和指令繫統體繫結構298
5.7虛擬存儲298
5.7.1頁的存放和查找301
5.7.2缺頁失效303
5.7.3支持大虛擬地址空間的虛擬存儲304
5.7.4關於寫305
5.7.5加快地址轉換:TLB306
5.7.6IntrinsityFastMATHTLB307
5.7.7集成虛擬存儲、TLB和cache309
5.7.8虛擬存儲中的保護311
5.7.9處理TLB失效和缺頁失效312
5.7.10總結314
5.8存儲層次結構的一般框架315
5.8.1問題一:塊可以被放在何處315
5.8.2問題二:如何找到塊316
5.8.3問題三:當cache發生失效時替換哪一塊317
5.8.4問題四:寫操作如何處理317
5.8.53C:一種理解存儲層次結構的直觀模型318
5.9使用有限狀態自動機控制簡單的cache320
5.9.1一個簡單的cache320
5.9.2有限狀態自動機321
5.9.3使用有限狀態自動機作為簡單的cache控制器322
5.10並行和存儲層次結構:cache一致性324
5.10.1實現一致性的基本方案325
5.10.2監聽協議325
5.11並行與存儲層次結構:廉價磁盤冗餘陣列327
5.12高級專題:實現緩存控制器327
5.13實例:ARMCortex-A53和IntelCorei7的存儲層次結構327
5.14實例:RISC-V繫統的其他部分和特殊指令331
5.15加速:cache分塊和矩陣乘法331
5.16謬誤與陷阱333
5.17本章小結336
5.18歷史視角和拓展閱讀337
5.19練習337
第6章並行處理器:從客戶端到雲348
6.1引言348
6.2創建並行處理程序的難點350
6.3SISD、MIMD、SIMD、SPMD和向量機354
6.3.1x86中的SIMD:多媒體擴展355
6.3.2向量機355
6.3.3向量與標量356
6.3.4向量與多媒體擴展357
6.4硬件多線程359
6.5多核及其他共享內存多處理器362
6.6GPU簡介365
6.6.1NVIDIAGPU體繫結構簡介366
6.6.2NVIDIAGPU存儲結構367
6.6.3對GPU的展望368
6.7集群、倉儲級計算機和其他消息傳遞多處理器370
6.8多處理器網絡拓撲簡介374
6.9與外界通信:集群網絡376
6.10多處理器測試基準和性能模型377
6.10.1性能模型379
6.10.2Roofline模型380
6.10.3兩代Opteron的比較381
6.11實例:評測IntelCorei7960和NVIDIATeslaGPU的Roofline模型384
6.12加速:多處理器和矩陣乘法388
6.13謬誤與陷阱390
6.14本章小結391
6.15歷史視角和拓展閱讀393
6.16練習394
附錄A邏輯設計基礎402
術語表460
網絡內容
附錄B圖形
附錄C將控制映射至硬件
附錄D精簡指令繫統體繫結構計算機
擴展閱讀