Summary 關於 摘要 1. 引言 2. 現代商用硬體 2.1. RAM 的種類 2.1.1. 靜態 RAM 2.1.2. 動態 RAM 2.1.3. DRAM 存取 2.1.4. 結論 2.2. DRAM 存取技術細節 2.2.1. 讀取協定 2.2.2. 預充電與有效化 2.2.3. 再充電 2.2.4. 記憶體類型 2.2.5. 結論 2.3. 其它主記憶體使用者 3. CPU 快取 3.1. 概觀 CPU 快取 3.2. 高階快取操作 3.3. CPU 快取實作細節 3.3.1. 關聯度 3.3.2. 快取影響的量測 3.3.3. 寫入行為 3.3.4. 多處理器支援 3.3.5. 其它細節 3.4. 指令快取 3.4.1. 自我修改的程式碼 3.5. 快取錯失的因素 3.5.1. 快取與記憶體頻寬 3.5.2. 關鍵字組的載入 3.5.3. 快取的配置 3.5.4. FSB 的影響 4. 虛擬記憶體 4.1. 最簡單的位址轉譯 4.2. 多層級分頁表 4.3. 最佳化分頁表存取 4.3.1. 使用 TLB 的預警 4.3.2. 影響 TLB 效能 4.4. 虛擬化的影響 5. NUMA 支援 5.1. NUMA 硬體 5.2. OS 對 NUMA 的支援 5.3. 被發布的資訊 5.4. 遠端存取成本 6. 程式設計師能做些什麼? 6.1. 繞過快取 6.2. 快取存取 6.2.1. 最佳化一階資料快取存取 6.2.2. 最佳化一階指令快取存取 6.2.3. 最佳化二階與更高階快取存取 6.2.4. 最佳化 TLB 使用 6.3. 預取 6.3.1. 硬體預取 6.3.2. 軟體預取 6.3.3. 特殊的預取類型:猜測 6.3.4. 輔助執行緒 6.3.5. 直接快取存取 6.4. 多執行緒最佳化 6.4.1. 並行最佳化 6.4.2. 原子性最佳化 6.4.3. 頻寬考量 6.5. NUMA 程式設計 6.5.1. 記憶體策略 6.5.2. 指定策略 6.5.3. 置換與策略 6.5.4. VMA 策略 6.5.5. 查詢節點資訊 6.5.6. CPU 與節點集合 6.5.7. 明確的 NUMA 最佳化 6.5.8. 利用所有頻寬 A. 範例與基準測試程式 A.1 矩陣乘法 參考書目