国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

在多態(tài)陣列處理器上實(shí)現(xiàn)統(tǒng)一渲染架構(gòu)

2016-02-23 06:28韓俊剛
關(guān)鍵詞:多態(tài)頂點(diǎn)處理器

郭 丹,韓俊剛

(西安郵電大學(xué) 計算機(jī)學(xué)院,陜西 西安 710121)

在多態(tài)陣列處理器上實(shí)現(xiàn)統(tǒng)一渲染架構(gòu)

郭 丹,韓俊剛

(西安郵電大學(xué) 計算機(jī)學(xué)院,陜西 西安 710121)

多態(tài)陣列處理器是一種將成千上萬的單處理核集成于一塊芯片的新型并行處理器,其具有多種并行計算模式。針對傳統(tǒng)的分離式圖形渲染管線產(chǎn)生負(fù)載不均衡的問題,以業(yè)界提出的統(tǒng)一渲染思想為指導(dǎo),充分利用多態(tài)陣列處理器的多種并行計算模式,設(shè)計并實(shí)現(xiàn)了一種基于多態(tài)陣列處理器的統(tǒng)一渲染架構(gòu)。該設(shè)計將多態(tài)陣列處理器的單處理核作為統(tǒng)一渲染架構(gòu)中的流處理器,同時設(shè)計緩沖區(qū)對象、緩存機(jī)制、分配器、重定序等相關(guān)機(jī)制配合流處理器工作,以此達(dá)到對圖形頂點(diǎn)數(shù)據(jù)和像素數(shù)據(jù)統(tǒng)一渲染的目的。最后在實(shí)現(xiàn)的統(tǒng)一渲染架構(gòu)中對基本的3D模型數(shù)據(jù)進(jìn)行了仿真。結(jié)果表明,設(shè)計的統(tǒng)一渲染架構(gòu)很好地實(shí)現(xiàn)了頂點(diǎn)著色和像素著色的負(fù)載平衡,并且在數(shù)據(jù)處理方面實(shí)現(xiàn)了較高的數(shù)據(jù)并行性。

統(tǒng)一渲染;多態(tài)陣列處理器;著色器;分配器

0 引 言

進(jìn)入可編程時代的GPU可以對頂點(diǎn)處理單元和像素處理單元兩個部分進(jìn)行編程。在頂點(diǎn)處理單元和像素處理單元上運(yùn)行的程序分別稱為頂點(diǎn)著色器(vertex shader)和像素著色器(pixel shader)[1]。微軟DirectX10發(fā)布之前,GPU采用將頂點(diǎn)處理單元和像素處理單元分開的分離式渲染架構(gòu)[2],當(dāng)圖形流水線采用分離式渲染架構(gòu)時,會產(chǎn)生負(fù)載不均衡的現(xiàn)象[3]。在DirectX10時代圖形界引入了統(tǒng)一渲染架構(gòu)[4],即在統(tǒng)一渲染架構(gòu)中,不再有頂點(diǎn)處理單元和像素處理單元之分,取而代之的是支持通用計算[5]的流處理器陣列。流處理器不區(qū)分所處理的數(shù)據(jù),對于頂點(diǎn)和像素的處理也只是當(dāng)作普通的數(shù)據(jù)處理,因此,統(tǒng)一渲染架構(gòu)下的GPU具備了進(jìn)行通用計算的基礎(chǔ)。

文中研究了統(tǒng)一渲染架構(gòu)在多態(tài)同構(gòu)陣列處理器(Polymorphic Array Architecture for Graphics,PAAG)[6]上的實(shí)現(xiàn)方法。

1 多態(tài)同構(gòu)陣列處理器

PAAG由若干個基本處理簇和特定功能單元組成,16個簡單處理器單元(Processing Element,PE)按4×4的二維陣列組成一個簇。每個簇中包含一個簇控制器、一個全局共享存儲、四個行控制器和四個列控制器。簇控制器可以向列控制器和行控制器發(fā)送指令或者信號,然后這些指令或信號被行控制器或列控制器通過路由器發(fā)送至PE。相反的路程可以是PE的執(zhí)行狀態(tài)向簇控制器的反饋。最小的處理器單元PE包含一個算術(shù)邏輯單元、一個路由器、一個PE控制器、一個本地數(shù)據(jù)存儲器、一個本地指令存儲器和四個與相鄰處理器共享的共享存儲器。

PE可單獨(dú)執(zhí)行程序,相互之間互不影響,也可以是相鄰的幾個PE或者一組指定的PE協(xié)作執(zhí)行一段程序。同屬于一個簇的PE都可以從全局共享存儲里存取數(shù)據(jù)。相鄰PE之間通過本地共享存儲器進(jìn)行數(shù)據(jù)通信,不相鄰的PE可以通過路由器進(jìn)行數(shù)據(jù)通信。

PAAG中的行(列)控制器可同時向?qū)儆谕恍?列)的PE發(fā)送同一條指令來實(shí)現(xiàn)單指令多數(shù)據(jù)操作,而多指令多數(shù)據(jù)操作在PAAG中則體現(xiàn)為行(列)控制器向所屬行(列)的PE發(fā)送不同的指令。在PE內(nèi)部,同一時刻可包含八個線程,并且這八個線程或獨(dú)立或協(xié)作工作。通過結(jié)合PAAG的數(shù)據(jù)級并行、操作級并行以及線程級并行等多種計算模式來充分挖掘程序中的并行性[7]。

2 統(tǒng)一渲染架構(gòu)下的圖形流水線

結(jié)合開放圖形庫(Open Graphics Library,OpenGL)圖形流水線[8]和統(tǒng)一渲染架構(gòu)思想,同時加入OpenGL緩沖區(qū)對象[9]機(jī)制,文中提出了統(tǒng)一渲染架構(gòu)下的圖形渲染流水線,見圖1。

數(shù)據(jù)緩沖區(qū)(Buffer Object,BO)作為GPU頂點(diǎn)數(shù)據(jù)的來源,PAAG的一個簇用作流處理器陣列,每一個PE對應(yīng)一個流處理器,同時為實(shí)現(xiàn)統(tǒng)一渲染的目標(biāo),在這個簇的內(nèi)部設(shè)計了頂點(diǎn)緩存(Vertex Cache,VC)、像素緩存(Pixel Cache,PC)和分配器(Dispatcher)。經(jīng)過PE處理后的數(shù)據(jù)寫入重定序模塊(Reorder Buffer,RB),由RB根據(jù)數(shù)據(jù)類別決定數(shù)據(jù)的去向。

3 統(tǒng)一渲染架構(gòu)在PAAG上的具體實(shí)現(xiàn)

3.1 Buffer Object的設(shè)計

BO是一個獨(dú)立于CPU和GPU的存儲區(qū)域[9],由于它向GPU傳輸數(shù)據(jù)的方式為直接內(nèi)存訪問(Direct Memory Access,DMA),所以它的出現(xiàn)代替了CPU向GPU傳輸數(shù)據(jù)這種費(fèi)時的過程。文中對來自CPU端應(yīng)用程序的頂點(diǎn)信息進(jìn)行提取和整合,然后將其存儲在BO中,每一個頂點(diǎn)數(shù)據(jù)包含有頂點(diǎn)的四類屬性共16個標(biāo)量(坐標(biāo)、顏色、紋理、法向量)。對每個需要生成的圖形,其頂點(diǎn)數(shù)據(jù)存入BO,CPU端只保留其頂點(diǎn)索引數(shù)組。

3.2 Vertex Cache和Pixel Cache的設(shè)計

在PAAG簇的全局共享存儲里設(shè)置VC和PC,分別存儲來自BO的頂點(diǎn)數(shù)據(jù)和來自光柵化模塊的像素數(shù)據(jù)。這樣設(shè)置的原因有兩個:

(1)現(xiàn)代圖形處理器中通常都設(shè)有VC[10],以減輕頂點(diǎn)讀取時的帶寬要求。

(2)PC作為PE像素數(shù)據(jù)的來源,不僅可以存儲光柵化模塊產(chǎn)生的大量像素數(shù)據(jù),而且和VC一起配合后面所提到的Dispatcher對PE進(jìn)行數(shù)據(jù)的分發(fā)。在分發(fā)的過程中Dispatcher對PC和VC一視同仁,使得每個PE不僅有可能得到頂點(diǎn)數(shù)據(jù),也可能得到像素數(shù)據(jù),以此達(dá)到統(tǒng)一渲染的目的。

受硬件影響,VC的容量不可能無限大,故文中在進(jìn)行頂點(diǎn)傳輸時進(jìn)行了優(yōu)化,以此來減少頂點(diǎn)復(fù)用[11]導(dǎo)致的重復(fù)傳輸浪費(fèi)。如圖2所示,經(jīng)過傳輸,在VC中的頂點(diǎn)數(shù)據(jù)順序不同于在BO中,重新排列的頂點(diǎn)數(shù)據(jù)意味著VC的命中率提高,進(jìn)而提高了渲染速度。

圖2 Buffer Object到Vertex Cache的數(shù)據(jù)流通示意圖

頂點(diǎn)傳輸優(yōu)化算法的偽代碼如下:

char Buffer[MAX];/*緩沖區(qū)*/

char Vertex_cache[size];/*頂點(diǎn)緩存*/

/*int Indices[len];頂點(diǎn)索引*/

/*int Flag[num];標(biāo)記此頂點(diǎn)是否已經(jīng)存在于緩存中*/

void Read_from_buffer(int Indices[], int Flag[])

{

int j=0;

int current_indices=0;

for(int i=0;i

{

current_indices=Indices[i];

/*如果此頂點(diǎn)已經(jīng)存在于緩存中,那么循環(huán)繼續(xù)*/

if(Flag[current_indices]!=0)

continue;

/*如果此頂點(diǎn)不存在于緩存中,那么就將此頂點(diǎn)數(shù)據(jù)從緩沖區(qū)復(fù)制到緩存中*/

else

Copy_data(Buffer[current_indices], Cache[j++]);

Flag[current_indices]+=1;

}

}

3.3 分配器的設(shè)計

3.3.1 地址存儲

Dispatcher包含四個存儲地址的隊列,分別存儲當(dāng)前PC和VC里所有數(shù)據(jù)的地址以及一個標(biāo)記此數(shù)據(jù)屬于哪個Cache的標(biāo)志位(下面統(tǒng)稱為地址),存儲序列如圖3所示(圖中Address Queue中的p0表示地址而不是數(shù)據(jù))。若PC為空,PE會優(yōu)先存儲頂點(diǎn)地址;若PC不為空,PE會優(yōu)先存儲像素地址,在存儲完像素地址后轉(zhuǎn)而存儲頂點(diǎn)地址。

圖3 地址存儲序列示意圖

3.3.2 分發(fā)地址

存儲地址完成后,Dispatcher要分發(fā)地址到各組PE(文中對PE按列分組)。四個地址隊列分別對應(yīng)四組PE。由于四個隊列發(fā)放過程是相互獨(dú)立的,因此提高了數(shù)據(jù)并行性。

3.3.3 收集信號

分發(fā)地址之前,Dispatcher通過檢測列控制器中的信號signal來判斷本組PE是否可以進(jìn)行分發(fā)。當(dāng)signal為0時,本組PE可以分發(fā);當(dāng)signal大于0時,本組PE不可以分發(fā)。每分發(fā)一次地址,Dispatcher將signal的值加1,所以當(dāng)本組PE全部獲得地址,對應(yīng)的列控制器中的signal應(yīng)變?yōu)?。

3.4 流處理器陣列中PE的設(shè)計

PE作為流處理器的原型,其內(nèi)部程序可由程序員寫入。依據(jù)分配器分發(fā)的地址,PE從Cache中獲得數(shù)據(jù)并進(jìn)行處理。PE不僅可以進(jìn)行通用計算,而且PE的內(nèi)部會根據(jù)附著在地址中的標(biāo)志位識別出此數(shù)據(jù)來自哪一個Cache,所以不同的數(shù)據(jù)在PE中會得到相應(yīng)的處理,處理后的結(jié)果連同標(biāo)志位寫入RB,同時將所在組的signal減1。所以,當(dāng)每組PE把結(jié)果都寫入到RB后,對應(yīng)組的signal應(yīng)該變?yōu)?,這也意味著本組PE可以進(jìn)行下一次的地址分發(fā)了。

3.5 重定序模塊設(shè)計

RB包含一塊存儲區(qū)域,放置在PAAG簇全局共享存儲中,可以存放16個頂點(diǎn)(編號0~15,對應(yīng)16個PE),同時包含狀態(tài)變量State來指示此區(qū)域是否已經(jīng)寫滿數(shù)據(jù)。因?yàn)镻E產(chǎn)生結(jié)果的順序有先后之分和類別之分,所以此區(qū)域可以用來對PE產(chǎn)生的結(jié)果進(jìn)行同步和分類[12]。當(dāng)通過State判斷出RB滿時就會觸發(fā)對該存儲區(qū)域的刷新,如果是頂點(diǎn)數(shù)據(jù),進(jìn)入下一級圖元裝配模塊(Primitive Assemble),如果是像素數(shù)據(jù),寫入幀緩沖區(qū)(Framebuffer),刷新完畢后重置State變量??紤]到PE內(nèi)部進(jìn)行通用計算所用的時鐘數(shù)不會相差太多,故這里等候RB存滿的時間不會對整體性能造成很大影響。

3.6 統(tǒng)一渲染整體架構(gòu)

統(tǒng)一渲染的整體架構(gòu)圖如圖4所示。

圖4 統(tǒng)一渲染架構(gòu)在PAAG上實(shí)現(xiàn)的整體架構(gòu)圖

4 實(shí)驗(yàn)結(jié)果驗(yàn)證及分析

(1)針對基本3D模型的頂點(diǎn)數(shù)據(jù),計算了VC的平均緩存失效率(Average Cache Miss Ratio,ACMR)[13-14],見表1。ACMR越低,表明Cache的命中率越高。實(shí)驗(yàn)所設(shè)置的VC的大小為可以存放16個頂點(diǎn)。

(2)針對基本3D模型,通過統(tǒng)計程序在運(yùn)行時頂點(diǎn)處理所需時鐘數(shù)(Clock_V)、像素處理所需時鐘數(shù)(Clock_P)以及整體渲染所需時鐘數(shù)(Clock_T)進(jìn)行性能分析。用Clock_O表示其他模塊所需要的時鐘數(shù),于是有:

Clock_V+Clock_P+Clock_O=Clock_T

當(dāng)?shù)仁匠闪ⅲ砻鱌E實(shí)現(xiàn)滿載,負(fù)載達(dá)到基本平衡。在這里忽略了Clock_O,所以只要Clock_V和Clock_P之和接近于Clock_T即可,見表2。

表1 經(jīng)過頂點(diǎn)傳輸算法優(yōu)化后VC的ACMR值

表2 頂點(diǎn)處理和像素處理時鐘個數(shù)統(tǒng)計表

5 結(jié)束語

結(jié)合PAAG豐富靈活的并行計算模式和統(tǒng)一渲染思想,文中設(shè)計了一種對頂點(diǎn)和像素能統(tǒng)一高效著色的架構(gòu)。實(shí)驗(yàn)數(shù)據(jù)說明了該架構(gòu)對渲染性能有一定提升,并且能解決GPU負(fù)載不均衡的問題。如何在該架構(gòu)上進(jìn)行優(yōu)化和擴(kuò)展,將在未來工作中繼續(xù)研究。

[1] 田緒紅,陳茂資,田金梅.DirectX發(fā)展及相關(guān)GPU通用計算技術(shù)綜述[J].計算機(jī)工程與設(shè)計,2009,30(23):5432-5436.

[2] 韓俊剛,劉有耀,張 曉.圖形處理器的歷史現(xiàn)狀和發(fā)展趨勢[J].西安郵電學(xué)院學(xué)報,2011,16(3):61-64.

[3] 林一松,唐玉華,唐 滔.GPGPU技術(shù)研究與發(fā)展[J].計算機(jī)工程與科學(xué),2011,33(10):85-92.

[4] VISA.大一統(tǒng)的時代——統(tǒng)一渲染架構(gòu)引領(lǐng)未來[J].電腦迷,2007(11):32-33.

[5] 戴長江,張尤賽.基于圖形處理器的通用計算技術(shù)的研究[J].現(xiàn)代電子技術(shù),2013,36(4):157-161.

[6] 黃虎才.多態(tài)陣列處理器的并行計算研究[D].西安:西安郵電大學(xué),2014.

[7] 楊 柳,劉鐵英.GPU架構(gòu)下的并行計算[J].吉林大學(xué)學(xué)報:信息科學(xué)版,2012,30(6):629-632.

[8] 王蘭美,趙繼成,秦華東.OpenGL及其在VC++下的開發(fā)應(yīng)用[J].武漢大學(xué)學(xué)報:工學(xué)版,2006,39(4):62-65.

[9] Kilgard M J.Modern OpenGL usage:using vertex buffer objects well[C]//Proc of ACM SIGGRAPH Asia Courses.[s.l.]:[s.n.],2008.

[10] Yu C H,Chung K,Kim D,et al.An energy-efficient mobile vertex processor with multithread expanded VLIW architecture and vertex caches[J].IEEE Journal of Solid-State Circuits,2007,42(10):2257-2269.

[11] Barczak J D,Nehab D F,Sander P V.Fast triangle reordering for vertex locality and reduced overdraw:US,US8379019B2[P].2013.

[12] 韓俊剛,姚 靜,李 濤,等.多態(tài)并行機(jī)上的3D圖形渲染[J].西安郵電大學(xué)學(xué)報,2015,20(2):1-6.

[13] 陳思遠(yuǎn),史廣順,王慶人.通過三角形Strip衍生實(shí)現(xiàn)三維模型數(shù)據(jù)的渲染優(yōu)化[J].計算機(jī)輔助設(shè)計與圖形學(xué)學(xué)報,2009,21(8):1155-1163.

[14] Lin G,Yu P Y.An improved vertex caching scheme for 3D mesh rendering[J].IEEE Transactions on Visualization & Computer Graphics,2006,12(4):640-648.

Implementation of an Unified Rendering Architecture on Polymorphism Array Processor

GUO Dan,HAN Jun-gang

(School of Computer and Technology,Xi’an University of Posts and Telecommunications,Xi’an 710121,China)

Polymorphism array processor is a kind of new parallel processor which integrates hundreds or thousands of single nuclear on one chip.It has many parallel computing model.For the problem of uneven load produced by the traditional separate graphics rendering pipeline,guided by the ideology of unified rendering by industry,making full use of varieties of parallel computing model of polymorphism array processor,an unified rendering architecture based on the polymorphism array processor is designed and implemented.It takes single nuclear of polymorphism array processor as a stream processor of unified rendering architecture,and designs the buffer object,cache mechanisms,dispatcher,reorder mechanism and so on to cooperate the works of stream processor,achieving the purpose of rendering the vertex data and pixel data in unified manner.Finally on this unified rendering architecture,the data of the basic 3D model is tested.The experimental results show that the unified rendering architecture designed has realized the load balancing between vertex shader and pixel shader,and achieved the higher parallelism in the aspect of data processing .

unified rendering;polymorphism array processor;shaders;dispatcher

2015-11-06

2016-03-04

時間:2016-06-22

國家自然科學(xué)基金重大項(xiàng)目(61136002);西安郵電大學(xué)研究生創(chuàng)新基金(CXL2014-28)

郭 丹(1991-),女,碩士研究生,研究方向?yàn)椴⑿杏嬎闩c圖形學(xué);韓俊剛,教授,研究方向?yàn)檐浖陀布男问交?yàn)證、圖形處理器和新型計算機(jī)體系結(jié)構(gòu)研究。

http://www.cnki.net/kcms/detail/61.1450.TP.20160622.0845.050.html

TP302

A

1673-629X(2016)08-0039-04

10.3969/j.issn.1673-629X.2016.08.008

猜你喜歡
多態(tài)頂點(diǎn)處理器
過非等腰銳角三角形頂點(diǎn)和垂心的圓的性質(zhì)及應(yīng)用(下)
過非等腰銳角三角形頂點(diǎn)和垂心的圓的性質(zhì)及應(yīng)用(上)
參差多態(tài)而功不唐捐
Java語言中方法重載與方法覆蓋的異同
《C++面向?qū)ο蟪绦蛟O(shè)計》中引用類型的教學(xué)實(shí)踐
ADI推出新一代SigmaDSP處理器
數(shù)學(xué)問答
火線熱訊
一個人在頂點(diǎn)
電子設(shè)計應(yīng)用(2004年7期)2004-09-02
宜昌市| 方城县| 航空| 卢氏县| 谢通门县| 彭阳县| 揭阳市| 津南区| 寿宁县| 互助| 金溪县| 揭东县| 大关县| 凤山市| 进贤县| 永新县| 甘南县| 怀柔区| 柯坪县| 高州市| 新民市| 天峻县| 潼南县| 梅州市| 临江市| 格尔木市| 崇义县| 新晃| 利川市| 聂拉木县| 平潭县| 三亚市| 丰原市| 沁阳市| 乐都县| 运城市| 天台县| 襄汾县| 宜宾市| 长葛市| 清苑县|