聶 曌,何嘉文,馬城城,劉 暉
(西安航空計(jì)算技術(shù)研究所,陜西 西安 710119)
圖形處理器(Graphics Processing Unit,GPU)又稱顯示核心、視覺處理器和顯示芯片,其面向桌面環(huán)境、嵌入式領(lǐng)域和移動(dòng)設(shè)備,是一種可用來進(jìn)行繪圖運(yùn)算工作微處理器[1]。GPU的作用是將計(jì)算機(jī)系統(tǒng)所需要的顯示信息進(jìn)行繪圖計(jì)算,并將運(yùn)算的像素結(jié)果提供給顯示器,從而完成在顯示器上的繪制。因此,GPU作為計(jì)算機(jī)輸出系統(tǒng)的核心部件,是“人機(jī)對話”的重要設(shè)備[2]。
在計(jì)算機(jī)圖形處理的早期,繪圖任務(wù)全部由CPU(Central Pracessing Unit)完成。然而圖形處理需求呈幾何級(jí)數(shù)增長,單靠CPU已無法滿足應(yīng)用需求,此時(shí)GPU應(yīng)運(yùn)而生[3-5]。通過將繪圖任務(wù)轉(zhuǎn)交給GPU,使得CPU從繪制運(yùn)算中解放出來,釋放占用的CPU資源,提高了執(zhí)行效率,進(jìn)而提升整個(gè)系統(tǒng)的響應(yīng)能力[6]。從1999年NVIDIA發(fā)布第一款GPU產(chǎn)品至今,GPU的發(fā)展經(jīng)歷了固定功能流水線階段、分離染色器架構(gòu)階段和統(tǒng)一染色器架構(gòu)階段,其圖形處理能力不斷提升,應(yīng)用領(lǐng)域也從最初的圖形繪制逐步擴(kuò)展到通用計(jì)算領(lǐng)域。GPU憑借流水線高速、并行的特性和靈活的可編程能力,為圖形處理和通用并行計(jì)算提供了良好的支持[7-9]。
另一方面,伴隨著功能、性能的豐富和提高,以及靈活的可配置性和可編程性,GPU的配置內(nèi)容、步驟愈加復(fù)雜,使得GPU配置難度有所增加。種類繁多、步驟復(fù)雜且相互交織的配置過程降低了GPU使用開發(fā)中的易用性,給應(yīng)用開發(fā)人員帶來不必要的負(fù)擔(dān)和設(shè)計(jì)難度。因此,設(shè)計(jì)一個(gè)模塊清晰、使用便捷、易用的GPU配置管理系統(tǒng)極為重要。
圖形用戶界面(Graphical User Interface,GUI)軟件是一種人與計(jì)算機(jī)通信的界面顯示軟件,允許用戶使用鼠標(biāo)、鍵盤等輸入輸出設(shè)備操縱屏幕上的圖標(biāo)或菜單選項(xiàng),完成命令、調(diào)用文件、輸入、啟動(dòng)程序或執(zhí)行等計(jì)算機(jī)任務(wù)[10]。該界面使用戶不需要學(xué)習(xí)復(fù)雜的代碼,可僅通過圖形對象進(jìn)行操作,方便用戶使用,降低了用戶學(xué)習(xí)成本,也增強(qiáng)了系統(tǒng)的易用性。在桌面GUI編程中,微軟公司提供的基于NET開發(fā)平臺(tái)的WinForm(Windows Form)技術(shù)是一種方便、設(shè)計(jì)簡單的GUI編程模型,其具有以下3個(gè)特點(diǎn)[11]:(1)功能強(qiáng)大。WinForm可用于設(shè)計(jì)窗體和可視控件,創(chuàng)建豐富的基于 Windows 的應(yīng)用程序;(2)操作方便。提供易于連接 OLEDB 和 ODBC 數(shù)據(jù)源的數(shù)據(jù)控件;(3)使用安全。Windows 窗體充分利用了公共語言運(yùn)行庫(Common Language Runtime,CLR)的安全特性。
本文結(jié)合自研GPU芯片的配置內(nèi)容和流程步驟,使用WinForm桌面GUI技術(shù),通過設(shè)計(jì)與實(shí)現(xiàn)一種GPU配置管理系統(tǒng),充分發(fā)揮WinForm的技術(shù)優(yōu)勢,通過可視化界面生成配置文件,降低用戶的使用門檻和操作難度。開發(fā)人員不再需要過多了解GPU的配置流程和步驟,僅需通過鼠標(biāo)、鍵盤進(jìn)行點(diǎn)選和輸入即可完成配置操作,提高了GPU配置效率和系統(tǒng)的易用性。
針對GPU的軟硬件環(huán)境,配置管理系統(tǒng)可以劃分為GPU運(yùn)行時(shí)的軟件數(shù)據(jù)生成和硬件環(huán)境配置兩大模塊,包括開機(jī)/告警畫面生成、驅(qū)動(dòng)配置、匯編工具、光標(biāo)生成、接口配置和字庫工具等6個(gè)具體模板。其中,開機(jī)/告警畫面生成、匯編工具、光標(biāo)生成和字庫工具屬于軟件數(shù)據(jù)生成模塊,負(fù)責(zé)生成GPU運(yùn)行過程中所需要的數(shù)據(jù);驅(qū)動(dòng)配置和接口配置屬于GPU硬件環(huán)境配置模塊,是完成描述系統(tǒng)構(gòu)成的硬件組成。系統(tǒng)結(jié)構(gòu)如圖1所示。
(a)
軟件數(shù)據(jù)生成是通過GUI界面生成GPU運(yùn)行時(shí)需要的數(shù)據(jù)文件,按照數(shù)據(jù)類型分為圖片信息、匯編程序、光標(biāo)數(shù)據(jù)和字庫字模信息。開機(jī)/告警畫面負(fù)責(zé)將用戶給定的圖片按照設(shè)置的分辨率生成GPU內(nèi)部使用的自定義圖片數(shù)據(jù)格式的文件。匯編工具面向GPU可編程染色陣列,將編寫的染色器匯編程序編譯、鏈接為符合標(biāo)準(zhǔn)指令集的二進(jìn)制數(shù)據(jù)。光標(biāo)生成用來生成系統(tǒng)所提供的默認(rèn)光標(biāo)圖形,包括輸入、縮放、忙等待等的鼠標(biāo)外觀。字庫工具提供中英文字體的生成,包括內(nèi)建字體和外部字體,支持不同字號(hào)、斜體、下劃線、加粗等字體的修飾功能。
硬件環(huán)境配置負(fù)責(zé)GPU運(yùn)行前和運(yùn)行時(shí)與操作系統(tǒng)、硬件設(shè)備、系統(tǒng)環(huán)境有關(guān)的配置,包括驅(qū)動(dòng)配置和設(shè)備接口配置兩個(gè)部分。其中,驅(qū)動(dòng)配置負(fù)責(zé)運(yùn)行時(shí)主機(jī)驅(qū)動(dòng)的設(shè)置,包括操作系統(tǒng)類型、可擴(kuò)展的驅(qū)動(dòng)庫和調(diào)試信息等;接口配置負(fù)責(zé)硬件環(huán)境的設(shè)置,包括對主機(jī)接口、顯存、顯示控制和3D引擎等模塊的設(shè)置。
GPU配置管理系統(tǒng)包含的模塊及功能為:(1)開機(jī)/告警畫面,負(fù)責(zé)完成開機(jī)畫面和告警畫面的生成;(2)驅(qū)動(dòng)配置負(fù)責(zé)配置具體的操作系統(tǒng)、驅(qū)動(dòng)庫和調(diào)試信息;(3)匯編工具負(fù)責(zé)完成匯編程序到二進(jìn)制數(shù)據(jù)的轉(zhuǎn)換;(4)光標(biāo)生成負(fù)責(zé)生成用戶選擇的光標(biāo)數(shù)據(jù);(5)接口配置負(fù)責(zé)硬件環(huán)境的設(shè)置;(6)字庫工具。根據(jù)用戶配置,字庫工具生成給定的字體、類型和字號(hào)等信息。
開機(jī)/告警畫面負(fù)責(zé)將用戶提供的bmp圖片按照給定的分辨率生成為GPU可識(shí)別的內(nèi)部格式。使用時(shí),首先通過文件瀏覽器選擇開機(jī)/告警畫面的圖片路徑,確認(rèn)后在左側(cè)顯示預(yù)覽圖片。為了盡量節(jié)省嵌入式環(huán)境下的資源消耗,當(dāng)前開機(jī)/告警畫面僅支持320×320像素的圖片,且必須為bmp格式。然后,用戶根據(jù)需求從下拉菜單中選擇符合要求的分辨率(默認(rèn)1 024×768)來確定畫面的大小。最后,使用rgb格式配置背景色和前景色,填充畫面的背景顏色和前景顏色,選擇完成后在右側(cè)顯示預(yù)期生成的開機(jī)/告警畫面,點(diǎn)擊生成即可完成開機(jī)/告警畫面的處理。界面實(shí)現(xiàn)如圖2所示。
圖2 開機(jī)/告警畫面Figure 2. Power-on or alarm screen
驅(qū)動(dòng)配置模塊負(fù)責(zé)運(yùn)行平臺(tái)的嵌入式操作系統(tǒng)相關(guān)配置的選擇,包括操作系統(tǒng)類型、第三方圖形庫和調(diào)試信息開關(guān)等,其實(shí)現(xiàn)如圖3所示。
其中,操作系統(tǒng)類型包括VxWorks、Windows、AcoreOS(天脈)和Linux共4種。用戶可使用單選框選擇合適的操作系統(tǒng)。第三方庫包括GL、GLU、GLUT和FastFontLib,其中前三者與繪圖相關(guān),F(xiàn)astFontLib為快速字庫。其他信息包含輸出調(diào)試信息,勾選該選項(xiàng)即可使GPU在運(yùn)行時(shí)打印有相關(guān)的狀態(tài)信息。右側(cè)顯示驅(qū)動(dòng)配置的結(jié)構(gòu)層次,有助于用戶了解配置過程。
匯編工具負(fù)責(zé)完成染色器匯編程序到自定義指令集的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換。自研GPU采用可編程架構(gòu),用戶可按照自定義指令集編寫頂點(diǎn)和像素染色器驅(qū)動(dòng)。匯編工具類似于高級(jí)語言的編譯器,具有詞法分析、語義檢查和翻譯功能,不同之處在于匯編工具僅支持匯編語言,其編程模型相較簡單,不支持全局變量和函數(shù)調(diào)用等功能[12]。
使用時(shí),首先選擇染色器的匯編程序文件,分為頂點(diǎn)、像素和命令染色器3種。然后對頂點(diǎn)、像素和命令匯編程序進(jìn)行詞法分析、語義檢查。如果沒有錯(cuò)誤則進(jìn)行二進(jìn)制的翻譯,否則打印錯(cuò)誤信息并停止匯編。最后在輸出欄打印匯編過程信息并顯示翻譯的結(jié)果。匯編工具界面實(shí)現(xiàn)如圖4所示。
圖4 匯編工具Figure 4. Assembly tools
光標(biāo)生成負(fù)責(zé)GPU運(yùn)行時(shí)光標(biāo)圖形數(shù)據(jù)的生成。光標(biāo)是在用戶交互使用時(shí),顯示設(shè)備上的符號(hào)或圖形,用來響應(yīng)定點(diǎn)設(shè)備(鼠標(biāo)、觸控板、數(shù)位筆)的移動(dòng),給出用戶動(dòng)作發(fā)生的位置點(diǎn)。同時(shí)還能夠指示程序當(dāng)前的運(yùn)行狀態(tài),例如編輯、縮放、拖拽和忙等待等。GPU支持44個(gè)系統(tǒng)光標(biāo)和4個(gè)用戶自定義光標(biāo)。配置光標(biāo)時(shí),首先讀取Windows系統(tǒng)光標(biāo),用戶從默認(rèn)的系統(tǒng)光標(biāo)庫中選擇光標(biāo)。若系統(tǒng)光標(biāo)不能滿足用戶實(shí)際需要,可以在自定義光標(biāo)列表中指定最多4個(gè)自定義光標(biāo),選擇完成后點(diǎn)擊生成,會(huì)將選擇的系統(tǒng)光標(biāo)和自定義光標(biāo)生成為一個(gè)文件,供GPU初始化時(shí)加載光標(biāo)數(shù)據(jù)。光標(biāo)生成的界面實(shí)現(xiàn)如圖5所示。
圖5 光標(biāo)生成Figure 5. Cursor generation
接口配置包括主機(jī)接口、顯存存儲(chǔ)、顯示控制通路和3D引擎配置4個(gè)部分。其中,主機(jī)接口包括對PCI內(nèi)核及其相關(guān)內(nèi)容的配置。PCI內(nèi)核配置可供用戶選擇主機(jī)類型、PCI配置基地址、配置空間地址、配置空間數(shù)據(jù)、寄存器基地址和存儲(chǔ)器基地址。相關(guān)配置包括對字節(jié)序使能(大小端)和中斷類型的選擇。中斷包括3D繪圖完成、SPI中斷、IIC0和IIC1等。接口配置具體內(nèi)容如圖6所示。
圖6 主機(jī)接口配置和顯示存儲(chǔ)Figure 6. Host interface configuration and display storage
顯存存儲(chǔ)包括存儲(chǔ)通路在圖像通路與視頻通路中的選擇。圖像存儲(chǔ)器參數(shù)的配置包括存儲(chǔ)芯片類型、存儲(chǔ)芯片容量、顯存芯片頁面大小和存儲(chǔ)芯片工作頻率。視頻存儲(chǔ)器參數(shù)的配置,包括存儲(chǔ)芯片類型、存儲(chǔ)芯片容量、顯存芯片頁面大小和存儲(chǔ)芯片工作效率。
顯示控制通路負(fù)責(zé)對顯示輸出模塊進(jìn)行初始化設(shè)置,包括顯示控制、圖像配置、視頻配置和疊加配置4個(gè)模塊[13]。其中圖像配置包括裁剪、縮放、伽馬矯正和RGB調(diào)整,負(fù)責(zé)完成圖像輸出的設(shè)置;視頻配置包括視頻輸入配置、裁剪、旋轉(zhuǎn)、縮放、伽馬矯正和RGB調(diào)整,負(fù)責(zé)視頻通路的配置;疊加配置包括HSV調(diào)整、輸出顯示和疊加方式的選擇。顯示控制如圖7所示。
圖7 顯示控制Figure 7. Display Control
字庫工具是繪制字符的關(guān)鍵部分,由于嵌入式環(huán)境下資源相對有限,無法將所有字符信息一次載入到GPU中,因此結(jié)合實(shí)際用戶需求,開發(fā)一套可裁剪、可定制的快速字庫工具[14]。字庫工具支持字庫的選擇,用戶可以定制字號(hào)、字體類型和字符表,其中字體類型包括加粗、斜體、刪除線和下劃線。使用時(shí),首先選擇字體,包括內(nèi)建字體和外部ttf格式字體兩種類型;然后根據(jù)需要選擇字庫字號(hào)和字體類型;最后輸入字庫包含的字符集點(diǎn)擊生成完成字庫信息的創(chuàng)建。字庫工具界面如圖8所示。
圖8 字庫工具Figure 8. Font tools
本文通過搭建FPGA測試平臺(tái)驗(yàn)證配置管理系統(tǒng),并從功能正確性、設(shè)計(jì)完備性和實(shí)現(xiàn)健壯性3個(gè)方面進(jìn)行測試。測試平臺(tái)由嵌入式CPU主機(jī)板和GPU FPGA驗(yàn)證板組成,兩者之間使用PCIE作為數(shù)據(jù)交互的通路[15-16]。CPU主機(jī)板作為主設(shè)備起到控制器的作用,負(fù)責(zé)外圍設(shè)備的管理、主機(jī)驅(qū)動(dòng)的執(zhí)行和圖形命令的下發(fā)。GPU作為從設(shè)備,接收CPU發(fā)送的圖形命令,使用內(nèi)部的3D引擎完成繪制任務(wù)并輸出到顯示器。
正確性驗(yàn)證的原則為在保證系統(tǒng)正確輸入的條件下,輸出不變且唯一的正確結(jié)果。本文采用3種方法進(jìn)行驗(yàn)證:
(1)遍歷輸入。在其他選項(xiàng)不變的條件下,遍歷被測選項(xiàng)的所有可能輸入,以開機(jī)/告警畫面為例,在圖片和前景色不變的條件下,遍歷背景色RGB的所有可能組合,驗(yàn)證背景色是否正確;
(2)互斥驗(yàn)證。挑選一組互斥選項(xiàng),保證在同一環(huán)境下,遍歷一組互斥選項(xiàng)的所有輸入組合。以接口配置為例,字節(jié)序的使能、顯示通路的選擇均為互斥關(guān)系。驗(yàn)證時(shí),在同一配置地址空間條件下,遍歷字節(jié)序開、關(guān)兩種模式,驗(yàn)證生成的地址是否符合選擇的字節(jié)序;
(3)隨機(jī)混合驗(yàn)證。混合設(shè)置多組選項(xiàng)并隨機(jī)配置正確的輸入,以字庫為例,隨機(jī)選擇字體的字號(hào)、加粗、斜體、刪除線、下劃線和字符表,驗(yàn)證生成的字庫的正確性。
系統(tǒng)設(shè)計(jì)的完整性代表對用戶需求的完全滿足;齊備性代表系統(tǒng)模塊及模塊內(nèi)功能和表示的統(tǒng)一和完備。針對完備性的驗(yàn)證過程采用表格的形式,將系統(tǒng)功能與用戶需求一一比對。以驅(qū)動(dòng)配置為例,該模塊需求包括操作系統(tǒng)的選擇、驅(qū)動(dòng)庫的支持和調(diào)試信息的顯示3項(xiàng)。系統(tǒng)設(shè)計(jì)中提供VxWorks、Windows、Linux和天脈4種操作系統(tǒng),此外還有GL、GLU、GLUT和FastFont4種驅(qū)動(dòng)庫,以及調(diào)試信息打印選項(xiàng),完整支持用戶需求。系統(tǒng)設(shè)計(jì)中,采用統(tǒng)一的控件并使用相同的外觀和交互方式,保證系統(tǒng)的外觀和交互具有良好的統(tǒng)一性。
本文測試了系統(tǒng)在錯(cuò)誤輸入、非法狀態(tài)下執(zhí)行的穩(wěn)定性,以及向用戶發(fā)送通知消息的功能。錯(cuò)誤輸入包括空輸入、類型錯(cuò)誤、數(shù)值范圍越界和輸入長度錯(cuò)誤等。設(shè)計(jì)中采用設(shè)置控件屬性和提交時(shí)驗(yàn)證兩種策略。以顯示控制模塊為例,水平分辨率只能選擇0~1 600之間,設(shè)計(jì)時(shí)使用Slider控件并設(shè)置MinValue和MaxValue為0和1 600,限制用戶僅能在1~1 600之間滑動(dòng)。相反,由于水平起始位置由小數(shù)表示,因此采用文本框來接受用戶的輸入,當(dāng)用戶提交時(shí)驗(yàn)證其輸入的合法性。健壯性驗(yàn)證主要針對系統(tǒng)中以文本框?yàn)榭丶臄?shù)據(jù)進(jìn)行驗(yàn)證,確認(rèn)其輸入的有效性。
本文針對GPU配置內(nèi)容多樣、配置步驟繁瑣、配置項(xiàng)之間相互交織、互相依賴等問題,提出一種基于WinForm的GPU配置管理系統(tǒng),并將其應(yīng)用于實(shí)際開發(fā)中。該系統(tǒng)分為軟件數(shù)據(jù)生成和硬件環(huán)境配置兩部分。在軟件數(shù)據(jù)生成部分中,根據(jù)用戶輸入生成GPU運(yùn)行過程中所需要的數(shù)據(jù),包括開機(jī)/告警畫面、匯編代碼、硬件光標(biāo)和快速字庫。硬件環(huán)境配置用于描述系統(tǒng)的硬件組成,包括驅(qū)動(dòng)配置和接口配置。
在系統(tǒng)運(yùn)行時(shí),根據(jù)用戶提供的配置信息,算法自動(dòng)配置模塊初始化內(nèi)容及其步驟順序,用戶無需使用函數(shù)調(diào)用的硬編碼形式,通過鼠標(biāo)、鍵盤即可完成復(fù)雜的GPU配置工作?;贔PGA驗(yàn)證平臺(tái)對系統(tǒng)的功能、設(shè)計(jì)和實(shí)現(xiàn)進(jìn)行驗(yàn)證的結(jié)果表明,系統(tǒng)滿足功能正確性、設(shè)計(jì)完備性和實(shí)現(xiàn)健壯性的要求,達(dá)到簡化配置過程、縮短配置時(shí)間、降低用戶使用難度的目的。
目前該系統(tǒng)僅能對GPU進(jìn)行靜態(tài)配置,無法提供運(yùn)行時(shí)的性能分析和故障監(jiān)控功能[17-19],不能實(shí)時(shí)監(jiān)控GPU的運(yùn)行狀態(tài)和各模塊的執(zhí)行情況。下一步擬采用Socket網(wǎng)絡(luò)通信技術(shù),在GPU運(yùn)行過程中實(shí)時(shí)采集各模塊狀態(tài)信息,實(shí)現(xiàn)性能與故障分析功能。