劉 暉,田 澤,馬城城,張 駿,薛凌藝
(1.中國航空工業(yè)西安航空計(jì)算技術(shù)研究所,陜西 西安 710068;22.集成電路與微系統(tǒng)設(shè)計(jì)航空科技重點(diǎn)試驗(yàn)室,陜西 西安 710068;3.西安翔騰微電子科技有限公司,陜西 西安 710068)
圖形處理顯示列表的設(shè)計(jì)與實(shí)現(xiàn)
劉 暉1,2,田 澤1,2,馬城城1,2,張 駿1,2,薛凌藝3
(1.中國航空工業(yè)西安航空計(jì)算技術(shù)研究所,陜西 西安 710068;22.集成電路與微系統(tǒng)設(shè)計(jì)航空科技重點(diǎn)試驗(yàn)室,陜西 西安 710068;3.西安翔騰微電子科技有限公司,陜西 西安 710068)
顯示列表功能是圖形處理器3D處理引擎的核心功能,通過將一段圖形繪制指令存儲到圖形處理器內(nèi)部,來完成復(fù)雜場景下同一物體的重復(fù)繪制。該功能極大地減少了主機(jī)與圖形處理器之間的數(shù)據(jù)吞吐量,降低數(shù)據(jù)帶寬的壓力、高效地繪制復(fù)雜場景。文中基于Xilinx XC7VX1140T構(gòu)建FPGA原型系統(tǒng),參考ALT-M9芯片的實(shí)現(xiàn)能力,提出了一種軟硬件協(xié)同方式的顯示列表設(shè)計(jì)實(shí)現(xiàn)方法。該方法充分利用了CPU與GPU的處理能力,靈活實(shí)現(xiàn)了圖形處理命令在不同實(shí)現(xiàn)方式下顯示列表的設(shè)計(jì)與實(shí)現(xiàn)。驗(yàn)證結(jié)果表明,軟硬件協(xié)同方式實(shí)現(xiàn)的顯示列表性能優(yōu)越,空間分配管理靈活,可靠性高。
圖形處理器;OpenGL;顯示列表;空間管理
顯示列表功能廣泛應(yīng)用于物體重復(fù)繪制、物體運(yùn)動軌跡描述、儀表盤繪制等復(fù)雜場景繪制中,是一種簡單、高效的使用方式,極大地降低了CPU與GPU之間的帶寬壓力,提高了編程的效率與靈活性[1]。顯示列表已成為圖形處理器應(yīng)用的一個新方向。
顯示列表分為編譯模式和編譯執(zhí)行模式。在編譯模式下,圖形繪制指令僅存儲到圖形處理器內(nèi)部;在編譯執(zhí)行模式下,圖形繪制指令存儲到圖形處理器內(nèi)部的同時(shí)發(fā)送給3D處理單元進(jìn)行執(zhí)行。傳統(tǒng)的硬件實(shí)現(xiàn)方式靈活性較差[2],浪費(fèi)了主機(jī)處理器的性能,限制了圖形處理命令的實(shí)現(xiàn)方式。文中提出了一種軟硬件協(xié)同的實(shí)現(xiàn)方式,其適用范圍不局限于圖形處理語言和圖形處理命令的實(shí)現(xiàn)方式[3]。
在圖形處理器的應(yīng)用中顯示列表用于多次繪制同一場景或物體,其原理如圖1所示。
圖1 顯示列表原理
當(dāng)圖形處理器收到除顯示列表外的圖形繪制應(yīng)用程序時(shí),直接將圖形處理命令發(fā)送到3D功能執(zhí)行單元進(jìn)行處理。當(dāng)圖形處理器收到定義顯示列表命令,并且當(dāng)前定義的顯示列表為僅編譯模式時(shí),圖形處理命令發(fā)送到顯示列表存儲單元,當(dāng)前顯示列表中包括的圖形繪制命令僅做存儲,對當(dāng)前的圖形繪制沒有影響。當(dāng)圖形處理器收到定義顯示列表命令,并且當(dāng)前定義的顯示列表為編譯執(zhí)行模式時(shí),圖形處理命令會同時(shí)發(fā)送給顯示列表存儲單元進(jìn)行存儲和3D功能執(zhí)行單元進(jìn)行命令執(zhí)行。當(dāng)圖形處理器收到調(diào)用顯示列表命令時(shí),圖形處理器從顯示列表存儲單元獲取對應(yīng)的顯示列表命令,并將其發(fā)送到3D功能單元執(zhí)行。當(dāng)圖形處理器收到刪除顯示列表命令時(shí),圖形處理器釋放對應(yīng)顯示列表的存儲空間。
1.1 傳統(tǒng)的顯示列表實(shí)現(xiàn)方式
傳統(tǒng)的顯示列表實(shí)現(xiàn)方式中,每一條圖形處理指令都在對應(yīng)的功能單元執(zhí)行。這樣的實(shí)現(xiàn)方式方便了顯示列表的存儲、調(diào)用,但卻在很大程度上增加了圖形處理器的硬件資源開銷,增大了芯片的整體功耗[4],而且浪費(fèi)了主機(jī)處理器的處理性能。
例如曲線曲面功能,需要根據(jù)用戶規(guī)定的控制點(diǎn)信息,通過Bernstein多項(xiàng)式計(jì)算出繪制點(diǎn)信息,并按照點(diǎn)的處理方式進(jìn)行剪裁、消隱、歸一化等處理并最終繪制出來。若采用硬件方式實(shí)現(xiàn),需要實(shí)現(xiàn)階乘等超越函數(shù),對硬件資源的開銷較大,浪費(fèi)了主機(jī)處理器的處理性能[5]。
1.2 軟硬件協(xié)同方式
HKM9000圖形處理器是中航工業(yè)計(jì)算所自主研發(fā)的一款功能性能與ALT-M9相當(dāng)?shù)膱D形處理器。文中以HKM9000圖形處理器為設(shè)計(jì)載體,設(shè)計(jì)方法的應(yīng)用不局限于某款圖形處理器。
在HKM9000圖形處理器設(shè)計(jì)中,將圖形處理命令進(jìn)行分類,曲線曲面功能、頂點(diǎn)數(shù)組功能及查詢類相關(guān)功能由主機(jī)軟件實(shí)現(xiàn);其他功能由硬件電路實(shí)現(xiàn),因此需要將顯示列表命令分為軟件記錄和硬件記錄。軟件記錄占用主處理器的空間,可由用戶分配,硬件記錄占用圖形處理器內(nèi)的存儲空間,由顯示存儲單元分配空間。這種設(shè)計(jì)方式極大地提高了圖形指令設(shè)計(jì)的靈活性。
2.1 顯示列表數(shù)據(jù)管理
顯示列表存儲數(shù)據(jù)包括硬件數(shù)據(jù)節(jié)點(diǎn)和軟件數(shù)據(jù)節(jié)點(diǎn)。軟件數(shù)據(jù)節(jié)點(diǎn)需要進(jìn)行軟件空閑節(jié)點(diǎn)池管理,記錄軟件節(jié)點(diǎn)函數(shù)、函數(shù)參數(shù)及后續(xù)節(jié)點(diǎn)號;硬件數(shù)據(jù)節(jié)點(diǎn)需要進(jìn)行硬件空閑節(jié)點(diǎn)池管理,記錄硬件節(jié)點(diǎn)地址和數(shù)據(jù)量及后續(xù)節(jié)點(diǎn)號。
對軟件記錄進(jìn)行數(shù)據(jù)管理如下所示:
typedef struct
{/*指向軟件實(shí)現(xiàn)函數(shù)的函數(shù)指針*/
GLVoid (*Func_Pointer)(Glvoid);
/*函數(shù)指針映射表的項(xiàng)數(shù)*/
GLin Func_Pointer_num;
/*記錄指向函數(shù)的參數(shù)*/
GLFloat Params[SW_API_PAMS_NUM];
/*指向當(dāng)前軟件記錄節(jié)點(diǎn)的下一個節(jié)點(diǎn)*/
GLushort Next;
}ST_SW_NODE;
typedef struct
{/*記錄顯示列表中空閑軟件節(jié)點(diǎn)個數(shù)*/
Glushort SW_Idle_Cnt;
/*記錄顯示列表中空閑軟件節(jié)點(diǎn)頭*/
Glushort SW_Idle_Head;
/*記錄顯示列表中空閑軟件節(jié)點(diǎn)尾*/
Glushort SW_Idle_Tail;
/*記錄軟件實(shí)現(xiàn)的API在顯示列表中的信息*/
ST_SW_NODE SW_Node[SW_API_SIZE];
}ST_SW_NODE_INFO;
對硬件記錄進(jìn)行數(shù)據(jù)管理如下所示:
typedef struct
{/*保存顯示列表號*/
GLuint NewList_Num;
/*保存對應(yīng)的首節(jié)點(diǎn)號*/
Glushort Node_Num;
/*顯示列表是否可用*/
GLboolean NewList_Enable;
}ST_NEWLIST_NODE;
typedef struct
{/*當(dāng)前節(jié)點(diǎn)中存儲的API個數(shù)*/
GLubyte Size;
/*指向當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn)*/
GLushort Next;
}ST_CALLLIST_NODE;
2.2 顯示列表資源
經(jīng)測試,ALT-M9內(nèi)部能存放約200萬條OpenGL命令,所以在HKM9000圖形處理器內(nèi)部分配50 MB的存儲空間,最多能夠存儲1 638 400條圖形處理指令,其處理能力與ALT-M9相當(dāng)。
顯示列表可供支配的資源如圖2所示,包括51 201個可被記錄的顯示列表NewList節(jié)點(diǎn)、51 200個硬件記錄的頁,及2 000個軟件記錄的函數(shù)節(jié)點(diǎn)。
2.2.1 NewList節(jié)點(diǎn)
當(dāng)定義顯示列表時(shí),首先判斷當(dāng)前的顯示列表號在NewList節(jié)點(diǎn)中是否已被占用:若已被占用但節(jié)點(diǎn)號不相同,則當(dāng)前顯示列表定義不成功;若已被占用且節(jié)點(diǎn)號相同則需要先刪除之前的顯示列表釋放占用空間,再記錄當(dāng)前定義的顯示列表;若節(jié)點(diǎn)號未被占用,則當(dāng)前顯示列表可定義。
圖2 顯示列表資源
2.2.2 硬件空閑頁節(jié)點(diǎn)
為了方便存儲空間尋址和內(nèi)存管理,采用頁式管理的方法,將50 MB的GPU存儲空間劃分為50K個1 kB大小的頁,每一頁最多可存儲32條圖形指令,且每一頁只能對應(yīng)唯一的顯示列表。當(dāng)多個節(jié)點(diǎn)對應(yīng)一個顯示列表時(shí),各節(jié)點(diǎn)按照定義順序依次組成節(jié)點(diǎn)鏈[6]。
硬件空閑節(jié)點(diǎn)池由頭尾指針維護(hù),顯示列表定義時(shí)從頭指針處獲取硬件空閑節(jié)點(diǎn),顯示列表刪除時(shí)從尾指針處添加已釋放的空閑節(jié)點(diǎn)[7]。
2.2.3 軟件空閑節(jié)點(diǎn)
軟件空閑節(jié)點(diǎn)的使用及管理方式與硬件空閑頁節(jié)點(diǎn)類似,用來記錄軟件方式實(shí)現(xiàn)的顯示列表函數(shù),軟件節(jié)點(diǎn)占用主處理器的存儲空間可在使用時(shí)靈活調(diào)整。
2.3 顯示列表設(shè)計(jì)與實(shí)現(xiàn)
顯示列表各接口按照實(shí)現(xiàn)功能分為軟件實(shí)現(xiàn)和軟硬件協(xié)同實(shí)現(xiàn)。
2.3.1 glGenLists函數(shù)
GLuint glGenLists(GLsizei range)圖形命令由軟件實(shí)現(xiàn),返回在0到最大整數(shù)之間range個連續(xù)的數(shù),作為可用現(xiàn)實(shí)列表號的選擇。
2.3.2 glNewList/glEndList函數(shù)
void glNewList(GLuint list,GLenum mode)/ void glEndList(void)圖形指令由硬件實(shí)現(xiàn),它們指定了當(dāng)前要聲明的顯示列表及顯示列表內(nèi)包含的圖形指令。首先在NewList節(jié)點(diǎn)中查找下標(biāo)為list的節(jié)點(diǎn)中存儲的顯示列表號,若與當(dāng)前定義的顯示列表號相同,則刪除之前定義的顯示列表并釋放其占用的空間節(jié)點(diǎn),否則當(dāng)前NewList節(jié)點(diǎn)被占用,顯示列表定義失敗。
顯示列表空間按照頁式管理,每個顯示列表所占用的空間可在NewList節(jié)點(diǎn)號對應(yīng)的后續(xù)節(jié)點(diǎn)中查找。為方便顯示列表的數(shù)據(jù)調(diào)用與地址查找[8],更新圖形指令接口如下:void glNewList(GLuint addr,GLenum mode,GLuint size)。其中,addr表示當(dāng)前使用的節(jié)點(diǎn)號,mode表示當(dāng)前顯示列表類型,size表示當(dāng)前節(jié)點(diǎn)號中包括的命令條數(shù)。顯示列表按照API的實(shí)現(xiàn)方式來分配當(dāng)前的顯示列表空間。
2.3.3 glListBase函數(shù)
void glListBase(GLuint base)由軟件實(shí)現(xiàn),它將顯示列表索引數(shù)組按照指定的偏移進(jìn)行排序,并最終由顯示列表調(diào)用。
2.3.4 glCallList/glCallLists函數(shù)
void glCallList(GLuint list)/void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)用于調(diào)用顯示列表,glCallList函數(shù)功能由硬件實(shí)現(xiàn),根據(jù)調(diào)用的顯示列表號來查找NewList節(jié)點(diǎn)中對應(yīng)的節(jié)點(diǎn)數(shù)據(jù)。若與調(diào)用的顯示列表號相等,查找后續(xù)鏈接的節(jié)點(diǎn)并依次調(diào)用,調(diào)用的函數(shù)接口更新為:void glCallList(GLuint addr,GLuint size),更方便于數(shù)據(jù)調(diào)用與地址查找。glCallLists封裝glCallList實(shí)現(xiàn)[9],依次按照顯示列表索引數(shù)組獲得當(dāng)前調(diào)用號并查找NewList節(jié)點(diǎn)計(jì)算。
2.3.5 glDeleteLists函數(shù)
void glDeleteLists(GLuint list,GLsizei range)功能是刪除已定義的顯示列表。它由軟件實(shí)現(xiàn),先查找顯示列表索引判斷當(dāng)前的顯示列表是否存在,對于存在的顯示列表,釋放鏈接節(jié)點(diǎn)的地址空間,并在軟/硬件空閑節(jié)點(diǎn)池中存儲,以備后續(xù)調(diào)用。
2.3.6 glIsList函數(shù)
GLboolean glIsList(GLuint list)功能是查詢當(dāng)前號是否為一個顯示列表號。它由軟件實(shí)現(xiàn),通過遍歷NewList節(jié)點(diǎn)查找是否有對應(yīng)的號,若有則當(dāng)前號是一個顯示列表號,否則不是。
為評估以上設(shè)計(jì)中顯示列表的功能及性能,搭建HKM9000 FPGA驗(yàn)證平臺與ALT-M9圖形處理器進(jìn)行對比實(shí)驗(yàn)。
HKM9000 FPGA原型測試平臺如圖3所示。
圖3 HKM9000 FPGA驗(yàn)證平臺
將經(jīng)過編譯、綜合后生成的邏輯bin文件加載到FPGA原型系統(tǒng)中[10],主機(jī)端運(yùn)行圖形繪制軟件,圖形處理驅(qū)動程序?qū)⑸蠈拥膱D形應(yīng)用程序翻譯為硬件可識別的命令碼流,通過PCI總線將命令碼流傳輸給HKM9000原型系統(tǒng),并在其上執(zhí)行功能,最終的結(jié)果由顯控單元輸出到顯示器上[11]。
軟硬件測試環(huán)境如表1所示。
表1 軟硬件測試環(huán)境
3.1 功能測試
功能測試結(jié)果如圖4所示。
圖4 顯示列表功能測試效果圖
在HKM9000 FPGA平臺上測試了顯示列表的定義、調(diào)用、查詢及刪除操作,其繪圖結(jié)果與返回值與ALT-M9平臺一致,基本功能實(shí)現(xiàn)正確。
3.2 性能測試
性能測試結(jié)果如圖5所示。
圖5 顯示列表接口性能測試
測試結(jié)果為100萬次調(diào)用的平均運(yùn)行時(shí)間。從結(jié)果可以看出,HKM9000圖形處理器上顯示列表接口的處理性能與ALT-M9平臺下的性能基本相當(dāng),其中某些接口的處理性能還要優(yōu)于ALT-M9平臺[12]。
文中介紹了圖形處理器中的顯示列表功能,在分析ALT-M9芯片功能性能的基礎(chǔ)上,提出了一種軟硬件結(jié)合方式來實(shí)現(xiàn)顯示列表功能的方法[13]。該方法充分利用了圖形處理的顯示列表空間,靈活地適用于多種圖形處理接口實(shí)現(xiàn)方式[14],具有可靠性高、編程靈活、易于實(shí)現(xiàn)、易于維護(hù)、成本低廉等優(yōu)點(diǎn)。
[1] 譚顯強(qiáng).基于FPGA的3D圖形處理器IP核的設(shè)計(jì)與實(shí)現(xiàn)[D].南京:南京航空航天大學(xué),2010.
[2] Sefraoui O,Aissaoui M,Eleuldj M.Openstack:toward an open-source solution for cloud computing[J].International Journal of Computer Applications,2012,55(3):38-42.
[3] Nvidia.Dedicated GPU technology for virtual desktops[EB/OL].[2013-11-05].http://www.nvidia.com/object/dedicated-gpus.html.
[4] Lindholm E,Nickolls J,Oberman S,et al.Nvidia tesla:a unified graphics and computing architecture[J].IEEE Micro,2008,28(2):39-55.
[5] Brodtkorb A R,Hagen T R,Stra M L.Graphics Processing Unit (GPU) programming strategies and trends in GPU computing[J].Journal of Parallel and Distributed Computing,2013,73(1):4-13.
[6] 邱 航,陳雷霆.基于點(diǎn)的計(jì)算機(jī)圖形學(xué)研究與進(jìn)展[J].計(jì)算機(jī)科學(xué),2009,36(6):10-15.
[7] Shreiner D.OpenGL編程指南[M].第6版.北京:機(jī)械工業(yè)出版社,2009.
[8] Shreiner D,Woo M,Neider J,et al.OpenGL編程指南[M].李 軍,徐 波,譯.第7版.北京:機(jī)械工業(yè)出版社,2010:77-79.
[9] James F,Andriesvan D,Steven K,et al.計(jì)算機(jī)圖形學(xué)導(dǎo)論[M].董士海,唐澤圣,李 華,等,譯.北京:機(jī)械工業(yè)出版社,2004.
[10] 武 丹,許如星.淺析《計(jì)算機(jī)圖形學(xué)》中線裁剪算法的講授方法[J].科技創(chuàng)新導(dǎo)報(bào),2009(30):182-182.
[11] 韓俊剛,蔣 林,杜慧敏,等.一種圖形加速器和著色器的體系結(jié)構(gòu)[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2010,22(3):363-372.
[12] 楊 毅.面向移動設(shè)備的真實(shí)感圖形處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].合肥:中國科技大學(xué),2008.
[13] 劉 鑫,蔣 林.2D圖形加速器設(shè)計(jì)與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2013,30(6):75-79.
[14] 盧 俊,顏 哲,田 澤.一種高效GPU存儲系統(tǒng)體系架構(gòu)設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2015,25(4):6-9.
Design and Realization of Display List Function in Graph Process
LIU Hui1,2,TIAN Ze1,2,MA Cheng-cheng1,2,ZHANG Jun1,2,XUE Ling-yi3
(1.Aeronautical Computing Technique Research Institute,Xi’an 710068,China; 2.Key Lab of Aeronautics Science and Technology of Integrate Circuit and Micro-system Design, Xi’an 710068,China; 3.Xiangteng Micro-electronics Technology Co.,Ltd.,Xi’an 710068,China)
Display list is the core function of 3D process engine in GPU,through storing a number of graph commands to GPU to complete repeat drawing for the same object in complex scene.It reduces the amount of data between CPU and GPU in a large degree,and lows pressure of data bandwidth and draws complex scene efficiently.Based on FPGA system built by Xilinx XC7VX1140T,taking a consideration in the capability of ALT-M9 chip,a method of collaborating hardware and software in display list design and realization is proposed.This method makes full use of the ability with CPU and GPU to complie the display list flexibly based on different way in graph commands realization.Verification results show that performance of collaborating hardware and software in display list is superior,with flexible the space allocation management and high reliability.
GPU;OpenGL;display list;memory management
2015-06-16
2015-09-22
時(shí)間:2016-03-22
中國航空工業(yè)集團(tuán)創(chuàng)新基金(2010BD63111)
劉 暉(1986-),男,碩士,研究方向?yàn)镾oC設(shè)計(jì)與驗(yàn)證;田 澤,研究員,研究方向?yàn)镾oC設(shè)計(jì)、嵌入式系統(tǒng)設(shè)計(jì)、VLSI設(shè)計(jì)。
http://www.cnki.net/kcms/detail/61.1450.TP.20160322.1517.012.html
TP39
A
1673-629X(2016)04-0119-04
10.3969/j.issn.1673-629X.2016.04.026