• 沒有找到結果。

相位式快取記憶體及高效能存取管線之分析及改善

第二章 相位式快取記憶體之高效能管線設計

2.1 相位式快取記憶體之高效能存取管線架構與原理

2.1.3 相位式快取記憶體及高效能存取管線之分析及改善

本設計要達到降低功率消耗又能兼顧效能的設計,需要對管線作出些改變,

雖然能符合我們要求的目標,但也需要去克服一些困難以及必須犧牲的方面。

從益處、壞處分別去分析本設計 益處:

1. 降低功率消耗: 使用相位式快取記憶體,有效降低關聯性記憶體造成的 功率浪費

2. 提高效能: 改善相位式快取記憶體造成的管線暫停以及在 L1 快取記憶 體失誤發生時,提早處理下一級之記憶體單元,降低總處理週期

3. 設計單純不複雜: 不需使用其他高速元件,不造成額外負擔,只增加約 6~7%左右的管線硬體成本

„ Algorithm

Instruction Decoder:

Decode the instruction and Detect cache access instruction

Register File:

Get the Rs,Rt register value/

Calculate cache

access

ALU:

Get memory address

Cache Tag Access

W B / Cache Data Access

address : index value

=?

way0 tag way1

Memory address Enable

Hit way

Rs, Rt value

壞處:

1. Critical path :對管線 REG 級增加計算流程,提高此管線級成為 Critical path 的風險,有可能造成時脈降低

2. Data Hazard : 需要在 REG 級使用暫存器的數值計算記憶體位址,若與上 一指令有資料相依,會造成資料危障

3. 只能改善相位式資料快取記憶體的效能: 只能改善資料快取記憶體造成 的管線暫停,對指令快取記憶體沒有效能改善。

以下將針對益處壞處的部份做出分析及改善方法

首先針對此設計對管線的改變,造成的問題,如Critical path、Data Hazard,

將在此小節,針對問題提出改善的方法,將傷害降到最低

z Critical path 部分

本設計需在管線中加入計算單元來提早計算此記憶體位址,可能是單純的加 法運算,來處理的記憶體位此的計算,才能提供ALU 級時的 Tag 快取記憶體存 取,因此本設計在REG 級中,在讀取完暫存器數值之後,加入加法器來做記憶 體位址計算,這樣就能在ALU 級前獲得所需的記憶體位址,但加入此加法器勢 必會對原本的管線產生影響,增加此管線級成為critical path 的風險。

考量到不希望因為增加的計算負擔造成此級成為critical path ,也就是有可能 降低處理器時脈的風險,本設計也提出許多對應的方法:將加法器所需要處理的 位元數盡可能降到最低,這樣就能將REG 級所增加的時間不至於太多,超過原 本的critical path(ALU 級)。

記憶體位址分成兩部分,分別為Tag、Index 部分,如圖 2-7 所示,Tag 部分 用來比對判斷關聯式記憶體中是否有命中的主記憶體中的資料,Index 部分用來 讀取快取記憶體的位址中的資料。傳統的快取記憶體會一次擷取整段記憶體位址 來運作,使用記憶體位址中Index 讀出關聯式記憶體中的資料,在將這些資料跟 計憶體位址中的Tag 部份做比對,來判斷命中與否。

因為讀取快取記憶體中的Tag 或資料只需要 Index 數值即可,所以為了降低 REG 級中加入的運算增加時間造成 critical path 的風險,所以在 REG 級中只去計 算記憶體位址中的Index 數值也就是較低的位元部份,大約可以減少一半的加法 時間,將增加的時間負擔降到最低。其餘的記憶體位址則在ALU 運算出完整的 數值,以供利用。

圖 2-7 : 512 block 之集合關聯式記憶體位址組成

本設計以 TSMC 0.18um cell-base 製程實作,經 Cadence tools 加入 time constrain 模擬結果分析時脈,結果如圖 2-8 顯示,左邊為 ALU 級的最長週期、

右邊為REG 級的最長周期,最長周期仍是以 ALU 級的運算為主,REG 級仍沒 有成為critical path ,並沒有造成時脈上的降低,証明其實作上是可行的。

REG 級因為增加運算及選擇,造成 REG 級的處理週期增加,但可以選擇 Critical path 極大的處理器,例如 DSP,因為要在 1 個週期完成乘加,增加效能,

所以此時REG 級加入加法器也不會超過 DSP 的 critical path ,所以也不會對處 理器最高時脈產生影響。

因為本設計會隨著處理器的管線設計,架構,處理器應用需求,而有所不同,

在此不詳加考慮、討論,隨著處理器設計者去抉擇。本論文以實驗室處理器驗證 以第一種方法,即可解決此問題。

Index

32 9 8 0

Tag

圖 2-8 critical path 時間模擬結果

z Data Hazard 部分

在管線執行部分,因為需要提前處理記憶體指令相關的資料,所以在執行記 憶體相關的指令時,會因為資料尚未寫入暫存器而發生讀取之暫存器錯誤數值的 資料危障,如圖2-9 所示。

圖 2-9 : 處理器管線前饋圖

Cycle n

I D REG ALU

WB

LD r0,4,r1

Add r1,r2,r3 LD r0,4,r1

Add r1,r2,r3 LD r0,4,r1

Add r1,r2,r3 LD r0,4,r1 I F

Cycle n+1 Cycle n+2 Cycle n+3

r1 have data hazard

r1 have no

data hazard

在正常的管線級中,Add r1,r2,r3 指令在 ALU 級產生的數值,需要前饋 (Forwarding)給下一週期的 ALU 級,去計算 LD r0,4,r1 的記憶體位址,以避免資 料危障,這樣LD 指令才能再 WB 級處理記憶體的存取,但是在我們的演算法中,

本設計需要在REG 級中計算記憶體位址的前半部的位元,但此時 r1 的值不但尚 未寫入REG 級中,甚至仍未經過 ALU 級的計算,也就是在 Cycle n+1 時,本設 計需要再REG 級計算 r1+4 的數值,但此時 r1 的數值正在 ALU 級中計算,此時 REG 級中讀取的 r1 數值是錯誤的,因此會發生資料危障,發生資料危障會造成 管線暫停,增加總處理週期,造成效能的下降。

因此為了解決管線中因為記憶體相關指令提前計算而產生的資料危障,本設 計也為此提出兩種解決方法,希望藉此能解決問題。

1. 藉由編譯器最佳化,避開資料危障的發生:

將會發生資料危障的部份,經由編譯器的重新編排,將發生資料危障的指令 經由slot 的技術,插入不相干的指令,在不影響指令效能及結果下,執行最佳化。

例如 以下為 FIR 的一段程式,在 LH R4 in(R3)指令前,執行的 ADDI R3, R3, #1 因為跟LH 指令有資料相依的危險,會發生資料危障,可藉由指令順序改善,避 開因為讀取指令產生的資料危障。

INT: ADDI R1, R0, #40 INT: ADDI R1, R0, #40 ... ...

LOOP2: LOOP2:

ADDI R2, R2, #-1 ADDI R2, R2, #-1 ADDI

R3, R3, #1 ADDI R3, R3, #1

LH R4 in(R3) LH R5 coeff(R2) LH R5 coeff(R2) LH R4 in(R3) MAC R6, R4, R5 MAC R6, R4, R5

2. 增加 REG 級前饋路徑

另外本系統也提供簡單的前饋系統去改善,加入特定的指令去前饋,例如 如 果記憶體相關指令之前的指令有資料相依的情形發生,則我們使用之前REG 級 中加入的加法器去做運算提供REG 級前饋資料,從 REG 級前饋至 REG 級就不 會有資料危障的發生,如圖 2-10 所示,因為只有加法器單元,所以也只針對使 用加法來計算記憶體位址的指令有前饋的效果,反之若不為加法的資料相依,也 就是使用到乘法或邏輯位移的記憶體位址運算,則無法提供前饋,只能使用編譯 器最佳化來避免資料危障。

圖 2-10: 管線 REG 級前饋改善圖

本管線設計中LH R4 ,in (R3) 會跟 ADDI R3,R3, #1 發生資料危障,但因為 記憶體相關指令LH 之前所處理的指令是為 ADDI,是可以使用 REG 級中的加法 器去運算其Index 部分所需要的位元的加法,再將計算的數值回饋至 LH 指令在 REG 級中執行的 R3+1 的低位元部份的加法,並不會造成資料危障的發生。但此 方法只能解決因為特定排序的資料危障,若是乘法指令在記憶體指令之前所造成 的資料危障,則必須經由編譯器來解決或者暫停管線。

Cycle n

I D REG ALU

WB

LD r0,4,r1

Add r1,r2,r3 LD r0,4,r1

Add r1,r2,r3 LD r0,4,r1

Add r1,r2,r3 LD r0,4,r1 I F

Cycle n+1 Cycle n+2 Cycle n+3

r1 have no data hazard r1 have no

data hazard

z Instruction cache 部分

本論文提出之管線設計只改善資料快取部份效能,沒有針對指令相位式快取 記憶體效能提升之改善去設計,有以下幾點原因

1. 指令快取記憶體增加相位式設計對於效能並沒有太大的影響:

因為指令快取記憶體所增加的相位週期會隨著管線的持續進行,而只在初始 及發生指令跳躍時才會影響一個週期效能,並不是每次存取指令快取記憶體都會 造成管線暫停,相較於相位式資料快取記憶體每次存取都有可能造成管線暫停而 言,相位式指令快取記憶體本身可改善的空間不大,不如不要增加設計負擔。

2. 指令快取記憶體之關連性深度較資料快取記憶體淺:

指令快取記憶體因為指令有較佳的區域性及時間性,所以命中率本來就很高

,最高可達到95%~98%左右的命中率,因此指令快取記憶體通常在關連性快取 記憶體設計中,常見的通常直接使用直接定址快取記憶體設計或者最多只會使用 到2-Way 關聯性設計左右,例如TMS320C6211 只搭配4KB的direct mapped L1 指令快取記憶體,因此本設計重點在於改善關聯性快取記憶體設計之功率消耗上 的浪費,所以針對相位式資料快取記憶體改善可以達到最高效益。

2.2 相位式快取記憶體之高效能存取管線設計效能分析

在公式(1)中[8],ACTsentry-tag 表示在 Sentry tag 架構下,需要驅動的集合 次數,ACTconventional 表示在傳統快取記憶體架構中,需要驅動的集合次數。

並以兩者的驅動次數比例做為評斷功率消耗的比例。

本設計根據演算法及前述論文的計算方式,並參考Phased cache、Sentry tag

H_T_enable_ratio: 命中時,Tag 部分驅動的機率,依照設計有不同計算的

方式

H_D_enable_ratio: 命中時,Data 部分驅動的機率,依照設計有不同計算

的方式

M_T_enable_ratio: 失誤時,Tag 部分驅動的機率,依照設計有不同計算的

方式

M_D_enable_ratio: 失誤時,Data 部分驅動的機率,依照設計有不同計算

的方式

Other : 其他單元的功率消耗,在此表示 Sentry tag cache 使

用 CAM 所帶來的功率消耗

如表2-2 所示,本表以 4KB ,4-way(Way=4) ,8-bit Tag bit(tag= 8), 2 bit Sentry tag bit(S=2), 32-bit data bit(data=32) 的快取架構做為例子來比較,另外此圖表假 設單位CAM 所耗的 power 為單位 SRAM 的兩倍[9]作為評估功率消耗的比較。

表 2-2 : 傳統、Sentry tag 架構、phase 架構功率公式比較表 Convention Sentry tag Phased cache/

This Work Hit_power Way(tag+data) (tag +data) +(Way-1)

*(tag+data)(1/S^2) +Way*CAM*S

Way*tag + data

Miss_power Way(tag+data) Way*(tag+data)(1/S^2) +Way*CAM*S

Way*tag

Power:

Hit*Hit_power + Miss*Miss_power

H* Way(tag+data) +M*Way(tag+data)

H*(tag +data) * (1+(Way-1)/

S^2)

+M*( tag +data) +Way*CAM*S

H*( Way*tag + data) +M*Way*tag

Power :

(4-way) (95%Hit)

100% 51% 39%

Tag 跟 Data 分別表示 tag cache 跟 data cache 相位所消耗的功率,依快取記 憶體大小不同而變化。將快取記憶體功率消耗分成命中時的功耗及失誤時的功率 消耗,會依照快取記憶體使用的演算法而有所不同,以 4-Way 集合關聯性快取 記憶體為例,傳統設計需要同時驅動4 個 way 的 tag cache 及 data cache 部份,

而Sentry tag 架構在命中時約需消耗 1.75 個 way 的 tag 加 data 的 power,在失 誤時約需消耗1 個 way 的 tag 加 data 的 power,可比傳統快取記憶體架構省下 約49%的功率消耗,此結果與 Sentry tag 架構論文數據大致相似。而使用 Phased cache 架構,雖然在處理 tag 部分都需要驅動 4 個 way 集合,但命中時只需要處

理1 個 Way 集合 的 data cache 部分,失誤時則不需要驅動任何一個 data cache 部 分,於是可以比 Sentry tag 架構 省下較多的功率消耗,大約能省下 61%左右的

理1 個 Way 集合 的 data cache 部分,失誤時則不需要驅動任何一個 data cache 部 分,於是可以比 Sentry tag 架構 省下較多的功率消耗,大約能省下 61%左右的

相關文件