公務員期刊網(wǎng) 論文中心 正文

圖形命令大規(guī)模并行程序設計方法

前言:想要寫出一篇引人入勝的文章?我們特意為您整理了圖形命令大規(guī)模并行程序設計方法范文,希望能給你帶來靈感和參考,敬請閱讀。

圖形命令大規(guī)模并行程序設計方法

摘要:超長圖形流水線中圖形命令執(zhí)行的并行度直接制約圖形處理的繪圖及計算性能,圖形命令解析程序完成圖形接口到硬件可識別任務的映射,通過圖形繪制接口的特征分類與特征提取,提出一種滿足圖形指令功能解析、符合圖形流水線任務映射的編程結構和程序設計方法,加速了圖形命令處理,并通過分析任務的處理流程與特征,設計了運行管理、中斷管理與低功耗管理,提高了程序設計及功能執(zhí)行的健壯性與時效性。

關鍵詞:圖形命令;大規(guī)模并行;命令處理器

引言

從1999年第一款圖形處理器誕生起,圖形處理架構發(fā)展經(jīng)歷了固定管線架構、分離染色器可編程架構和大規(guī)模統(tǒng)一染色陣列架構,提供的圖形繪制能力、計算能力大幅提升,因其卓越的數(shù)據(jù)處理性能,圖形處理技術廣泛應用于顯示系統(tǒng)、視覺計算、自動駕駛、目標識別與跟蹤、人工智能等領域。圖形繪制的編程模式如圖1所示,圖形應用程序通過調(diào)用標準的圖形繪制接口完成場景繪制,圖形處理器接收標準圖形繪制接口、處理、并將最終的像素數(shù)據(jù)存儲在幀緩沖區(qū),經(jīng)由顯示器輸出顯示畫面。目前常用的3D圖形處理接口標準包括OpenGL和DirectX接口標準。

1圖形命令特征分析

標準圖形任務處理標準接口眾多且不斷發(fā)展,但并未對圖形處理流水線提出本質(zhì)性的改變,各大廠商對圖形流水線的劃分基本遵循如圖2所示的結構[1],只是在形處理流水線各單元功能細分或實現(xiàn)方式上有所不同。

1.1圖形繪制接口特征分類

通過分析標準圖形繪制接口,將接口功能與圖形處理流水線進行功能映射,按照繪圖接口的作用范圍及實現(xiàn)功能,將圖形繪制接口分為如下三類:a)數(shù)據(jù)準備類接口。完成圖形繪制之前的紋理數(shù)據(jù)加載、緩沖區(qū)數(shù)據(jù)加載、顯示列表數(shù)據(jù)加載等準備工作。b)屬性配置類接口。標準圖形繪制接口中,約70%的接口函數(shù)都是用于完成某一類功能的參數(shù)配置或改變圖形流水線中某一單元的運行狀態(tài),此類接口并不會直接的影響繪圖結果[2]。c)繪制類接口。包括頂點類繪制接口及像素類繪制接口,不會改變圖形流水線的狀態(tài),但直接影響最終的圖形繪制結果。頂點類繪制接口經(jīng)過頂點處理、幾何處理、光柵化、片段處理及像素處理,最后輸出顯示;像素類繪制接口只經(jīng)過像素處理,最后輸出顯示。

1.2圖形繪制接口特征提取

數(shù)據(jù)準備類接口完成CPU與GPU之間的數(shù)據(jù)傳輸,分析OpenGL接口的特性可知,數(shù)據(jù)傳輸類接口與數(shù)據(jù)解析使用類接口分別實現(xiàn),所以在數(shù)據(jù)準備類接口發(fā)起操作后不需要等待傳輸完成,即可執(zhí)行后續(xù)命令,直到相應數(shù)據(jù)解析使用時再判斷數(shù)據(jù)傳輸完成狀態(tài),加快了指令之間的并行度,避免了不相關指令之間的相互等待而造成的資源浪費[3]。屬性配置類接口所占的比例很高,執(zhí)行效率直接影響繪圖效率,若采用串行執(zhí)行的方式實現(xià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)如下兩種命令格式,用于映射各種圖形任務的組合。類型1配置類圖形命令配置類圖形命令實現(xiàn)數(shù)據(jù)準備類接口和屬性配置類接口,其命令格式如下所示,其中命令包頭包括接口類型編碼,用于識別當前命令的類型;接口參數(shù)個數(shù),提供當前命令所攜帶的參數(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)一管理,不同接口類型的格式轉換及類型轉換由主機驅動完成,命令解析程序只針對特定一種格式進行解析。命令格式如下所示,其中命令包頭包括接口類型編碼,用于識別當前命令的類型;接口參數(shù)個數(shù),提供當前命令所攜帶的參數(shù)信息;參數(shù)信息分量個數(shù),用于指定當前繪制類接口一套屬性所攜帶的參數(shù)個數(shù);參數(shù)信息存儲首地址,用于配置圖形屬性寄存器。命令格式2:接口類型+參數(shù)信息+參數(shù)分量信息+數(shù)據(jù)體1+…+數(shù)據(jù)體N

2圖形命令解析染色程序結構設計

圖形應用程序特征如圖3所示,數(shù)據(jù)準備類接口、屬性配置類接口用于完成圖形狀態(tài)機的數(shù)據(jù)準備及狀態(tài)配置,繪制類接口用于發(fā)送繪圖操作生成新的頂點數(shù)據(jù)及像素數(shù)據(jù)。因此圖形命令解析的染色程序主要是針對數(shù)據(jù)準備類接口、屬性配置類接口的任務特征,高效完成圖形狀態(tài)機的設置,提高圖形繪制的速率。根據(jù)處理任務的特征,采用RISC處理器+匯編驅動軟件來完成圖形接口任務的解析,保證了任務擴展的靈活性與解析處理的高效性[5]。

2.1圖形命令解析程序功能設計

圖形命令解析是將標準的圖形接口解析為多個獨立、圖形處理硬件可識別的圖形處理任務,由圖形流水單元完成圖形任務的執(zhí)行。其處理流程如下:a)接收從主機傳輸?shù)膱D形命令。b)識別圖形命令,判斷當前命令的合法性。c)若為合法命令,進行圖形命令解析,包括圖形屬性寄存器配置、DMA配置、圖形功能碼發(fā)送,圖形狀態(tài)同步等操作;若為非法命令,進行數(shù)據(jù)記錄、錯誤信息記錄。其中:圖形命令接收、識別、判斷合法性、圖形任務映射解析及錯誤信息記錄由軟件實現(xiàn),保證圖形接口處理的靈活性,可擴展性;圖形任務的執(zhí)行由硬件實現(xiàn),保證功能的高效性與實時性,其流程如圖4所示。圖形命令解析軟件偽代碼結構如下所示:在匯編代碼中以上所示的偽代碼進行編碼存在如下幾個問題:a)獲取到命令后匹配操作效率低,第一條命令需要進行一次判斷,第n次操作需要作n次判斷,平均匹配一條命令需要2/n次判斷;b)圖形指令的發(fā)送時機與圖形流水線中各單元狀態(tài)相關,若每條圖形指令都等待上一條指令執(zhí)行完成,執(zhí)行效率較低;c)針對不同的應用場景,驅動的函數(shù)排布影響RISC處理器的取指效率、指令存儲缺頁率,頻繁的指令頁替換會導致訪存效率低下[6]。針對以上問題,對驅動軟件進行的優(yōu)化操作如下:a)在每條命令包頭中增加繪圖函數(shù)的入口地址信息,采用哈希跳轉的方式,當識別到繪圖命令后,直接跳轉到相應命令的入口地址或在命令中入口地址信息,位數(shù)較少時采用二次跳轉實現(xiàn),實現(xiàn)結構如圖5所示,相較串行查找,哈希跳轉查找提高了執(zhí)行效率。b)定義圖形流水線中各單元的狀態(tài),當接收到一條繪圖命令后,根據(jù)包頭信息識別當前命令,且只判斷當前繪圖命令起作用的單元及流水線中之前的單元都為空閑,則當前繪圖命令具備發(fā)送處理的前提,可以發(fā)送的圖形流水線中進行處理[7]。例如glClip⁃Plane命令在平面裁剪單元起作用,因此只需要判斷圖形流水線中模型變換單元、頂點光照單元、圖元裝配單元及平面裁剪單元都空閑時,才能夠發(fā)送glClipPlane命令。c)在特定場景時,使用的繪圖函數(shù)是固定的,因此可以根據(jù)具體的應用場景掃描得到函數(shù)的API種類及調(diào)用次數(shù),指令CACHE頁大小及CACHE調(diào)度策略,排布驅動程序,減少驅動代碼量,降低CACHE缺頁率[8]。

2.2圖形命令解析任務管理設計

圖形命令解析任務管理覆蓋了RISC運行過程中運行狀態(tài)管理、錯誤管理、中斷處理及低功耗管理[9],在提供圖形命令解析性能的同時,加強了健壯性設計,可靠性設計,提升了有效功耗比。

2.2.1運行流程管理為了保證RISC程序運行結果的可預期,將運行流程分為五種狀態(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ù)準備。初始化完成后,當RISC接收到需要處理的圖形命令即進入解析命令狀態(tài),解析完成后若沒有新的需要處理的圖形命令即進入空閑狀態(tài),在執(zhí)行解析處理的過程中若發(fā)生錯誤則進入錯誤狀態(tài)。以軟件插樁的方式將狀態(tài)信息的設置分布在圖形命令解析處理的過程中。

2.2.2中斷管理圖形命令解析過程中可能因為資源鎖狀態(tài)、FIFO狀態(tài)、DMA資源狀態(tài)等條件無法滿足而導致命令解析的超長等待時間,進而會將圖形流水線掛死。因此采用中斷處理方式,在開始解析命令時配置看門狗使能及計數(shù)信息,在解析命令結束時禁止看門狗功能,以此來約束圖形命令解析的時間[10]。當出現(xiàn)超時中斷,進行現(xiàn)場信息記錄,判斷中斷原因及類型,并進行相應的中斷處理。

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ù)與染色程序通路之間的對應關系,確保圖形命令解析任務的正確性;染色程序管理驗證包括了運行流程管理、中斷管理等功能,驗證染色程序運行的正確性、健壯性、可監(jiān)控性。染色程序功能驗證示例如圖7所示,覆蓋了圖形流水線的典型功能。

4結束語

超長流水線中斷流與訪存等待延時等原因極大地影響了流水線的執(zhí)行效率。本文在分析圖形流水線功能劃分,圖形命令任務映射,圖形訪存屬性特征的基礎上,提出了一種可并行的圖形命令解析程序設計方法,通過將命令任務逐類分解,減少不相關命令之間的等待延時等操作,提高了任務的并行性,加速了流水線任務處理,實現(xiàn)了低延時,高效率的圖形任務解析。

作者:劉暉 田澤 張琛 蘇東閣 單位:中國航空工業(yè)西安航空計算技術研究所

相關熱門標簽