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