《超標量處理器設(shè)計》編著者姚永斌。
《超標量處理器設(shè)計》講述超標量(SuperScalar)處理器的設(shè)計,現(xiàn)代的高性能處理器都采用了超標量結(jié)構(gòu),大至服務(wù)器和高性能PC的處理器,小至平板電腦和智能手機的處理器,無一例外。本書以超標量處理器的流水線為主線展開內(nèi)容介紹。本書主要內(nèi)容包括超標量處理器的背景知識、流水線、順序執(zhí)行和亂序執(zhí)行兩種方式的特點; Cache的一般性原理、提高Cache性能的方法以及超標量處理器中的Cache,尤其是多端口的Cache; 虛擬存儲器的基礎(chǔ)知識、頁表、TLB和Cache加入流水線后的工作流程; 分支預(yù)測的一般性原理、在超標量處理器中使用分支預(yù)測時遇到的問題和解決方法以及如何在分支預(yù)測失敗時對處理器的狀態(tài)進行恢復(fù); 一般的 RISC指令集體系的簡單介紹; 指令解碼的過程,尤其是超標量處理器中的指令解碼; 寄存器重命名的一般性原理、重命名的方式、超標量處理器中使用寄存器重命名時遇到的問題和解決方法以及如何對寄存器重命名的過程實現(xiàn)狀態(tài)恢復(fù); 指令的分發(fā)(Dispatch)和發(fā)射(Issue)、發(fā)射過程中的流水線、選擇電路和喚醒電路的實現(xiàn)過程; 處理器中使用的基本運算單元、旁路網(wǎng)絡(luò)、Cluster結(jié)構(gòu)以及如何對Load/Store指令的執(zhí)行過程進行加速; 重排序緩存(ROB)、處理器狀態(tài)的管理以及超標量處理器中對異常的處理過程; 經(jīng)典的Alpha 21264處理器的介紹。在本書中使用了一些現(xiàn)實世界的超標量處理器作為例子,以便于讀者加深對超標量處理器的理解和認識。
本書可用作高等院校電子及計算機專業(yè)研究生和高年級本科生教材,也可供自學(xué)者閱讀。
《超標量處理器設(shè)計》編著者姚永斌。 第1章主要介紹普通處理器和超標量處理器的一些背景知識。 第1章主要介紹普通處理器和超標量處理器的一些背景知識。 第2章開始講述Cache,這是由于一般的指令都是從ICache中取出來并送到流水線中的,因此流水線始于ICache,當然,在處理器中也存在DCache,它也會在這一章進行講述。不同結(jié)構(gòu)的Cache對處理器的性能有著重要的影響,尤其是在超標量處理器中,每周期需要同時執(zhí)行多條指令,這給Cache的設(shè)計帶來了一些挑戰(zhàn)。 第3章主要介紹虛擬存儲器(Virtual Memory),因為處理器在取指令的時候,如果送出的是虛擬地址,那么首先需要被轉(zhuǎn)化為物理地址,然后才能夠取得指令,對數(shù)據(jù)的訪問也是類似的,虛擬存儲器是現(xiàn)代操作系統(tǒng)運行的基礎(chǔ),在處理器中需要軟硬件配合工作,才可以對虛擬存儲器提供完整的支持。 ……
第1章 超標量處理器概覽 1.1 為什么需要超標量 1.2 普通處理器的流水線 1.2.1 流水線概述 1.2.2 流水線的劃分 1.2.3 指令間的相關(guān)性 1.3 超標量處理器的流 第1章 超標量處理器概覽 1.1 為什么需要超標量 1.2 普通處理器的流水線 1.2.1 流水線概述 1.2.2 流水線的劃分 1.2.3 指令間的相關(guān)性 1.3 超標量處理器的流水線 1.3.1 順序執(zhí)行 1.3.2 亂序執(zhí)行 第2章 Cache 2.1 Cache的一般設(shè)計 2.1.1 Cache的組成方式 2.1.2 Cache的寫入 2.1.3 Cache的替換策略 2.2 提高Cache的性能 2.2.1 寫緩存 2.2.2 流水線 2.2.3 多級結(jié)構(gòu) 2.2.4 Victim Cache 2.2.5 預(yù)取 2.3 多端口Cache 2.3.1 True Multiport 2.3.2 Multiple Cache Copies 2.3.3 Multibanking 2.3.4真實的例子: AMD Opteron的多端口Cache 2.4 超標量處理器的取指令 第3章 虛擬存儲器 3.1 概述 3.2 地址轉(zhuǎn)換 3.2.1 單級頁表 3.2.2 多級頁表 3.2.3 Page Fault 3.2.4 小結(jié) 3.3 程序保護 3.4 加入TLB和Cache 3.4.1 TLB的設(shè)計 3.4.2 Cache的設(shè)計 3.4.3 將TLB和Cache放入流水線 第4章 分支預(yù)測 4.1 概述 4.2 分支指令的方向預(yù)測 4.2.1 基于兩位飽和計數(shù)器的分支預(yù)測 4.2.2 基于局部歷史的分支預(yù)測 4.2.3 基于全局歷史的分支預(yù)測 4.2.4 競爭的分支預(yù)測 4.2.5 分支預(yù)測的更新 4.3 分支指令的目標地址預(yù)測 4.3.1 直接跳轉(zhuǎn)類型的分支預(yù)測 4.3.2 間接跳轉(zhuǎn)類型的分支預(yù)測 4.3.3 小結(jié) 4.4 分支預(yù)測失敗時的恢復(fù) 4.5 超標量處理器的分支預(yù)測 第5章 指令集體系 5.1 復(fù)雜指令集和精簡指令集 5.2 精簡指令集概述 5.2.1 MIPS指令集 5.2.2 ARM指令集 5.3 Load/Store指令 5.3.1 Load指令 5.3.2 Store指令 5.4 計算指令 5.4.1 加減法 5.4.2 移位指令 5.4.3 邏輯指令 5.4.4 乘法指令 5.4.5 乘累加指令 5.4.6 特殊計算指令 5.5 分支指令 5.6 雜項指令 5.7 異常 第6章 指令解碼 6.1指令緩存 6.2一般情況 6.3特殊情況 6.3.1分支指令的處理 6.3.2乘累加/乘法指令的處理 6.3.3前/后變址指令的處理 6.3.4LDM/STM指令的處理 6.3.5條件執(zhí)行指令的處理 第7章 寄存器重命名 7.1概述 7.2寄存器重命名的方式 7.2.1使用ROB進行寄存器重命名 7.2.2將ARF擴展進行寄存器重命名 7.2.3使用統(tǒng)一的PRF進行寄存器重命名 7.3重命名映射表 7.3.1基于SRAM的重命名映射表 7.3.2基于CAM的重命名映射表 7.4超標量處理器的寄存器重命名 7.4.1解決RAW相關(guān)性 7.4.2解決WAW相關(guān)性 7.5寄存器重命名過程的恢復(fù) 7.5.1使用Checkpoint 7.5.2使用WALK 7.5.3使用Architecture State 7.6分發(fā) 第8章 發(fā)射 8.1概述 8.1.1集中式VS分布式 8.1.2數(shù)據(jù)捕捉VS非數(shù)據(jù)捕捉 8.1.3壓縮VS非壓縮 8.2發(fā)射過程的流水線 8.2.1非數(shù)據(jù)捕捉結(jié)構(gòu)的流水線 8.2.2數(shù)據(jù)捕捉結(jié)構(gòu)的流水線 8.3分配 8.4仲裁 8.4.11ofM的仲裁電路 8.4.2NofM的仲裁電路 8.5喚醒 8.5.1單周期指令的喚醒 8.5.2多周期指令的喚醒 8.5.3推測喚醒 第9章 執(zhí)行 9.1概述 9.2FU的類型 9.2.1ALU 9.2.2AGU 9.2.3BRU 9.2.4其他FU 9.3旁路網(wǎng)絡(luò) 9.3.1簡單設(shè)計的旁路網(wǎng)絡(luò) 9.3.2復(fù)雜設(shè)計的旁路網(wǎng)絡(luò) 9.4操作數(shù)的選擇 9.5Cluster 9.5.1Cluster IQ 9.5.2Cluster Bypass 9.6存儲器指令的加速 9.6.1Memory Disambiguation 9.6.2非阻塞Cache 9.6.3關(guān)鍵字優(yōu)先 9.6.4提前開始 第10章 提交 10.1概述 10.2重排序緩存 10.2.1一般結(jié)構(gòu) 10.2.2端口需求 10.3管理處理器的狀態(tài) 10.3.1使用ROB管理指令集定義的狀態(tài) 10.3.2使用物理寄存器管理指令集定義的狀態(tài) 10.4特殊情況的處理 10.4.1分支預(yù)測失敗的處理 10.4.2異常的處理 10.4.3中斷的處理 10.4.4Store指令的處理 10.4.5指令離開流水線的限制 第11章 真實世界的例子: Alpha 21264處理器 11.1概述 11.2取指令和分支預(yù)測 11.2.1line/way的預(yù)測 11.2.2分支預(yù)測 11.3寄存器重命名 11.4發(fā)射 11.5執(zhí)行單元 11.5.1整數(shù)的執(zhí)行單元 11.5.2浮點數(shù)的執(zhí)行單元 11.6存儲器的訪問 11.6.1Speculative Disambiguation 11.6.2Load hit/miss Prediction 11.7退休 11.8結(jié)論參考文獻