目前所測試的 benchmark,都是以 D3D Assembly 編譯而成的,使用的 assembler
是 ATI 所提供的 GPU Shader Analyzer 1.40 [12]。這個工具可以針對所有的高階 shader language 進行編譯,並且提供多種晶片供你選擇。我所使用的皆是用 High Level Shading Language (HLSL)撰寫的程式語言,因為在原始碼中可以很清楚看到 vertex shader 及 pixel shader 的 function 劃分出來,這樣在做編譯時,就可以只把 vertex shader function 獨立編譯,不用擔心編譯出來的 assembly code 無法使用。
然而,因為每個團隊設計出來的 shader 大多不會完全符合所有的指令集,像 我們團隊所設計的架構,僅提供 15 個指令選擇,所以在挑選 benchmark 時,還要 注意編譯出來的指令是否都屬於這 15 個指令才行。編譯完成後,把產生的 assembly code 當作 c 程式的輸入檔,依照第三章的編碼方式進行編碼,並且在適當的地方 加入 NOP 指令,以保證結果的正確性。之後再產生所需要的 vertex input buffer 及 constant register file 內的值,就可以進行模擬驗證了。
我們的驗證環境,是在 server 上,用 debussy 進行 RTL 及 gatelevel simulation,
並且使用 prime power 量測功率。除了原版本之外,還多了兩個比較版本,分別是 pipeline register 只有檔在 ID/EXE1 和 EXE1/EXE2 這一級的版本,以及 pipeline register 有檔在 ID/EXE1、EXE1/EXE2、EXE2/EXE3、EXE3/EXE4 和 EXE4/EXE5 的版本。每個版本的合成時間皆為 10ns,模擬時間皆為 20ns。三個 benchmark 名 稱 分 : VertexLighting、 VS_SpotLighting 及 VS_RadialBlurFast 。 前 兩 個 都 是 做 transformation 及 lighting 的運算,只是差在 lighting 的方式不一樣。後者則是有放 射性的功能。
表 3.4 Before and after adding NOPs Benchmark Instructions Original instructions After adding NOPs VertexLighting 49 147
SpotLighting 35 70 RadialBlurFast 24 52
因為每次都只有一個 function 為單位下去測試,為了防止 data dependency 加 了 NOP 指令後,發現 NOP 指令占了一半以上,這對效能是浪費的。之後會考量 多個 function 下去測,或是做 instruction schedule 來減少 NOP 的個數 (表 3.4)。此 外,從表 3.5 可以看出,目前所加的額外電路不超過總電路的 7%,而且沒有影響 performance。而從表 3.6 以及圖 3.5 也可以很明確地看到,這三個 benchmark 都 至少節省了 27%的功率消耗。實驗的兩個版本(onlygate_EX12 和 lpUAU)得知,在 EXE2/EXE3、EXE3/EXE4 及 EXE4/EXE5 pipeline registers 的功率消耗大約佔全部 的 12%左右,而多加的 area overhead 只需要 1.5%,評估是可行的。但是實際上到 底是要這三個都要關,還是關這三個級數的其中幾級,都是之後還要做評估的。
表 3.5 Area of Vertex Shader
Area (um2) Area (+) Delay UAU 3579422.75 9.6229 Onlygate_EX12 3766383 5.223195% 9.6224 lpUAU 3819166.25 6.697825% 9.7273
表 3.6 Total Power of Vertex Shader
vertexLighting VS_SpotLighting VS_RadialBlurFast Power
(watt)
Power
(−) Power (watt)
Power
(−) Power (watt)
Power (−) UAU 6.965e-02 7.040e-02 6.965e-02
Onlygate_EX12 5.895e-02 15.36% 6.177e-02 12.26% 5.358e-02 23.07%
lpUAU 4.810e-02 30.94% 5.102e-02 27.53% 4.524e-02 35.051%
Simulation time 3135000 1595000 1235000
圖 3.5 Total power of Vertex Shader
圖 3.6 MAC and DP4 execution unit Power Savings
從圖 3.6 得知,以這三個 benchmark 來說,MAD/MUL/ADD 指令在第一及第 三個 benchmark 都佔大多數,第二個 benchmark 相對來講比較少。但是 DP3/DP4 指令只有在第二個 benchmark 出現較多,在第三個 benchmark 則是沒出現過。所以 第一和第三的 DP4 硬體才會節省了將近 100%。在 MAC 硬體方面,雖然第二個 benchmark 中,MAD/MUL/ADD 指令佔的比較少,但別忘了,DP3/DP4 指令也是 會用到 MAC 硬體的第一級的。因此,所減少的比率才會和其他兩個 benchmark 差 不多。當然,查表指令也跟 MAC 硬體有關。但是查表指令只有在第二及第三個 benchmark 出現,而且各只有 1 個和 3 個指令。影響不大,在這邊就不考慮進去。