目 錄
第1章 量化設計與分析基礎 1
1.1 引言 2
1.2 計算機的分類 4
1.2.1 個人移動設備 5
1.2.2 桌麵計算 5
1.2.3 服務器 6
1.2.4 集群/倉庫級計算機 6
1.2.5 嵌入式計算機 7
1.2.6 並行度與並行體係結構的分類 7
1.3 計算機體係結構的定義 8
1.3.1 指令集體係結構:計算機體係結構的近距離審視 9
1.3.2 真正的計算機體係結構:設計滿足目標和功能需求的組成和硬件 12
1.4 技術趨勢 13
1.4.1 性能趨勢:帶寬勝過延遲 15
1.4.2 晶體管性能與連綫的發展 17
1.5 集成電路中的功率和能耗趨勢 17
1.5.1 功率和能耗:係統觀點 17
1.5.2 微處理器內部的能耗和功率 18
1.6 成本趨勢 21
1.6.1 時間、産量和大眾化的影響 21
1.6.2 集成電路的成本 22
1.6.3 成本與價格 26
1.6.4 製造成本與運行成本 26
1.7 可信任度 26
1.8 性能的測量、報告和匯總 28
1.8.1 基準測試 29
1.8.2 報告性能測試結果 32
1.8.3 性能結果匯總 33
1.9 計算機設計的量化原理 34
1.9.1 充分利用並行 35
1.9.2 局域性原理 35
1.9.3 重點關注常見情形 35
1.9.4 Amdahl定律 36
1.9.5 處理器性能公式 38
1.10 融會貫通:性能、價格和功耗 40
1.11 謬論與易犯錯誤 42
1.12 結語 46
1.13 曆史迴顧與參考文獻 47
第2章 存儲器層次結構設計 53
2.1 引言 54
2.2 緩存性能的10種高級優化方法 59
2.2.1 第一種優化:小而簡單的第一級緩存,用以縮短命中時間、降低功率 59
2.2.2 第二種優化:采用路預測以縮短命中時間 61
2.2.3 第三種優化:實現緩存訪問的流水化,以提高緩存帶寬 61
2.2.4 第四種優化:采用無阻塞緩存,以提高緩存帶寬 62
2.2.5 第五種優化:采用多種緩存以提高緩存帶寬 64
2.2.6 第六種優化:關鍵字優先和提前重啓動以降低缺失代價 64
2.2.7 第七種優化:閤並寫緩衝區以降低缺失代價 65
2.2.8 第八種優化:采用編譯器優化以降低缺失率 66
2.2.9 第九種優化:對指令和數據進行硬件預取,以降低缺失代價或缺失率 68
2.2.10 第十種優化:用編譯器控製預取,以降低缺失代價或缺失率 69
2.2.11 緩存優化小結 72
2.3 存儲器技術與優化 72
2.3.1 SRAM技術 73
2.3.2 DRAM技術 73
2.3.3 提高DRAM芯片內部的存儲器性能 75
2.3.4 降低SDRAM中的功耗 77
2.3.5 閃存 77
2.3.6 提高存儲器係統的可靠性 78
2.4 保護:虛擬存儲器和虛擬機 79
2.4.1 通過虛擬存儲器提供保護 79
2.4.2 通過虛擬機提供保護 81
2.4.3 對虛擬機監視器的要求 82
2.4.4 虛擬機(缺少)的指令集體係結構支持 82
2.4.5 虛擬機對虛擬存儲器和I/O的影響 83
2.4.6 VMM實例:Xen虛擬機 84
2.5 交叉問題:存儲器層次結構的設計 84
2.5.1 保護和指令集體係結構 84
2.5.2 緩存數據的一緻性 85
2.6 融會貫通:ARM Cortex-A8和Intel Core i7中的存儲器層次結構 85
2.6.1 ARM Cortex-A8 86
2.6.2 Intel Core i7 89
2.7 謬論與易犯錯誤 95
2.8 結語:展望 98
2.9 曆史迴顧與參考文獻 99
第3章 指令級並行及其開發 109
3.1 指令級並行:概念與挑戰 110
3.1.1 什麼是指令級並行 111
3.1.2 數據相關與冒險 111
3.1.3 控製相關 114
3.2 揭示ILP的基本編譯器技術 116
3.2.1 基本流水綫調度和循環展開 116
3.2.2 循環展開與調度小結 119
3.3 用高級分支預測降低分支成本 120
3.3.1 競賽預測器:局部預測器與全局預測器的自適應聯閤 122
3.3.2 Intel Core i7分支預測器 123
3.4 用動態調度剋服數據冒險 124
3.4.1 動態調度:思想 124
3.4.2 使用Tomasulo算法進行動態調度 126
3.5 動態調度:示例和算法 130
3.5.1 Tomasulo算法:細節 132
3.5.2 Tomasulo算法:基於循環的示例 133
3.6 基於硬件的推測 135
3.7 以多發射和靜態調度來開發ILP 143
3.8 以動態調度、多發射和推測來開發ILP 146
3.9 用於指令傳送和推測的高級技術 150
3.9.1 提高指令提取帶寬 150
3.9.2 推測:實現問題與擴展 155
3.10 ILP局限性的研究 158
3.10.1 硬件模型 158
3.10.2 可實現處理器上ILP的局限性 160
3.10.3 超越本研究的局限 163
3.11 交叉問題:ILP方法與存儲器係統 164
3.11.1 硬件推測與軟件推測 164
3.11.2 推測執行與存儲器係統 165
3.12 多綫程:開發綫程級並行提高單處理器吞吐量 165
3.12.1 細粒度多綫程在Sun T1上的效果 168
3.12.2 同時多綫程在超標量處理器上的效果 170
3.13 融會貫通:Intel Core i7和ARMCortex-A8 173
3.13.1 ARM Cortex-A8 173
3.13.2 Intel Core i7 176
3.14 謬論與易犯錯誤 179
3.15 結語:前路何方 182
3.16 曆史迴顧與參考文獻 183
第4章 嚮量、SIMD和GPU體係結構中的數據級並行 193
4.1 引言 194
4.2 嚮量體係結構 195
4.2.1 VMIPS 196
4.2.2 嚮量處理器如何工作:一個示例 198
4.2.3 嚮量執行時間 199
4.2.4 多條車道:每個時鍾周期超過一個元素 201
4.2.5 嚮量長度寄存器:處理不等於64的循環 203
4.2.6 嚮量遮罩寄存器:處理嚮量循環中的IF語句 204
4.2.7 內存組:為嚮量載入/存儲單元提供帶寬 205
4.2.8 步幅:處理嚮量體係結構中的多維數組 206
4.2.9 集中—分散:在嚮量體係結構中處理稀疏矩陣 207
4.2.10 嚮量體係結構編程 208
4.3 SIMD指令集多媒體擴展 209
4.3.1 多媒體SIMD體係結構編程 212
4.3.2 Roofline可視性能模型 212
4.4 圖形處理器 214
4.4.1 GPU編程 214
4.4.2 NVIDIA GPU計算結構 216
4.4.3 NVIDA GPU指令集體係結構 222
4.4.4 GPU中的條件分支 224
4.4.5 NVIDIA GPU存儲器結構 226
4.4.6 Fermi GPU體係結構中的創新 228
4.4.7 嚮量體係結構與GPU的相似與不同 230
4.4.8 多媒體SIMD計算機與GPU之間的相似與不同 233
4.4.9 小結 233
4.5 檢測與增強循環強並行 235
4.5.1 查找相關 238
4.5.2 消除相關計算 240
4.6 交叉問題 240
4.6.1 能耗與DLP:慢而寬與快而窄 240
4.6.2 分組存儲器和圖形存儲器 241
4.6.3 步幅訪問和TLB缺失 241
4.7 融會貫通:移動與服務器GPU、Tesla與Core i7 241
4.8 謬論與易犯錯誤 247
4.9 結語 248
4.10 曆史迴顧與參考文獻 250
第5章 綫程級並行 256
5.1 引言 257
5.1.1 多處理器體係結構:問題與方法 258
5.1.2 並行處理的挑戰 260
5.2 集中式共享存儲器體係結構 262
5.2.1 什麼是多處理器緩存一緻性 263
5.2.2 一緻性的基本實現方案 264
5.2.3 監聽一緻性協議 265
5.2.4 基本實現技術 265
5.2.5 示例協議 267
5.2.6 基本一緻性協議的擴展 270
5.2.7 對稱共享存儲器多處理器與監聽協議的局限性 271
5.2.8 實施監聽緩存一緻性 272
5.3 對稱共享存儲器多處理器的性能 273
5.3.1 商業工作負載 274
5.3.2 商業工作負載的性能測量 275
5.3.3 多重編程和操作係統工作負載 279
5.3.4 多重編程和操作係統工作負載的性能 280
5.4 分布式共享存儲器和目錄式一緻性 282
5.4.1 目錄式緩存一緻性協議:基礎知識 283
5.4.2 目錄式協議舉例 285
5.5 同步:基礎知識 288
5.5.1 基本硬件原語 288
5.5.2 使用一緻性實現鎖 289
5.6 存儲器連貫性模型:簡介 291
5.6.1 程序員的觀點 292
5.6.2 寬鬆連貫性模型:基礎知識 293
5.6.3 關於連貫性模型的最後說明 293
5.7 交叉問題 294
5.7.1 編譯器優化與連貫性模型 294
5.7.2 利用推測來隱藏嚴格連貫性模型中的延遲 294
5.7.3 包含性及其實現 295
5.7.4 利用多重處理和多綫程的性能增益 295
5.8 融會貫通:多核處理器及其性能 297
5.9 謬論與易犯錯誤 301
5.10 結語 304
5.11 曆史迴顧與參考文獻 306
第6章 以倉庫級計算機開發請求級、數據級並行 319
6.1 引言 320
6.2 倉庫級計算機的編程模型與工作負載 323
6.3 倉庫級計算機的計算機體係結構 327
6.3.1 存儲 328
6.3.2 陣列交換機 328
6.3.3 WSC存儲器層次結構 329
6.4 倉庫級計算機的物理基礎設施與成本 331
6.4.1 測量WSC的效率 334
6.4.2 WSC的成本 335
6.5 雲計算:公用計算的迴報 338
6.6 交叉問題 342
6.6.1 成為瓶頸的WSC網絡 342
6.6.2 在服務器內部高效利用能量 343
6.7 融會貫通:Google倉庫級計算機 344
6.7.1 集裝箱 344
6.7.2 Google WSC中的冷卻與供電 346
6.7.3 Google WSC中的服務器 348
6.7.4 Google WSC中的聯網 348
6.7.5 Google WSC的監控與修復 349
6.7.6 小結 349
6.8 謬論與易犯錯誤 350
6.9 結語 353
6.10 曆史迴顧與參考文獻 354
附錄A 指令集基本原理 365
A.1 引言 366
A.2 指令集體係結構的分類 366
A.3 存儲器尋址 369
A.4 操作數的類型與大小 374
A.5 指令集中的操作 375
A.6 控製流指令 376
A.7 指令集編碼 380
A.8 交叉問題:編譯器的角色 382
A.9 融會貫通:MIPS體係結構 388
A.10 謬論和易犯錯誤 396
A.11 結語 399
A.12 曆史迴顧與參考文獻 400
附錄B 存儲器層次結構迴顧 405
B.1 引言 406
B.2 緩存性能 416
B.3 6種基本的緩存優化 421
B.4 虛擬存儲器 435
B.5 虛擬存儲器的保護與示例 441
B.6 謬論與易犯錯誤 447
B.7 結語 448
B.8 曆史迴顧與參考文獻 449
附錄C 流水綫:基礎與中級概念 454
C.1 引言 455
C.2 流水化的主要阻礙——流水綫冒險 461
C.3 如何實現流水化 476
C.4 妨礙流水綫實現的難題 485
C.5 擴展MIPS流水綫,以處理多周期操作 490
C.6 融會貫通:MIPS R4000流水綫 498
C.7 交叉問題 504
C.8 謬論與易犯錯誤 511
C.9 結語 512
C.10 曆史迴顧與參考文獻 512
參考文獻 518
索引 543
· · · · · · (
收起)