麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種剖析cuda程序行為的方法

文檔序號:6362921閱讀:528來源:國知局
專利名稱:一種剖析cuda程序行為的方法
技術領域
本發明屬于高性能計算研究和程序行為剖析領域,具體涉及針對CUDA編程模型開發的高性能應用程序(例如在GPGPU平臺上運行的高性能數據庫和氣象預測程序)的行為剖析以及剖析工具的研究,它適用于CUDA應用程序的行為研究和剖析方法的優化。
背景技術
GPU以其理論上計算性能顯著超越同時代的多核CPU的技術優勢,已經在近幾年里進入了非圖形計算領域,而像CUDA (Computing Unified Device Architecture,計算統一設備體系結構)這樣的編程模型的涌現,鼓舞了開發者利用GPU來運行高性能應用的熱情。在NVIDIA公司的官方網站上,已經有不同領域的幾百個成功的典型應用,它們獲得的加速比可以達到幾十甚至上百,并且這一情況仍在繼續發展。在產業界,也有不少公司希望把他們的應用,比如用于流媒體處理領域的H. 264編解碼器,遷移到GPU架構上來,獲得更高的并行性能。然而,目前缺乏一種優秀的剖析工具,來幫助開發者來深入理解CUDA應用程序的加速效果。NVIDIA公司開發的cudaprof工具受到硬件計數器數量的限制,提供的信息有限,而且不能擴展。而gpuocelot中的cuda程序剖析工具,主要是對源代碼的靜態剖析。我們希望開發一種CUDA程序剖析系統,來幫助開發者理解CUDA應用程序的動態行為特征,尤其是基本塊特征、線程同步特征以及相似特征等現有的CUDA剖析工具無法剖析的特征。程序剖析一般分為靜態剖析和動態剖析兩種。靜態剖析并不真正執行程序,而是通過對序源碼進行分析,得到程序的結構信息(包括模塊調用關系圖、模塊的控制流程圖等)、逆向提取的對象模型和類關系及程序的復雜度度量等。動態剖析則要通過運行程序 (實際運行或模擬運行)來得到程序的動態行為信息,包括分析指令的覆蓋率、監控內存的狀態等等。動態剖析可以采用實際運行程序的方式,使用硬件計數器來統計程序的信息。這種方法受到了硬件計數器數量和功能的限制。也可以通過插裝技術來實現,在對源程序預處理后,插裝,匯編后,實際運行或者模擬運行。典型的插裝方法可以通過修改編譯器來實現。

發明內容
本發明的目的是設計和實現一種剖析CUDA程序行為的方法,它能夠對CUDA程序的動態行為特征尤其是基本塊特征、同步以及線程相似特征進行剖析,從而獲得CUDA程序重要而且獨特的行為特征。本發明提供的一種剖析CUDA程序行為的方法,其特征在于,該方法包括下述步驟(1)使用GPU模擬器軟件,修改它的配置文件開啟指令跟蹤和程序信息調試功能后,運行CUDA程序;
(2)記錄CUDA程序運行過程中產生的線程的id信息、指令操作碼、指令依賴距離以及基本塊的塊號、平均大小、前驅、后繼結點信息;(3)通過CUDA程序中的基本塊的前驅、后繼結點的連接信息,計算CUDA程序中的基本塊之間跳轉的概率;(4)顯示CUDA程序的控制流-基本塊跳轉的邏輯關系,獲取基本塊的總數;(5)針對每一個線程,搜索步驟(2)記錄的線程號和基本塊號,找出它經過的所有基本塊的塊號;(6)針對每一個線程經過的所有基本塊,搜索步驟( 記錄的信息里的線程id和基本塊塊號,計算出每個基本塊被該線程訪問的次數;(7)以每個基本塊被某線程訪問的次數為數組的元素,建立該線程的基本塊向量;(8)針對每一個線程的基本塊向量,計算出不同的線程的基本塊向量之間的距罔;(9)以不同的線程的基本塊向量之間的距離為矩陣的元素,建立線程的相似矩陣;(10)根據與現有CUDA程序的行為特征進行比較的結果,判斷該CUDA程序是否屬于該行為特征顯著型程序;所述行為特征表現為數學統計結果,如果該結果超過預設的臨界值,則判斷該CUDA程序屬于該行為特征顯著型程序;(11)如果不需要剖析其它的程序,結束;反之,轉入步驟(1)。本發明方法對CUDA程序的行為進行剖析,修改模擬器軟件配置文件開啟指令跟蹤和程序信息調試功能,產生原始的程序運行數據。我們對原始的程序運行數據進行提取和過濾后,通過計算同一線程組中的線程之間的基本塊向量距離,建立同步矩陣和相似矩陣模型來分析程序的線程特征。這樣,我們提供了一種現有的CUDA剖析工具尚不具備的基本塊級別和線程級別的特征剖析方法。具體而言,本發明方法具有以下特點和優點(1)基本塊級別的特征剖析。其它 CUDA程序剖析工具尚未提供基本塊的剖析方法,而基本塊級別的特征剖析仍然是CUDA程序剖析中非常重要的一個環節,本發明提供的方法填補了這一空白。( 把同步向量和相似矩陣應用到線程級別的剖析。本發明針對CUDA程序的特點,優選采用歐幾里得距離來計算同一線程組內線程之間的相似性,經實踐檢驗,該數學模型的效果較好。


圖1為本發明方法的一種具體實施方式
的流程圖,其中,(IA)為整體流程,(IB)為基本塊級別剖析流程;圖2為實現圖1所述方法的體系結構圖;圖3為本發明的線程剖析過程參考圖。
具體實施例方式本發明通過對模擬器的修改和擴充,來收集CUDA應用程序模擬運行時的信息,從而剖析基本塊特征以及線程級特征等現有的CUDA剖析工具未提供的功能。CUDA應用程序的基本塊特征,與傳統的CPU架構上運行的應用程序的基本塊特征相比,有其獨特之處,需要CUDA剖析工具開發者提供合適的工具來研究。線程同步特征和相似特征,是CUDA程序很重要的線程級特征,而現有的CUDA程序剖析工具對此無能為力。本發明設計了向量矩陣的數據結構,通過合適的數學方法,實現了對線程同步和相似特征的剖析。本發明針對剖析CUDA程序的關鍵行為特征方面的需求,以及現有CUDA程序剖析工具所提供的方法的局限性,提出了基于模擬器的修改和擴充來剖析CUDA應用程序基本塊級別和線程級別行為特征的方法。下面結合附圖和實例對本發明進行詳細說明。如圖1所示,本發明方法的步驟為(1)使用GPU模擬器軟件,修改與它的配置選項相關的環境變量并保存到腳本文件中,以開啟指令跟蹤和程序信息調試功能。例如,向Linux的環境變量里添加PTX_SIM_ DEBUG值,在用戶主目錄下的.bashrc腳本文件的末尾添加export PTX_SIM_DEBUG = 5這一句命令來打開GPU模擬器軟件的指令跟蹤和信息調試功能的第5個級別。然后,開始運行CUDA程序。(2)記錄CUDA程序運行過程中產生的線程的id信息、指令操作碼、指令依賴距離以及基本塊的塊號、平均大小、前驅、后繼結點信息。(3)根據⑵中所記錄運行過程中的基本塊的后繼結點出現的次數,匯總得到每個基本塊與它的后繼結點的連接次數。對于每個基本塊,根據它與它的后繼結點的連接次數,來計算CUDA程序中的基本塊之間跳轉的概率。例如,A結點的后繼結點是B和C,如果在程序運行完成時A結點與B結點總共連接了 b次,A結點與C結點總共連接了 c次,那么 A結點跳轉到B結點的概率為b/(b+c)。(4)使用graphiviz軟件以及圖像軟件來顯示程序的控制流——基本塊跳轉的邏輯關系。根據基本塊之間相互跳轉的概率,動態地顯示出程序的控制流圖。(5)針對每一個線程,搜索第(2)步記錄的線程號和基本塊號,找出它經過的所有基本塊的塊號。(6)針對每一個線程經過的所有基本塊,搜索第(2)步記錄的信息里的線程id和基本塊塊號,計算出每個基本塊被該線程訪問的次數。(7)以每個基本塊被某線程訪問的次數為數組的元素,建立該線程的基本塊向量 (BBV Basic Block Vector)。(8)針對每一個線程的基本塊向量,計算出不同的線程的基本塊向量之間的距離。(9)以不同的線程的基本塊向量之間的距離為矩陣的元素,建立線程的相似矩陣。例如,對于一個線程組里的256個線程,我們建立256行256列的矩陣,其中第i 行第j列的元素是這個線程組里的第i個線程的基本塊向量與第j個線程的基本塊向量之間的距離。距離的計算采用歐幾里得距離公式或者曼哈頓距離公式,以第(8)步所提出采用的歐幾里得距離公式為優。(10)根據與現有CUDA程序重要行為特征進行比較的結果,判斷該CUDA程序是否屬于該行為特征顯著型程序。本發明所剖析的CUDA程序的該行為特征表現出來的數學統計結果(采用數學統計方法所得出的結果)超過了預設的臨界值,我們就判斷這個CUDA程序屬于該行為特征顯著型程序。
方法之一是判斷CUDA程序是否為分支發散(Branch divergence)顯著型程序把相似矩陣里的元素值歸一化,使用歸一化后的值作為亮度值,使用Matlab工具以黑白圖形顯示相似矩陣,并使用像素掃描器檢查剖析的CUDA程序運行過程中的線程的起伏變化率, 當像素掃描器檢查到的CUDA程序的線程起伏變化率大于預先設定的臨界值時,系統做出以下判斷所檢查的CUDA程序是分支發散(Branch divergence)顯著型程序。分支發散 (Branch divergence)是CUDA程序剖析領域公知的技術名詞。所述臨界值可以取已知的 Branch divergence顯著型程序的起伏變化率的平均值。方法之二是判斷CUDA程序是否為同步顯著性程序根據第( 步記錄的BAR指令操作碼在程序執行完所經過的基本塊中出現的次數,除以程序執行完所經過的基本塊的總數,得到線程的同步率,來對CUDA程序是否是同步顯著型進行判斷。當所運行的CUDA程序的同步率大于預先設定的另一臨界值時,系統做出以下判斷所運行的CUDA程序是同步顯著型程序。同步是CUDA程序剖析領域公知的技術名詞。所述另一臨界值可以取已知的同步顯著型程序的同步率的平均值。(12)如果不需要剖析其它的程序,結束;反之創建新的處理實例,跳到第⑴步, 重復上面的剖析過程。實例本發明的運行過程參考圖3,下面用一個實例來詳細說明(1)修改gpgpusim的功能模擬器的配置文件,打開指令跟蹤和程序信息調試功能。(2)調用gpgpusim模擬的CUDA庫函數來運行CUDA 二進制程序。(3)通過將指令跟蹤和程序信息調試功能所收集的原始數據保存到文件里,基本塊跳轉的邏輯保存為.dot文件。(4)通過Python或Perl腳本來提取和過濾程序的原始運行數據,使用外接的 graphviz軟件將.dot文件繪制成圖形。(5)對于提取的的BBV數據,采用Euclidean距離公式來計算同一線程組內不同的線程之間的BBV向量距離,建立同步矩陣和相似矩陣模型來分析程序的同步一致度和線程相似度。(6)如果不需要剖析其它的程序,結束;反之創建新的處理實例,跳到第⑵步,重復上面的剖析過程,比較不同類型的CUDA程序之間的程序行為特征的差別,分析并研究計算密集型與數據密集型CUDA程序之間性能差異的因素。以上所述,僅為本發明最佳的具體實現方式,本發明的實現方法并不局限于此,任何在本發明領域內不脫離本發明精神下的改變,都應涵蓋在本發明范圍內。
權利要求
1.一種剖析CUDA程序行為的方法,其特征在于,該方法包括下述步驟(1)使用GPU模擬器軟件,修改它的配置文件開啟指令跟蹤和程序信息調試功能后,運行CUDA程序;(2)記錄CUDA程序運行過程中產生的線程的id信息、指令操作碼、指令依賴距離以及基本塊的塊號、平均大小、前驅、后繼結點信息;(3)通過CUDA程序中的基本塊的前驅、后繼結點的連接信息,計算CUDA程序中的基本塊之間跳轉的概率;(4)顯示CUDA程序的控制流-基本塊跳轉的邏輯關系,獲取基本塊的總數;(5)針對每一個線程,搜索步驟(2)記錄的線程號和基本塊號,找出它經過的所有基本塊的塊號;(6)針對每一個線程經過的所有基本塊,搜索步驟( 記錄的信息里的線程id和基本塊塊號,計算出每個基本塊被該線程訪問的次數;(7)以每個基本塊被某線程訪問的次數為數組的元素,建立該線程的基本塊向量;(8)針對每一個線程的基本塊向量,計算出不同的線程的基本塊向量之間的距離;(9)以不同的線程的基本塊向量之間的距離為矩陣的元素,建立線程的相似矩陣;(10)根據與現有CUDA程序的行為特征進行比較的結果,判斷該CUDA程序是否屬于該行為特征顯著型程序;所述行為特征表現為數學統計結果,如果該結果超過預設的臨界值, 則判斷該CUDA程序屬于該行為特征顯著型程序;(11)如果不需要剖析其它的程序,結束;反之,轉入步驟(1)。
2.根據權利要求1所述的一種剖析CUDA程序行為的方法,其特征在于,步驟(10)中, 將相似矩陣里的元素值歸一化,使用歸一化后的值作為亮度值,使用Matlab工具以黑白圖形顯示相似矩陣,并使用像素掃描器檢查剖析的CUDA程序運行過程中的線程的起伏變化率,當像素掃描器檢查到的CUDA程序的線程起伏變化率大于預先設定的臨界值時,則認為該CUDA程序是分支發散顯著型程序。
3.根據權利要求1所述的一種剖析CUDA程序行為的方法,其特征在于,步驟(10)中, 將步驟( 記錄的BAR指令操作碼在程序執行完所經過的基本塊中出現的次數,除以程序執行完所經過的基本塊的總數,得到線程的同步率,當所運行的CUDA程序的同步率大于預先設定的另一臨界值時,由認為所運行的CUDA程序是同步顯著型程序。
4.根據權利要求1、2或3所述的一種剖析CUDA程序行為的方法,其特征在于,步驟⑶ 中采用歐幾里得距離來計算同一線程組內線程之間的相似程度。
5.根據權利要求1所述的一種剖析CUDA程序行為方法,其特征在于所述CUDA程序行為包括CUDA程序的基本塊級別的特征和線程級別的特征。
全文摘要
本發明公開了一種CUDA程序行為剖析的方法,該方法通過修改模擬器的配置文件開啟指令跟蹤和程序信息調試功能,來記錄CUDA程序運行過程中的線程id號、指令操作碼等信息。在對原始的程序運行數據進行提取和過濾后,采用歐幾里得距離公式來計算同一線程組中的線程之間的基本塊向量距離,建立同步矩陣和相似矩陣模型來分析程序的線程特征。這樣,我們提供了現有的CUDA剖析工具尚不具備的基本塊級別和線程級別特征的剖析方法。
文檔編號G06F11/36GK102567206SQ20121000627
公開日2012年7月11日 申請日期2012年1月6日 優先權日2012年1月6日
發明者喻之斌, 程偉, 金海 申請人:華中科技大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 安阳市| 安仁县| 抚宁县| 油尖旺区| 徐汇区| 西乡县| 琼结县| 镇坪县| 南安市| 曲松县| 潼关县| 泗洪县| 商南县| 乌恰县| 石台县| 宁夏| 祁门县| 永嘉县| 新龙县| 滦南县| 湖口县| 九龙坡区| 盐边县| 吉林省| 岱山县| 从化市| 平昌县| 镇宁| 辉南县| 安新县| 大同市| 大洼县| 蓝山县| 宁海县| 桃园县| 库车县| 莫力| 文化| 龙胜| 广东省| 乌兰浩特市|