專利名稱:基于基本塊的匯編代碼得出程序的數(shù)據(jù)流圖的實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理器結(jié)構(gòu)設(shè)計領(lǐng)域,特別是涉及一種基于基本塊的匯編代碼得出程序的數(shù) 據(jù)流圖的實現(xiàn)方法。
背景技術(shù):
亂序處理機可以通過增加指令發(fā)射的寬度來提高性能,但是,傳統(tǒng)增加指令發(fā)射寬度 的方法并不能提高計算機性能,也就是說增加了設(shè)計的復(fù)雜性和能耗需求。在執(zhí)行核中,一 個發(fā)射指令寬的處理器需要更大更寬的結(jié)構(gòu)去支持更多的并行處理的指令,這些指令包括指 令調(diào)度器、寄存器文件、旁路網(wǎng)絡(luò)。如果設(shè)計釆用更大更寬的結(jié)構(gòu),其流水線必須支持很大 的時鐘頻率。但是在執(zhí)行關(guān)鍵循環(huán)時,流水線結(jié)構(gòu)可能會使性能下降。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)中的不足,提供一種基于基本塊的匯編代碼得出程序的 數(shù)據(jù)流圖的實現(xiàn)方法。
本發(fā)明解決其技術(shù)問題采用的技術(shù)方案如下
提供一種基于基本塊的匯編代碼得出程序的數(shù)據(jù)流圖的實現(xiàn)方法,包括以下步驟-
(1) 分類模塊對指令進行分類
分類模塊根據(jù)匯編代碼把指令分為三類第一種指令中有兩個輸入一個輸出;第二種指 令中含有一個輸入一個輸出;第三種指令中含有一個輸入零個輸出;
(2) 關(guān)系分析模塊對指令間的依賴關(guān)系進行分析并分類 指令間的依賴關(guān)系存在三種情況
第一種情況考慮第一種指令和第二種指令之間的依賴關(guān)系,再單獨考慮第三種指令之 間的依賴關(guān)系;
第二種情況考慮第二種指令和第三種指令之間的依賴關(guān)系,再單獨考慮第一種指令之 間的依賴關(guān)系;
第三種情況考慮第一種指令和第三種指令之間的依賴關(guān)系,再單獨考慮第二種指令之 間的依賴關(guān)系;(3)數(shù)據(jù)流圖分析模塊針對第一種情況下的指令間的依賴關(guān)系得出數(shù)據(jù)流圖 第一步,鏈表創(chuàng)建器建立鏈表
文件掃描器對匯編代碼文件中的匯編指令逐條進行掃描,掃描的同時鏈表創(chuàng)建器對每條 匯編指令建立指令結(jié)點;
指令結(jié)點node包含七個域op域、輸入一 inputl域、輸入二 i叩ut2域、輸出output 域、寄存器的個數(shù)num域、標(biāo)簽tag域、next域;
op域用來存放指令中的操作碼,輸入一 i叩utl域和輸入二 i叩ut2域是寄存器值的輸 入,輸出output域是寄存器值的產(chǎn)生者,next域用來存放下一個節(jié)點的地址;當(dāng)在一條指 令中有兩個相同的寄存器時,看作兩個不同的寄存器,因為寄存器的值不相同,在建立鏈表 的同時對標(biāo)簽tag域進行初始化為0,并計算每條指令中寄存器的個數(shù)nurn;
第二步,鏈表掃描器掃描鏈表
順序査找過程鏈表掃描器首先判斷結(jié)點的n咖域是否等于1,如果等于l,則該結(jié)點 單獨作為一個數(shù)據(jù)流圖;如果不為l,則把第一個結(jié)點的標(biāo)簽域tag設(shè)置為n,并且順序比 較第一個結(jié)點的輸出域與其余結(jié)點的輸入域;如果鏈表掃描器找到一個結(jié)點的輸入域與第一 個結(jié)點的輸出域相同,則把該結(jié)點的標(biāo)簽域tag設(shè)置為n,并且把該結(jié)點作為第一個結(jié)點; 順序比較該結(jié)點的輸出域與其余結(jié)點的輸入域,如果相同,則把該結(jié)點的標(biāo)簽域tag設(shè)置為 n;鏈表掃描器繼續(xù)順序查找, 一直査找到鏈表末尾;
鏈表掃描器返回到鏈表的頭結(jié)點,從頭結(jié)點開始査找,本次査找是査找結(jié)點的標(biāo)簽域 tag是否被修改過,如果找到結(jié)點的標(biāo)簽域tag沒有被修改過,則把該結(jié)點作為第一個結(jié)點, 重復(fù)上面的順序査找過程,但是不同的是該結(jié)點的標(biāo)簽要修改等于n+l;如果鏈表掃描器找 到標(biāo)簽域tag被修改的結(jié)點,則保持原來的值不變,并且在本次査找中,之前標(biāo)簽域tag修 改為n+1的結(jié)點要重新修改為n,停止本次査找;重復(fù)上面的順序査找過程;
新鏈表的順序査找過程和順序查找第一個鏈表num域值不為1的査找過程相同;
第三步,數(shù)據(jù)流圖輸出模塊輸出數(shù)據(jù)流圖
數(shù)據(jù)流圖輸出模塊根據(jù)鏈表中的每個結(jié)點的標(biāo)簽域tag值的不同,得到指令結(jié)點的數(shù)據(jù) 流圖;數(shù)據(jù)流圖輸出模塊把相同tag值的結(jié)點作為一個數(shù)據(jù)流圖,沒有相同的則單獨作為一 個數(shù)據(jù)流圖。
與背景技術(shù)相比,本發(fā)明具有的有益的效果是
程序的數(shù)據(jù)流圖可能出現(xiàn)不規(guī)則的情況,這就意味著數(shù)據(jù)流圖能夠背分割成數(shù)據(jù)流子圖。 本發(fā)明是根據(jù)匯編代碼對指令進行劃分,得出3種指令,然后分別考慮3種指令中的兩種指 令之間的依賴關(guān)系,得出程序的數(shù)據(jù)流圖。采用本方法可以提高指令的執(zhí)行效率,還可以提 高處理器性能。
圖1為本發(fā)明中考慮第一種指令和第二種指令之間的依賴關(guān)系得出數(shù)據(jù)流圖的流程圖。
具體實施例方式
本方法的具體過程及實例如下-
(1) 分類模塊對指令進行分類 分類模塊根據(jù)匯編代碼把指令分為三類。第一種指令該指令中有兩個輸入一個輸出,
如addqal,t4,t0,這條指令意思就是將al寄存器中的值加上t4寄存器中的值相加,并將 其和存放到tO寄存器中,addq表示指令操作碼,寄存器al、 t4表示兩個輸入,t0表示輸 出;第二種指令該指令中含有一個輸入一個輸出,如了 ldl t3,0(t0),這條指令意思 就是將寄存器t0中的值加上零后并將其和存儲到寄存器t3中,ldl表示指令操作碼,寄存 器t0表示輸入,寄存器t3表示輸出;第三中指令 一個輸入零個輸出,如bne 11, 0xl200eb2b, 這條指令意思就是如果寄存器tl中的值不相等零,就轉(zhuǎn)到地址0xl200eb2b處繼續(xù)執(zhí)行,bne 表示指令操作碼,寄存器tl表示輸入,0xl200eb2b是跳轉(zhuǎn)地址。
(2) 關(guān)系分析模塊對指令間的依賴關(guān)系進行分析并分類 在本方法中主要考慮三中情況,第一種情況考慮第一種指令和第二種指令之間的依賴
關(guān)系,再單獨考慮第三種指令之間的依賴關(guān)系;第二種情況考慮第二種指令和第三種指令
之間的依賴關(guān)系,再單獨考慮第一種指令之間的依賴關(guān)系;第三種情況考慮第一種指令和 第三種指令之間的依賴關(guān)系,再單獨考慮第二種指令之間的依賴關(guān)系。
(3) 數(shù)據(jù)流圖分析模塊針對第一種情況下的指令間的依賴關(guān)系得出數(shù)據(jù)流圖 本方法只實現(xiàn)第一種情況考慮第一種指令和第二種指令之間的依賴關(guān)系,再單獨考慮
第三種指令之間的依賴關(guān)系,主要分為以下幾步-第一步,鏈表創(chuàng)建器建立鏈表
文件掃描器對匯編代碼文件中的匯編指令逐條進行掃描,掃描的同時鏈表創(chuàng)建器對每條 匯編指令建立指令結(jié)點。
指令結(jié)點node包含七個域op域,輸入一 i叩utl域,輸入二 i叩ut2域,輸出output 域,寄存器的個數(shù)num域,標(biāo)簽tag域,next域。op域用來存放指令中的操作碼,輸入一 inputl域和輸入二 input2域是寄存器值的輸入,輸出output域是寄存器值的產(chǎn)生者,next 域用來存放下一個節(jié)點的地址,當(dāng)在一條指令中有兩個相同的寄存器時,看作兩個不同的寄 存器,因為寄存器的值不相同,在建立鏈表的同時對標(biāo)簽tag域進行初始化為O,并計算每 條指令中寄存器的個數(shù)num。第二步,鏈表掃描器掃描鏈表
順序查找過程鏈表掃描器首先判斷結(jié)點的num域是否等于1,如果等于1,就意味著 該條指令只有一個寄存器,也就是只有一個輸入,沒有輸出,屬于第三種指令,則建立新的 鏈表,把該結(jié)點信息復(fù)制到該鏈表的第一個結(jié)點中,如果在掃描過程中第二次遇到結(jié)點num 域為1的結(jié)點,則把結(jié)點信息復(fù)制到第二個結(jié)點中,依次類推;如果不為l,修改第一個結(jié) 點的標(biāo)簽域tag等于n,并且順序比較第一個結(jié)點的輸出域與其余結(jié)點的輸入域,如果鏈表 掃描器找到一個結(jié)點的輸入域與第一個結(jié)點的輸出域相同,則修改該結(jié)點的標(biāo)簽域tag等于 n,并且把該結(jié)點作為第一個結(jié)點,順序比較該結(jié)點的輸出域與其余結(jié)點的輸入域,如果相 同,則修改該結(jié)點的標(biāo)簽域tag等于n。鏈表掃描器繼續(xù)順序查找, 一直查找到鏈表末尾。
鏈表掃描器返回到鏈表的頭結(jié)點,從頭結(jié)點開始査找,本次查找是查找結(jié)點的標(biāo)簽域tag 是否被修改過,如果找到結(jié)點的標(biāo)簽域tag沒有被修改過,則把該結(jié)點作為第一個結(jié)點,重 復(fù)上面的順序查找過程,但是不同的是該結(jié)點的標(biāo)簽要修改等于n+l;如果鏈表掃描器找到 標(biāo)簽域tag被修改的結(jié)點,則保持原來的值不變,并且在本次查找中,之前標(biāo)簽域tag修改為 n+l的結(jié)點要重新修改為n,停止本次查找;重復(fù)上面的順序查找過程。
新鏈表的順序査找過程和順序査找第一個鏈表num域值不為1的查找過程相同。
第三步,數(shù)據(jù)流圖輸出模塊輸出數(shù)據(jù)流圖
數(shù)據(jù)流圖輸出模塊根據(jù)鏈表中每個結(jié)點的標(biāo)簽域tag值的不同,可以得到指令結(jié)點的數(shù) 據(jù)流圖。數(shù)據(jù)流圖輸出模塊把具有相同tag值的結(jié)點作為一個數(shù)據(jù)流圖,沒有相同的則單獨 作為一個數(shù)據(jù)流圖。
本發(fā)明中,分類模塊、關(guān)系分析模塊、數(shù)據(jù)流圖分析模塊、鏈表創(chuàng)建器、文件掃描器、 鏈表掃描器和數(shù)據(jù)流圖輸出模塊,均為常用的由軟件實現(xiàn)的功能性模塊。本領(lǐng)域技術(shù)人員通 過對本申請文本的理解,結(jié)合之前已掌握的知識,可以輕易實現(xiàn)有關(guān)軟件模塊的編寫,因此 不再贅述。
權(quán)利要求
1、一種基于基本塊的匯編代碼得出程序的數(shù)據(jù)流圖的實現(xiàn)方法,包括以下步驟(1)分類模塊對指令進行分類分類模塊根據(jù)匯編代碼把指令分為三類第一種指令中有兩個輸入一個輸出;第二種指令中含有一個輸入一個輸出;第三種指令中含有一個輸入零個輸出;(2)關(guān)系分析模塊對指令間的依賴關(guān)系進行分析并分類指令間的依賴關(guān)系存在三種情況第一種情況考慮第一種指令和第二種指令之間的依賴關(guān)系,再單獨考慮第三種指令之間的依賴關(guān)系;第二種情況考慮第二種指令和第三種指令之間的依賴關(guān)系,再單獨考慮第一種指令之間的依賴關(guān)系;第三種情況考慮第一種指令和第三種指令之間的依賴關(guān)系,再單獨考慮第二種指令之間的依賴關(guān)系;(3)數(shù)據(jù)流圖分析模塊針對第一種情況下的指令間的依賴關(guān)系得出數(shù)據(jù)流圖第一步,鏈表創(chuàng)建器建立鏈表文件掃描器對匯編代碼文件中的匯編指令逐條進行掃描,掃描的同時鏈表創(chuàng)建器對每條匯編指令建立指令結(jié)點;指令結(jié)點node包含七個域op域、輸入一input1域、輸入二input2域、輸出output域、寄存器的個數(shù)num域、標(biāo)簽tag域、next域;op域用來存放指令中的操作碼,輸入一input1域和輸入二input2域是寄存器值的輸入,輸出output域是寄存器值的產(chǎn)生者,next域用來存放下一個節(jié)點的地址;當(dāng)在一條指令中有兩個相同的寄存器時,看作兩個不同的寄存器,因為寄存器的值不相同,在建立鏈表的同時對標(biāo)簽tag域進行初始化為0,并計算每條指令中寄存器的個數(shù)num;第二步,鏈表掃描器掃描鏈表順序查找過程鏈表掃描器首先判斷結(jié)點的num域是否等于1,如果等于1,則該結(jié)點單獨作為一個數(shù)據(jù)流圖;如果不為1,則把第一個結(jié)點的標(biāo)簽域tag設(shè)置為n,并且順序比較第一個結(jié)點的輸出域與其余結(jié)點的輸入域;如果鏈表掃描器找到一個結(jié)點的輸入域與第一個結(jié)點的輸出域相同,則把該結(jié)點的標(biāo)簽域tag設(shè)置為n,并且把該結(jié)點作為第一個結(jié)點;順序比較該結(jié)點的輸出域與其余結(jié)點的輸入域,如果相同,則把該結(jié)點的標(biāo)簽域tag設(shè)置為n;鏈表掃描器繼續(xù)順序查找,一直查找到鏈表末尾;鏈表掃描器返回到鏈表的頭結(jié)點,從頭結(jié)點開始查找,本次查找是查找結(jié)點的標(biāo)簽域tag是否被修改過,如果找到結(jié)點的標(biāo)簽域tag沒有被修改過,則把該結(jié)點作為第一個結(jié)點,重復(fù)上面的順序查找過程,但是不同的是該結(jié)點的標(biāo)簽要修改等于n+1;如果鏈表掃描器找到標(biāo)簽域tag被修改的結(jié)點,則保持原來的值不變,并且在本次查找中,之前標(biāo)簽域tag修改為n+1的結(jié)點要重新修改為n,停止本次查找;重復(fù)上面的順序查找過程;新鏈表的順序查找過程和順序查找第一個鏈表num域值不為1的查找過程相同;第三步,數(shù)據(jù)流圖輸出模塊輸出數(shù)據(jù)流圖數(shù)據(jù)流圖輸出模塊根據(jù)鏈表中的每個結(jié)點的標(biāo)簽域tag值的不同,得到指令結(jié)點的數(shù)據(jù)流圖;數(shù)據(jù)流圖輸出模塊把相同tag值的結(jié)點作為一個數(shù)據(jù)流圖,沒有相同的則單獨作為一個數(shù)據(jù)流圖。
全文摘要
本發(fā)明涉及處理器結(jié)構(gòu)設(shè)計領(lǐng)域,旨在提供一種基于基本塊的匯編代碼得出程序的數(shù)據(jù)流圖的實現(xiàn)方法。該方法包括下述步驟分類模塊對指令進行分類;關(guān)系分析模塊對指令間的依賴關(guān)系進行分析并分類;數(shù)據(jù)流圖分析模塊針對第一種情況下的指令間的依賴關(guān)系得出數(shù)據(jù)流圖。本發(fā)明中,程序的數(shù)據(jù)流圖可能出現(xiàn)不規(guī)則的情況,這就意味著數(shù)據(jù)流圖能夠背分割成數(shù)據(jù)流子圖。本發(fā)明是根據(jù)匯編代碼對指令進行劃分,得出3種指令,然后分別考慮3種指令中的兩種指令之間的依賴關(guān)系,得出程序的數(shù)據(jù)流圖。采用本方法可以提高指令的執(zhí)行效率,還可以提高處理器性能。
文檔編號G06F9/30GK101655782SQ200910102299
公開日2010年2月24日 申請日期2009年9月10日 優(yōu)先權(quán)日2009年9月10日
發(fā)明者喬福明, 馮曉霞, 劉敬偉, 唐興盛, 樓學(xué)慶, 瞿有甜, 胡同森, 陳天洲 申請人:浙江大學(xué)