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

前瞻多線程劃分方法

文檔序號(hào):6482597閱讀:127來源:國知局
專利名稱:前瞻多線程劃分方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,提出了一種前瞻多線程劃分方法。
技術(shù)背景人類對(duì)計(jì)算能力無止境的需求促進(jìn)了硬件技術(shù)和軟件技術(shù)的飛速發(fā)展。當(dāng)前單片多核處 理器(Chip Multi-Processors, CMP)技術(shù)成為倍受關(guān)注的新技術(shù)之一。單片多核技術(shù)通過在 一塊芯片上集成多個(gè)相對(duì)簡(jiǎn)單的微處理器核心來并行執(zhí)行程序,從而提高處理器性能。由于 簡(jiǎn)單的微處理器核心易于設(shè)計(jì)、功耗較低,所以CMP技術(shù)不但能提升系統(tǒng)性能,而且部分解 決了功耗和散熱問題。利用CMP技術(shù)提高系統(tǒng)性能的關(guān)鍵是充分發(fā)揮多個(gè)微處理器核心的并行優(yōu)勢(shì)。串行程序 雖易于設(shè)計(jì)和調(diào)試,卻難以利用CMP技術(shù)的并行特性;并行程序雖然能更多獲益于CMP技術(shù), 但并行編程對(duì)程序員能力要求較高。對(duì)于復(fù)雜的并行編程語言,用戶更愿意使用傳統(tǒng)的高級(jí) 語言,而且希望能盡可能地重用已開發(fā)出的軟件。在這種情況下,串行程序的并行化方法受 到了廣泛的重視。如果在保證程序語義不變的條件下,將串行程序劃分為若干并行線程,那么就能夠充分 利用CMP技術(shù)并行的優(yōu)點(diǎn)。線程級(jí)前瞻(Thread Level Speculation, TLS)技術(shù)是線程執(zhí)行所 需參數(shù)在編譯階段不確定的情況下,通過數(shù)據(jù)預(yù)取、數(shù)據(jù)推測(cè)等方法消除線程間的依賴關(guān)系, 創(chuàng)建出能夠并行執(zhí)行的前瞻線程。通過線程前瞻執(zhí)行和相應(yīng)的前瞻失效處理機(jī)制可以去除線 程間的假相關(guān),發(fā)現(xiàn)并維護(hù)真相關(guān),降低線程之間的依賴程度,提高線程之間的并行度?,F(xiàn)有的線程劃分方法存在如下不足第一,多數(shù)沒有使用線程級(jí)前瞻技術(shù),第二,考慮 了線程級(jí)前瞻技術(shù)的劃分方法,如SpecDSWP等,僅只對(duì)應(yīng)用程序中具有較高的覆蓋率和很好 的并行性的循環(huán)進(jìn)行了考慮,沒有綜合考慮循環(huán)外的其他部分。在本前瞻多線程劃分方法中, 將循環(huán)作為研究對(duì)象,并綜合考慮非循環(huán)部分。利用拓?fù)湫蛄刑赜械那昂笾萍s關(guān)系指導(dǎo)前瞻 多線程的劃分,通過控制相關(guān)圖和數(shù)據(jù)相關(guān)圖分別挖掘程序中的數(shù)據(jù)相關(guān)和控制相關(guān),并利 用前瞻節(jié)點(diǎn)實(shí)現(xiàn)線程級(jí)前瞻技術(shù)。 發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是提供一種前瞻多線程劃分方法,在單片多核處理器平臺(tái)上,針對(duì)單線程應(yīng)用程序,通過前瞻執(zhí)行,利用拓?fù)湫蛄刑赜械捻樞蜿P(guān)系,將應(yīng)用程序劃分為一 個(gè)個(gè)多線程,能減少多線程執(zhí)行時(shí)的相關(guān)性沖突和不必要的延遲等待,加速單線程應(yīng)用程序 在多核處理器上的執(zhí)行速度,提高處理器利用率。為達(dá)到上述目的,本發(fā)明采用下述技術(shù)方案上述前瞻多線程劃分方法,該方法首先為 單線程應(yīng)用程序中的每一個(gè)個(gè)循環(huán)語句基本塊和每一個(gè)個(gè)非循環(huán)語句基本塊構(gòu)造相應(yīng)的擴(kuò)展 的程序相關(guān)圖;其次為每一個(gè)個(gè)擴(kuò)展的程序相關(guān)圖設(shè)計(jì)相應(yīng)的有向無環(huán)圖;接著為每一個(gè)個(gè) 有向無環(huán)圖設(shè)計(jì)前瞻節(jié)點(diǎn),并從該有向無環(huán)圖中去掉該節(jié)點(diǎn);接著為每一個(gè)個(gè)有向無環(huán)圖進(jìn) 行拓?fù)渑判?;最后按照單線程應(yīng)用程序中的順序語義和得出的拓?fù)湫蛄袨閱纹嗪颂幚砥鲃?分前瞻多線程,其具體步驟包括-101、 構(gòu)造擴(kuò)展的程序相關(guān)圖為單線程應(yīng)用程序中的每一個(gè)個(gè)循環(huán)語句基本塊和每一個(gè) 個(gè)非循環(huán)語句基本塊構(gòu)造擴(kuò)展的程序相關(guān)圖;102、 構(gòu)造有向無環(huán)圖根據(jù)擴(kuò)展的程序相關(guān)圖為基本塊構(gòu)造有向無環(huán)圖;103構(gòu)造整個(gè)單線程應(yīng)用程序的程序流程圖以有向無環(huán)圖為單位,根據(jù)程序的流程順 序,構(gòu)造整個(gè)單線程應(yīng)用程序的程序流程圖;104、 構(gòu)造每一個(gè)有向無環(huán)圖的前瞻節(jié)點(diǎn)以有向無環(huán)圖為單位,根據(jù)步驟103所述的整 個(gè)單線程應(yīng)用程序的程序流程圖構(gòu)造每一個(gè)有向無環(huán)圖的前瞻節(jié)點(diǎn),并從該有向無環(huán)圖中去 掉此前瞻節(jié)點(diǎn)和以此前瞻節(jié)點(diǎn)為入節(jié)點(diǎn)和出節(jié)點(diǎn)的所有有向邊;105、 構(gòu)造一個(gè)拓?fù)湫蛄懈鶕?jù)步驟104所述的每一個(gè)有向無環(huán)圖構(gòu)造一個(gè)拓?fù)湫蛄校?06、 為單片多核處理器劃分前瞻多線程根據(jù)步驟104所述的前瞻節(jié)點(diǎn)和步驟105所述 的拓?fù)湫蛄?,為單片多核處理器劃分為一個(gè)個(gè)前瞻線程。上述步驟101構(gòu)造擴(kuò)展的程序相關(guān)圖,其具體步驟如下201、將單線程應(yīng)用程序劃分為一個(gè)個(gè)循環(huán)語句序列作為一個(gè)循環(huán)基本塊和從第一個(gè)循環(huán) 開始,每相鄰兩個(gè)循環(huán)基本塊之間的非循環(huán)語句序列作為一個(gè)非循環(huán)基本塊;202、判斷擴(kuò)展的程序相關(guān)圖的基本塊是否為循環(huán)基本塊,若是,執(zhí)行步驟203;否則, 執(zhí)行步驟207;203、將循環(huán)基本塊中的每一條語句依次編號(hào),并作為一個(gè)節(jié)點(diǎn)單位,構(gòu)造循環(huán)基本塊的 程序流程圖;6定當(dāng)前語句是否對(duì)某一存儲(chǔ)單元進(jìn)行了 寫操作且此基本塊中的其他語句有對(duì)同一存儲(chǔ)單元進(jìn)行的訪問操作,若有,則當(dāng)前語句與訪 問語句之間存在一條有向邊,逐步分析,構(gòu)造循環(huán)基本塊的數(shù)據(jù)相關(guān)圖;206、 在步驟204所述的控制相關(guān)圖中,逐一加入步驟205所述的每一條有向邊,若此 有向邊是由于一次迭代產(chǎn)生,則直接添加,否則,復(fù)制步驟204所述的控制相關(guān)圖,并以不 同的循環(huán)迭代區(qū)分原控制相關(guān)圖和復(fù)制的控制相關(guān)圖中的相關(guān)節(jié)點(diǎn),然后添加相應(yīng)的有向邊;207、 確定非循環(huán)基本塊的每一個(gè)子塊入口語句,該入口語句為三種語句基本塊中的 第一條語句;由條件轉(zhuǎn)移語句或無條件轉(zhuǎn)移語句轉(zhuǎn)移到的語句;緊跟在條件轉(zhuǎn)移語句后面的 語句;208、 根據(jù)步驟207所述的子塊入口語句,構(gòu)造相應(yīng)子塊,子塊為每一個(gè)入口語句到下 一個(gè)入口語句之間的語句序列,其中包括前一個(gè)入口語句,若后一個(gè)入口語句為轉(zhuǎn)移語句或 者停語句,則包含在此子塊中;否則,不包含在此子塊中;209、 根據(jù)步驟207所述的子塊,以子塊為節(jié)點(diǎn)單位,并進(jìn)行編號(hào),作為擴(kuò)展的程序相 關(guān)圖的節(jié)點(diǎn),構(gòu)造非循環(huán)基本塊的程序流程圖;210、 根據(jù)程序流程關(guān)系,構(gòu)造步驟209所述的所有節(jié)點(diǎn),得到擴(kuò)展的程序相關(guān)圖。 上述步驟102中的構(gòu)造有向無環(huán)圖,其具體步驟如下301、 判斷由步驟206或步驟210得到的擴(kuò)展的程序相關(guān)圖中是否存在環(huán),若存在,則執(zhí) 行步驟302;否則,執(zhí)行步驟303;302、 將擴(kuò)展的程序相關(guān)圖中的強(qiáng)連通部分合并為一個(gè)節(jié)點(diǎn);303、 直接得到擴(kuò)展的程序相關(guān)圖相對(duì)應(yīng)的一個(gè)有向無環(huán)圖。 上述步驟104中的構(gòu)造前瞻節(jié)點(diǎn)的操作步驟如下401、 判斷基本塊是否為循環(huán)基本塊,若是,則執(zhí)行步驟402;否則,執(zhí)行步驟403;402、 遍歷循環(huán)語句基本塊中的語句序列,在該有向無環(huán)圖中將循環(huán)基本塊中的循環(huán)控制 節(jié)點(diǎn)置為前瞻節(jié)點(diǎn);403、 遍歷非循環(huán)語句基本塊的所有子塊,判斷是否存在以單一條件轉(zhuǎn)移語句作為子塊的節(jié)點(diǎn),若存在,則執(zhí)行步驟404;否則結(jié)束程序;404、將單獨(dú)的條件轉(zhuǎn)移語句子塊置為前瞻節(jié)點(diǎn)。 上述步驟105中的構(gòu)造拓?fù)湫蛄芯唧w步驟如下501、 采用鄰接矩陣M表示此有向無環(huán)圖,M[i, j] = l表示節(jié)點(diǎn)i先于j, a[i, j]=0, 表示節(jié)點(diǎn)i與j不存在先后關(guān)系;根據(jù)上述的鄰接矩陣計(jì)算各個(gè)節(jié)點(diǎn)的入度,并定義一個(gè)一 維數(shù)組Array保存各個(gè)節(jié)點(diǎn)的入度;502、 判斷數(shù)組Array中是否存在值為O的元素,若存在則執(zhí)行步驟503;否則,直接結(jié)束;503、 依次遍歷步驟501所述的一維數(shù)組Array,找到每一次所有入度為零的節(jié)點(diǎn),若節(jié) 點(diǎn)個(gè)數(shù)不止一個(gè),則將這些節(jié)點(diǎn)歸為一個(gè)等價(jià)類,從有向無環(huán)圖中刪除這些節(jié)點(diǎn),并在有向 無環(huán)圖中逐一去掉以這類節(jié)點(diǎn)為入節(jié)點(diǎn)和出節(jié)點(diǎn)的所有有向邊,每去掉一條有向邊,就將這 條有向邊所指向的節(jié)點(diǎn)的入度減1,并在數(shù)組Array中更新相應(yīng)項(xiàng),最后將數(shù)組Array中刪 除節(jié)點(diǎn)相對(duì)應(yīng)的項(xiàng)置為-l;504、 判斷數(shù)組Array中是否所有元素均為-1,若是,則結(jié)束程序;否則,執(zhí)行步驟502。 上述步驟402或步驟403確定的前瞻節(jié)點(diǎn)判斷和處理流程如下601、 根據(jù)步驟402或步驟403確定的前瞻節(jié)點(diǎn),在前瞻節(jié)點(diǎn)對(duì)應(yīng)的語句序列后,添加 前瞻判斷語句和相應(yīng)的處理機(jī)制,判斷前瞻節(jié)點(diǎn)執(zhí)行是否正確,若正確,則結(jié)束此程序;否 則執(zhí)行歩驟602;602、 回滾基本塊的執(zhí)行,從基本塊的開始重新執(zhí)行。 依照拓?fù)湫蛄邪凑仗囟ǖ奶幚砥鲿r(shí)鐘周期分別映射和處理各個(gè)拓?fù)涔?jié)點(diǎn) 本發(fā)明的前瞻多線程劃分方法與已有技術(shù)相比較,具有如下面顯而易見的突出實(shí)質(zhì)性特點(diǎn)和顯著優(yōu)點(diǎn)該方法以循環(huán)語句和非循環(huán)語句前瞻多線程劃分,能夠充分挖掘程序中的控 制相關(guān)和數(shù)據(jù)相關(guān),充分利用線程級(jí)并行性,并通過前瞻執(zhí)行,減少不必要的延遲等待,加 速程序在多核處理器上的執(zhí)行速度,提高處理器利用率。


圖1是本發(fā)明中的前瞻多線程劃分方法的流程圖; 圖2是本發(fā)明中的擴(kuò)展的程序相關(guān)圖的構(gòu)造流程圖;圖3是本發(fā)明中的有向無環(huán)圖的構(gòu)造流程圖; 圖4是本發(fā)明中的前瞻節(jié)點(diǎn)構(gòu)造流程圖; 圖5是本發(fā)明中的拓?fù)湫蛄袠?gòu)造流程圖; 圖6是本發(fā)明中的前瞻判斷和處理流程圖。
具體實(shí)施例方式
本發(fā)明的一個(gè)優(yōu)選實(shí)施例結(jié)合附圖詳述如下本實(shí)施例所述方案的應(yīng)用環(huán)境是面向單片 多核處理器的線程級(jí)并行執(zhí)行環(huán)境,本實(shí)施例不限定所述技術(shù)方案應(yīng)用環(huán)境中多核處理器架 構(gòu),線程調(diào)度方式和前瞻失效優(yōu)化處理。
下面結(jié)合說明書附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明。
參照?qǐng)Dl,上述前瞻多線程劃分方法,該方法步驟包括
101、 為單線程應(yīng)用程序中的每一個(gè)循環(huán)語句基本塊和每一個(gè)非循環(huán)語句基本塊構(gòu)造擴(kuò)展 的程序相關(guān)102、 根據(jù)擴(kuò)展的程序相關(guān)圖為基本塊構(gòu)造有向無環(huán)103、 以有向無環(huán)圖為單位,根據(jù)程序的流程順序,構(gòu)造整個(gè)單線程應(yīng)用程序的程序流程
104、 以有向無環(huán)圖為單位,根據(jù)步驟103所述的整個(gè)單線程應(yīng)用程序的程序流程圖構(gòu)造 每一個(gè)有向無環(huán)圖的前瞻節(jié)點(diǎn),并從該有向無環(huán)圖中去掉此前瞻節(jié)點(diǎn)和以此前瞻節(jié)點(diǎn)為入節(jié) 點(diǎn)和出節(jié)點(diǎn)的所有有向邊;
105、 根據(jù)步驟104所述的每一個(gè)有向無環(huán)圖構(gòu)造一個(gè)拓?fù)湫蛄校?br> 106、 根據(jù)步驟104所述的前瞻節(jié)點(diǎn)和步驟105所述的拓?fù)湫蛄?,為單片多核處理器劃?為一個(gè)個(gè)前瞻線程。
參照?qǐng)D2,上述步驟101構(gòu)造擴(kuò)展的程序相關(guān)圖,其具體步驟如下
201、 將單線程應(yīng)用程序劃分為一個(gè)個(gè)循環(huán)基本塊和非循環(huán)基本塊;
202、 判斷當(dāng)前需要構(gòu)造擴(kuò)展的程序相關(guān)圖的基本塊是否為循環(huán)基本塊,若是,執(zhí)行步驟 203;否則,執(zhí)行步驟207;
203、 將循環(huán)基本塊中的每一條語句依次編號(hào),并作為一個(gè)節(jié)點(diǎn)單位,構(gòu)造循環(huán)基本塊的 程序流程9204、循環(huán)控制語句到循環(huán)被控語句序列的每一條語句節(jié)點(diǎn),都存在一條有向邊,參照步 驟203所述的循環(huán)流程圖,以此構(gòu)造循環(huán)基本塊的控制相關(guān)205、 逐個(gè)分析循環(huán)基本塊中的每一條語句,確定當(dāng)前語句是否對(duì)某一存儲(chǔ)單元進(jìn)行了 寫操作且此基本塊中的其他語句有對(duì)同一存儲(chǔ)單元進(jìn)行的訪問操作,若有,則當(dāng)前語句與訪 問語句之間存在一條有向邊。逐步分析,構(gòu)造循環(huán)基本塊的數(shù)據(jù)相關(guān)206、 在步驟204所述的控制相關(guān)圖中,逐一加入步驟205所述的每一條有向邊,若此有 向邊是由于一次迭代產(chǎn)生,則直接添加,否則,復(fù)制驟204所述的控制相關(guān)圖,并以不同的 循環(huán)迭代區(qū)分原控制相關(guān)圖和復(fù)制的控制相關(guān)圖中的相關(guān)節(jié)點(diǎn),然后添加相應(yīng)的有向邊;
207、 確定非循環(huán)基本塊的每一個(gè)子塊入口語句為以下三種語句該入口語句基本塊中的 第一條語句;由條件轉(zhuǎn)移語句或無條件轉(zhuǎn)移語句轉(zhuǎn)移到的語句;緊跟在條件轉(zhuǎn)移語句后面的 語句;
208、 根據(jù)步驟207所述的子塊入口語句,構(gòu)造相應(yīng)子塊,子塊為每一個(gè)入口語句到下 一個(gè)入口語句之間的語句序列,其中包括前一個(gè)入口語句,若后一個(gè)入口語句為轉(zhuǎn)移語句或 者停語句,則包含在此子塊中;否則,不包含在此子塊中;
209、 根據(jù)步驟207所述的子塊,以子塊為單位,并進(jìn)行編號(hào),作為擴(kuò)展的程序相關(guān)圖 的節(jié)點(diǎn),構(gòu)造非循環(huán)基本塊的程序流程210、 根據(jù)程序流程關(guān)系,構(gòu)造步驟209所述的所有節(jié)點(diǎn),得到擴(kuò)展的程序相關(guān)圖。 參照?qǐng)D3,上述步驟102中構(gòu)造有向無環(huán)圖,其具體步驟如下
301、 判斷由步驟206或步驟210得到的擴(kuò)展的程序相關(guān)圖中是否存在環(huán),若存在,則執(zhí) 行步驟302;否則,執(zhí)行步驟303;
302、 將擴(kuò)展的程序相關(guān)圖中的強(qiáng)連通部分合并為一個(gè)節(jié)點(diǎn);
303、 直接得到擴(kuò)展的程序相關(guān)圖相對(duì)應(yīng)的一個(gè)有向無環(huán)圖。 參照?qǐng)D4,上述步驟104中構(gòu)造前瞻節(jié)點(diǎn)的操作步驟如下
401、 判斷基本塊是否為循環(huán)基本塊,若是,則執(zhí)行步驟402;否則,執(zhí)行步驟403;
402、 遍歷循環(huán)語句基本塊中的語句序列,在該有向無環(huán)圖中將循環(huán)基本塊中的循環(huán)控制 節(jié)點(diǎn)置為前瞻節(jié)點(diǎn);
403、 遍歷非循環(huán)語句基本塊的所有子塊,判斷是否存在以單一條件轉(zhuǎn)移語句作為子塊的節(jié)點(diǎn),若存在,則執(zhí)行步驟404;否則結(jié)束程序;
404、將單獨(dú)的條件轉(zhuǎn)移語句子塊置為前瞻節(jié)點(diǎn)。
參照?qǐng)D5,上述步驟105中構(gòu)造拓?fù)湫蛄芯唧w步驟如下
501、 采用鄰接矩陣M表示此有向無環(huán)圖,M[i, j] 二l表示節(jié)點(diǎn)i先于j, a[i, j]=0, 表示節(jié)點(diǎn)i與j不存在先后關(guān)系;根據(jù)上述的鄰接矩陣計(jì)算各個(gè)節(jié)點(diǎn)的入度,并定義一個(gè)一 維數(shù)組Array保存各個(gè)節(jié)點(diǎn)的入度;
502、 判斷數(shù)組Array中是否存在值為O的元素,若存在則執(zhí)行步驟503;否則,直接結(jié)
束;
503、 依次遍歷步驟501所述的一維數(shù)組Array,找到每一次所有入度為零的節(jié)點(diǎn),若節(jié) 點(diǎn)個(gè)數(shù)不止一個(gè),則將這些節(jié)點(diǎn)歸為一個(gè)等價(jià)類,從有向無環(huán)圖中刪除這些節(jié)點(diǎn),并在有向 無環(huán)圖中逐一去掉以這類節(jié)點(diǎn)為入節(jié)點(diǎn)和出節(jié)點(diǎn)的所有有向邊,每去掉一條有向邊,就將這 條有向邊所指向的節(jié)點(diǎn)的入度減1,并在數(shù)組Array中更新相應(yīng)項(xiàng),最后將數(shù)組Array中刪 除節(jié)點(diǎn)相對(duì)應(yīng)的項(xiàng)置為-l;
504、 判斷數(shù)組Array中是否所有元素均為-1,若是,則結(jié)束程序;否則,執(zhí)行步驟502。 參照?qǐng)D6,上述步驟402或步驟403確定的前瞻節(jié)點(diǎn)判斷和處理流程如下-
601、 根據(jù)步驟402或步驟403確定的前瞻節(jié)點(diǎn),在前瞻節(jié)點(diǎn)對(duì)應(yīng)的語句序列后,添加 前瞻判斷語句和相應(yīng)的處理機(jī)制,判斷前瞻節(jié)點(diǎn)執(zhí)行是否正確,若正確,則結(jié)束此程序;否 則執(zhí)行步驟602;
602、 回滾基本塊的執(zhí)行,從基本塊的開始重新執(zhí)行。
以上對(duì)本基于拓?fù)湫蛄械那罢岸嗑€程劃分方法,進(jìn)行了詳細(xì)的介紹。本文結(jié)合說明書附 圖和具體實(shí)施例進(jìn)行闡述只是用于幫助理解本發(fā)明的方法和核心思想;同時(shí),對(duì)于本領(lǐng)域的 一般技術(shù)人員,依據(jù)本發(fā)明的方法和思想,在具體實(shí)施方式
和應(yīng)用范圍上均會(huì)有改變之處, 綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
1權(quán)利要求
1、一種前瞻多線程劃分方法,其特征在于,該方法首先為單線程應(yīng)用程序中的每一個(gè)個(gè)循環(huán)語句基本塊和每一個(gè)個(gè)非循環(huán)語句基本塊構(gòu)造相應(yīng)的擴(kuò)展的程序相關(guān)圖;其次為每一個(gè)個(gè)擴(kuò)展的程序相關(guān)圖設(shè)計(jì)相應(yīng)的有向無環(huán)圖;接著為每一個(gè)個(gè)有向無環(huán)圖設(shè)計(jì)前瞻節(jié)點(diǎn),并從該有向無環(huán)圖中去掉該節(jié)點(diǎn);接著為每一個(gè)個(gè)有向無環(huán)圖進(jìn)行拓?fù)渑判?;最后按照單線程應(yīng)用程序中的順序語義和得出的拓?fù)湫蛄袨閱纹嗪颂幚砥鲃澐智罢岸嗑€程,其具體步驟包括101、構(gòu)造擴(kuò)展的程序相關(guān)圖為單線程應(yīng)用程序中的每一個(gè)個(gè)循環(huán)基本塊和每一個(gè)個(gè)非循環(huán)基本塊構(gòu)造擴(kuò)展的程序相關(guān)圖;102、構(gòu)造有向無環(huán)圖根據(jù)擴(kuò)展的程序相關(guān)圖為基本塊構(gòu)造有向無環(huán)圖;103、構(gòu)造整個(gè)單線程應(yīng)用程序的程序流程圖以有向無環(huán)圖為單位,根據(jù)程序的流程順序,構(gòu)造整個(gè)單線程應(yīng)用程序的程序流程圖;104、構(gòu)造每一個(gè)有向無環(huán)圖的前瞻節(jié)點(diǎn)以有向無環(huán)圖為單位,根據(jù)步驟103所述的整個(gè)單線程應(yīng)用程序的程序流程圖構(gòu)造每一個(gè)有向無環(huán)圖的前瞻節(jié)點(diǎn),并從該有向無環(huán)圖中去掉此前瞻節(jié)點(diǎn)和以此前瞻節(jié)點(diǎn)為入節(jié)點(diǎn)和出節(jié)點(diǎn)的所有有向邊;105、構(gòu)造一個(gè)拓?fù)湫蛄懈鶕?jù)步驟104所述的每一個(gè)有向無環(huán)圖構(gòu)造一個(gè)拓?fù)湫蛄校?06、為單片多核處理器劃分前瞻多線程根據(jù)步驟104所述的前瞻節(jié)點(diǎn)和步驟105所述的拓?fù)湫蛄校瑸閱纹嗪颂幚砥鲃澐譃橐粋€(gè)個(gè)前瞻線程。
2、 根據(jù)權(quán)利要求1所述的前瞻多線程劃分方法,其特征在于,上述步驟101構(gòu)造擴(kuò)展的程序 相關(guān)圖,其具體步驟如下(201、 將單線程應(yīng)用程序劃分為一個(gè)個(gè)以循環(huán)語句序列作為一個(gè)循環(huán)基本塊和從第一個(gè)循 環(huán)開始,每相鄰兩個(gè)循環(huán)基本塊之間的非循環(huán)語句序列作為一個(gè)非循環(huán)基本塊;(202、 判斷擴(kuò)展的程序相關(guān)圖的基本塊是否為循環(huán)基本塊,若是,執(zhí)行步驟203;否則, 執(zhí)行步驟207;(203、 將循環(huán)基本塊中的每一條語句依次編號(hào),并作為一個(gè)節(jié)點(diǎn)單位,構(gòu)造循環(huán)基本塊的 程序流程圖;(204、 循環(huán)控制語句到循環(huán)被控語句序列的每一條語句節(jié)點(diǎn),都存在一條有向邊,參照步 驟203所述的循環(huán)流程圖,以此構(gòu)造循環(huán)基本塊的控制相關(guān)圖;(205、 逐個(gè)分析循環(huán)基本塊中的每一條語句,確定當(dāng)前語句是否對(duì)某一存儲(chǔ)單元進(jìn)行了 寫操作且此基本塊中的其他語句有對(duì)同一存儲(chǔ)單元進(jìn)行的訪問操作,若有,則當(dāng)前語句與訪 問語句之間存在一條有向邊,逐步分析,構(gòu)造循環(huán)基本塊的數(shù)據(jù)相關(guān)圖;·206、 在步驟204所述的控制相關(guān)圖中,逐一加入步驟205所述的每一條有向邊,若此 有向邊是由于一次迭代產(chǎn)生,則直接添加,否則,復(fù)制步驟204所述的控制相關(guān)圖,并以不 同的循環(huán)迭代區(qū)分原控制相關(guān)圖和復(fù)制的控制相關(guān)圖中的相關(guān)節(jié)點(diǎn),然后添加相應(yīng)的有向邊;·207、 確定非循環(huán)基本塊的每一個(gè)子塊入U(xiǎn)J語句,該入口語句為三種語句基本塊中的 第一條語句;由條件轉(zhuǎn)移語句或無條件轉(zhuǎn)移語句轉(zhuǎn)移到的語句;緊跟在條件轉(zhuǎn)移語句后面的 語句;·208、 根據(jù)步驟207所述的子塊入口語句,構(gòu)造相應(yīng)子塊,子塊為每一個(gè)入口語句到下 一個(gè)入口語句之間的語句序列,其中包括前一個(gè)入口語句,若后一個(gè)入口語句為轉(zhuǎn)移語句或 者停語句,則包含在此子塊中;否則,不包含在此子塊中;·209、 根據(jù)步驟207所述的子塊,以子塊為節(jié)點(diǎn)單位,并進(jìn)行編號(hào),作為擴(kuò)展的程序相 關(guān)圖的節(jié)點(diǎn),構(gòu)造非循環(huán)基本塊的程序流程圖;·210、 根據(jù)程序流程關(guān)系,構(gòu)造步驟209所述的所有節(jié)點(diǎn),得到擴(kuò)展的程序相關(guān)圖。
3、 根據(jù)權(quán)利要求2所述的前瞻多線程劃分方法,其特征在于,上述步驟102中構(gòu)造有向無環(huán) 圖,其具體步驟如下-·301、 判斷由步驟206或步驟210得到的擴(kuò)展的程序相關(guān)圖中是否存在環(huán),若存在,則執(zhí) 行步驟302;否則,執(zhí)行步驟303;·302、 將擴(kuò)展的程序相關(guān)圖中的強(qiáng)連通部分合并為一個(gè)節(jié)點(diǎn);·303、 直接得到擴(kuò)展的程序相關(guān)圖相對(duì)應(yīng)的一個(gè)有向無環(huán)圖。
4、 根據(jù)權(quán)利要求4所述的前瞻多線程劃分方法,其特征在于,上述步驟104中構(gòu)造前瞻節(jié)點(diǎn) 的操作步驟如下·401、 判斷基本塊是否為循環(huán)基本塊,若是,則執(zhí)行步驟402;否則,執(zhí)行步驟403;·402、 遍歷循環(huán)語句基本塊中的語句序列,在該有向無環(huán)圖中將循環(huán)基本塊中的循環(huán)控制 節(jié)點(diǎn)置為前瞻節(jié)點(diǎn);·403、 遍歷非循環(huán)語句基本塊的所有子塊,判斷是否存在以單一條件轉(zhuǎn)移語句作為子塊的 節(jié)點(diǎn),若存在,則執(zhí)行步驟404;否則結(jié)束程序;·404、 將單獨(dú)的條件轉(zhuǎn)移語句子塊置為前瞻節(jié)點(diǎn)。
5、 根據(jù)權(quán)利要求4所述的前瞻多線程劃分方法,其特征在于,上述步驟105中構(gòu)造拓?fù)湫蛄?具體步驟如下·501、采用鄰接矩陣M表示此有向無環(huán)圖,M[i, j] = l表示節(jié)點(diǎn)i先于j, a[i, j]=0, 表示節(jié)點(diǎn)i與j不存在先后關(guān)系;根據(jù)上述的鄰接矩陣計(jì)算各個(gè)節(jié)點(diǎn)的入度,并定義一個(gè)一維數(shù)組Array保存各個(gè)節(jié)點(diǎn)的入度;,502、 判斷數(shù)組Array中是否存在值為0的元素,若存在則執(zhí)行步驟503;否則,直接結(jié)束;,503、 依次遍歷步驟501所述的一維數(shù)組Array,找到每一次所有入度為零的節(jié)點(diǎn),若節(jié) 點(diǎn)個(gè)數(shù)不止一個(gè),則將這些節(jié)點(diǎn)歸為一個(gè)等價(jià)類,從有向無環(huán)圖中刪除這些節(jié)點(diǎn),并在有向 無環(huán)圖中逐一去掉以這類節(jié)點(diǎn)為入節(jié)點(diǎn)和出節(jié)點(diǎn)的所有有向邊,每去掉一條有向邊,就將這 條有向邊所指向的節(jié)點(diǎn)的入度減1,并在數(shù)組Array中更新相應(yīng)項(xiàng),最后將數(shù)組Array中刪 除節(jié)點(diǎn)相對(duì)應(yīng)的項(xiàng)置為-l;,504、 判斷數(shù)組Array中是否所有元素均為-1,若是,則結(jié)束程序;否則,執(zhí)行步驟502。
6、根據(jù)權(quán)利要求4或5所述的前瞻多線程劃分方法,其特征在于,上述步驟402或步驟403確定的前瞻節(jié)點(diǎn)判斷和處理流程如下,601、 根據(jù)步驟402或步驟403確定的前瞻節(jié)點(diǎn),在前瞻節(jié)點(diǎn)對(duì)應(yīng)的語句序列后,添加 前瞻判斷語句和相應(yīng)的處理機(jī)制,判斷前瞻節(jié)點(diǎn)執(zhí)行是否正確,若正確,則結(jié)束此程序;否 則執(zhí)行步驟602;,602、 回滾基本塊的執(zhí)行,從基本塊的開始重新執(zhí)行。
全文摘要
本發(fā)明公開了一種前瞻多線程劃分方法,該方法首先為單線程應(yīng)用程序中的每一個(gè)個(gè)循環(huán)語句基本塊和每一個(gè)個(gè)非循環(huán)語句基本塊構(gòu)造相應(yīng)的擴(kuò)展的程序相關(guān)圖;其次為每一個(gè)個(gè)擴(kuò)展的程序相關(guān)圖設(shè)計(jì)相應(yīng)的有向無環(huán)圖;接著為每一個(gè)個(gè)有向無環(huán)圖設(shè)計(jì)前瞻節(jié)點(diǎn),并從該有向無環(huán)圖中去掉該節(jié)點(diǎn);接著為每一個(gè)個(gè)有向無環(huán)圖進(jìn)行拓?fù)渑判?;最后按照單線程應(yīng)用程序中的順序語義和得出的拓?fù)湫蛄袨閱纹嗪颂幚砥鲃澐智罢岸嗑€程。該方法以循環(huán)語句和非循環(huán)語句前瞻多線程劃分,能夠充分挖掘程序中的控制相關(guān)和數(shù)據(jù)相關(guān),充分利用線程級(jí)并行性,并通過前瞻執(zhí)行,減少不必要的延遲等待,加速程序在多核處理器上的執(zhí)行速度,提高處理器利用率。
文檔編號(hào)G06F9/38GK101655783SQ20091005088
公開日2010年2月24日 申請(qǐng)日期2009年5月8日 優(yōu)先權(quán)日2009年5月8日
發(fā)明者悅 吳, 唐立三, 皓 張, 磊 徐, 楊洪斌, 雷超付 申請(qǐng)人:上海大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
增城市| 唐河县| 长宁县| 格尔木市| 巍山| 淮滨县| 凭祥市| 黄冈市| 十堰市| 河池市| 诸城市| 佛坪县| 措美县| 介休市| 庐江县| 泉州市| 蕲春县| 榆社县| 玉屏| 武定县| 晋州市| 咸丰县| 淮阳县| 渭南市| 湖口县| 松溪县| 常德市| 皋兰县| 牟定县| 永登县| 金华市| 平阳县| 磐石市| 宝应县| 文化| 迁西县| 大城县| 黎城县| 洪湖市| 准格尔旗| 沧源|