行政院國家科學委員會補助專題研究計畫 期中進度報告
具有即時效能/功率監控功能的高效率可程式化三維電腦繪圖晶片系
統:軟硬體開發及整合-
子計畫四:三維電腦繪圖晶片系統之Vertex Shader 處理器設計(1/3)
計畫類別:□ 個別型計畫 ■ 整合型計畫
計畫編號:NSC 96-2220-E-110 -005-
執行期間: 96 年 8 月 1 日至 97 年 7 月 31 日
計畫主持人:國立中山大學資訊工程系 蕭勝夫
共同主持人:國立屏東商業技術學院資訊科技系 莊作彬
計畫參與人員:
田子慶、林為森、林景彬、葉家裕
成果報告類型(依經費核定清單規定繳交):□精簡報告 ■完整報告
本成果報告包括以下應繳交之附件:
□赴國外出差或研習心得報告一份
□赴大陸地區出差或研習心得報告一份
□出席國際學術會議心得報告及發表之論文各一份
□國際合作研究計畫國外研究報告書一份
處理方式:除產學合作研究計畫、提升產業技術及人才培育研究計畫、列管
計畫及下列情形者外,得立即公開查詢
□涉及專利或其他智慧財產權,□一年□二年後可公開查詢
執行單位:國立中山大學 資訊工程系
中英文摘要
中文摘要︰
本期中報告主要內容包括三大部份﹐第一部份是有關可程式化 vertex shader 之架構和指令集設計﹐ 第二部份是 vertex shader 中向量算術單元和特殊函數硬體單元之設計﹐第三部份是符合 OpenGL
ES 1.0 規格之 fixed-function pipeline 幾何子系統(geometry subsystem)之實作中﹐包括物件裁切
(clipping)之演算法設計。第一部份有關 vertex shader 之設計﹐本計畫利用硬體 forwarding 機制來 降低資料相依性所造成的 data hazard﹐以改善 vertex shader 之效能。第二部份主要是設計 vertex
shader 的核心︰向量算術運算單元和特殊函數硬體單元﹐本計畫中提出三種不同架構。第三部份
是有關固定功能之幾何子系統實作﹐本計畫提出一個硬體共享的架構﹐以增加硬體資源的使用率﹐ 並且加入改良的裁切硬體﹐以刪除不必要的三角形物件﹐以降低硬體的功率消耗。
Abstract
︰
There are three major parts in this report. The first part is the architecture design of a programmable vertex shader including its instruction set. Some data forwarding hardware is included in this vertex shader to reduce data hazard caused by the data dependency. In the second part, we propose three different architectures for the design of vector ALU and special function unit, a core function block in vertex shaders. In the third part, we design a geometry subsystem based on OpenGL ES 1.0 fixe-function graphics pipeline. In addition, an improved clipping algorithm with reduce hardware cost and its implementation are added into the geometry engine to remove all the triangle objects that are outside the view volume.
關鍵詞 (keywords):
電腦繪圖(computer graphics), 繪圖處理器(graphics processor), 頂點處目錄
一、 前言
二、 研究目的
三、 文獻探討
四、 研究方法
五、 結果與討論
六、 參考文獻
七、 計畫結果自評
電腦繪圖的需求越來越普遍,其中 3D 繪圖使用 3D 模型和各種影像處理來產生具有三維空 間真實感的影像。許多領域都使用 3D 電腦繪圖作為輔助,甚至許多可攜式電子產品也具備 3D 電腦繪圖的功能,應用上多半是使用低成本的即時 3D 電腦繪圖技術為基礎。本計畫是整合型 計畫中的一個子計畫﹐主要是設計電腦繪圖晶片系統中之幾何運算硬體。
二、 研究目的
3D繪圖流程依照處理性大致分為 : 幾何轉換子系統 ( Geometry Subsystem )以及著色子系統( Render Subsystem )。幾何轉換子系統包含基本的座標轉換( Transformation )、光源照射
( Lighting )以及刪除多餘運算的 Backface Culling 及 Clipping。Clipping 主要是針對跨越可視範圍
的物件做裁切的動作,針對部分在可視範圍內、部分在可視範圍外的物件做處理,將位於可視 範圍外的部分做裁切的動作,而此裁切動作往往會是幾何轉換子系統效能上的瓶頸。本計畫第 一年中的工作項目中﹐包括實踐幾何轉換子系統中裁切( Clipping )動作的硬體設計,硬體設計上 以提高裁切動作的產能( throughput )、減少裁切動作對於幾何轉換子系統效能上的瓶頸。另外, 提出一個可以減少多餘運算的 pre-clipping 方法,此方法運用在幾何轉換子系統上可以減少由於 裁切動作而造成效能上的瓶頸。 要實現幾何轉換子系統的硬體,主要可分成兩種方式,一種是固定功能的硬體管線(fixed function pipeline),其架構是採用固定的硬體管線,運算流程固定無彈性;另一種是可程式化的
頂點處理器(User-programmable Vertex shader),可依使用者的需求來產生不同運算結果,運算 較為彈性,也逐漸成為目前圖形處理器設計上的主流。本計畫的主要目的是設計一個頂點處理 器 (Vertex Shader),目的是加速三維繪圖管線中的座標轉換及光源計算,在第一年的工作項目 中﹐先設計符合 OpenGL ES 1.0 規格之 fixed-function pipeline 之幾何系統﹐在第二年和第三年﹐再設 計可程式化之頂點處理器的指令集和相關的架構。
三、 文獻探討
關於 programmable vertex shader 的研究,早在 1982 年時就可看到 [1]﹐在這篇文章中,提出 一個支援 3D Graphics 的 VLSI 幾何系統(geometry system)架構,主是是用來處理 3 項基本的圖 學計算:matrix transformation,clipping 和 mapping 功能,且是一個向量處理器(vector processor), 一次可以處理 4 筆浮點數資料,並包含自己的指令及架構﹐已經有了 SIMD(Single Instruction Multiple Data) 和可程式化的影子。而後在 1988 年[2]這篇論文,則是為了減少畫圖處理器和
frame buffer的之間的記憶體存取動作,提出一個更有效率的方法:首先使用管線化的三角形處
理器(triangle processor)來處理幾何運算部分,而後一個管線化著色處理器(shading processor) 來處理計算多光源下的 Phong shading,這樣的架構可以允許每秒顯示的三角形超過一百萬個。
在 1998 年﹐[3]改進了 Clipping 動作﹐因為多邊形的剪裁(polygon clipping)是在 SIMD 架構上最昂貴 且不便使用的阻礙。接著﹐可程式化 vertex shader 架構陸續有人提出 [4-9]。例如在[4]中﹐nVidia 公司提出一個 vertex shader 架構和相關指令集﹐應用於所生產之 NVIDIA’s GeForce3 graphics
processing unit (GPU) 而後很多相關的論文研究[10-18],都是基於這個基本架構而更進一步的改
進﹐其中最主要的論文是南韓 KAIST 電機系所發表的一系列有關電腦繪圖硬體設計之論文﹐例如 [14]利用四份 SIMD 向量內積硬體﹐以達到每個週期計算一個 4x4 矩陣轉換﹐而[15-16]是針對算術 運算處理單元和特殊函數計算﹐提出新的以對數系統(非傳統二進位數系)為主的演算法﹐但是這 些方法﹐無法達到單精準度浮點表示之精確度﹐。
四、 研究方法
4.1 Vertex Shader 架構與指令集
圖一是 vertex shader 和微處理器之關係圖﹐其中 MAC_based vertex shader 之架構﹐採用 SIMD,最 多可以同時執行四個輸入值的運算,通常是對應到輸入向量的 x,y,z 和 w 這四個輸入值,而 輸出可以是一個向量(含 xyzw)也可以是只取 xyzw 其中一個值的純量運算結果,也就是說其 產生的輸出值可以是一個向量或是純量。指令集所對應的組合語言格式如下: Opcode dst, [-]s0 [,[-]s1 [,[-]s2]]; #comment 其中,opcode 是指令的名稱, dst 是目標暫存器,用來儲存運算的結果;s0、s1、s2 則是代表 來源暫存器,根據指令的不同,需要的來源暫存器數量就會不一樣,例如加法運算需要二個來 源暫存器,指數運算需要一個來源暫存器,若是乘累加運算的話則是需要用到三個暫存器﹐每個 暫存器都是 128 bits,內部所儲存的 x,y,z 和 w 則都是 32bits 的浮點數。來源暫存器前面的負 號代表可以先將內部的值取負號之後再做運算。表一是本計畫所提出的 vertex shader 所支援的 指令集﹐大部分的電腦繪圖幾何運算﹐都可經由此指令集中的指令﹐有效率的執行。
vertex shader另一個重要設計,就是 negative/swizzle 的概念,negative 是前述針對每個來源
暫存器的內部值取其負數值來做運算,而所謂的 swizzle 的動作則是在實際做運算之前,先重新 排列內部的 xyzw 值,或是複製某個值到其他位置,以圖二為例:在 R2 後面的 yzzx 就是指 swizzle,將原本順序為 xyzw 的輸入值重新排序並複製了 z 值取代 w 值後取負號,變為[-y –z –z
-x]T,代表了 negative 和 swizzle 二個動作同時作用在來源暫存器,再將經過 negative 和 swizzle
後的值儲存到 R1 裡面。此外﹐我們所設計的 vertex shader 將運算結果儲存回目標暫存器時有 Write
Mask功能,可以彈性選擇只儲存 xyzw 中的哪些值,如圖三所示﹐讓程式設計更富有彈性,使運
圖一︰vertex shader 和微處理器之關係。 表一︰ vertex shader 之指令集。
opcode Full name Description
MOV Move Vector Æ Vector
MUL Multiply Vector Æ Vector
ADD Add Vector Æ Vector
MAD Multiply and add Vector Æ Vector
MIN Minimum Vector Æ Vector
MAX Maximum Vector Æ Vector
SLT Set on less than Vector Æ Vector
SLE Set on less or equal Vector Æ Vector
SGT Set on grate than Vector Æ Vector
SGE Set on great or equal Vector Æ Vector
RCP Reciprocal Scalar Æreplicated scalar
RSQ Reciprocal square root Scalar Æreplicated scalar
DP3 3 term dot product Vector Æreplicated scalar
DP4 4 term dot product Vector Æreplicated scalar
LOG Logarithm base 2 Scalar Æreplicated scalar
EXP Exponent base 2 Scalar Æreplicated scalar
BEQ Branch if equal
JMP Jump
圖二︰ vertex shader 指令中 negative/swizzle 之例子。
圖三︰vertex shader 指令中 write mask 的例子。
圖一中 MAC-based vertex shader 硬體架構設計,主要是以四個乘累加器為基礎,配合一些 多工器以及 lookup table 等等來完成所有指令的運算,如圖四所示。因為 vertex shader 是以 SIMD
的架構來做運算,因為大部分的幾何運算均可表示成一個 4x4 矩陣和[x y z w]T向量之乘積﹐所以 可用四個重複的乘累加區塊來實作,每個區塊分別產生 xyzw 經過加法、乘法、乘累加等等運算 之後將值儲存到圖四中的 reg0 暫存器。在設計上,為了讓乘累加器中可以抽出乘法的結果來完 成三維或是四維向量內積(DP3 和 DP4)的運算﹐取得 x*x,y*y,z*z,w*w 四個乘法器的值﹐再經 過一個四個輸入的加法器將結果加總,儲存到圖四中的 reg1 裡面;最後再選擇要輸出的結果, 看是要取出 reg0 或是 reg1 之內的值。在這初始設計並配合多工器的情況下,便可以完成表一中 19個指令中的 MOV、MUL、MAD、ADD、DP3、DP4 這六個指令的運算。再加入一個簡單的 Cmp區塊來作比較判斷,可產生其他 6 個指令 SGE、SGT、SLT、SLE、MAX 和 MIN 的運算結
果。本計畫之 special functions 指令: RCP、RSQ、LOG、EXP﹐採用 lookup table 配合乘法累加器 來執行一階內插動作﹐如圖五所示﹐硬體的設計是讓特殊函數運算和原有的乘累加器共用相同的 硬體資源﹐﹐因此可同時產生四種特殊函數值︰倒數、開根號倒數、以二為基底之對數、二的指數 次方。
圖四︰vertex shader 中 4-way SIMD vector unit。
圖五︰特殊函數指令在 4-way SIMD 向量處理器中之實現。
為了提升 Vertex Shader 的效能,我們將目前設計的 vertex shader 硬體管線化(pipeline)。根 據實驗結果﹐可將浮點數乘法器和浮點數加法器運算所需要的週期數設定如下:
(1)Floating-point multiplier: 1 cycle
(2)Two-input Floating-point adder: 2 cycles (3)Four-input Floating-point adder:3 cycles
因此,最長的 delay 將是發生在 DP4 這個運算的時候,總共需要 4 個週期來完成。Pipeline 管線 切割如圖六所示:所切割的 8 個 pipeline stages,分別是 fetch、decode、EX1~EX5 和 write-back, 每個 stage 代表一個週期時間。其中 4-way SIMD 向量計算單元先採用下節所提之架構 I 設計(如
圖七)﹐﹐﹐切割成 5 個 stages。在 EX1 之中,處理運算屬於特殊函數 RCP、RSQ、LOG 和 EXP 這四 個指令的查表動作以及一些執行比較動作的小單元;浮點數乘累加器佔據的 EX2~EX4 這三個 stages,可分為一周期的浮點數乘法運算和二週期的浮點數加法運算;花費時間最長的則是 DP4 這個單元,包含了四個浮點數乘法和一個四個輸入之浮點數加法運算,占據了 EX2~EX5 這四個 stages,所以設計了 5 個 stages 來完成運算單元動作。 圖六︰vertex shader 之管線化。
4.2
整合型向量算術運算單元
由於 vertex shader 的核心是向量算術運算單元﹐本計畫提出三種 SIMD vector ALU 架構設
計。圖七為提議架構 I 的概觀,此架構分為 5 個管線階段:EX1、EX2、EX3、EX4 及 EX5。浮
點的 SIMD 乘加運算在 EX2、EX3、EX4 管線階段執行,共有 4 份的浮點乘加器硬體。特殊函 數運算在 EX1、EX2、EX3、EX4 管線階段執行。向量內積運算在 EX2、EX3、EX4、EX5 管線 階段執行。數值比較運算如最大值(MAX)、最小值(MIN),在 EX1 管線階段執行。由於在 EX5 管線階段有多個輸出,所以需要輸出選擇器(Output Selector)根據指令來選擇真正輸出的路徑。 表二列出所有指令在架構 I 所對應的執行 latency 和 throughput。
表二︰vertex shader 指令在架構 I 中之 latency 和 throughput。
Opcode Description Latency Throughput
資料搬移 MOV Data Move 1 1
FADD Floating Add 4 1
FMUL Floating multiply 3 1
基本算術
運算 FMAD Floating
Multiply and Add
4 1
DP3 3 items dot product 5 1
向量運算
DP4 4 items dot product 5 1
RCP Reciprocal 4 1
RSQ Reciprocal Square Root
4 1
LOG2 Log bias 2 4 1
特殊函數 運算
POW2 Exponent bias 2 4 1
MIN min 1 1
MAX max 1 1
SLT Set on less than 1 1
SLE Set on less than
or equal
1 1
SGT Set on greater than 1 1
數值比較 運算
SGE Set on greater than or equal 1 1
圖八為提議架構 II 的概觀,主要區別是利用多階(3 階或 4 階)內插逼近法來減小架構 I 中表 格的總面積。此架構 II 分為 5 個管線階段:EX1、EX2、EX3、EX4、EX5 及 EX6。浮點的 SIMD 乘加運算在 EX3、EX4、EX5 管線階段執行,共有 4 份的浮點乘加器硬體。倒數函數、倒數平 方根、以 2 為基底對數函數,以 2 為基底指數函數運算在 EX1、EX2、EX3、EX4、EX5、EX6 管線階段執行。因為有四份乘法硬體﹐因此特殊函數可共用此硬體來執行四階的函數內插﹐以降低 查表的 ROM 面積﹐在 EX1、EX2 管線階段,每個特殊函數計算需要 a0~a4 等 5 個表格產生四階 多項式內插所需之五個係數,另外需要平方器、3 次方器、4 次方器等硬體。在 EX3、EX4、EX5、
EX6管線階段,則是共用內積算術運算單元(DP4)之硬體。向量內積運算在 EX3、EX4、EX5、
圖八︰所提出之向量算術運算單元(架構 II)。
表三︰vertex shader 指令在架構 II 中之 latency 和 throughput。
Opcode Description Latency Throughput
資料搬移 MOV Data Move 1 1
FADD Floating Add 5 1
FMUL Floating multiply 4 1
基本算術
運算 FMAD Floating
Multiply and Add
5 1
DP3 3 items dot product 6 1
向量運算
DP4 4 items dot product 6 1
RCP Reciprocal 6 1
RSQ Reciprocal Square Root
6 1
LOG2 Log bias 2 6 1
特殊函數 運算
POW2 Exponent bias 2 6 1
MIN min 1 1
MAX max 1 1
SLT Set on less than 1 1
SLE Set on less than
or equal
1 1
SGT Set on greater than 1 1
數值比較 運算
SGE Set on greater than or equal 1 1
圖九為本計畫所提出的第三種向量算術運算單元之架構,此架構和架構 II 之主要差別是包 含兩個 DP4 硬體﹐﹐因此和架構 I, II 相較﹐可加快一倍矩陣運算速度﹐此架構分為 5 個管線階段: EX1、EX2、EX3、EX4、EX5 及 EX6。浮點的 SIMD 乘加運算在 EX3、EX4、EX5 管線階段執
指數函數運算在 EX1、EX2、EX3、EX4、EX5、EX6 管線階段執行,在 EX1、EX2 管線階段, 每個特殊函數計算需要 a0~a4 等 5 個表格,另外有 4 個浮點乘法器等硬體。在 EX3、EX4、EX5、
EX6 管線階段,則是共用內積算術運算單元(DP4)。向量內積運算在 EX1、EX2、EX3、EX4、
EX5、EX6 管線階段執行,可以一次產生 2 個內積運算的結果。
圖九︰所提出之向量算術運算單元(架構 III)。
表四︰vertex shader 指令在架構 III 中之 latency 和 throughput。
Opcode Description Latency Throughput
資料搬移 MOV Data Move 1 1
FADD Floating Add 5 1
FMUL Floating multiply 4 1
基本算術
運算 FMAD Floating Multiply and Add 5 1
DP3 3 items dot product 6 1
DP4 4 items dot product 6 1
向量運算
HMAT Half Matrix operation 6 1
RCP Reciprocal 6 1
RSQ Reciprocal Square Root
6 1
LOG2 Log bias 2 6 1
特殊 函數
運算 POW2 Exponent bias 2 6 1
MIN min 1 1
MAX max 1 1
SLT Set on less than 1 1
SLE Set on less than
or equal
1 1
SGT Set on greater than 1 1
數值 比較 運算
4.3 Design of Fixed-OpenGL Geometry Engine with Clipping
除了設計符合 OpenGL 2.0 規格之 programmable vertex shader 之外﹐本計畫之第一年也將根據 OpenGL ES 1.0﹐設計 fixed-pipeline 幾何運算單元﹐圖十為 OpenGL ES1.0 fixed-pipeline 幾何轉換系 統中各個功能所對應的運算順序﹐主要運算包括 transformation, lighting, backface culling,
pre-clipping 等﹐本計畫根據此流程﹐考慮硬體資源共享﹐將 OpenGL fixed-pipeline 硬體分為 3 個
stages,如圖十一﹐每個 stage 為 16 個 cycles。表五為幾何系統裡各個硬體所對應的功能以及其對 應所在的 stage 與 cycle。 Modelview transformation Projection transformation Reciproca l Viewport transformation Calculate V01, V12 Cross product (N) Dot (V . N) outcode Calculate Vector L Normalization L Calculate Vector H Normalization H Vertex Normal transformation Normalization N N . L N . H Exponentiation ( NH^ns ) Lighting sum Lighting Pre-clipping Backface Culling Transformation
圖十︰OpenGL ES 1.0 fixed graphics pipeline。
Vertex Normal transformation
Model view transformation
projection transformation outcode
Stage 2 Stage 1 Normalization N Calculate L , H Reciprocal Calculate V01,V12 Normalization L,H N‧H Cross product (FN) Dot product (V‧FN) Transformation Lighting Backface Culling Clipping
Perspective & Viewport
transformation N‧L Lighting sum Exponentiation (NH^ns) Stage 3
表五︰幾何系統各硬體單元的共用。
Every stage HW units Operations Stage
0 1 2 3 4 5 6 7 8 9 a b c d e f MAC*4 Matrix Multiply (4*4) 1 Vertex Normal transformation Model_view transformation Projection transformation MAC*3 Matrix Multiply (3*3) 3 Cross Product & dot Perspective Transformation
& view port
Lighting (sum) Normalization H Normalization L LookUp Table &Multiplier*3 & Shifter*3 Normalizatio n 1,2 Normalization N
Log & exp table & Multiplier
Exponential calculation
3
Exp (NH^ns)
Table & Multiplier & adder & shifter
Reciprocal 2
Reciprocal w
Logic outcode 2 Pre-clipping
MAC Dot product 2,3 N.L N.H
Adder*3 Calculate vector 1,2 V0 1,12 L E H
除了設計 fixed-function graphics pipeline 之幾何運算硬體之外﹐本計畫也改良
Sutherland-Hodgman 之裁切 clipping 演算法﹐在保持相同執行速度之下﹐將所需的求線段焦點的
處理單元(PE)個數減半。圖十二為在二度空間中 clipping 動作之時間和 PE 關係﹐由左到右為時間 軸,由上到下分別為 PE1、PE2。PE1 的切割直線為可視範圍(volume)左右兩條垂直線,PE2 的 切割直線為可視範圍(volume)上下兩條水平線,藍色的點為此 stage 裡 PE 所要處理的 vertex﹐若 所要處理的只有一個點,則只會看到 1 個藍色點。若所要處理的有兩個點,則會看到 2 個藍色 點及一條紅色的線段,也就是此時要處理的是紅色線段這條 edge。PE 所輸出的 vertex 會以紫色 的數字呈現。此裁切演算法主要改進是一次考慮三角形中線段和兩個平行的 clip planes 之交點﹐ 以增加 PE 硬體之使用率﹐﹐圖十三為 PE 內部之硬體架構﹐﹐主要是計算線段和 clip plane 之交點。圖 十四是將 clipping 硬體和圖十一之架構結合之時序圖﹐除了原先幾何轉換運算所需的三個 stages 之外﹐還包括 pre- clipping 來判斷三角形是否是 trivially acdepted 或是 trivially rejected﹐﹐再經過三個 裁切 PEs 執行裁切動作。
圖十二︰改良後的裁切運算(以二度空間物件為例)。 adder Reciprocal Latency = 7 cycles mantiss exponent adder adder multp adder Float to fixed adder adder multp adder Float to fixed adder adder mux mux mux mux
Time (stage) 1 2 2 3 1 8 1 1 4 2 1 4 2 3 5 6 5 6 3 1 7 7 1 8 4 1 4 5 4 5 6 9 5 9 7 6 10 10 7 1 11 7 11 PE1 PE2 v1 v2 v3 裁切系統
圖十四︰包含裁切運算之幾何系統時序圖。
五、 結果與討論
本計畫之成果包括上述三大部分︰vertex shader 架構設計、向量算術單元設計和幾何系統(包括 裁切動作)之設計。有關 vertex shader 之架構設計﹐已經完成模擬器﹐並進行硬體 RTL 設計﹐其中控 制單元有關避免 data hazard 之硬體 forwarding 機制圖十五表示管線中各種 forwarding 情況,其 中,紅色的線代表資料的 forwarding,黑色的線代表正常的資料流程,在這樣的管線切割之下, 共有六種 forwarding 的情況要作考慮。在處理 data hazard 和 forwarding 的動作時,首先要知道 一個資料在管線流程中停留多久,也可以稱為此資料之生命週期,在目前的管線切割之下,一 個資料會存在管線七個週期之後,再將值存回暫存器之中,因此,要比對暫存器的值並判斷需 不需要產生 forwarding 的動作,就必須比對目前運行中的指令以及其接下來的 7 個指令有無用 到其運算結果,而比對方法如表六所示,當有後面的指令需要讀取前面指令運算出來的結果時, 先比較這兩個指令是屬於指令集中的哪兩種運算,每種運算皆有相對應的產生結果之 stage 以及 Forwarding輸入之 stage。經由比對之後,就可以知道這兩個指令需要間隔至少多少的週期才能 避免資料危障的發生,也就是移動指令順序的參考。目前 vertex shader 之控制單元已經通過軟 體模﹐其他資料路徑單元也正在硬體實現中。 Model,View, Projection Transformatio 1/w*(x,y outcod e clipC ll FIF O 1/w Geo_ to_FIF O
Stage 1 Stage 2 Stage 3
Lighting View PE1 of clippin g PE2 of clippin g PE3 of clippin g Stage 4
Stage 5 Stage 6 Stage 7 Stage 8 Not Trivial reject Pre- li i Stage 9 Stage 10
圖十五︰ vertex shader 向量算術單元中之硬體 forwarding 機制。 表六︰verrex shader 中各指令所需 forwarding 的 stage。
opcode Full name 產生結果之 stage Forwarding 輸入之 stage
MOV Move EX1 EX1
MUL Multiply EX4 EX2
ADD Add EX4 EX2
MAD Multiply and add EX4 EX2
MIN Minimum EX1 EX1
MAX Maximum EX1 EX1
SLT Set on less than EX1 EX1
SGE Set on great or equal EX1 EX1
SLE Set on less or equal EX1 EX1
SGT Set on great than EX1 EX1
RCP Reciprocal EX4 EX1
RSQ Reciprocal square root EX4 EX1
DP3 3 term dot product EX5 EX2
DP4 4 term dot product EX5 EX2
LOG Logarithm base 2 EX4 EX1
EXP Exponent base 2 EX4 EX1
本計畫第二部分是向量算術運算單元之設計﹐包括三種不同架構之比較﹐目前已經硬體驗證通 過所有支援的 vertex shader 指令。下表七比較所提出之三種架構和過去兩年內其他論文之架構﹐ 論文[17] 使用額外的乘法器和加法器執行二階內插法以計算特殊函數指令﹐﹐論文[14]採用 VLIW 配合四份 DP4 硬體(每份 DP4 硬體有四個乘法/加法器)﹐面積非常龐大﹐論文[15][18]採用對數數 系計算乘法和特殊函數﹐但是在二進位數系和對數數系之間的轉換所使用的 LOG 和 ANTI-LOG 轉換﹐為了節省 LUT 之面積﹐犧牲了精確度(單精準浮點之相對精確度只約略到小數以下第五 位)﹐。目前我們所提出的架構可達到相對精確度到小數以下第二十三位﹐且工作頻率﹐在 TSMC 0.18um下﹐可達到 200MHz。 表七︰Vertex shader 中向量算術運算單元/特殊函數運算單元架構之比較。 units hardware 優點 缺點
Vector unit 32b FMUL * 4
32b 4-in FADD*1 32b FADD* 4 1.二階內插查表法 2.矩 陣 運 算 生 產 量 =1/4 (33M vertices/sec) JSSC’06 [17] (float) SFU LUT(2kB) SQUARE* 1 32b FMUL * 3 32b 4-in FADD*1 未共用 Vector Unit硬體
Vector unit 32b FMUL * 16
32b 4-in FADD*4 32b FADD* 4 矩陣運算生產量=1/1 (100M vertices/sec) 未共用 Vector Unit硬體, 面 積 最 大 (DP4*4) ISSCC’06 [14] (flaot, VLIW) SFU N.A. JSSC’07 [15] (fixed, LNS) Vector unit/SFU LOGC*8 ALOGC * 4 30b x 8b Booth Encoder * 4 32b 4:2 CSA * 8 32b CPA * 8 1.LOGC/ALOGC面積小 2.特殊函數指令的 Latency 較短 3.矩陣運算生產量=1/4 (50M vertices/sec) 精準度不足 ISSCC’07 [18] (float, LNS) Vector unit/SFU LOGC*16 ALOGC * 4 30b x 8b Booth Encoder * 4 32b 4:2 CSA * 8 32b CPA * 12 FADD*4 1.LOGC/ALOGC面積小 2.特殊函數指令的 Latency 較短 3.矩陣運算生產量=1/2 (100M vertices/sec) 精準度不足 Proposed architecture I (float)
Vector unit 32b FMAD*4
DP4*1 一階內插查表法, 矩陣運算 生 產 量 =1/4(32M vertices/sec), 共 用 Vector 向 量 指 令 的 Latency (ex: FMUL)
Unit SFU LUT(161kB)
Vector Unit 32b FMUL*4
32b FADD*4 DP4*1 1.4階內插查表法 (表格面積最小) 2.矩陣運算生產量=1/4 (31M vertices/s) 3.共用 Vector Unit 硬體 向 量 指 令 的 Latency (ex: FMUL, DP4) Propsed Architecture II SFU (4th order) LUT(0.17kB) x2 (16bx16b) x3 (17bx17b) x4 (17bx17b)
Vector unit 32b FMUL*4
32b FADD*4 DP4*2 1.2階內插查表法 2.矩陣運算生產量=1/2 (100M vertices/sec) 3.共用 Vector Unit 硬體 4.向量指令的 Latency 減小 表格面積較大 (與 4 階作比較) Proposed architecture III SFU (2nd order) LUT(0.77KB) x2 (13b x 13b) 本計畫第三部分是幾何系統實作﹐表八是在 TSMC 0.18um 不同工作頻率下之合成面積數據﹐ 表九為在 200MHz 下各硬體單元所佔之面積百分比。目前此系統已經完成驗證﹐準備下個月下線 晶片。 表八︰幾何系統在不同工作頻率下之合成面積(TSMC 0.18um)。單位︰gates 硬體單元 T=40 (ns) T=30 (ns) T=20 (ns) T=10 (ns) T=5(ns ) T=5(ns) (min area) 備註 FOUR_MADD 38629 45576 48575 50583 53402 43624 4*mac(32x32+64) NORMALIZATION 23386 23386 23386 24470 24277 24057 3*(mul(13x16)+M ul2 (16)) THREE_MADD 27167 33214 37993 37838 41447 31712 3*mac(32x32+64) DOT 4686 4689 4862 5950 5352 4953 mul(18x18) Exponentiation 69102 69102 69102 69583 69512 69312 (ROM:62k) reciprocation 11908 11909 12005 12696 13909 12312 Mac(31*32+32) +Mul2 (32)) Context Table Reg 19427 19427 19427 19426 19453 19165 Reg:64*32bit All FSM 25327 25335 25335 25359 26212 24735 Control logic &
register
Geo_system 234014 247030 255095 261120 270815 245223 (only geometry system ) Geo_system
(wrapper) 239455 252481 264415 272635 276570 250720
(+ master & slave wrapper)
表九︰幾何系統在 200MHz 工作頻率下各硬體單元所佔面積及比例。 T=5 ns (min area) Percentage (%) 備註 FOUR_MADD 43624 17.40 4*mac(32x32+64) NORMALIZATION 24057 9.60 3*(mul(13x16)+Mul2 (16)) THREE_MADD 31712 12.65 3*mac(32x32+64) DOT 4953 1.98 mul(18x18 Exponentiation 69312 27.65 (ROM:62k)
reciprocation 12312 4.91 Mac(31*32+32) +Mul2
(32))
Context Table Reg 19165 7.64 Reg:64*32bit
All FSM 24735 9.86 Control logic & register
Geo_system 245223 97.80 (only geometry system )
Geo_system (+wrapper) 250720 100 (+ master & slave wrapper)
六、 參考文獻
[1] J.- H. Clark. “The Geometry Engine: A VLSI Geometry System for Graphics.” Proc. ACM
Computer Graphics (SIGGRAPH), pp. 127 - 133, 1982.
[2] M. Deering, et al., “The Triangle Processor and Normal Vector Shader: A VLSI System for High Performance Graphics”, Proc. ACM SIGGRAPH 88, pp. 2 1-30, 1988.
[3] B.-O. Schneider, “Efficient Polygon Clipping for an SIMD Graphics Pipeline”, IEEE Transactions
on Visualization and Computer Graphics, vol.4, no.3, pp. 272-285, July-Sept. 1998.
[4] E. Lindholm, M.-J. Kilgard and H. Moreton, “A User-Programmable Vertex Engine”, Proc. ACM
SIGGRAPH, pp.12-17, 2001.
[5] N. Ide, et al., “2.44-GFLOPS 300-MHz Floating-Point Vector-Processing Unit for High-Performance 3D Graphics Computing”, IEEE Journal of Solid-State Circuits (JSSC), vol. 35, no. 7, pp. 1025-1033, July 2000.
[6] Y. Hirose, et al , “A 4-way VLIW embedded processor and its companion chip”, Proc. IEEE Asia
Pacific Conference on ASICs, pp. 363-366 , 2000.
[7] C.-L. Yang, B. Sano, and A. -R. Lebeck. “Exploiting parallelism in geometry processing with general purpose processors and floating-point SIMD instructions.” IEEE Trans. Computers, Vol. 49, No. 9, pp. 934-946, Sept. 2000.
[8] A. Kunimatsu, N. Ide, T. Sato, et al. “Vector Unit Architecture for Emotion Synthesis.” IEEE
Micro, Vol. 20, No. 2, pp40-47, March-April 2000.
[9] H. Kubosawa, et al., “A 2.5-GFLOPS, 6.5 Million Polygons per Second, Four-Way VLIW Geometry Processor with SIMD instructions and a Software Bypass Mechanism.,” IEEE J. Solid State
Circuits, vol. 34, No. 11, pp. 1619-1626, Nov. 1999.
[11] F. Arakawa et al., “An embedded processor core for consumer appliances with 2.8 GFLOPS and 36 M polygons/s FPU,” Digest of Technical Papers, IEEE ISSCC, pp. 334–335, Feb. 2004.
[12] C.-H. Yu, D. Kim and L.-S. Kim,” A 33.2M vertices/s programmable geometry engine for multimedia embedded systems”, Proc. ISCAS, Vol. 5, pp. 4574- 4577, 2005.
[13] J.-H. Sohn, et al, “A Fixed-point multimedia co-processor with 50Mvertices/s programmable SIMD vertex shader for mobile applications,” Proc. ESSCIRC, pp. 207-210, 2005.
[14] C.-H. Yu, K. Chung, D. Kim and L.-S. Kim ,“A 120Mvertices/s Multi-threaded VLIW Vertex Processor for Mobile Multimedia Applications”, Digest of Technical Papers,ISSCC, pp.1606 – 1615, 2006.
[15] B.-G. Nam, et al., “A Low-Power Unified Arithmetic Unit for Programmable Hanheld 3-D Graphics Systems”, IEEE JSSC, Vol. 42, No. 8, pp. 1767-1778, Aug. 2007.
[16] B.-G. Nam, et al., “Power and Area-Efficient Unified Computation of Vector and Elementary Functions for Handheld 3D Graphics Systems”, IEEE Trans. Computers, Vol. 57, No. 4, pp. 490-504, Apr. 2008.
[17] D. Kim, et al., “An SoC with 1.3 Gtexels/s 3-D Graphics Full Pipeline for Consumer Applications”, IEEE JSSC, Vol. 41, No. 1, pp. 71-84, Jan. 2006.
[18] B.-G. Nam, et al., “A 52.4mW 3D Graphics Processor with 141Mvertices/s Vertex Shader and 3 Power Domains of Dynamic Voltage and Frequency Scaling”, Digest of Technical Papers, ISSCC, pp. 278-280, 2007.
七、 計畫結果自評
本計畫預計在第一年內先完成符合 OpenGL ES 1.0 fiexed-pipeline 之幾何運算系統之設計﹐在第二 年和第三年﹐再設計 programmable vertex shader。目前第一年進度﹐我們不僅實現 fixed-pipeline 幾 何系統和 clipping 硬體﹐也同時設計第二年的進度︰vertex shader 架構和指令集﹐以及 vector shader 內部的核心︰向量算術處理單元﹐並提出三種不同的向量算術處理單元架構。目前 fixed-pipeline 硬體和 clipping 硬體已經即將完成﹐並將與其他子計畫整合﹐預計在下個月送出測試晶片﹐至於
vertex shader之設計﹐我們也希望能在第一年結束之前﹐先在 FPGA 作雛形驗證﹐因此進度已經達到