劉 暉,田 澤,聶 曌,張宏偉
(1.中國(guó)航空工業(yè)西安航空計(jì)算技術(shù)研究所,陜西 西安 710119;2.集成電路與微系統(tǒng)設(shè)計(jì)航空科技重點(diǎn)實(shí)驗(yàn)室,陜西 西安 710119;3.西安翔騰微電子科技有限公司,陜西 西安 710119)
圖形處理器經(jīng)過(guò)二十多年的發(fā)展,架構(gòu)經(jīng)歷了固定管線、分離架構(gòu)可編程染色器、統(tǒng)一架構(gòu)染色陣列的發(fā)展[1],隨著圖形處理功能、性能的不斷提高,電路設(shè)計(jì)復(fù)雜度直線上升,內(nèi)部狀態(tài)寄存器容量不斷增加。例如NVIDIA公司于2010年推出的Fermi架構(gòu)GTX480圖形處理器,采用40 nm制造工藝,片上集成30億個(gè)晶體管,雙精度浮點(diǎn)計(jì)算性能達(dá)到768GFLOPS,內(nèi)部包含了32 678個(gè)32位寄存器[2]。復(fù)雜的設(shè)計(jì)對(duì)圖形處理器的運(yùn)行狀態(tài)管理、調(diào)試手段、性能監(jiān)測(cè)與分析、極端場(chǎng)景使用方式等提出了新的挑戰(zhàn)。
圖形處理器運(yùn)行基本原理如圖1所示。圖形應(yīng)用程序通過(guò)主機(jī)接口發(fā)送到命令處理器單元,命令處理器進(jìn)行指令編碼識(shí)別、解析及預(yù)處理,并將指令編碼發(fā)送到3D處理引擎,經(jīng)過(guò)各3D功能單元的處理,將繪制的像素信息存儲(chǔ)在幀緩存中,并由顯示控制模塊輸出到顯示器上。
圖1 圖形處理器運(yùn)行原理
無(wú)論采用哪種架構(gòu)實(shí)現(xiàn)的圖形處理器,其圖形處理過(guò)程與圖1的3D處理引擎流程相似,不同的是,在大規(guī)模統(tǒng)一染色陣列架構(gòu)下,任務(wù)調(diào)度單元將頂點(diǎn)任務(wù)與像素任務(wù)分配給不同的染色陣列核心進(jìn)行計(jì)算[3]。
圖形處理器運(yùn)行狀態(tài)管理包括了圖形處理器功能運(yùn)行狀態(tài)管理、圖形處理器性能實(shí)時(shí)管理,覆蓋了圖形處理器全生命周期的狀態(tài)。通過(guò)狀態(tài)管理可以準(zhǔn)確地掌握?qǐng)D形處理的運(yùn)行狀態(tài),查詢相關(guān)故障,分析性能瓶頸等。
圖形處理器功能運(yùn)行狀態(tài)如圖2所示,包括了關(guān)閉狀態(tài)、上電狀態(tài)、打開(kāi)狀態(tài)、自檢狀態(tài)、初始化狀態(tài)、圖形繪制狀態(tài)、錯(cuò)誤狀態(tài)、復(fù)位狀態(tài)。各狀態(tài)之間的轉(zhuǎn)換須符合圖2。
(1)上電狀態(tài)表示當(dāng)前圖形處理器處于運(yùn)行準(zhǔn)備狀態(tài),在此過(guò)程中需要檢測(cè)主機(jī)端的運(yùn)行空間。
(2)打開(kāi)狀態(tài)標(biāo)志當(dāng)前圖形處理器處于可運(yùn)行狀態(tài),在此過(guò)程中需要檢測(cè)設(shè)備名稱、配置運(yùn)行空間。在運(yùn)行空間滿足圖形處理器最小運(yùn)行空間要求的基礎(chǔ)上,用戶可根據(jù)具體空間大小選擇需要配置的運(yùn)行句柄管理[4],包括設(shè)備信息管理、命令存儲(chǔ)空間管理、GL句柄管理、GLU句柄管理、GLUT句柄管理、窗口句柄管理等。
圖2 圖形處理器狀態(tài)
(3)自檢狀態(tài)用于檢測(cè)圖形處理器中的主要功能單元是否能夠正常運(yùn)行[5],包括了圖形處理過(guò)程的關(guān)鍵路徑:主機(jī)接口、3D繪制單元、顯示存儲(chǔ)、顯示控制。
(4)初始化狀態(tài)標(biāo)志當(dāng)前圖形處理器已達(dá)到運(yùn)行的初始狀態(tài),在此過(guò)程中需要配置圖形處理各功能單元的寄存器及存儲(chǔ)器狀態(tài),使其達(dá)到可運(yùn)行狀態(tài)。
(5)繪圖狀態(tài)標(biāo)志當(dāng)前圖形處理器3D引擎處理工作狀態(tài),繪制的圖形數(shù)據(jù)存儲(chǔ)在幀緩沖區(qū),并最終顯示出來(lái)。針對(duì)3D處理引擎中流水的各功能單元,統(tǒng)計(jì)各單元的狀態(tài)信息,查看是否死鎖或阻塞。
(6)故障狀態(tài)標(biāo)志當(dāng)前圖形處理器運(yùn)行過(guò)程中有非法狀態(tài)產(chǎn)生,按照故障等級(jí)進(jìn)行分類處理。按模塊將故障分為5類:設(shè)備故障、GL故障、GLU故障、GLUT故障、MiniGUI故障,每一類的故障按等級(jí)分為3類:一般故障、非緊急故障、緊急故障。一般故障不會(huì)影響圖形處理器的正常運(yùn)行,對(duì)其只做故障錯(cuò)誤記錄,不進(jìn)行處理;非緊急故障是指在運(yùn)行過(guò)程中出現(xiàn)的可承受故障,雖然此類故障影響了部分功能,但仍滿足運(yùn)行的最小集;緊急故障屬于嚴(yán)重故障,導(dǎo)致圖形處理器無(wú)法運(yùn)行。
(7)復(fù)位狀態(tài)是圖形處理器繪圖完成或出錯(cuò)后可選擇進(jìn)入的狀態(tài),它將圖形處理器恢復(fù)到初始化后的狀態(tài)。
(8)關(guān)閉狀態(tài)表示圖形處理器處于下電關(guān)閉狀態(tài),當(dāng)前圖形處理器不運(yùn)行。
圖形處理器的狀態(tài)跳轉(zhuǎn)覆蓋軟件及硬件運(yùn)行過(guò)程的全生命周期,每一種狀態(tài)的轉(zhuǎn)換必須符合狀態(tài)遷移的前提條件,便于運(yùn)行流程管理、狀態(tài)監(jiān)控,減少故障隱患。
圖形處理器性能管理包括了圖形命令生成速率、圖形命令傳輸速率、命令處理器解析分發(fā)速率、頂點(diǎn)處理速率、圖元處理速率、光柵化速率、像素處理速率、幀緩存數(shù)據(jù)刷新速率、幀緩存數(shù)據(jù)顯示速率[6],如圖3所示。圖形處理器按照流水線形式逐級(jí)處理各單元的數(shù)據(jù),每一級(jí)的數(shù)據(jù)輸出都為下一級(jí)的數(shù)據(jù)輸入,因此在典型場(chǎng)景下的性能只是實(shí)時(shí)性能統(tǒng)計(jì)信息,并不能作為分析圖形處理器性能瓶頸的依據(jù)。
圖形處理器的典型性能指標(biāo)包括頂點(diǎn)處理速率、光柵化速率、像素處理速率[7],但其都受限于圖形命令生成速率、圖形命令傳輸速率、命令處理器解析分發(fā)速率。因此在極限性能測(cè)試時(shí)應(yīng)在圖形命令滿帶寬條件下,測(cè)試不同圖元在不同處理通路下的處理速率。
圖3 圖形處理器性能分布
圖形處理器在運(yùn)行過(guò)程中產(chǎn)生的故障按設(shè)計(jì)的復(fù)雜性成線性增長(zhǎng)[8],文中只涉及圖形處理模塊功能的故障定義、分析及處理,不包括功能實(shí)現(xiàn)過(guò)程中的故障記錄。由于圖形處理器設(shè)計(jì)的復(fù)雜性,其故障類型千差萬(wàn)別,不同類型的故障不能一概而論,因此需要對(duì)故障進(jìn)行分等級(jí)處理。
圖形處理故障按照其對(duì)整個(gè)系統(tǒng)的影響程度進(jìn)行劃分,因此識(shí)別圖形處理系統(tǒng)的關(guān)鍵路徑是故障等級(jí)劃分的前提。
凡是影響關(guān)鍵路徑數(shù)據(jù)處理的故障都為緊急故障[9],包括關(guān)鍵模塊初始化狀態(tài)、空間不滿足系統(tǒng)運(yùn)行的最小要求、關(guān)鍵計(jì)算單元自檢錯(cuò)誤等;非關(guān)鍵路上的故障錯(cuò)誤按照其對(duì)繪圖結(jié)果的影響和其是否可恢復(fù)分為非緊急故障和一般故障[10],非緊急故障是指軟件句柄錯(cuò)誤、軟件記錄錯(cuò)誤或通過(guò)軟件容錯(cuò)可恢復(fù)的錯(cuò)誤等;一般故障是指圖形處理標(biāo)準(zhǔn)接口定義的故障,此類故障屬于標(biāo)準(zhǔn)接口故障,其處理結(jié)果與標(biāo)準(zhǔn)平臺(tái)保持一致。
圖形處理器按照功能單元定義故障,如表1所示,故障代碼按照功能模塊分類。
故障代碼按照類型可分為單元初始化故障、空間分配故障、句柄故障、功能單元超時(shí)故障、應(yīng)用程序故障。
(1)功能單元故障影響圖形處理執(zhí)行流程,屬于緊急故障,包括了主機(jī)接口、顯示存儲(chǔ)及顯示控制[11]。主機(jī)接口是圖形命令、像素?cái)?shù)據(jù)傳輸?shù)年P(guān)鍵通路;顯示存儲(chǔ)區(qū)域可分為像素存儲(chǔ)區(qū),像素相關(guān)信息(如深度信息、模板信息等)存儲(chǔ)區(qū)、視頻存儲(chǔ)區(qū),若與當(dāng)前應(yīng)用匹配,則為緊急故障,否則為非緊急故障;顯示控制通路可分為圖像通路、視頻通路,若與當(dāng)前應(yīng)用匹配,則為緊急故障,否則為非緊急故障。
(2)空間分配故障包括了句柄空間分配故障與運(yùn)行空間分配故障,句柄空間用來(lái)記錄圖形處理狀態(tài),屬于非關(guān)鍵空間,即為非緊急故障;運(yùn)行空間可分為設(shè)備運(yùn)行空間與最小運(yùn)行空間,設(shè)備運(yùn)行空間為用戶設(shè)定的圖形處理能夠流暢處理的空間要求[12],最小空間為圖形處理運(yùn)行要求的最小空間,若小于該空間,則圖形處理器無(wú)法運(yùn)行,因此運(yùn)行空間分配故障按照匹配關(guān)系可分為非緊急故障與緊急故障。
(3)句柄故障包括了設(shè)備句柄故障、GL句柄故障、GLU句柄故障、GLUT句柄故障、MiniGUI句柄故障,屬于非緊急故障
(4)功能單元超時(shí)故障包括命令緩沖區(qū)超時(shí)和3D引擎功能單元超時(shí)。功能單元超時(shí)后可通過(guò)復(fù)位恢復(fù)正常狀態(tài),對(duì)于小概率的此類故障,且不影響整體功能時(shí),屬于非緊急故障,否則屬于緊急故障[13]。
(5)應(yīng)用程序故障包括非法參數(shù)、非法枚舉值、非法操作、堆棧溢出、空間越界等,他們記錄的是圖形命令接口參數(shù)錯(cuò)誤、調(diào)用錯(cuò)誤,這些錯(cuò)誤在驅(qū)動(dòng)軟件層做了規(guī)避操作,不會(huì)導(dǎo)致訪問(wèn)異常地址,除0等非法錯(cuò)誤,屬于一般故障[14]。
表1 圖形處理器故障定義
圖形處理器以其優(yōu)越的圖形處理能力,具有廣泛的應(yīng)用前景。文中介紹了一種通用的圖形處理器狀態(tài)管理及性能監(jiān)測(cè)方法,能夠嚴(yán)格控制狀態(tài)間的轉(zhuǎn)換,監(jiān)控圖形處理系統(tǒng)性能[15],在保證圖形處理器正常運(yùn)行的前提下,提出了一種分級(jí)的故障管理方法,保證在最小資源集合下滿足不同的應(yīng)用場(chǎng)景。