前言:想要寫出一篇引人入勝的文章?我們特意為您整理了圖形命令大規(guī)模并行程序設(shè)計(jì)方法范文,希望能給你帶來(lái)靈感和參考,敬請(qǐng)閱讀。
摘要:超長(zhǎng)圖形流水線中圖形命令執(zhí)行的并行度直接制約圖形處理的繪圖及計(jì)算性能,圖形命令解析程序完成圖形接口到硬件可識(shí)別任務(wù)的映射,通過(guò)圖形繪制接口的特征分類與特征提取,提出一種滿足圖形指令功能解析、符合圖形流水線任務(wù)映射的編程結(jié)構(gòu)和程序設(shè)計(jì)方法,加速了圖形命令處理,并通過(guò)分析任務(wù)的處理流程與特征,設(shè)計(jì)了運(yùn)行管理、中斷管理與低功耗管理,提高了程序設(shè)計(jì)及功能執(zhí)行的健壯性與時(shí)效性。
關(guān)鍵詞:圖形命令;大規(guī)模并行;命令處理器
引言
從1999年第一款圖形處理器誕生起,圖形處理架構(gòu)發(fā)展經(jīng)歷了固定管線架構(gòu)、分離染色器可編程架構(gòu)和大規(guī)模統(tǒng)一染色陣列架構(gòu),提供的圖形繪制能力、計(jì)算能力大幅提升,因其卓越的數(shù)據(jù)處理性能,圖形處理技術(shù)廣泛應(yīng)用于顯示系統(tǒng)、視覺計(jì)算、自動(dòng)駕駛、目標(biāo)識(shí)別與跟蹤、人工智能等領(lǐng)域。圖形繪制的編程模式如圖1所示,圖形應(yīng)用程序通過(guò)調(diào)用標(biāo)準(zhǔn)的圖形繪制接口完成場(chǎng)景繪制,圖形處理器接收標(biāo)準(zhǔn)圖形繪制接口、處理、并將最終的像素?cái)?shù)據(jù)存儲(chǔ)在幀緩沖區(qū),經(jīng)由顯示器輸出顯示畫面。目前常用的3D圖形處理接口標(biāo)準(zhǔn)包括OpenGL和DirectX接口標(biāo)準(zhǔn)。
1圖形命令特征分析
標(biāo)準(zhǔn)圖形任務(wù)處理標(biāo)準(zhǔn)接口眾多且不斷發(fā)展,但并未對(duì)圖形處理流水線提出本質(zhì)性的改變,各大廠商對(duì)圖形流水線的劃分基本遵循如圖2所示的結(jié)構(gòu)[1],只是在形處理流水線各單元功能細(xì)分或?qū)崿F(xiàn)方式上有所不同。
1.1圖形繪制接口特征分類
通過(guò)分析標(biāo)準(zhǔn)圖形繪制接口,將接口功能與圖形處理流水線進(jìn)行功能映射,按照繪圖接口的作用范圍及實(shí)現(xiàn)功能,將圖形繪制接口分為如下三類:a)數(shù)據(jù)準(zhǔn)備類接口。完成圖形繪制之前的紋理數(shù)據(jù)加載、緩沖區(qū)數(shù)據(jù)加載、顯示列表數(shù)據(jù)加載等準(zhǔn)備工作。b)屬性配置類接口。標(biāo)準(zhǔn)圖形繪制接口中,約70%的接口函數(shù)都是用于完成某一類功能的參數(shù)配置或改變圖形流水線中某一單元的運(yùn)行狀態(tài),此類接口并不會(huì)直接的影響繪圖結(jié)果[2]。c)繪制類接口。包括頂點(diǎn)類繪制接口及像素類繪制接口,不會(huì)改變圖形流水線的狀態(tài),但直接影響最終的圖形繪制結(jié)果。頂點(diǎn)類繪制接口經(jīng)過(guò)頂點(diǎn)處理、幾何處理、光柵化、片段處理及像素處理,最后輸出顯示;像素類繪制接口只經(jīng)過(guò)像素處理,最后輸出顯示。
1.2圖形繪制接口特征提取
數(shù)據(jù)準(zhǔn)備類接口完成CPU與GPU之間的數(shù)據(jù)傳輸,分析OpenGL接口的特性可知,數(shù)據(jù)傳輸類接口與數(shù)據(jù)解析使用類接口分別實(shí)現(xiàn),所以在數(shù)據(jù)準(zhǔn)備類接口發(fā)起操作后不需要等待傳輸完成,即可執(zhí)行后續(xù)命令,直到相應(yīng)數(shù)據(jù)解析使用時(shí)再判斷數(shù)據(jù)傳輸完成狀態(tài),加快了指令之間的并行度,避免了不相關(guān)指令之間的相互等待而造成的資源浪費(fèi)[3]。屬性配置類接口所占的比例很高,執(zhí)行效率直接影響繪圖效率,若采用串行執(zhí)行的方式實(shí)現(xiàn),既浪費(fèi)硬件資源又影響接口的處理性能,結(jié)合屬性配置類接口不直接影響繪圖結(jié)果,僅配置相關(guān)模塊屬性狀態(tài)的特點(diǎn),采用流水線資源鎖和并行屬性配置的方式實(shí)現(xiàn),減少了屬性配置類接口之間的等待時(shí)間,統(tǒng)一了實(shí)現(xiàn)方式,加快了圖形流水線的運(yùn)行。繪制類接口類型眾多、參數(shù)數(shù)量多變,為了加快數(shù)據(jù)傳輸與數(shù)據(jù)解析的效率,采用變長(zhǎng)指令、固定格式指令解析的方法[4],即統(tǒng)一接口類型及參數(shù)數(shù)量,但不限制數(shù)據(jù)體的個(gè)數(shù)(只規(guī)定數(shù)據(jù)體個(gè)數(shù)的最大最小值),加速繪制類接口的數(shù)據(jù)傳輸,減少接口解析消耗。
1.3圖形繪制接口的解析方式
根據(jù)圖形繪制接口的解析特征,實(shí)現(xiàn)如下兩種命令格式,用于映射各種圖形任務(wù)的組合。類型1配置類圖形命令配置類圖形命令實(shí)現(xiàn)數(shù)據(jù)準(zhǔn)備類接口和屬性配置類接口,其命令格式如下所示,其中命令包頭包括接口類型編碼,用于識(shí)別當(dāng)前命令的類型;接口參數(shù)個(gè)數(shù),提供當(dāng)前命令所攜帶的參數(shù)信息;參數(shù)信息存儲(chǔ)首地址,用于配置圖形屬性寄存器。命令格式1:接口類型+參數(shù)信息+數(shù)據(jù)體1+…+數(shù)據(jù)體N類型2數(shù)據(jù)類圖形命令數(shù)據(jù)類命令實(shí)現(xiàn)繪制類接口,由于圖形繪制類接口類型及參數(shù)類型眾多,如glVertex類型的命令包括了三種接口類型及八種數(shù)據(jù)類型,為了便于實(shí)現(xiàn)及統(tǒng)一管理,不同接口類型的格式轉(zhuǎn)換及類型轉(zhuǎn)換由主機(jī)驅(qū)動(dòng)完成,命令解析程序只針對(duì)特定一種格式進(jìn)行解析。命令格式如下所示,其中命令包頭包括接口類型編碼,用于識(shí)別當(dāng)前命令的類型;接口參數(shù)個(gè)數(shù),提供當(dāng)前命令所攜帶的參數(shù)信息;參數(shù)信息分量個(gè)數(shù),用于指定當(dāng)前繪制類接口一套屬性所攜帶的參數(shù)個(gè)數(shù);參數(shù)信息存儲(chǔ)首地址,用于配置圖形屬性寄存器。命令格式2:接口類型+參數(shù)信息+參數(shù)分量信息+數(shù)據(jù)體1+…+數(shù)據(jù)體N
2圖形命令解析染色程序結(jié)構(gòu)設(shè)計(jì)
圖形應(yīng)用程序特征如圖3所示,數(shù)據(jù)準(zhǔn)備類接口、屬性配置類接口用于完成圖形狀態(tài)機(jī)的數(shù)據(jù)準(zhǔn)備及狀態(tài)配置,繪制類接口用于發(fā)送繪圖操作生成新的頂點(diǎn)數(shù)據(jù)及像素?cái)?shù)據(jù)。因此圖形命令解析的染色程序主要是針對(duì)數(shù)據(jù)準(zhǔn)備類接口、屬性配置類接口的任務(wù)特征,高效完成圖形狀態(tài)機(jī)的設(shè)置,提高圖形繪制的速率。根據(jù)處理任務(wù)的特征,采用RISC處理器+匯編驅(qū)動(dòng)軟件來(lái)完成圖形接口任務(wù)的解析,保證了任務(wù)擴(kuò)展的靈活性與解析處理的高效性[5]。
2.1圖形命令解析程序功能設(shè)計(jì)
圖形命令解析是將標(biāo)準(zhǔn)的圖形接口解析為多個(gè)獨(dú)立、圖形處理硬件可識(shí)別的圖形處理任務(wù),由圖形流水單元完成圖形任務(wù)的執(zhí)行。其處理流程如下:a)接收從主機(jī)傳輸?shù)膱D形命令。b)識(shí)別圖形命令,判斷當(dāng)前命令的合法性。c)若為合法命令,進(jìn)行圖形命令解析,包括圖形屬性寄存器配置、DMA配置、圖形功能碼發(fā)送,圖形狀態(tài)同步等操作;若為非法命令,進(jìn)行數(shù)據(jù)記錄、錯(cuò)誤信息記錄。其中:圖形命令接收、識(shí)別、判斷合法性、圖形任務(wù)映射解析及錯(cuò)誤信息記錄由軟件實(shí)現(xiàn),保證圖形接口處理的靈活性,可擴(kuò)展性;圖形任務(wù)的執(zhí)行由硬件實(shí)現(xiàn),保證功能的高效性與實(shí)時(shí)性,其流程如圖4所示。圖形命令解析軟件偽代碼結(jié)構(gòu)如下所示:在匯編代碼中以上所示的偽代碼進(jìn)行編碼存在如下幾個(gè)問(wèn)題:a)獲取到命令后匹配操作效率低,第一條命令需要進(jìn)行一次判斷,第n次操作需要作n次判斷,平均匹配一條命令需要2/n次判斷;b)圖形指令的發(fā)送時(shí)機(jī)與圖形流水線中各單元狀態(tài)相關(guān),若每條圖形指令都等待上一條指令執(zhí)行完成,執(zhí)行效率較低;c)針對(duì)不同的應(yīng)用場(chǎng)景,驅(qū)動(dòng)的函數(shù)排布影響RISC處理器的取指效率、指令存儲(chǔ)缺頁(yè)率,頻繁的指令頁(yè)替換會(huì)導(dǎo)致訪存效率低下[6]。針對(duì)以上問(wèn)題,對(duì)驅(qū)動(dòng)軟件進(jìn)行的優(yōu)化操作如下:a)在每條命令包頭中增加繪圖函數(shù)的入口地址信息,采用哈希跳轉(zhuǎn)的方式,當(dāng)識(shí)別到繪圖命令后,直接跳轉(zhuǎn)到相應(yīng)命令的入口地址或在命令中入口地址信息,位數(shù)較少時(shí)采用二次跳轉(zhuǎn)實(shí)現(xiàn),實(shí)現(xiàn)結(jié)構(gòu)如圖5所示,相較串行查找,哈希跳轉(zhuǎn)查找提高了執(zhí)行效率。b)定義圖形流水線中各單元的狀態(tài),當(dāng)接收到一條繪圖命令后,根據(jù)包頭信息識(shí)別當(dāng)前命令,且只判斷當(dāng)前繪圖命令起作用的單元及流水線中之前的單元都為空閑,則當(dāng)前繪圖命令具備發(fā)送處理的前提,可以發(fā)送的圖形流水線中進(jìn)行處理[7]。例如glClip⁃Plane命令在平面裁剪單元起作用,因此只需要判斷圖形流水線中模型變換單元、頂點(diǎn)光照單元、圖元裝配單元及平面裁剪單元都空閑時(shí),才能夠發(fā)送glClipPlane命令。c)在特定場(chǎng)景時(shí),使用的繪圖函數(shù)是固定的,因此可以根據(jù)具體的應(yīng)用場(chǎng)景掃描得到函數(shù)的API種類及調(diào)用次數(shù),指令CACHE頁(yè)大小及CACHE調(diào)度策略,排布驅(qū)動(dòng)程序,減少驅(qū)動(dòng)代碼量,降低CACHE缺頁(yè)率[8]。
2.2圖形命令解析任務(wù)管理設(shè)計(jì)
圖形命令解析任務(wù)管理覆蓋了RISC運(yùn)行過(guò)程中運(yùn)行狀態(tài)管理、錯(cuò)誤管理、中斷處理及低功耗管理[9],在提供圖形命令解析性能的同時(shí),加強(qiáng)了健壯性設(shè)計(jì),可靠性設(shè)計(jì),提升了有效功耗比。
2.2.1運(yùn)行流程管理為了保證RISC程序運(yùn)行結(jié)果的可預(yù)期,將運(yùn)行流程分為五種狀態(tài)進(jìn)行管理。上電后先加載染色器程序,加載完成后RISC處理器開始運(yùn)行,根據(jù)程序的運(yùn)行過(guò)程將RISC處理器的運(yùn)行狀態(tài)分為自檢狀態(tài)、初始化狀態(tài)、空閑狀態(tài)、解析命令狀態(tài)、錯(cuò)誤狀態(tài)。RISC處理運(yùn)行首先進(jìn)行上電自檢,上電自檢內(nèi)容包括了指令集、可訪問(wèn)資源、處理通路等,是保證處理器正常運(yùn)行最基本的檢測(cè)行為,若自檢未通過(guò),則進(jìn)入錯(cuò)誤狀態(tài)。在初始化狀態(tài)中,軟件配置通用寄存器、圖形屬性參數(shù)、片上存儲(chǔ)信息等為繪圖接口規(guī)定的初始值,完成參數(shù)準(zhǔn)備。初始化完成后,當(dāng)RISC接收到需要處理的圖形命令即進(jìn)入解析命令狀態(tài),解析完成后若沒(méi)有新的需要處理的圖形命令即進(jìn)入空閑狀態(tài),在執(zhí)行解析處理的過(guò)程中若發(fā)生錯(cuò)誤則進(jìn)入錯(cuò)誤狀態(tài)。以軟件插樁的方式將狀態(tài)信息的設(shè)置分布在圖形命令解析處理的過(guò)程中。
2.2.2中斷管理圖形命令解析過(guò)程中可能因?yàn)橘Y源鎖狀態(tài)、FIFO狀態(tài)、DMA資源狀態(tài)等條件無(wú)法滿足而導(dǎo)致命令解析的超長(zhǎng)等待時(shí)間,進(jìn)而會(huì)將圖形流水線掛死。因此采用中斷處理方式,在開始解析命令時(shí)配置看門狗使能及計(jì)數(shù)信息,在解析命令結(jié)束時(shí)禁止看門狗功能,以此來(lái)約束圖形命令解析的時(shí)間[10]。當(dāng)出現(xiàn)超時(shí)中斷,進(jìn)行現(xiàn)場(chǎng)信息記錄,判斷中斷原因及類型,并進(jìn)行相應(yīng)的中斷處理。
2.2.3低功耗管理在高性能圖形處理器運(yùn)行過(guò)程中,并不是所有的命令都需要通過(guò)RISC解析處理,因此在多數(shù)場(chǎng)景下RISC解析執(zhí)行是不連續(xù)的,在不需要解析處理時(shí)RISC處理器會(huì)進(jìn)入低功耗模式[11],不進(jìn)行取指、譯碼等操作,直到有圖形命令喚醒RISC處理器從指定地址執(zhí)行解析操作。RISC處理器的狀態(tài)遷移如圖6所示。
3圖形命令解析染色程序驗(yàn)證
面向圖形命令解析染色程序運(yùn)行機(jī)制及實(shí)現(xiàn)功能,將驗(yàn)證內(nèi)容分為染色程序通路驗(yàn)證、染色程序命令解析驗(yàn)證、染色程序管理驗(yàn)證[12]。染色程序通路驗(yàn)證覆蓋染色程序的每一個(gè)分支處理通路,保證圖形命令解析過(guò)程數(shù)據(jù)處理的正確性;染色程序命令解析驗(yàn)證覆蓋圖形命令及參數(shù)與染色程序通路之間的對(duì)應(yīng)關(guān)系,確保圖形命令解析任務(wù)的正確性;染色程序管理驗(yàn)證包括了運(yùn)行流程管理、中斷管理等功能,驗(yàn)證染色程序運(yùn)行的正確性、健壯性、可監(jiān)控性。染色程序功能驗(yàn)證示例如圖7所示,覆蓋了圖形流水線的典型功能。
4結(jié)束語(yǔ)
超長(zhǎng)流水線中斷流與訪存等待延時(shí)等原因極大地影響了流水線的執(zhí)行效率。本文在分析圖形流水線功能劃分,圖形命令任務(wù)映射,圖形訪存屬性特征的基礎(chǔ)上,提出了一種可并行的圖形命令解析程序設(shè)計(jì)方法,通過(guò)將命令任務(wù)逐類分解,減少不相關(guān)命令之間的等待延時(shí)等操作,提高了任務(wù)的并行性,加速了流水線任務(wù)處理,實(shí)現(xiàn)了低延時(shí),高效率的圖形任務(wù)解析。
作者:劉暉 田澤 張琛 蘇東閣 單位:中國(guó)航空工業(yè)西安航空計(jì)算技術(shù)研究所