計算機組織與結構 - 效能設計
DESCRIPTION
計算機組織與結構 - 效能設計. 第十三章 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 開啟微處理器的時代 管線技術 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/1.jpg)
計算機組織與結構 - 效能設計
第十三章RISC( 精簡指令集電腦 )
1
![Page 2: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/2.jpg)
電腦主要發展史 (1)
家族觀念 IBM S/360 1964 DEC PDP-8 不同的實現技術,類似的結構
微程式控制單元 1951 年 Wilkes 提出微程式觀念 1964 由 IBM S/360 實現這種觀念
快取記憶體 1968 年 IBM S/360 系列 model 85 機型引進快取記憶體
2
![Page 3: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/3.jpg)
電腦主要發展史 (2)
固態 RAM 建構出記憶體技術
微處理器 1971 年 Intel 4004 開啟微處理器的時代
管線技術 在擷取和執行引進平行機制
多重處理器
3
![Page 4: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/4.jpg)
RISC結構 RISC 結構是新一代的電腦結構觀念 RISC 主要特性
不大且簡單的固定格式指令集 大量的暫存器 ( 或,可利用編譯器來最佳化暫存器的配置 ) 充分運用指令管線技術
4
![Page 5: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/5.jpg)
處理器比較
5
CISC RISC Superscalar(超純量 )
名稱 IBM 370/168
VAX 11/780
Intel 80486
SPARC
MIPS R4000
PowerPC
Ultra SPARC
MIPS R10000
發展年代 1973 1978 1989 1987 1991 1993 1996 1996
指令數目 208 303 235 69 94 225
指令大小( 位元組 )
2-6 2-57 1-11 4 4 4 4 4
定址模式 4 22 11 1 1 2 1 1
通用型暫存器數目 16 16 8 40-520 32 32 40-520 32
控制記憶體大小 ( Kb )
420 480 246 - - - - -
快取記憶體大小 ( KB )
64 64 8 32 138 16-32 32 64
![Page 6: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/6.jpg)
CISC 強調的觀念 軟體資產遠勝於硬體資產
強調軟體相容性 愈來愈複雜的高階語言
企圖改善程式的不可靠度! 減少高階語言與低階語言的語意隔閡
6
![Page 7: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/7.jpg)
CISC 前進的方向 增大指令集 更多的定址模式 以硬體實現 HLL( 高階程式語言 ) 敘述
比如: VAX 的 CASE (switch) 指令
7
![Page 8: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/8.jpg)
CISC 提供的解答 使編譯器的任務簡單化 改善執行的效率,引入微碼,來實現更複雜的動作序列
支援更複雜的高階語言
8
![Page 9: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/9.jpg)
其實 CISC 前進方向當然有重要的價值,… …,然而 CISC 提供的是真的標準解答嗎?… …有些學者在研究 HLL 的執行特徵後,反而提出不同的看法
9
![Page 10: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/10.jpg)
指令執行特徵 HLL( 高階程式語言 ) 有三個主要特徵
執行運算 運算元使用 執行序列
不應作靜態量測 比如:不該只計算 HLL 的指令數
應該作動態量測 比如:計算 HLL 執行時所出現的指令數
10
![Page 11: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/11.jpg)
HLL 執行運算中最常出現的指令 指定敘述
佔有相當比例 資料搬移指令
(IF, LOOP) 條件敘述 序列控制指令
程序呼叫 / 返回 最耗時的指令
11
![Page 12: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/12.jpg)
HLL 加權動態頻率動態事件 加權的機器指令 加權的記憶體存
取Pascal C Pascal C Pascal C
ASSIGN( 指定 )
LOOP (迴圈)CALL (呼叫)IF (條件)GOTO (跳躍)OTHER (其它
)
45%
5 %
15 %
29 %
-6 %
38 %
3 %
13 %
43 %
3 %
1 %
13 %
42 %
31 %
11 %
-3 %
13 %
32 %
33 %
21 %
-1 %
14 %
33 %
44 %
7 %
-2 %
15 %
26 %
45 %
13 %
-1 %
12
![Page 13: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/13.jpg)
HLL 運算元
Pascal C 平均整數常數純量變數陣列 / 結構
16%
58%
26%
23%
53%
24%
20%
55%
25%
13
大部分只是簡單的純量變數 運算元存取傾向純量,並且高度區域化
![Page 14: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/14.jpg)
程序呼叫 最耗時的動作 程序需注意:傳輸的參數
大部分是區域純量變數 也應該注意:巢狀深度
大部分程式不會在程序呼叫後,緊跟著返回程序
程序仍然存在區域存取性
14
![Page 15: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/15.jpg)
HLL 意涵 以上這些特色,意涵:
盡量最佳化最常使用的指令、最耗時的指令 大量的暫存器
運算元存取 指令管線的設計
應該設法預測分支走向。 編譯器很少 ( 也很難 ) 使用太複雜的指令,來解譯
HLL 。 因此改善 HLL 的最好方式,應該是使用精簡指令集
(RISC) 。15
![Page 16: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/16.jpg)
大型暫存器檔案 暫存器檔案意指所有暫存器的集合 軟體方法
使用有效的分析演算法 讓編譯器最佳化暫存器的使用率 優先配置給某些使用最頻繁的變數
硬體方法 增加更多的暫存器 讓更多的變數有更長的時間留在暫存器
16
![Page 17: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/17.jpg)
區域變數暫存器 儲存區域存量變數於暫存器 減少記憶體存取 每個程序呼叫會影響區域存取的特性 必須傳送參數 結果必須返回 返回原程序後,原變數必須回存回來
17
![Page 18: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/18.jpg)
暫存器視窗通常參數不多通常呼叫深度不大 集合多個小型的暫存器,指向不同的程序隨著不同的程序,自動切換至不同的暫存器視窗 相鄰視窗可以重疊,以利參數傳遞,不再把暫存器回存記憶體
18
![Page 19: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/19.jpg)
暫存器視窗數 暫存器集合有三個區域:
參數暫存器 區域暫存器 暫時暫存器
暫時暫存器用來和下一個程序互相交換參數和結果
參數不必經過真正的資料搬移,就可以進行傳輸
19
![Page 20: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/20.jpg)
重疊的暫存器視窗
20
參數暫存器
區域暫存器
暫時暫存器
J 階層
/呼叫 返回
參數暫存器
區域暫存器
暫時暫存器
J + 1 階層
![Page 21: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/21.jpg)
重疊的環狀緩衝圖
21
![Page 22: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/22.jpg)
環狀緩衝運作方式 當呼叫發生時, CWP( 視窗指標 ) 會指到目前正在動作的暫存器視窗
如果所有視窗都在使用,則將發生中斷,並且把最早使用的視窗儲存到記憶體
SWP( 視窗儲存指標 )正好指向下一個視窗可以儲存的空間
22
![Page 23: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/23.jpg)
全域變數 剛才視窗暫存器都是區域性。 全域記憶體:
由編譯器配置全域變數到記憶體全域記憶體對於經常存取的全域變數而言,顯然缺乏效率
全域暫存器: 使用暫存器存放全域變數,相對較有效率
23
![Page 24: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/24.jpg)
大型暫存器檔案 vs 快取記憶體大型暫存器檔案 快取記憶體
全部區域純量個別變數編譯器指定的全域變數依據程序巢狀深度的儲存 / 復原暫存器定址
最近使用的區域純量記憶體區塊最近使用的全域變數依據快取替代演算法的儲存 / 復原記憶體定址
24
![Page 25: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/25.jpg)
純量存取– 以視窗基底的暫存器檔案
25
![Page 26: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/26.jpg)
純量存取– 快取記憶體
26
![Page 27: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/27.jpg)
編譯器最佳化暫存器的配置假設只有少數 (16-32) 的暫存器 暫存器 ( 最佳化 ) 的使用必須由編譯器決定 HLL 不會直接存取暫存器 每個想要常駐於暫存器的變數,會被指定一個符
號 ( 或虛擬 ) 暫存器 編譯器會將這些符號暫存器,映射到固定的真實暫存器
符號暫存器不能重複地分配真實暫存器 如果真實暫存器不夠,不得已只好使用記憶體
27
![Page 28: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/28.jpg)
圖形著色技術由節點和邊所構成的圖形欲指定顏色給這些節點但,相鄰節點不可以相同 而且盡量使用最少種的顏色 (節點就是符號暫存器 ) 在相同程式區段的兩個暫存器會以邊連結 使用 n 種顏色來試著色,而 n正好是真實暫存器的數目
節點無法著色時只好分配記憶體28
![Page 29: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/29.jpg)
圖形著色技術圖解
29
![Page 30: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/30.jpg)
精簡指令集結構 RISC 特性 :
一個週期一個指令 暫存器 - 暫存器之間的運算 簡易的定址模式 簡易的指令格式 硬體連線設計 (非微碼設計 ) 需要更多的編譯器時間
30
![Page 31: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/31.jpg)
RISC vs CISC目前的情況: 加入 CISC 特徵的 RISC 設計 加入 RISC 特徵的 CISC 設計 CISC 和 RISC界線已非絕對清晰
大部分的設計都同時使用這兩種技術 比如: PowerPC 和 Pentium II
31
![Page 32: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/32.jpg)
RISC 管線技術 大部分的指令是暫存器對暫存器之間的運算 指令執行有兩種階段
I: 擷取指令 E: 執行指令,控制暫存器的 I/O ,執行某個 ALU動作
載入 / 儲存 I: 擷取指令 E: 執行指令,計算記憶體位址 D: 記憶體,暫存器 / 暫存器、記憶體 / 暫存器的動作
32
![Page 33: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/33.jpg)
管線效果
33
![Page 34: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/34.jpg)
管線技術的最佳化設計 管線技術遇到分支指令,會有一些問題!由於分支指令需等結果出現,才知道執行的目標,因此管線必須等待執行的結果。
使用延遲分支 (Delay branch) ,解決這種問題 在分支的下個指令位置,先填入一個與分支執行無關的指令,等待該指令執行後,才開始進行分支動作
下個指令位置稱為延遲格 (Delay slot)
34
![Page 35: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/35.jpg)
正常和延遲分支位址 正常分支 延遲分支 延遲分支最佳化
100
101
102
103
104
105
106
LOAD
ADD
JUMP
ADD
SUB
STORE
X, rA
1, rA
105
rA, rB
rC, rB
rA, Z
LOAD
ADD
JUMP
NOOP
ADD
SUB
STORE
X, rA
1, rA
106
rA, rB
rC, rB
rA, Z
LOAD
JUMP
ADD
ADD
SUB
STORE
X, rA
105
1, rA
rA, rB
rC, rB
rA, Z
35
![Page 36: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/36.jpg)
延遲分支圖解
36
![Page 37: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/37.jpg)
迴圈展開( LOOP unrolling ) 迴圈展開會以展開參數 (unrolling factor, u) ,對迴圈本體複製 u 次,而不是 1 次。
迴圈展開會以下列方式改善效能:降低迴圈的額外負荷藉由改善管線效能,來增強指令的平行能力 改善暫存器、資料快取、或 TLB 的局部存取能力
37
![Page 38: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/38.jpg)
迴圈展開範例
38
![Page 39: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/39.jpg)
論戰 定量分析:比較程式大小和執行速度 定性分析:檢驗諸如高階語言支援,以及 VLSI資源最佳化應用的爭論
論戰難有結論,原因在於: 沒有真正成對且可以進行比對的商業 RISC 和 CISC 機器
沒有任何明確的測試程式 很難從編譯器效果整理出硬體的影響 大部分的比較都作用於“模型”,而非實體機器上 目前商業電腦大部分是混合型
39
![Page 40: 計算機組織與結構 - 效能設計](https://reader035.vdocuments.pub/reader035/viewer/2022081417/56813605550346895d9d7a5e/html5/thumbnails/40.jpg)
本章結束李鴻鵬老師整理