欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

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

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


圖1為本發(fā)明方法的一種具體實(shí)施方式
的流程圖,其中,(IA)為整體流程,(IB)為基本塊級(jí)別剖析流程;圖2為實(shí)現(xiàn)圖1所述方法的體系結(jié)構(gòu)圖;圖3為本發(fā)明的線程剖析過程參考圖。
具體實(shí)施例方式本發(fā)明通過對(duì)模擬器的修改和擴(kuò)充,來收集CUDA應(yīng)用程序模擬運(yùn)行時(shí)的信息,從而剖析基本塊特征以及線程級(jí)特征等現(xiàn)有的CUDA剖析工具未提供的功能。CUDA應(yīng)用程序的基本塊特征,與傳統(tǒng)的CPU架構(gòu)上運(yùn)行的應(yīng)用程序的基本塊特征相比,有其獨(dú)特之處,需要CUDA剖析工具開發(fā)者提供合適的工具來研究。線程同步特征和相似特征,是CUDA程序很重要的線程級(jí)特征,而現(xiàn)有的CUDA程序剖析工具對(duì)此無能為力。本發(fā)明設(shè)計(jì)了向量矩陣的數(shù)據(jù)結(jié)構(gòu),通過合適的數(shù)學(xué)方法,實(shí)現(xiàn)了對(duì)線程同步和相似特征的剖析。本發(fā)明針對(duì)剖析CUDA程序的關(guān)鍵行為特征方面的需求,以及現(xiàn)有CUDA程序剖析工具所提供的方法的局限性,提出了基于模擬器的修改和擴(kuò)充來剖析CUDA應(yīng)用程序基本塊級(jí)別和線程級(jí)別行為特征的方法。下面結(jié)合附圖和實(shí)例對(duì)本發(fā)明進(jìn)行詳細(xì)說明。如圖1所示,本發(fā)明方法的步驟為(1)使用GPU模擬器軟件,修改與它的配置選項(xiàng)相關(guān)的環(huán)境變量并保存到腳本文件中,以開啟指令跟蹤和程序信息調(diào)試功能。例如,向Linux的環(huán)境變量里添加PTX_SIM_ DEBUG值,在用戶主目錄下的.bashrc腳本文件的末尾添加export PTX_SIM_DEBUG = 5這一句命令來打開GPU模擬器軟件的指令跟蹤和信息調(diào)試功能的第5個(gè)級(jí)別。然后,開始運(yùn)行CUDA程序。(2)記錄CUDA程序運(yùn)行過程中產(chǎn)生的線程的id信息、指令操作碼、指令依賴距離以及基本塊的塊號(hào)、平均大小、前驅(qū)、后繼結(jié)點(diǎn)信息。(3)根據(jù)⑵中所記錄運(yùn)行過程中的基本塊的后繼結(jié)點(diǎn)出現(xiàn)的次數(shù),匯總得到每個(gè)基本塊與它的后繼結(jié)點(diǎn)的連接次數(shù)。對(duì)于每個(gè)基本塊,根據(jù)它與它的后繼結(jié)點(diǎn)的連接次數(shù),來計(jì)算CUDA程序中的基本塊之間跳轉(zhuǎn)的概率。例如,A結(jié)點(diǎn)的后繼結(jié)點(diǎn)是B和C,如果在程序運(yùn)行完成時(shí)A結(jié)點(diǎn)與B結(jié)點(diǎn)總共連接了 b次,A結(jié)點(diǎn)與C結(jié)點(diǎn)總共連接了 c次,那么 A結(jié)點(diǎn)跳轉(zhuǎn)到B結(jié)點(diǎn)的概率為b/(b+c)。(4)使用graphiviz軟件以及圖像軟件來顯示程序的控制流——基本塊跳轉(zhuǎn)的邏輯關(guān)系。根據(jù)基本塊之間相互跳轉(zhuǎn)的概率,動(dòng)態(tài)地顯示出程序的控制流圖。(5)針對(duì)每一個(gè)線程,搜索第(2)步記錄的線程號(hào)和基本塊號(hào),找出它經(jīng)過的所有基本塊的塊號(hào)。(6)針對(duì)每一個(gè)線程經(jīng)過的所有基本塊,搜索第(2)步記錄的信息里的線程id和基本塊塊號(hào),計(jì)算出每個(gè)基本塊被該線程訪問的次數(shù)。(7)以每個(gè)基本塊被某線程訪問的次數(shù)為數(shù)組的元素,建立該線程的基本塊向量 (BBV Basic Block Vector)。(8)針對(duì)每一個(gè)線程的基本塊向量,計(jì)算出不同的線程的基本塊向量之間的距離。(9)以不同的線程的基本塊向量之間的距離為矩陣的元素,建立線程的相似矩陣。例如,對(duì)于一個(gè)線程組里的256個(gè)線程,我們建立256行256列的矩陣,其中第i 行第j列的元素是這個(gè)線程組里的第i個(gè)線程的基本塊向量與第j個(gè)線程的基本塊向量之間的距離。距離的計(jì)算采用歐幾里得距離公式或者曼哈頓距離公式,以第(8)步所提出采用的歐幾里得距離公式為優(yōu)。(10)根據(jù)與現(xiàn)有CUDA程序重要行為特征進(jìn)行比較的結(jié)果,判斷該CUDA程序是否屬于該行為特征顯著型程序。本發(fā)明所剖析的CUDA程序的該行為特征表現(xiàn)出來的數(shù)學(xué)統(tǒng)計(jì)結(jié)果(采用數(shù)學(xué)統(tǒng)計(jì)方法所得出的結(jié)果)超過了預(yù)設(shè)的臨界值,我們就判斷這個(gè)CUDA程序?qū)儆谠撔袨樘卣黠@著型程序。
方法之一是判斷CUDA程序是否為分支發(fā)散(Branch divergence)顯著型程序把相似矩陣?yán)锏脑刂禋w一化,使用歸一化后的值作為亮度值,使用Matlab工具以黑白圖形顯示相似矩陣,并使用像素掃描器檢查剖析的CUDA程序運(yùn)行過程中的線程的起伏變化率, 當(dāng)像素掃描器檢查到的CUDA程序的線程起伏變化率大于預(yù)先設(shè)定的臨界值時(shí),系統(tǒng)做出以下判斷所檢查的CUDA程序是分支發(fā)散(Branch divergence)顯著型程序。分支發(fā)散 (Branch divergence)是CUDA程序剖析領(lǐng)域公知的技術(shù)名詞。所述臨界值可以取已知的 Branch divergence顯著型程序的起伏變化率的平均值。方法之二是判斷CUDA程序是否為同步顯著性程序根據(jù)第( 步記錄的BAR指令操作碼在程序執(zhí)行完所經(jīng)過的基本塊中出現(xiàn)的次數(shù),除以程序執(zhí)行完所經(jīng)過的基本塊的總數(shù),得到線程的同步率,來對(duì)CUDA程序是否是同步顯著型進(jìn)行判斷。當(dāng)所運(yùn)行的CUDA程序的同步率大于預(yù)先設(shè)定的另一臨界值時(shí),系統(tǒng)做出以下判斷所運(yùn)行的CUDA程序是同步顯著型程序。同步是CUDA程序剖析領(lǐng)域公知的技術(shù)名詞。所述另一臨界值可以取已知的同步顯著型程序的同步率的平均值。(12)如果不需要剖析其它的程序,結(jié)束;反之創(chuàng)建新的處理實(shí)例,跳到第⑴步, 重復(fù)上面的剖析過程。實(shí)例本發(fā)明的運(yùn)行過程參考圖3,下面用一個(gè)實(shí)例來詳細(xì)說明(1)修改gpgpusim的功能模擬器的配置文件,打開指令跟蹤和程序信息調(diào)試功能。(2)調(diào)用gpgpusim模擬的CUDA庫函數(shù)來運(yùn)行CUDA 二進(jìn)制程序。(3)通過將指令跟蹤和程序信息調(diào)試功能所收集的原始數(shù)據(jù)保存到文件里,基本塊跳轉(zhuǎn)的邏輯保存為.dot文件。(4)通過Python或Perl腳本來提取和過濾程序的原始運(yùn)行數(shù)據(jù),使用外接的 graphviz軟件將.dot文件繪制成圖形。(5)對(duì)于提取的的BBV數(shù)據(jù),采用Euclidean距離公式來計(jì)算同一線程組內(nèi)不同的線程之間的BBV向量距離,建立同步矩陣和相似矩陣模型來分析程序的同步一致度和線程相似度。(6)如果不需要剖析其它的程序,結(jié)束;反之創(chuàng)建新的處理實(shí)例,跳到第⑵步,重復(fù)上面的剖析過程,比較不同類型的CUDA程序之間的程序行為特征的差別,分析并研究計(jì)算密集型與數(shù)據(jù)密集型CUDA程序之間性能差異的因素。以上所述,僅為本發(fā)明最佳的具體實(shí)現(xiàn)方式,本發(fā)明的實(shí)現(xiàn)方法并不局限于此,任何在本發(fā)明領(lǐng)域內(nèi)不脫離本發(fā)明精神下的改變,都應(yīng)涵蓋在本發(fā)明范圍內(nèi)。
權(quán)利要求
1.一種剖析CUDA程序行為的方法,其特征在于,該方法包括下述步驟(1)使用GPU模擬器軟件,修改它的配置文件開啟指令跟蹤和程序信息調(diào)試功能后,運(yùn)行CUDA程序;(2)記錄CUDA程序運(yùn)行過程中產(chǎn)生的線程的id信息、指令操作碼、指令依賴距離以及基本塊的塊號(hào)、平均大小、前驅(qū)、后繼結(jié)點(diǎn)信息;(3)通過CUDA程序中的基本塊的前驅(qū)、后繼結(jié)點(diǎn)的連接信息,計(jì)算CUDA程序中的基本塊之間跳轉(zhuǎn)的概率;(4)顯示CUDA程序的控制流-基本塊跳轉(zhuǎn)的邏輯關(guān)系,獲取基本塊的總數(shù);(5)針對(duì)每一個(gè)線程,搜索步驟(2)記錄的線程號(hào)和基本塊號(hào),找出它經(jīng)過的所有基本塊的塊號(hào);(6)針對(duì)每一個(gè)線程經(jīng)過的所有基本塊,搜索步驟( 記錄的信息里的線程id和基本塊塊號(hào),計(jì)算出每個(gè)基本塊被該線程訪問的次數(shù);(7)以每個(gè)基本塊被某線程訪問的次數(shù)為數(shù)組的元素,建立該線程的基本塊向量;(8)針對(duì)每一個(gè)線程的基本塊向量,計(jì)算出不同的線程的基本塊向量之間的距離;(9)以不同的線程的基本塊向量之間的距離為矩陣的元素,建立線程的相似矩陣;(10)根據(jù)與現(xiàn)有CUDA程序的行為特征進(jìn)行比較的結(jié)果,判斷該CUDA程序是否屬于該行為特征顯著型程序;所述行為特征表現(xiàn)為數(shù)學(xué)統(tǒng)計(jì)結(jié)果,如果該結(jié)果超過預(yù)設(shè)的臨界值, 則判斷該CUDA程序?qū)儆谠撔袨樘卣黠@著型程序;(11)如果不需要剖析其它的程序,結(jié)束;反之,轉(zhuǎn)入步驟(1)。
2.根據(jù)權(quán)利要求1所述的一種剖析CUDA程序行為的方法,其特征在于,步驟(10)中, 將相似矩陣?yán)锏脑刂禋w一化,使用歸一化后的值作為亮度值,使用Matlab工具以黑白圖形顯示相似矩陣,并使用像素掃描器檢查剖析的CUDA程序運(yùn)行過程中的線程的起伏變化率,當(dāng)像素掃描器檢查到的CUDA程序的線程起伏變化率大于預(yù)先設(shè)定的臨界值時(shí),則認(rèn)為該CUDA程序是分支發(fā)散顯著型程序。
3.根據(jù)權(quán)利要求1所述的一種剖析CUDA程序行為的方法,其特征在于,步驟(10)中, 將步驟( 記錄的BAR指令操作碼在程序執(zhí)行完所經(jīng)過的基本塊中出現(xiàn)的次數(shù),除以程序執(zhí)行完所經(jīng)過的基本塊的總數(shù),得到線程的同步率,當(dāng)所運(yùn)行的CUDA程序的同步率大于預(yù)先設(shè)定的另一臨界值時(shí),由認(rèn)為所運(yùn)行的CUDA程序是同步顯著型程序。
4.根據(jù)權(quán)利要求1、2或3所述的一種剖析CUDA程序行為的方法,其特征在于,步驟⑶ 中采用歐幾里得距離來計(jì)算同一線程組內(nèi)線程之間的相似程度。
5.根據(jù)權(quán)利要求1所述的一種剖析CUDA程序行為方法,其特征在于所述CUDA程序行為包括CUDA程序的基本塊級(jí)別的特征和線程級(jí)別的特征。
全文摘要
本發(fā)明公開了一種CUDA程序行為剖析的方法,該方法通過修改模擬器的配置文件開啟指令跟蹤和程序信息調(diào)試功能,來記錄CUDA程序運(yùn)行過程中的線程id號(hào)、指令操作碼等信息。在對(duì)原始的程序運(yùn)行數(shù)據(jù)進(jìn)行提取和過濾后,采用歐幾里得距離公式來計(jì)算同一線程組中的線程之間的基本塊向量距離,建立同步矩陣和相似矩陣模型來分析程序的線程特征。這樣,我們提供了現(xiàn)有的CUDA剖析工具尚不具備的基本塊級(jí)別和線程級(jí)別特征的剖析方法。
文檔編號(hào)G06F11/36GK102567206SQ20121000627
公開日2012年7月11日 申請(qǐng)日期2012年1月6日 優(yōu)先權(quán)日2012年1月6日
發(fā)明者喻之斌, 程偉, 金海 申請(qǐng)人:華中科技大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
聂荣县| 永年县| 内江市| 荔浦县| 隆林| 克什克腾旗| 柳河县| 迁安市| 内丘县| 拉萨市| 潜江市| 进贤县| 河东区| 荔浦县| 仪征市| 襄垣县| 武城县| 齐齐哈尔市| 启东市| 贵阳市| 鲜城| 吉木乃县| 无锡市| 章丘市| 灵台县| 额尔古纳市| 红原县| 仁怀市| 泸溪县| 崇阳县| 宜兴市| 杨浦区| 页游| 恩平市| 晋州市| 思茅市| 乌鲁木齐县| 肇庆市| 独山县| 台江县| 兰溪市|