從前一節指令集的資料流程可以看到,其實有些硬體實際上是不需要動作 的。假 使 我 們 可 以 利 用 clock gating 或是適當的控制線, 甚 或 是 gated mux
(multiplexer),就可以讓實際上不需動作的硬體,保持和上一個狀態一樣的值,以 減少不必要的 switching activity,便可達到低功率的效果。先前文獻所提出的四個 方法[9~11]中,前兩個[9, 10]適用於 ILP 的 processor,後兩個[11]則適用於 SOC design,沒有一個方法主要是用在 SIMD 的設計上。
SIMD 每次進來都只會有一個指令,因此也不用先知道有幾個指令進來。我們 只要針對每個指令的資料流向,適當地把不需要動作的硬體關掉即可。而且 DCG 所實做的處理器架構,execution stage 只有一級,也比較不會有硬體共用的情況發 生,所以可以以不同的 execution unit 分別控制。但 SIMD 的硬體很多是共用的,
雖然不會有 structure hazard 的問題,卻也不能以 execution unit 為單位考量。如果 是依照 IP level 的關法的話,可能會造成其他共用的硬體也跟著被關掉,或是無法 被關掉的情況發生。因此,我提出的方法是依照指令流向和級數的考量,以每個 層級的每個 block 為單位關掉。這樣除了不會影響到效能之外,也不會有該關沒 關,不該關又關掉的情況發生。
圖 3.3 Power distribution of vertex shader
圖 3.3 是 vertex shader 的 power 分布情形。我們可以看到,大部分的功率消耗 都是在 pipeline registers,每一級都佔 10%,所以我們將針對 pipeline registers 的每 一級都做 clock gating。至於查表部分,每張表都分布的不太平均,但就整體來說,
也消耗了將近 16%,也是我們可以著手的地方。每個 MAC 硬體,以及 DP4 硬體,
大約都在 6%左右,可以藉由關掉 pipeline register 的方式,減少這些電路的功率消 耗。剩下的 MOV/MAX/MIN/SGE/SLT 硬體,佔的比率極小,故不考慮特別針對這 些硬體做低功率。最後的 forwarding unit 也占了 7%,亦是需要注意的元件。
以下將每個指令的流程大致分為四類並且詳細說明:
• MOV/MAX/MIN/SGE/SLT
這五個指令都在 EXE1 stage 完成,而且都共用 ID/EXE1 pipeline register 的 source0 register。因為這五個硬體是拆開來的,用到的機率也不大,應該是要關 們會把後面的 execution pipeline registers 全部關掉。是故,當這五個指令的其 中一個在運作時,會額外消耗的功率只有在其他四個小的 block 上。而其他的 指令在運作時,這五個指令還是會動作。這個問題在未來將會試圖解決。
• RCP/RSQ/POW2/LOG2
這四個指令都是查表指令。在前面也有提過,硬體架構是把所有的查表輸入都 和 EXE1/EXE2 pipeline register 的 source0 X bank 相接。就如同先前一樣,如果 其中一個指令在運作時,其他三個表格應該要被關掉,但又因為它們共用同樣 的暫存器,就無法從 clock gating 關掉。但是,每個表格所消耗的功率是非常大 的。因此,我把每個表格前面都多加了一個 128 bits 的 latch 硬體,並且多加了 一條 enable 訊號線。藉由此訊號線,就可以把其他沒有在運作的表格關掉了。
而每個表格後面都會和不同的 MAC 硬體相接,利用 MAC 硬體完成表格指令 的運算。因為 MAC 硬體的前面就有 EXE2/EXE3 pipeline register 擋住了,我們 便可以利用 clock gating 把其他三個 MAC 硬體關掉。別忘了,還有 DP4 硬體
關掉了。
以下針對每個 pipeline registers 還有 stage 內部的硬體控制,包含控制線的合 併,都會做詳盡地說明。並在最後附上有用 clock gating 控制的暫存器的整體架構。
ID/EXE1 pipeline registers and EXE1 pipeline stage
在 ID/EXE1 pipeline register 內,除了控制訊號的傳遞外,剩下的就是 source register 的值。因此,我們可以利用每個指令不一定會用到三個 source register 的特 性,把沒有用到的暫存器 clock gating,以保持和上一狀態相同的值。從指令集和 指令的資料流程可以知道,每個指令都會用到 source0 register,除了 NOP 外,所 以只有在 NOP 的情況下,才可以把 source0 register 做 clock gating。在指令集的敘 述上,只有 MAD 用到 source2 register。也就是說,除了 MAD 指令之外,其他的 指令進來都可以對 source2 register 做 clock gating。
因為在這個 stage,我們是採取以一個 register 為一單位,也就是一次關就關 128 bits。這樣可以減少控制線數目 ,也沒有必要分得那麼細。所以在查表指令 (RCP/RSQ/POW2/LOG2)時,雖然他們只會用到 source0 register 的 x bank,硬體的 所有表格也只會和此 bank 連接,但我們還是不能關掉 source0 register 的其他 bank。
從 source1 register 來看,只有在 MOV、NOP 以及查表指令運作時,才可以關掉。
最後針對 ID/EXE1 pipeline register 做一整理:
• if ( op == NOP ) clock gating source0 register
• if ( op == NOP or MOV or RCP or RSQ or POW2 or LOG2 ) clock gating source1 register
• if (op != MAD ) clock gating source2 register
至於 EXE1 pipeline stage 的硬體,只有 tables 和 MOV、MAX、MIN、SGE 及 SLT 的硬體。考慮到查表的面積很大 (表 3.3),從表中可以看得出來,每個表至少
有(28+17)*4096 bits 的大小,如果沒有要做查表的指令,還是需要進行查表的動 作,其功率消耗不容小覷。因此,在每個表前,各多加了一個 128 bits 的 latch,控 制是否要查表 ,若沒有, 則讓它保持上一狀態的值。可以想見, 幾乎不會有 benchmark 的指令是一直在查表的,就算有很多查表的指令,也不會剛好四個查表 指令都重複地聚集在一起。因此,假使我們有使用控制訊號,讓表的輸出保持原 來的值,就可以減少非常多的 switching activity,功率也會大幅減少。
剩下的 MOV/MAX/MIN/S GE/SLT 硬體,所佔的面積並不大,雖然也是很少會 用到,但因為他們的輸入都是 source0 register 的 x bank,無法直接從 pipeline register 就可以關掉。若是要關掉,就必須如同查表一樣,在每個硬體前都多加 latch。如 果就整體考量來看,因為這些硬體相對於整體來說是很小的,所消耗的功率比例 也不大,目前不考慮加控制訊號關掉,但仍須經過往後的評估而定。
表 3.3 Four Table Entries and Sizes
Entries bits/entry (a0) bits/entry (a1) RCP 4096 (212) 28’b 17’b
RSQ 12288 (212 *3) 29’b 17’b POW2 8192 (213) 28’b 16’b LOG2 4096 (212) 28’b 18’b
EXE1/EXE2 pipeline registers and EXE2 pipeline stage
DP4/DP3 指令會用到 MAC 硬體的第一個 stage。所以假使在執行 DP4/DP3 指 令時,還是不能把 MAC 硬體關掉。同理,在做要用到 MAC 硬體的指令時,像是 MAD/ADD/MUL…等,DP4/DP3 的硬體也不能關掉。因此,在 EXE1/EXE2 pipeline register 這邊,我增加了兩個 128 bits 的暫存器。分別是 source0 和 source1 register,
目的則是讓 DP4 硬體可以關掉的時候,只利用一條控制訊號線,clock gating 多加 的 source registers,進而關掉 DP4 硬體。
至於剩下的暫存器,則是和 MAC 硬體相接。每個 MAC 硬體的輸入是各個 source register 的同一 bank,像是第一個 MAC 硬體就是和 X0、X1 及 X2 相連,其 他的以此類推。因此,在 EXE1/EXE2 pipeline register 這邊,是以同一 bank 的暫存 器為一單位考量。但是,在 MUL 及 ADD 指令中,會用到的是 source0 及 source1 register,對應到 bank 則是 X0 及 X1。換言之,它不會用到 X2 bank。由於 clock 所消耗的功率是非常多的,在這邊為了讓 clock 功率減少,再把同一 bank 拆成前
二後一,總共兩個暫存器。因此,在此 pipeline register 階段,共有 4*(1+1)+1 = 9 個控制訊號。每個查表指令都對應到自己的 MAC 硬體,所以當有一查表指令在執 行時,其他三個 MAC 硬體也可以關掉,也是利用 clock gating 將前面的 register 都 關掉。最後針對 EXE1/EXE2 pipeline register 做一整理:
• if ( op != DP4 or DP3 ) clock gating extra source0 and source1 registers ( DP4 module )
• if ( op == RCP ) clock gating Y0~Y2, Z0~Z2 and W0~W2 bank registers ( MAC2~MAC4 module )
• if ( op == RSQ ) clock gating X0~X2, Z0~Z2 and W0~W2 bank registers ( MAC1, MAC3~MAC4 module )
• if ( op == POW2 ) clock gating X0~X2, Y0~Y2 and W0~W2 bank registers
EXE2/EXE3 pipeline registers and EXE3 pipeline stage
在 EXE1/EXE2 pipeline registers 已經解決了當執行和 MAC 硬體相關的指令 時,DP4 硬體可以關掉的問題。但是,當執行 DP4/DP3 指令時,因為它會用到 MAC 硬體的第一個階段,因此在前一級 pipeline register 並不可以關掉。是故,可 以從 MAC 硬體的第二階段開始關。我們把在執行 DP4/DP3 指令時,從 MAC 硬體
EX23_X_enable = (~DP4_enable) & X01_enable)。X01_enable 表示控制 x0 及 x1 bank 的訊號線,DP4_enable 則是控制 DP4 硬體的訊號線,1 表示啟動,0 表示關掉。我 們可以利用這兩條訊號線判斷出 MAC 硬體接下來是否要動作,光是用 X01_enable 不能決定,因為在做 DP4/DP3 指令時,X01_enable 是設成 1 的,但其實它只用到 MAC 的第一階段,因此,還要加上 DP4_enable 訊號線判斷是否為 DP4/DP3 指令。
而 DP4 硬體部分,則是把 DP4_enable 繼續傳遞下來使用即可,不用再做額外的判 斷。
圖 3.4 Low Power Vertex Shader Architecture
EXE3/EXE4 pipeline registers and EXE4 pipeline stage
在這一級的硬體沒有甚麼特殊設計,純粹只是把上一級 MAC 和 DP4 硬體的 控制訊號傳遞下來,繼續使用 clock gating 關掉可以關的暫存器。
EXE4/EXE5 pipeline registers and EXE5 pipeline stage
這一級的 pipeline register 只剩下 DP4 硬體還在運作,其他都是已經做完的值 一直傳遞下來,所以還是利用 DP4_enable 訊號繼續控制和 DP4 硬體有關的暫存 器。EXE5 pipeline stage 只剩下 output selector,是由 4 個 12-1 的 32 bits 組成的。
在未來的工作上,會評估是否需要加上 clock gating 控制之後的硬體。
EXE5/WB pipeline registers and WB pipeline stage
WB pipeline stage 只有 mask 硬體,也是會評估是否需要關掉。目前的考量是 不需要關,因為 mask 所佔的功率比例並不大,而且只有在 NOP 指令或是需要全 部存取的時候才可關。