400 likes | 971 Views
計算機組織與結構 - 效能設計. 第十三章 RISC( 精簡指令集電腦 ). 電腦主要發展史 (1). 家族觀念 IBM S/360 1964 DEC PDP-8 不同的實現技術,類似的結構 微程式控制單元 1951 年 Wilkes 提出微程式觀念 1964 由 IBM S/360 實現這種觀念 快取記憶體 1968 年 IBM S/360 系列 model 85 機型引進快取記憶體. 電腦主要發展史 (2). 固態 RAM 建構出記憶體技術 微處理器 1971 年 Intel 4004 開啟微處理器的時代 管線技術
E N D
計算機組織與結構-效能設計 第十三章 RISC(精簡指令集電腦)
電腦主要發展史(1) • 家族觀念 • IBM S/360 1964 • DEC PDP-8 • 不同的實現技術,類似的結構 • 微程式控制單元 • 1951年 Wilkes提出微程式觀念 • 1964由IBM S/360實現這種觀念 • 快取記憶體 • 1968年 IBM S/360系列 model 85機型引進快取記憶體
電腦主要發展史(2) • 固態RAM • 建構出記憶體技術 • 微處理器 • 1971年 Intel 4004開啟微處理器的時代 • 管線技術 • 在擷取和執行引進平行機制 • 多重處理器
RISC結構 • RISC結構是新一代的電腦結構觀念 • RISC主要特性 • 不大且簡單的固定格式指令集 • 大量的暫存器 • (或,可利用編譯器來最佳化暫存器的配置) • 充分運用指令管線技術
CISC強調的觀念 • 軟體資產遠勝於硬體資產 • 強調軟體相容性 • 愈來愈複雜的高階語言 • 企圖改善程式的不可靠度! • 減少高階語言與低階語言的語意隔閡
CISC前進的方向 • 增大指令集 • 更多的定址模式 • 以硬體實現HLL(高階程式語言)敘述 • 比如: VAX的CASE (switch)指令
CISC提供的解答 • 使編譯器的任務簡單化 • 改善執行的效率,引入微碼,來實現更複雜的動作序列 • 支援更複雜的高階語言
其實CISC前進方向當然有重要的價值,… …,然而CISC提供的是真的標準解答嗎?… …有些學者在研究HLL的執行特徵後,反而提出不同的看法
指令執行特徵 • HLL(高階程式語言)有三個主要特徵 • 執行運算 • 運算元使用 • 執行序列 • 不應作靜態量測 • 比如:不該只計算HLL的指令數 • 應該作動態量測 • 比如:計算HLL執行時所出現的指令數
HLL執行運算中最常出現的指令 • 指定敘述 • 佔有相當比例 • 資料搬移指令 • (IF, LOOP)條件敘述 • 序列控制指令 • 程序呼叫/返回 • 最耗時的指令
大部分只是簡單的純量變數 運算元存取傾向純量,並且高度區域化 HLL運算元
程序呼叫 • 最耗時的動作 • 程序需注意:傳輸的參數 • 大部分是區域純量變數 • 也應該注意:巢狀深度 • 大部分程式不會在程序呼叫後,緊跟著返回程序 • 程序仍然存在區域存取性
HLL意涵 • 以上這些特色,意涵: • 盡量最佳化最常使用的指令、最耗時的指令 • 大量的暫存器 • 運算元存取 • 指令管線的設計 • 應該設法預測分支走向。 • 編譯器很少 (也很難)使用太複雜的指令,來解譯HLL。 • 因此改善HLL的最好方式,應該是使用精簡指令集(RISC)。
大型暫存器檔案 • 暫存器檔案意指所有暫存器的集合 • 軟體方法 • 使用有效的分析演算法 • 讓編譯器最佳化暫存器的使用率 • 優先配置給某些使用最頻繁的變數 • 硬體方法 • 增加更多的暫存器 • 讓更多的變數有更長的時間留在暫存器
區域變數暫存器 • 儲存區域存量變數於暫存器 • 減少記憶體存取 • 每個程序呼叫會影響區域存取的特性 • 必須傳送參數 • 結果必須返回 • 返回原程序後,原變數必須回存回來
暫存器視窗 • 通常參數不多 • 通常呼叫深度不大 • 集合多個小型的暫存器,指向不同的程序 • 隨著不同的程序,自動切換至不同的暫存器視窗 • 相鄰視窗可以重疊,以利參數傳遞,不再把暫存器回存記憶體
暫存器視窗數 • 暫存器集合有三個區域: • 參數暫存器 • 區域暫存器 • 暫時暫存器 • 暫時暫存器用來和下一個程序互相交換參數和結果 • 參數不必經過真正的資料搬移,就可以進行傳輸
環狀緩衝運作方式 • 當呼叫發生時,CWP(視窗指標)會指到目前正在動作的暫存器視窗 • 如果所有視窗都在使用,則將發生中斷,並且把最早使用的視窗儲存到記憶體 • SWP(視窗儲存指標)正好指向下一個視窗可以儲存的空間
全域變數 • 剛才視窗暫存器都是區域性。 • 全域記憶體: • 由編譯器配置全域變數到記憶體 • 全域記憶體對於經常存取的全域變數而言,顯然缺乏效率 • 全域暫存器: • 使用暫存器存放全域變數,相對較有效率
編譯器最佳化暫存器的配置 • 假設只有少數(16-32)的暫存器 • 暫存器(最佳化)的使用必須由編譯器決定 • HLL不會直接存取暫存器 • 每個想要常駐於暫存器的變數,會被指定一個符號(或虛擬)暫存器 • 編譯器會將這些符號暫存器,映射到固定的真實暫存器 • 符號暫存器不能重複地分配真實暫存器 • 如果真實暫存器不夠,不得已只好使用記憶體
圖形著色技術 • 由節點和邊所構成的圖形 • 欲指定顏色給這些節點 • 但,相鄰節點不可以相同 • 而且盡量使用最少種的顏色 • (節點就是符號暫存器) • 在相同程式區段的兩個暫存器會以邊連結 • 使用n種顏色來試著色,而n正好是真實暫存器的數目 • 節點無法著色時只好分配記憶體
精簡指令集結構 • RISC特性: • 一個週期一個指令 • 暫存器 - 暫存器之間的運算 • 簡易的定址模式 • 簡易的指令格式 • 硬體連線設計(非微碼設計) • 需要更多的編譯器時間
RISC vs CISC • 目前的情況: • 加入CISC特徵的RISC設計 • 加入RISC特徵的CISC設計 • CISC和RISC界線已非絕對清晰 • 大部分的設計都同時使用這兩種技術 • 比如:PowerPC 和Pentium II
RISC管線技術 • 大部分的指令是暫存器對暫存器之間的運算 • 指令執行有兩種階段 • I:擷取指令 • E: 執行指令,控制暫存器的 I/O,執行某個ALU動作 • 載入/儲存 • I:擷取指令 • E:執行指令,計算記憶體位址 • D: 記憶體,暫存器/暫存器、記憶體/暫存器的動作
管線技術的最佳化設計 • 管線技術遇到分支指令,會有一些問題! • 由於分支指令需等結果出現,才知道執行的目標,因此管線必須等待執行的結果。 • 使用延遲分支(Delay branch),解決這種問題 • 在分支的下個指令位置,先填入一個與分支執行無關的指令,等待該指令執行後,才開始進行分支動作 • 下個指令位置稱為延遲格(Delay slot)
迴圈展開(LOOP unrolling) • 迴圈展開會以展開參數(unrolling factor, u),對迴圈本體複製u次,而不是1次。 • 迴圈展開會以下列方式改善效能: • 降低迴圈的額外負荷 • 藉由改善管線效能,來增強指令的平行能力 • 改善暫存器、資料快取、或TLB的局部存取能力
論戰 • 定量分析:比較程式大小和執行速度 • 定性分析:檢驗諸如高階語言支援,以及VLSI資源最佳化應用的爭論 • 論戰難有結論,原因在於: • 沒有真正成對且可以進行比對的商業RISC和CISC機器 • 沒有任何明確的測試程式 • 很難從編譯器效果整理出硬體的影響 • 大部分的比較都作用於“模型”,而非實體機器上 • 目前商業電腦大部分是混合型
本章結束 • 李鴻鵬老師整理