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