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

程序重寫(xiě)裝置的制作方法

文檔序號(hào):6463009閱讀:232來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):程序重寫(xiě)裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明,尤其涉及對(duì)包含存儲(chǔ)器存取指令的指令串進(jìn)行依賴(lài)關(guān)系緩解 的程序重寫(xiě)裝置。
背景技術(shù)
近年來(lái),處理器的處理速度的提高非???,然而,主存儲(chǔ)器的存取速度的提高較慢,兩者的速度的差距逐年變大。據(jù)此,以往指出的問(wèn)題是 在依據(jù)具有存儲(chǔ)器的信息處理裝置高速進(jìn)行信息處理時(shí),存儲(chǔ)器存取成為瓶頸。為了解決所述問(wèn)題所知道的方法是對(duì)指令進(jìn)行調(diào)度(scheduling),使 得盡可能將為了獲得在主存儲(chǔ)器的存儲(chǔ)區(qū)域所存儲(chǔ)的數(shù)據(jù)需要損失周期 (penalty cycle)的裝入(load)指令比其它指令先行執(zhí)行,從而使其它指令在該 損失周期期間內(nèi)執(zhí)行。據(jù)此,可以由其它指令的執(zhí)行周期來(lái)隱蔽因存儲(chǔ)器 存取的損失而引起的影響,也可以控制性能惡化。然而,對(duì)于靜態(tài)的指令調(diào)度,在大多數(shù)情況下,存儲(chǔ)器存取指令的存 儲(chǔ)器存取地址值會(huì)動(dòng)態(tài)地變化。因此,應(yīng)該設(shè)想在存儲(chǔ)器存取指令間產(chǎn)生 的存儲(chǔ)器依賴(lài)關(guān)系。此事宜,作為模糊的存儲(chǔ)器依賴(lài)關(guān)系為人所知。其結(jié) 果是,對(duì)于靜態(tài)的指令調(diào)度,不能將裝入指令比其它存儲(chǔ)器存取指令先行 執(zhí)行,難以隱蔽依據(jù)存儲(chǔ)器存取指令的損失周期,并且不能發(fā)揮處理器的 性能。因此,以往,為了對(duì)具有這些模糊的存儲(chǔ)器依賴(lài)關(guān)系的存儲(chǔ)器存取指 令實(shí)施指令調(diào)度,若處理器未具備執(zhí)行特殊的指令的硬件,則不能將裝入 指令移動(dòng)到對(duì)存儲(chǔ)區(qū)域的存放(store)指令的前面。作為考慮到該模糊的存儲(chǔ)器依賴(lài)關(guān)系的特殊的指令,可以舉出推測(cè)裝 入(speculative loading)指令(例如,參照專(zhuān)利文獻(xiàn)日本國(guó)專(zhuān)利第3762597 號(hào)公報(bào)(圖6))。推測(cè)裝入指令是一種指令,執(zhí)行如下處理。即,先將地址存儲(chǔ)在硬件的特別的存儲(chǔ)裝置,而將在該地址所存儲(chǔ)的存儲(chǔ)數(shù)據(jù)設(shè)定在寄存 器,所述地址是依據(jù)裝入指令所存取的存儲(chǔ)區(qū)域的地址。然后,在執(zhí)行了 存放指令時(shí),將寄存器所存儲(chǔ)的數(shù)據(jù)設(shè)定在存儲(chǔ)區(qū)域。再者,在依據(jù)存放 指令所存取的存儲(chǔ)區(qū)域的地址和所述特別的存儲(chǔ)裝置所存儲(chǔ)的推測(cè)裝入指 令的地址間產(chǎn)生干擾的情況下,以存放指令所存放的數(shù)據(jù)覆蓋推測(cè)裝入指 令所設(shè)定的寄存器。根據(jù)這些內(nèi)容,可以確保邏輯等效性。
用圖1、圖2A以及圖2B,對(duì)推測(cè)裝入指令進(jìn)行具體說(shuō)明。例如,考 慮只執(zhí)行普通的存儲(chǔ)器存取指令的處理器。圖1是示出源程序的一個(gè)例子 的圖。圖2A是示出與圖1所示的源程序等效的、且不包含推測(cè)裝入指令的 匯編文件的一個(gè)例子的圖。為了由這些處理器執(zhí)行圖1所示的存儲(chǔ)器存取 處理,需要考慮模糊的存儲(chǔ)器依賴(lài)關(guān)系,來(lái)制作圖2A所示的忠實(shí)地遵守存 儲(chǔ)器存取順序的匯編文件。
另一方面,圖2B是示出與圖1所示的源程序等效的、且包含推測(cè)裝入 指令的匯編文件的一個(gè)例子的圖。如此,通過(guò)活用推測(cè)裝入指令,從而不 一定需要遵守圖1所示的存儲(chǔ)器存取順序。即,可以將裝入指令比存放指 令先行執(zhí)行。據(jù)此,可以由其它指令來(lái)隱蔽依據(jù)存儲(chǔ)器參照的損失周期, 其結(jié)果是性能會(huì)提高。
然而,存在的問(wèn)題是為了執(zhí)行這些推測(cè)執(zhí)行指令,需要在處理器設(shè) 置特殊的硬件。

發(fā)明內(nèi)容
本發(fā)明,為了解決所述問(wèn)題,提出了一種程序重寫(xiě)裝置,即使不設(shè)置 特殊的硬件也可以緩解模糊的存儲(chǔ)器依賴(lài)關(guān)系。
為了實(shí)現(xiàn)所述目的,本發(fā)明涉及的程序重寫(xiě)裝置是一種程序重寫(xiě)裝置, 將輸入程序重寫(xiě)為用于處理器的程序,該處理器可以根據(jù)執(zhí)行可否標(biāo)記來(lái) 控制處理的執(zhí)行可否,所述程序重寫(xiě)裝置包括比較處理插入單元,將比 較處理插入到所述輸入程序中,所述比較處理所進(jìn)行的處理是,對(duì)第一地 址信息和第二地址信息進(jìn)行比較,而將比較結(jié)果寫(xiě)入到執(zhí)行可否標(biāo)記中, ^f述第一地址信息是所述輸入程序中包含的第一存儲(chǔ)器存取處理所存取的 存儲(chǔ)器的地址信息,所述第二地址信息是所述輸入程序中包含的第二存儲(chǔ)
11器存取處理所存取的存儲(chǔ)器的地址信息;以及邏輯保證處理插入單元,將 帶有執(zhí)行可否標(biāo)記的邏輯保證處理插入到所述輸入程序中,所述邏輯保證 處理是,根據(jù)所述執(zhí)行可否標(biāo)記的值執(zhí)行的處理、且是用于保證與所述輸 入程序的執(zhí)行時(shí)相同的處理結(jié)果的處理。
根據(jù)執(zhí)行可否標(biāo)記選擇性地執(zhí)行用于進(jìn)行存儲(chǔ)器存取處理的邏輯保證 的邏輯保證處理。據(jù)此,即使不設(shè)置特殊的硬件也可以緩解模糊的存儲(chǔ)器 依賴(lài)關(guān)系。因此,可以對(duì)處理器具備的存儲(chǔ)器存取指令靜態(tài)地、且高效率 地進(jìn)行指令調(diào)度,也可以提高程序執(zhí)行時(shí)的處理速度。而且,硬件利用效 率也會(huì)提高。
優(yōu)選的是,所述第一存儲(chǔ)器存取處理是存放處理,將數(shù)據(jù)寫(xiě)入到存儲(chǔ) 器中,所述第二存儲(chǔ)器存取處理是裝入處理,從存儲(chǔ)器中讀取數(shù)據(jù)。
據(jù)此,對(duì)向存儲(chǔ)器具備的高速緩沖存儲(chǔ)器(cache memory)或外部存儲(chǔ)空
間存取的裝入指令或存放指令靜態(tài)地、且高效率地進(jìn)行指令調(diào)度,也可以 提高程序執(zhí)行時(shí)的處理速度。而且,硬件利用效率也會(huì)提高。
還優(yōu)選的是,所述的程序重寫(xiě)裝置,還包括關(guān)鍵路徑(criticalpath) 檢測(cè)單元,從所述輸入程序中檢測(cè)成為關(guān)鍵路徑的處理;以及模糊的存儲(chǔ) 器依賴(lài)關(guān)系解析單元,判斷所述關(guān)鍵路徑檢測(cè)單元所檢測(cè)的關(guān)鍵路徑中是 否包含所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處理,在包含所述 第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處理的情況下,解析所述第一 存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處理之間是否存在模糊的真的存儲(chǔ) 器依賴(lài)關(guān)系,并且,所述比較處理插入單元,將第一地址信息以及第二地 址信息作為比較的對(duì)象,將比較處理插入到所述輸入程序中,所述第一地 址信息以及第二地址信息分別與由所述模糊的存儲(chǔ)器依賴(lài)關(guān)系解析單元判 斷為處于模糊的真的存儲(chǔ)器依賴(lài)關(guān)系的所述第一存儲(chǔ)器存取處理以及所述 第二存儲(chǔ)器存取處理相對(duì)應(yīng)。
據(jù)此,可以是只對(duì)關(guān)鍵路徑上的處于模糊的存儲(chǔ)器依賴(lài)關(guān)系的指令 間自動(dòng)地進(jìn)行依賴(lài)關(guān)系的緩解;高效率地縮短關(guān)鍵路徑;可以進(jìn)行指令調(diào) 度;提高程序執(zhí)行時(shí)的處理速度。而且,硬件利用效率也會(huì)提高。
還優(yōu)選的是,所述的程序重寫(xiě)裝置,還包括,執(zhí)行順序變更單元,將 由所述模糊的存儲(chǔ)器依賴(lài)關(guān)系解析單元判斷為處于模糊的真的存儲(chǔ)器依賴(lài)關(guān)系的所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處理的執(zhí)行順序變 更。
根據(jù),可以先行配置等待時(shí)間(latency)較長(zhǎng)的指令,也可以提高程序執(zhí) 行時(shí)的處理速度。而且,硬件利用效率也會(huì)提高。
還優(yōu)選的是,所述的程序重寫(xiě)裝置,還包括,數(shù)據(jù)大小比較單元,判 斷是否滿(mǎn)足以下條件,即,所述第一存儲(chǔ)器存取處理一次存取的數(shù)據(jù)大小 與所述第二存儲(chǔ)器存取處理一次存取的數(shù)據(jù)大小相同,所述邏輯保證處理 插入單元,在由所述數(shù)據(jù)大小比較單元判斷為滿(mǎn)足所述條件的情況下,將 覆蓋處理作為所述邏輯保證處理插入到所述輸入程序中,所述覆蓋處理是 指,以所述第一存儲(chǔ)器存取處理寫(xiě)入到存儲(chǔ)器中的值覆蓋所述第二存儲(chǔ)器 存取處理從存儲(chǔ)器中讀取的值的處理。
還優(yōu)選的是,所述比較處理插入單元,將所述比較處理插入在所述邏 輯保證處理的前面的一個(gè)地方,以作為執(zhí)行順序。
據(jù)此,就在存儲(chǔ)器存取處理之前,可以根據(jù)只一次進(jìn)行一致判斷來(lái)實(shí) 現(xiàn)地址比較處理,也可以提高程序執(zhí)行時(shí)的處理速度。
還優(yōu)選的是,所述的程序重寫(xiě)裝置,還包括,規(guī)則性判斷單元,判斷 是否滿(mǎn)足以下條件,即,反復(fù)執(zhí)行所述第一以及第二存儲(chǔ)器存取處理,并 且,在各個(gè)存儲(chǔ)器存取處理中所存取的存儲(chǔ)器的地址規(guī)則性地被更新,所 述比較處理插入單元,在由所述規(guī)則性判斷單元判斷為滿(mǎn)足所述條件的情 況下,將所述比較處理插入到所述第一以及第二存儲(chǔ)器存取處理的反復(fù)的 前面的位置,以作為執(zhí)行順序。
或者,所述的程序重寫(xiě)裝置,還包括,數(shù)據(jù)大小比較單元,判斷是否 滿(mǎn)足以下條件,即,所述第二存儲(chǔ)器存取處理一次存取的數(shù)據(jù)大小比所述 第一存儲(chǔ)器存取處理一次存取的數(shù)據(jù)大小小,所述邏輯保證處理插入單元, 在由所述數(shù)據(jù)大小比較單元判斷為滿(mǎn)足所述條件的情況下,將覆蓋處理作 為所述邏輯保證處理插入到所述輸入程序中,所述覆蓋處理是指,以所述 第一存儲(chǔ)器存取處理寫(xiě)入到存儲(chǔ)器中的值的一部分覆蓋所述第二存儲(chǔ)器存 取處理從存儲(chǔ)器中讀取的值的處理。
據(jù)此,即使對(duì)象大小(object size)不同的存儲(chǔ)器存取處理的模糊的存儲(chǔ) 器依賴(lài)關(guān)系也可以緩解存儲(chǔ)器依賴(lài)關(guān)系,也可以提高程序執(zhí)行時(shí)的處理速度。
還優(yōu)選的是,所述的程序重寫(xiě)裝置,還包括,優(yōu)化指定信息附加單元, 接受與優(yōu)化有關(guān)的優(yōu)化指示信息,所述比較處理插入單元以及所述邏輯保 證處理插入單元,根據(jù)所述優(yōu)化指定信息附加單元接受的所述優(yōu)化指示信 息,選擇性地進(jìn)行工作。
據(jù)此,編程員可以在考慮對(duì)存儲(chǔ)器存取指令的、對(duì)調(diào)度的代碼大小和
執(zhí)行性能的折衷(trade-off)的同時(shí),進(jìn)行編程。
并且,本發(fā)明,除了可以作為具有如上所述的特征單元的程序重寫(xiě)裝 置來(lái)實(shí)現(xiàn)以外,也可以作為將程序重寫(xiě)裝置具有的特征單元作為步驟的程 序重寫(xiě)方法來(lái)實(shí)現(xiàn),還可以作為使計(jì)算機(jī)執(zhí)行程序重寫(xiě)方法中包含的特征 步驟的程序來(lái)實(shí)現(xiàn)。并且,當(dāng)然也可以通過(guò)CD-ROM(Compact Disc-Read OnlyMemory)等存儲(chǔ)介質(zhì)或互聯(lián)網(wǎng)等傳輸介質(zhì)來(lái)分發(fā)這些程序。 根據(jù)本發(fā)明,即使不設(shè)置特殊的硬件也可以緩解模糊的存儲(chǔ)器依賴(lài)關(guān)系。 而且,可以對(duì)處于模糊的依賴(lài)關(guān)系的指令靜態(tài)地、且高效率地進(jìn)行調(diào)度, 也可以提高程序執(zhí)行時(shí)的處理速度。而且,硬件利用效率也會(huì)提高。


圖1是用于說(shuō)明依賴(lài)關(guān)系緩解的源程序的一個(gè)例子的圖。
圖2A是用于說(shuō)明依據(jù)推測(cè)執(zhí)行的依賴(lài)關(guān)系緩解的、不包含推測(cè)裝入指 令的匯編文件的一個(gè)例子的圖。
圖2B是用于說(shuō)明依據(jù)推測(cè)執(zhí)行的依賴(lài)關(guān)系緩解的、包含推測(cè)裝入指令 的匯編文件的一個(gè)例子的圖。
圖3是示出本發(fā)明的實(shí)施例涉及的編譯系統(tǒng)(compilersystem)的外觀(guān)結(jié) 構(gòu)的圖。
圖4是示出本發(fā)明的實(shí)施例涉及的編譯系統(tǒng)的結(jié)構(gòu)的圖。
圖5是示出編譯器的結(jié)構(gòu)的圖。
圖6是編譯器所執(zhí)行的處理的流程圖。
圖7是模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化處理的詳細(xì)流程圖。
圖8是模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理的詳細(xì)流程圖。
圖9是模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解處理的詳細(xì)流程圖。圖10A 圖IOC是用于說(shuō)明針對(duì)非循環(huán)構(gòu)造的、相同對(duì)象大小存取的 依賴(lài)關(guān)系緩解處理的圖。
圖11A 圖IID是用于說(shuō)明針對(duì)非循環(huán)構(gòu)造的、不同對(duì)象大小存取(小 —大)的依賴(lài)關(guān)系緩解處理的圖。
圖12A 圖12D是用于說(shuō)明針對(duì)非循環(huán)構(gòu)造的、不同對(duì)象大小存取(大 —小)的依賴(lài)關(guān)系緩解處理的圖。
圖13A 圖13C是用于說(shuō)明針對(duì)循環(huán)構(gòu)造的、相同對(duì)象大小存取的依 賴(lài)關(guān)系緩解處理、且可以將比較處理處于循環(huán)外的的情況的圖。
圖14A 圖14C是用于說(shuō)明針對(duì)循環(huán)構(gòu)造的、相同對(duì)象大小存取的依 賴(lài)關(guān)系緩解處理、且需要將比較處理處于循環(huán)內(nèi)的情況的圖。
圖15A以及圖15B是用于說(shuō)明針對(duì)循環(huán)構(gòu)造的、不同對(duì)象大小存取(小 —大)的依賴(lài)關(guān)系緩解處理的圖。
圖16A以及圖16B是用于說(shuō)明針對(duì)循環(huán)構(gòu)造的、不同對(duì)象大小存取(大 —小)的依賴(lài)關(guān)系緩解處理的圖。
圖17A 圖17C是用于說(shuō)明針對(duì)非循環(huán)構(gòu)造的、相同對(duì)象大小存取連 續(xù)的情況下的依賴(lài)關(guān)系緩解處理的圖。
具體實(shí)施例方式
圖3是示出本發(fā)明的實(shí)施例涉及的編譯系統(tǒng)(compilersystem)的外觀(guān)結(jié) 構(gòu)的圖。通過(guò)在該圖所示的計(jì)算機(jī)上執(zhí)行各種程序,從而實(shí)現(xiàn)編譯系統(tǒng)。
圖4是示出本發(fā)明的實(shí)施例涉及的編譯系統(tǒng)的結(jié)構(gòu)的圖。編譯系統(tǒng)100 是一種軟件系統(tǒng),將以C語(yǔ)言等高級(jí)語(yǔ)言描述的源程序200轉(zhuǎn)換為以機(jī)械 語(yǔ)言描述的執(zhí)行程序230,所述編譯系統(tǒng)100包括編譯器(compiler)llO、 匯編器(assembler)120以及鏈接器(linker)130。
編譯器110是一種程序,將具有執(zhí)行可否標(biāo)記寄存器(flag register)的 CPU(Central Processing Unit:中央處理器)作為目標(biāo)處理器(target processor), 而將源程序200轉(zhuǎn)換為以匯編語(yǔ)言描述的匯編文件210,所述執(zhí)行可否標(biāo)記 寄存器用于使指令的執(zhí)行可否的控制成為可能。編譯器110,在將源程序 200轉(zhuǎn)換為匯編文件210時(shí),由存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部和指令調(diào)度部進(jìn)行優(yōu)化處理,從而輸出匯編文件210,所述存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部用于 在解析源程序200而得的處理內(nèi)對(duì)于關(guān)鍵路徑處理緩解模糊的存儲(chǔ)器依賴(lài) 關(guān)系。
匯編器120是一種程序,將以匯編語(yǔ)言描述的匯編文件210轉(zhuǎn)換為以 機(jī)械語(yǔ)言描述的對(duì)象文件220。鏈接器130是一種程序,結(jié)合多個(gè)對(duì)象文件 220而生成執(zhí)行程序230。
作為執(zhí)行程序230的開(kāi)發(fā)工具有,模擬器(simulator)140以及評(píng)測(cè)器 (profiler)150。模擬器140是一種程序,模擬執(zhí)行程序230,并輸出執(zhí)行時(shí) 的各種執(zhí)行日志數(shù)據(jù)(logdata)240。評(píng)測(cè)器150是一種程序,解析執(zhí)行日志 數(shù)據(jù)240,并輸出解析了程序的執(zhí)行順序等的評(píng)測(cè)數(shù)據(jù)250。
通過(guò)使這些各種程序在計(jì)算機(jī)上執(zhí)行,從而依據(jù)源程序200制作執(zhí)行 程序230。
圖5是示出編譯器110的結(jié)構(gòu)的圖。
編譯器110包括,語(yǔ)法解析部lll、優(yōu)化信息解析部112、 一般優(yōu)化部 113、模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114、指令調(diào)度部115以及代碼輸 出部116。各種構(gòu)成處理部是作為在計(jì)算機(jī)上執(zhí)行的程序來(lái)實(shí)現(xiàn)的。
語(yǔ)法解析部111是一種處理部,將源程序200作為輸入接受,對(duì)源程 序200進(jìn)行語(yǔ)法解析處理后,輸出中間語(yǔ)言的程序(中間代碼)。
優(yōu)化信息解析部112是一種處理部,讀取并解析高速緩存參數(shù)201、評(píng) 測(cè)數(shù)據(jù)250、編譯選項(xiàng)(compiler option)以及編譯指示(pragma)等中間代碼的 優(yōu)化處理所需要的信息。編譯選項(xiàng)以及編譯指示都是對(duì)編譯器110的指示。
一般優(yōu)化部113是一種處理部,對(duì)中間代碼實(shí)施一般的優(yōu)化處理。模 糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114是一種處理部,緩解關(guān)鍵路徑上的模 糊的存儲(chǔ)器依賴(lài)關(guān)系。
指令調(diào)度部115是一種處理部,將指令的排列優(yōu)化,并進(jìn)行指令調(diào)度。
代碼輸出部116是一種處理部,將優(yōu)化后的中間代碼轉(zhuǎn)換為以匯編語(yǔ) 言描述的匯編代碼,并輸出包含該匯編代碼的匯編文件210。
其次,說(shuō)明編譯器110所執(zhí)行的處理流程。圖6是編譯器110所執(zhí)行的處理的流程圖。
語(yǔ)法解析部111是一種處理部,對(duì)源程序200進(jìn)行語(yǔ)法解析處理,并 生成中間代碼(S1)。優(yōu)化信息解析部112,對(duì)高速緩存參數(shù)201、評(píng)測(cè)數(shù)據(jù) 250、編譯選項(xiàng)以及編譯指示等進(jìn)行解析(S2)。 一般優(yōu)化部113,根據(jù)優(yōu)化 信息解析部112的解析結(jié)果進(jìn)行一般的中間代碼的優(yōu)化處理(S3)。模糊的存 儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,注目中間代碼的具有關(guān)鍵路徑上的模糊的存 儲(chǔ)器依賴(lài)關(guān)系的存儲(chǔ)器存取處理,根據(jù)需要插入校正處理,而緩解模糊的 存儲(chǔ)器依賴(lài)關(guān)系(S4)。指令調(diào)度部115,進(jìn)行指令調(diào)度(S5)。代碼輸出部116, 將中間代碼轉(zhuǎn)換為匯編代碼,并將其作為匯編文件210輸出(S6)。
對(duì)于語(yǔ)法解析處理(S1)、優(yōu)化信息解析處理(S2)、 一般的優(yōu)化處理(S3)、 指令調(diào)度處理(S5)以及匯編代碼輸出處理(S6),由于與一般的處理相同,因
此不反復(fù)進(jìn)行詳細(xì)說(shuō)明。
下面,對(duì)模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化處理(S4)進(jìn)行詳細(xì)說(shuō)明。圖7 是用于對(duì)模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化處理(圖6的S4)進(jìn)行詳細(xì)說(shuō)明的 流程圖。
模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,在存在依據(jù)編譯選項(xiàng)以及編譯 指示指令等的優(yōu)化指示的情況下實(shí)施處理。在存在優(yōu)化指示的情況下(S9 中的"是"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114將中間代碼作為輸入, 并檢測(cè)關(guān)鍵路徑(SIO)。在不存在優(yōu)化指示的情況下(S9中的"否"),模糊 的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114結(jié)束處理。對(duì)于關(guān)鍵路徑的檢測(cè)處理, 由于與一般的處理相同,因此在此不反復(fù)進(jìn)行詳細(xì)說(shuō)明。關(guān)鍵路徑是根據(jù) 依賴(lài)關(guān)系結(jié)合起來(lái)的指令串中的執(zhí)行時(shí)間最長(zhǎng)的指令串,所述依賴(lài)關(guān)系是 通過(guò)對(duì)資源(寄存器、存儲(chǔ)器、外部端口等)進(jìn)行(或有可能進(jìn)行<將其稱(chēng)為, 模糊的存儲(chǔ)器依賴(lài)關(guān)系〉)定義、參照(定義或參照)而產(chǎn)生的。 一般而言, 利用由稱(chēng)為節(jié)點(diǎn)(node)或邊(edge)的要素構(gòu)成的、稱(chēng)為DAG(Directed Acyclic Graph :有向無(wú)環(huán)圖)的依賴(lài)關(guān)系圖來(lái)求出。此時(shí),通過(guò)將指令作為節(jié)點(diǎn)、 將依賴(lài)關(guān)系作為邊、將依賴(lài)關(guān)系距離(指令間的執(zhí)行時(shí)間)作為邊距離,且根 據(jù)一般的圖表邏輯,從而可以求出關(guān)鍵路徑。
模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,在檢測(cè)出的關(guān)鍵路徑中檢測(cè)處 于模糊的存儲(chǔ)器依賴(lài)關(guān)系的、邏輯上連續(xù)的存儲(chǔ)器存取處理(Sll)。對(duì)于模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(Sll),在后面將進(jìn)行詳細(xì)說(shuō)明。
在不存在成為優(yōu)化對(duì)象的、處于模糊的存儲(chǔ)器依賴(lài)關(guān)系的、邏輯上連
續(xù)的存儲(chǔ)器存取處理的情況下(S12中的"否"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩 解優(yōu)化部114結(jié)束處理。
在存在優(yōu)化對(duì)象的存儲(chǔ)器存取處理的情況下(S12中的"是"),模糊的 存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114緩解存儲(chǔ)器存取處理中的模糊的存儲(chǔ)器依 賴(lài)關(guān)系(S13)。對(duì)于依賴(lài)關(guān)系緩解處理(S13),在后面將進(jìn)行詳細(xì)說(shuō)明。
模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部1M,判斷是否實(shí)施了模糊的存儲(chǔ)器 依賴(lài)關(guān)系緩解(S14),在未實(shí)施的情況下(S14中的"否"),針對(duì)存儲(chǔ)器存取 處理的后續(xù)處理,反復(fù)實(shí)施模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(S11)以后的處 理。
在實(shí)施了模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解的情況下(S14中的"是"),模糊 的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,在緩解了模糊的存儲(chǔ)器依賴(lài)關(guān)系的處理 中再次檢測(cè)關(guān)鍵路徑(S15)。模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,對(duì)再 次檢測(cè)出的關(guān)鍵路徑的全長(zhǎng)、和處理前的關(guān)鍵路徑的全長(zhǎng)進(jìn)行比較,而判 斷優(yōu)化適用后關(guān)鍵路徑長(zhǎng)度是否已被縮短(S16)。
在判斷為關(guān)鍵路徑長(zhǎng)度已被縮短的情況下(S16中的"是"),模糊的存 儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,針對(duì)已被縮短的關(guān)鍵路徑,遞歸且反復(fù)實(shí)施 用于緩解模糊的存儲(chǔ)器依賴(lài)關(guān)系的處理(S11)。
在關(guān)鍵路徑長(zhǎng)度未被縮短、或關(guān)鍵路徑長(zhǎng)度相同的情況下(S16中的 "否"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,刪除剛已實(shí)施的依賴(lài)關(guān) 系緩解處理(S17)。 gp,將剛已實(shí)施的依賴(lài)關(guān)系緩解處理(S13)作為未實(shí)施。 然后,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,針對(duì)存儲(chǔ)器存取處理的后續(xù) 處理,反復(fù)實(shí)施模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(S11)以后的處理。
下面,對(duì)模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(S11)以及依賴(lài)關(guān)系緩解處理 (S13)進(jìn)行詳細(xì)說(shuō)明。
圖8是模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖7的Sll)的詳細(xì)流程圖。模 糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,針對(duì)在關(guān)鍵路徑檢測(cè)處理(圖7的S10) 中檢測(cè)出的關(guān)鍵路徑,從開(kāi)頭依次選擇指令,并且反復(fù)執(zhí)行以下處理(S20)。
模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,判斷所選擇的處理是否存儲(chǔ)器存取處理、且在該存儲(chǔ)器存取處理的后續(xù)處理中是否存在針對(duì)該存儲(chǔ)器存
取處理只處于模糊的存儲(chǔ)器依賴(lài)關(guān)系的處理(S21)。
在所選擇的處理不是存儲(chǔ)器存取處理、或者雖所選擇的處理是存儲(chǔ)器 存取處理、但在該存儲(chǔ)器存取處理的后續(xù)處理中不存在針對(duì)該存儲(chǔ)器存取 處理只處于模糊的存儲(chǔ)器依賴(lài)關(guān)系的處理的情況下(S21中的"否"),模糊 的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,選擇下一個(gè)處理(S20),并進(jìn)行同樣的 判斷(S21)。
在所選擇的處理是存儲(chǔ)器存取處理、且在該存儲(chǔ)器存取處理的后續(xù)處 理中存在針對(duì)該存儲(chǔ)器存取處理只處于模糊的存儲(chǔ)器依賴(lài)關(guān)系的處理的情 況下(S21中的"是"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,判斷優(yōu)化 對(duì)象的地址變量名是否以編譯指示或編譯選項(xiàng)已被指定(S22)。
在優(yōu)化對(duì)象的地址變量名已被指定的情況下(S22中的"是"),模糊的 存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,判斷優(yōu)化對(duì)象的存儲(chǔ)器存取處理的地址變 量名和己被指定的變量名是否一致(S23)。在變量名不一致的情況下(S23中 的"否"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,選擇下面的處理(S20), 并反復(fù)執(zhí)行S21以后的處理。
在變量名一致的情況下(S23中的"是"),或者,在優(yōu)化對(duì)象的地址變 量名未被指定的情況下(S22中的"否"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化 部114,判斷是否可以使用目標(biāo)處理器的執(zhí)行可否標(biāo)記寄存器資源(S24)。 由于是否可以使用執(zhí)行可否標(biāo)記寄存器資源的判斷是利用生存區(qū)間解析等 來(lái)可以進(jìn)行的,因此在此不反復(fù)進(jìn)行詳細(xì)說(shuō)明,所述生存區(qū)間解析用于一 般的寄存器分配優(yōu)化。
在不存在處于模糊的存儲(chǔ)器依賴(lài)關(guān)系的存取處理間可以使用的執(zhí)行可 否標(biāo)記寄存器資源的情況下(S24中的"否"),選擇下一個(gè)處理(S20),并反 復(fù)執(zhí)行S20以后的處理。
在存在可以使用的執(zhí)行可否標(biāo)記寄存器資源的情況下(S24中的"是"), 模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,判斷是否可以將處于模糊的存儲(chǔ)器 依賴(lài)關(guān)系的存取處理中包含的存儲(chǔ)器參照指令,移動(dòng)到存儲(chǔ)器代入指令的 前面(S25)。 g卩,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,解析在存儲(chǔ)器參 照指令和存儲(chǔ)器代入指令之間是否存在依賴(lài)于存儲(chǔ)器代入指令的指令若不存在依賴(lài)的指令,則判斷為可以將存儲(chǔ)器參照指令移動(dòng);若存在依賴(lài)的 指令,則判斷為不能將存儲(chǔ)器參照指令移動(dòng)。在不能移動(dòng)的情況下(S25中 的"否"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,選擇下一個(gè)處理(S20), 并反復(fù)執(zhí)行S21以后的處理。
在可以將存儲(chǔ)器參照指令移動(dòng)的情況下(S25中的"是"),模糊的存儲(chǔ) 器依賴(lài)關(guān)系緩解優(yōu)化部114,將S21中檢測(cè)出的處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系的存儲(chǔ)器存取處理,作為優(yōu)化的對(duì)象返回(作為返回值返回)(S26)。即使 結(jié)束所有的處理的搜索,也在不存在成為優(yōu)化的對(duì)象的存儲(chǔ)器存取處理的 情況下,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,結(jié)束搜索循環(huán)(S20),并 結(jié)束模糊的存儲(chǔ)器依賴(lài)關(guān)系處理檢測(cè)。
圖9是依賴(lài)關(guān)系緩解處理(圖7的S13)的詳細(xì)流程圖。模糊的存儲(chǔ)器依 賴(lài)關(guān)系緩解優(yōu)化部114,判斷模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖7的Sll、 圖8)中檢測(cè)出的存儲(chǔ)器存取處理是否處于模糊的真的存儲(chǔ)器依賴(lài)關(guān)系 (S30)。
在不處于模糊的真的存儲(chǔ)器依賴(lài)關(guān)系的情況下(S30中的"否"),模糊 的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114結(jié)束處理。在處于模糊的真的存儲(chǔ)器依 賴(lài)關(guān)系的情況下(S30中的"是"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114, 將存儲(chǔ)器所存儲(chǔ)的數(shù)據(jù)的裝入處理移動(dòng)到存放處理的緊前面(S31),判斷作 為處于依賴(lài)關(guān)系的存儲(chǔ)器存取處理的對(duì)象的存儲(chǔ)器的區(qū)域大小(對(duì)象大小) 是否相同(S32)。
在對(duì)象大小不同的情況下(S32中的"否"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩 解優(yōu)化部114,將比較這些存儲(chǔ)器存取處理的地址寄存器值的范圍的比較處 理插入到裝入處理的緊前面(S33),將按照該地址范圍比較處理的結(jié)果的、 每個(gè)地址的校正處理插入到裝入處理之后(S34),而結(jié)束處理。
如下進(jìn)行比較地址寄存器值的范圍的比較處理(S33)。將彼此的存儲(chǔ)器 存取處理作為APb以及APs。而且,將APb以及APs的各個(gè)存儲(chǔ)器存取地 址作為AAb以及AAs。再者,將APb以及APs的各個(gè)存儲(chǔ)器存取區(qū)域大 小作為ASb以及ASs。而且,在將ASb以及ASs的最大公約數(shù)gcd(ASb、 ASs)為GAS、且ASb〉A(chǔ)Ss的情況下,比較次數(shù)n為ASb / GAS,在該處 理中進(jìn)行以下n個(gè)比較(AAb+GASM-AAs、 AAb+GAS*l=AAs 、AAb+GAS*2=AAs、 、 AAb+GAS*(n-l)==AAs)。據(jù)此,模糊的存儲(chǔ)器 依賴(lài)關(guān)系緩解優(yōu)化部114,檢測(cè)依賴(lài)存儲(chǔ)器區(qū)域。即,在AAb+GAS*k==AAs 的比較結(jié)果為真的情況下,在ASb〉A(chǔ)Ss時(shí),可以認(rèn)為依據(jù)APb所存取的 存儲(chǔ)區(qū)域中從存取開(kāi)頭地址AAb偏離GAS*k字節(jié)的位置開(kāi)始GAS字節(jié)的 區(qū)域、和依據(jù)APs所存取的存儲(chǔ)區(qū)域處于依賴(lài)關(guān)系。
每個(gè)地址的校正處理(S34)是一種處理按照所述比較地址寄存器值的 范圍的比較處理(S33)的每個(gè)結(jié)果,將帶有執(zhí)行可否標(biāo)記的代入處理插入到 裝入處理之后,在所述帶有執(zhí)行可否標(biāo)記的代入處理中,以裝入處理所代 入的數(shù)據(jù)只覆蓋存放處理所存放的數(shù)據(jù)中的符合依賴(lài)存儲(chǔ)區(qū)域的區(qū)域部 分。
在對(duì)象大小相同的情況下(S32中的"否"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩 解優(yōu)化部114,判斷該處于模糊的存儲(chǔ)器依賴(lài)關(guān)系的存儲(chǔ)器存取處理是否循 環(huán)內(nèi)的處理(S35)。在不是循環(huán)內(nèi)的處理的情況下(S35中的"否"),模糊的 存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,判斷是否可以挪用在緩解了其它模糊的存 儲(chǔ)器依賴(lài)關(guān)系時(shí)生成了的地址比較處理(S36)。在該判斷中,在可以知道地 址變量相互一致、且到裝入處理為止存在的地址變量的增減值相同的情況 下(S36中的"是"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,挪用地址比 較處理,并跳越地址比較處理的插入處理(S40)。反而,在S36的判斷中, 在有可能不存在地址比較處理、地址變量不一致、或地址變量的增減值不 相同的情況下(S36中的"否"),模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114, 將地址一致比較處理插入到裝入處理的緊前面(S40),在所述地址一致比較 處理中,比較存儲(chǔ)器存取處理的彼此的存儲(chǔ)器地址來(lái)判斷是否一致。
在兩個(gè)存儲(chǔ)器存取處理都是循環(huán)內(nèi)的處理的情況下(S35中的"是"), 判斷循環(huán)處理中存儲(chǔ)器地址變化的增量值是否相互固定且相同(S37)。存儲(chǔ) 器地址的增量值不是相互固定、或不是相同的情況下(S37中的"否"),與 存儲(chǔ)器存取處理不是循環(huán)內(nèi)的處理的情況(S35中的"否")相同,實(shí)施地址 一致比較處理的插入處理(S36、 S40)。
存儲(chǔ)器地址的增量值是相互固定且相同的情況下(S37中的"是"),模 糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,將地址一致比較處理插入到循環(huán)處理 的唯一的先行處理即前置節(jié)點(diǎn)(preheader)處理的最末尾(S38)。模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,將各個(gè)比較處理插入(S38、 S40)后,作為校正 處理將以裝入處理所代入的數(shù)據(jù)覆蓋存放處理所存放的數(shù)據(jù)的、帶有執(zhí)行 可否標(biāo)記的代入處理插入到裝入處理之后(S39),而結(jié)束處理。 [編譯選項(xiàng)]
在編譯系統(tǒng)100中,作為對(duì)編譯器的編譯選項(xiàng)有 "-fho-cut-ambiguous-depend"。在編譯器執(zhí)行時(shí)該選項(xiàng)被指定的情況下,編 譯系統(tǒng)100,與編譯指示的指定無(wú)關(guān)不進(jìn)行對(duì)模糊的存儲(chǔ)器依賴(lài)關(guān)系的緩解 優(yōu)化。在不存在該選項(xiàng)的指定的情況下,編譯系統(tǒng)100,與一般的優(yōu)化相同, 遵照"-O"(優(yōu)化命令行選項(xiàng)指定)的有無(wú)。 [編譯指示指定] 該指定是對(duì)緊后面的循環(huán)的指定。
在依據(jù)編譯指示1pragmajuLambiguouS-depend[變量名、變量名]" 指定了變量的情況下,編譯系統(tǒng)100,只注目所編譯指示指定的地址變量而 進(jìn)行模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化處理。所指定的變量,可以是排列, 也可以是指針。在省略了變量的指定的情況下,編譯系統(tǒng)100,將所有的存 儲(chǔ)器存取作為對(duì)象進(jìn)行模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化處理。
下面,說(shuō)明在一些具體情況下的模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解處理。
并且,為了簡(jiǎn)化說(shuō)明,在以后說(shuō)明的處理中進(jìn)行依據(jù)虛擬匯編語(yǔ)言的 程序描述,但是,實(shí)際上進(jìn)行依據(jù)中間語(yǔ)言的優(yōu)化處理。
圖10A 圖IOC是用于說(shuō)明針對(duì)非循環(huán)構(gòu)造的、相同對(duì)象大小存取的
依賴(lài)關(guān)系緩解處理的圖。
圖IOA是示出非循環(huán)構(gòu)造的、相同對(duì)象大小存取的源程序200的一個(gè)
例子的圖。
該源程序200的處理內(nèi)容是指,連續(xù)兩次進(jìn)行以下處理將函數(shù)的引 數(shù)pA以及pB作為基準(zhǔn)地址來(lái)將pB所示的區(qū)域的值代入到pA所示的區(qū) 域、且為了使pA和pB分別示出下一個(gè)要素而加上地址值。依據(jù)地址變量 pA代入的存儲(chǔ)區(qū)域大小(存放對(duì)象大小)和依據(jù)地址變量pB參照的存儲(chǔ)區(qū) 域大小(裝入對(duì)象大小),由于彼此的地址變量為同型,因此相同。
圖10B(a)是中間代碼,即,所述源程序200被輸入到圖6所示的編譯
22處理中,并在圖6的Sl至S3的處理中被轉(zhuǎn)換后成為S4的輸入的中間代碼。 從該所輸入的中間代碼(圖10B(a))中,在關(guān)鍵路徑檢測(cè)處理(圖7的S10)中 可以檢測(cè)圖10C(a)所示的關(guān)鍵路徑。由于第一次的依據(jù)* 八++的存儲(chǔ)器代 入處理和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,因此該關(guān)鍵路徑的流程成為第一次的依據(jù)+pB的存儲(chǔ)器參照和依據(jù)fpA 的存儲(chǔ)器代入、和第二次的依據(jù)* 8的存儲(chǔ)器參照和依據(jù)+pA的存儲(chǔ)器代 入連續(xù)的處理。
針對(duì)該關(guān)鍵路徑,執(zhí)行模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖7的Sll、 圖8)。即,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,從開(kāi)頭依次搜索關(guān)鍵 路徑上的處理(圖8的S20),并檢測(cè)第一次的依據(jù)* 八++的存儲(chǔ)器代入處理 和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系(圖8的 S21)。因此,在圖8的S21成為"是"。
由于在所輸入的中間代碼中執(zhí)行可否標(biāo)記未被使用,因此存在可以自 由地使用的執(zhí)行可否標(biāo)記寄存器資源。因此,在圖8的S24成為"是"。
在存儲(chǔ)器參照處理的移動(dòng)可否判斷處理(S25)中,除了要考慮成為存儲(chǔ) 器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系的原因的存儲(chǔ)器以外,還要考慮寄存 器rl以及rll。雖然,可以設(shè)想寄存器rl以及rll分別依賴(lài)于其它處理的 情況,但是,在該情況下,到移動(dòng)目的地的存儲(chǔ)器代入處理和存儲(chǔ)器參照 處理為止不存在依據(jù)寄存器rl以及rll的定義、參照的依賴(lài)關(guān)系。因此, 可以移動(dòng)存儲(chǔ)器參照處理,而在圖8的S25成為"是"。
據(jù)此,在圖8的S26中,第一次的依據(jù)* 八++的存儲(chǔ)器代入處理和第 二次的依據(jù)* 8++的存儲(chǔ)器參照處理被判斷為處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,并在圖7的S12成為"是",從而這些存儲(chǔ)器存取處理的信息被遞送到 依賴(lài)關(guān)系緩解處理(圖7的S13)。對(duì)成為該模糊的存儲(chǔ)器依賴(lài)關(guān)系的存儲(chǔ)器 存取處理,進(jìn)行依賴(lài)關(guān)系的緩解(圖7的S13、圖9)。
獲得的存儲(chǔ)器存取處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系是第一次的依據(jù) * 八++的對(duì)存儲(chǔ)器的定義和第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器的參照,因此是
真的依賴(lài)關(guān)系。據(jù)此,在圖9的S30成為"是",模糊的存儲(chǔ)器依賴(lài)關(guān)系緩 解優(yōu)化部114,如圖108(1 )所示將第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器參照處理 移動(dòng)到第一次的依據(jù)* 八++的對(duì)存儲(chǔ)器代入處理的前面(圖9的S31)。由于這些存儲(chǔ)器存取處理的依據(jù)pA的存放對(duì)象大小和依據(jù)pB的裝入對(duì)象大小 相同,因此在圖9的S32成為"是",并且,由于這些存儲(chǔ)器存取處理不是 循環(huán)內(nèi)的處理,因此在圖9的S35成為"否"。
在圖9的S35成為"否"的情況下,不存在先行的原有的地址比較處 理。據(jù)此,在圖9的S36成為"否",模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部 114,將地址比較處理插入到圖9的S31中所移動(dòng)的存儲(chǔ)器參照處理的緊前 面(圖9的S40),在所述地址比較處理中,比較依據(jù)地址變量pB分配的寄 存器rl的值和依據(jù)地址變量pA分配的寄存器r0的值來(lái)判斷是否一致。并 且,圖10B(b)所示的地址比較處理"cmpeq C0、 rl、 r0"是一種處理,在 rl和r0的值相同的情況下,向條件可否標(biāo)記C0代入1。
最后,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,為了在模糊的存儲(chǔ)器依 賴(lài)關(guān)系中實(shí)際發(fā)生依賴(lài)關(guān)系時(shí)準(zhǔn)確地保持邏輯,將帶有執(zhí)行可否標(biāo)記的校 正指令插入到所移動(dòng)的fpB的存儲(chǔ)器參照處理之后(圖9的S39),使得在地 址一致的情況下,通過(guò)執(zhí)行可否標(biāo)記寄存器以rlO覆蓋rll,所述rl0是依 據(jù)+pA的存儲(chǔ)器代入處理所代入的值,所述rll是依據(jù)* 8的存儲(chǔ)器參照處 理而獲得的值。圖10B(b)所示的帶有執(zhí)行可否標(biāo)記的校正指令中,在C0==1 的情況下,即在rl和rO的值相同的情況下,執(zhí)行指令mov。
如此,在依賴(lài)關(guān)系緩解處理(圖7的S13)中實(shí)施依賴(lài)關(guān)系緩解。據(jù)此, 在圖7的S14成為"是",而在對(duì)緩解了依賴(lài)關(guān)系的中間代碼再次檢測(cè)關(guān)鍵 路徑的情況下(圖7的S15),如圖10C(b)所示,關(guān)鍵路徑只由第一次的依據(jù) *PB的存儲(chǔ)器參照、帶有執(zhí)行可否標(biāo)記的校正指令以及依據(jù) A的存儲(chǔ)器 代入處理的真的依賴(lài)關(guān)系構(gòu)成。即,在依據(jù)存儲(chǔ)器參照處理的等待時(shí)間為3 周期的情況下,關(guān)鍵路徑長(zhǎng)度從圖10C(a)的7周期變?yōu)?0C(b)的4周期, 而被縮短3周期。據(jù)此,在圖7的S16成為"是",遞歸地實(shí)施圖7的S11。 在該例子的情況下,由于所有的模糊的存儲(chǔ)器依賴(lài)關(guān)系被刪除,因此在第 二次的模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖9的Sll)中,不能檢測(cè)依賴(lài)關(guān)系 緩解對(duì)象的存儲(chǔ)器存取。據(jù)此,在圖7的S12成為"否",模糊的存儲(chǔ)器依 賴(lài)關(guān)系緩解優(yōu)化部114結(jié)束處理。
如此,通過(guò)進(jìn)行模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解處理(圖7、圖6的S4)、縮 短關(guān)鍵路徑,從而可以依據(jù)指令調(diào)度處理(圖6的S5)實(shí)現(xiàn)更高性能的中間代碼,并在匯編代碼輸出處理(圖6的S6)中生成對(duì)象代碼,從而結(jié)束編譯 處理。
圖11A 圖IID是用于說(shuō)明針對(duì)非循環(huán)構(gòu)造的、不同對(duì)象大小存取(小 —大第一次的存儲(chǔ)器存取大小與第二次的存儲(chǔ)器存取大小相比小)的依賴(lài) 關(guān)系緩解處理的圖。
圖11A是示出非循環(huán)構(gòu)造的、不同對(duì)象大小存取的源程序200的一個(gè) 例子的圖。
該源程序200的處理內(nèi)容是指,連續(xù)兩次進(jìn)行以下處理將函數(shù)的引 數(shù)pA以及pB作為基準(zhǔn)地址來(lái)將pB所示的區(qū)域的值代入到pA所示的區(qū) 域、且為了使pA和pB分別示出下一個(gè)要素而加上地址值。依據(jù)地址變量 pA代入的存儲(chǔ)區(qū)域大小(存放對(duì)象大小)和依據(jù)地址變量pB參照的存儲(chǔ)區(qū) 域大小(裝入對(duì)象大小),由于分別是4字節(jié)和2字節(jié),因此存放對(duì)象大小與 裝入對(duì)象大小相比大。
圖11B(a)是中間代碼,gp,所述源程序200被輸入到圖6所示的編譯 處理中,并在圖6的Sl至S3的處理中被轉(zhuǎn)換后成為S4的輸入的中間代碼。 從該所輸入的中間代碼(圖11B(a))中,在關(guān)鍵路徑檢測(cè)處理(圖7的S10)中 可以檢測(cè)圖11C(a)所示的關(guān)鍵路徑。由于第一次的依據(jù)* 八++的存儲(chǔ)器代 入處理和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,因此該關(guān)鍵路徑的流程成為第一次的依據(jù)+pB的存儲(chǔ)器參照和依據(jù)fpA 的存儲(chǔ)器代入、和第二次的依據(jù)fpB的存儲(chǔ)器參照和依據(jù)* 八的存儲(chǔ)器代 入連續(xù)的處理。
針對(duì)該關(guān)鍵路徑,執(zhí)行模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖7的Sll、 圖8)。即,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,從開(kāi)頭依次搜索關(guān)鍵 路徑上的處理(圖8的S20),并檢測(cè)第一次的依據(jù)* 八++的存儲(chǔ)器代入處理 和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系(圖8的 S21)。因此,在圖8的S21成為"是"。
由于在所輸入的中間代碼中執(zhí)行可否標(biāo)記未被使用,因此存在可以自 由地使用的執(zhí)行可否標(biāo)記寄存器資源。因此,在圖8的S24成為"是"。
在存儲(chǔ)器參照處理的移動(dòng)可否判斷處理(S25)中,除了要考慮成為存儲(chǔ)器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系的原因的存儲(chǔ)器以外,還要考慮寄存
器rl以及rll。雖然,可以設(shè)想寄存器rl以及rll分別依賴(lài)于其它處理的 情況,但是,在該情況下,到移動(dòng)目的地的存儲(chǔ)器代入處理和存儲(chǔ)器參照 處理為止不存在依據(jù)寄存器rl以及rll的定義、參照的依賴(lài)關(guān)系。因此, 可以移動(dòng)存儲(chǔ)器參照處理,并在圖8的S25成為"是"。
據(jù)此,在圖8的S26中,第一次的依據(jù)* 八++的存儲(chǔ)器代入處理和第 二次的依據(jù)* 8++的存儲(chǔ)器參照處理被判斷為處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,并在圖7的S12成為"是",從而這些存儲(chǔ)器存取處理的信息被遞送到 依賴(lài)關(guān)系緩解處理(圖7的S13)。對(duì)成為該模糊的存儲(chǔ)器依賴(lài)關(guān)系的存儲(chǔ)器 存取處理,進(jìn)行依賴(lài)關(guān)系的緩解(圖7的S13、圖9)。
獲得的存儲(chǔ)器存取處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系是第一次的依據(jù) * 八++的對(duì)存儲(chǔ)器的定義和第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器的參照,因此是 真的依賴(lài)關(guān)系。據(jù)此,在圖9的S30成為"是",模糊的存儲(chǔ)器依賴(lài)關(guān)系緩 解優(yōu)化部114,如圖118(1))所示將第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器參照處理 移動(dòng)到第一次的依據(jù)* 八++的對(duì)存儲(chǔ)器代入處理的前面(圖9的S31)。由于 這些存儲(chǔ)器存取處理的依據(jù)pA的存放對(duì)象大小和依據(jù)pB的裝入對(duì)象大小 不同,因此在圖9的S32成為"否"。
在圖9的S32成為"否"的情況下,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化 部114,將地址范圍比較處理插入到存儲(chǔ)器參照處理的緊前面(圖9的S33)。 如下求出地址范圍比較處理。即,由于依據(jù)pA的存放對(duì)象大小和依據(jù)pB 的裝入對(duì)象大小分別是4字節(jié)和2字節(jié),因此可求出最大公約數(shù)gcd為2、 比較次數(shù)n為4字節(jié)/gcd(4字節(jié)、2字節(jié))即2。而且,由于依據(jù)地址變量 pB分配的寄存器是rl、依據(jù)地址變量pA分配的寄存器是rO,因此作為地 址范圍比較處理,可求出對(duì)r0==rl+2*0和r0==rl+2*l的兩個(gè)地址一致進(jìn)行 的比較處理。模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,將如此求出的地址范 圍比較處理插入到存儲(chǔ)器參照處理的緊前面(圖9的S33)。在圖11B(b)的中 間代碼中,為了高效地進(jìn)行所述比較處理,取兩個(gè)地址的異或,并且進(jìn)行 比較處理來(lái)判斷其結(jié)果為零、還是兩個(gè)地址的差距為2字節(jié)。
最后,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,為了在模糊的存儲(chǔ)器依 賴(lài)關(guān)系中實(shí)際發(fā)生依賴(lài)關(guān)系時(shí)準(zhǔn)確地保持邏輯,將帶有執(zhí)行可否標(biāo)記的校正指令插入到所移動(dòng)的fpB的存儲(chǔ)器參照處理之后(圖9的S34),使得在地 址一致的情況下,通過(guò)執(zhí)行可否標(biāo)記寄存器以r10覆蓋只在rll中相當(dāng)于存 在依賴(lài)關(guān)系的存儲(chǔ)區(qū)域部分的數(shù)據(jù)部分(圖IID),所述r10是依據(jù)+pA的存 儲(chǔ)器代入處理所代入的值,所述rll是依據(jù)+pB的存儲(chǔ)器參照處理而獲得的 值。模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,在圖11B(b)的中間代碼中, 如圖11D的校正處理的存儲(chǔ)圖像所示,在低16位部分存在依賴(lài)關(guān)系的情況 下,作為"extrrll、 r10、 15、 0",對(duì)r10的從第0位到第15位的16位進(jìn) 行擴(kuò)展符號(hào)后覆蓋rll。而且,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,在 高16位部分存在依賴(lài)關(guān)系的情況下,作為"extrrll、 r10、 31、 16",對(duì)r10 的從第16位到第31位的16位進(jìn)行擴(kuò)展符號(hào)后覆蓋rll。符號(hào)擴(kuò)展的需要 的有無(wú),應(yīng)該符合rll的存儲(chǔ)器參照指令的工作。在此情況下,由于對(duì)ldh 處理設(shè)想將16位數(shù)據(jù)符號(hào)擴(kuò)展為32位來(lái)代入到寄存器,因此設(shè)想對(duì)校正 處理也需要實(shí)施符號(hào)擴(kuò)展、以extr處理進(jìn)行符號(hào)擴(kuò)展。
如此,在依賴(lài)關(guān)系緩解處理(圖7的S13)中實(shí)施依賴(lài)關(guān)系緩解。據(jù)此, 在圖7的S14成為"是",在對(duì)緩解了依賴(lài)關(guān)系的中間代碼再次檢測(cè)關(guān)鍵路 徑的情況下(圖7的S15),如圖11C(b)所示,關(guān)鍵路徑只由第一次的依據(jù)申pB 的存儲(chǔ)器參照、帶有執(zhí)行可否標(biāo)記的校正指令以及依據(jù)4pA的存儲(chǔ)器代入 處理的真的依賴(lài)關(guān)系構(gòu)成。即,在依據(jù)存儲(chǔ)器參照處理的等待時(shí)間為3周 期的情況下,關(guān)鍵路徑長(zhǎng)度從圖11C(a)的7周期變?yōu)?1C(b)的4周期,而 被縮短3周期。據(jù)此,在圖7的S16成為"是",遞歸地實(shí)施圖7的S11。 在該例子的情況下,由于所有的模糊的存儲(chǔ)器依賴(lài)關(guān)系被刪除,因此在第 二次的模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖9的Sll)中,不能檢測(cè)依賴(lài)關(guān)系 緩解對(duì)象的存儲(chǔ)器存取。據(jù)此,在圖7的S12成為"否",模糊的存儲(chǔ)器依 賴(lài)關(guān)系緩解優(yōu)化部114結(jié)束處理。
如此,在存儲(chǔ)器存取對(duì)象的大小不同的情況下,也通過(guò)進(jìn)行模糊的存 儲(chǔ)器依賴(lài)關(guān)系緩解處理(圖7、圖6的S4)、縮短關(guān)鍵路徑,從而可以依據(jù)指 令調(diào)度處理(圖6的S5)實(shí)現(xiàn)更高性能的中間代碼,并在匯編代碼輸出處理 (圖6的S6)中生成對(duì)象代碼,從而結(jié)束編譯處理。
圖12A 圖12D是用于說(shuō)明針對(duì)非循環(huán)構(gòu)造的、不同對(duì)象大小存取(大—小第一次的存儲(chǔ)器存取大小與第二次的存儲(chǔ)器存取大小相比大)的依賴(lài) 關(guān)系緩解處理的圖。
圖12A是示出非循環(huán)構(gòu)造的、不同對(duì)象大小存取的源程序200的一個(gè) 例子的圖。
該源程序200的處理內(nèi)容是指,連續(xù)兩次進(jìn)行以下處理將函數(shù)的引 數(shù)pA以及pB作為基準(zhǔn)地址來(lái)將pB所示的區(qū)域的值代入到pA所示的區(qū) 域、且為了使pA和pB分別示出下一個(gè)要素而加上地址值。依據(jù)地址變量 pA代入的存儲(chǔ)區(qū)域大小(存放對(duì)象大小)和依據(jù)地址變量pB參照的存儲(chǔ)區(qū) 域大小(裝入對(duì)象大小),由于分別是2字節(jié)和4字節(jié),因此裝入對(duì)象大小與 存放對(duì)象大小相比大。
圖12B(a)是中間代碼,即,所述源程序200被輸入到圖6所示的編譯 處理中,并在圖6的Sl至S3的處理中被轉(zhuǎn)換后成為S4的輸入的中間代碼。 從該所輸入的中間代碼(圖12B(a))中,在關(guān)鍵路徑檢測(cè)處理(圖7的S10)中 可以檢測(cè)圖12C(a)所示的關(guān)鍵路徑。由于第一次的依據(jù)* 八++的存儲(chǔ)器代 入處理和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,因此該關(guān)鍵路徑的流程成為第一次的依據(jù)* 8的存儲(chǔ)器參照和依據(jù)+pA 的存儲(chǔ)器代入、和第二次的依據(jù)* 8的存儲(chǔ)器參照和依據(jù)+pA的存儲(chǔ)器代 入連續(xù)的處理。
針對(duì)該關(guān)鍵路徑,執(zhí)行模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖7的Sll、 圖8)。 g卩,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,從開(kāi)頭依次搜索關(guān)鍵 路徑上的處理(圖8的S20),并檢測(cè)第一次的依據(jù)* 八++的存儲(chǔ)器代入處理 和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系(圖8的 S21)。因此,在圖8的S21成為"是"。
由于在所輸入的中間代碼中執(zhí)行可否標(biāo)記未被使用,因此存在可以自 由地使用的執(zhí)行可否標(biāo)記寄存器資源。因此,在圖8的S24成為"是"。
在存儲(chǔ)器參照處理的移動(dòng)可否判斷處理(S25)中,除了要考慮成為存儲(chǔ) 器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系的原因的存儲(chǔ)器以外,還要考慮寄存 器rl以及rll。雖然,可以設(shè)想寄存器rl以及rll分別依賴(lài)于其它處理的 情況,但是,在該情況下,到移動(dòng)目的地的存儲(chǔ)器代入處理和存儲(chǔ)器參照 處理為止不存在依據(jù)寄存器rl以及rll的定義、參照的依賴(lài)關(guān)系。因此,可以移動(dòng)存儲(chǔ)器參照處理,并在圖8的S25成為"是"。
據(jù)此,在圖8的S26中,第一次的依據(jù)* 八++的存儲(chǔ)器代入處理和第 二次的依據(jù)* 8++的存儲(chǔ)器參照處理被判斷為處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,并在圖7的S12成為"是",從而這些存儲(chǔ)器存取處理的信息被遞送到 依賴(lài)關(guān)系緩解處理(圖7的S13)。對(duì)成為該模糊的存儲(chǔ)器依賴(lài)關(guān)系的存儲(chǔ)器 存取處理,進(jìn)行依賴(lài)關(guān)系的緩解(圖7的S13、圖9)。
獲得的存儲(chǔ)器存取處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系是第一次的依據(jù) * 八++的對(duì)存儲(chǔ)器的定義和第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器的參照,因此是 真的依賴(lài)關(guān)系。據(jù)此,在圖9的S30成為"是",模糊的存儲(chǔ)器依賴(lài)關(guān)系緩 解優(yōu)化部114,如圖128(1))所示將第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器參照處理 移動(dòng)到第一次的依據(jù)*pA++的對(duì)存儲(chǔ)器代入處理的前面(圖9的S31)。由于 這些存儲(chǔ)器存取處理的依據(jù)pA的存放對(duì)象大小和依據(jù)pB的裝入對(duì)象大小 不同,因此在圖9的S32成為"否"。
在圖9的S32成為"否"的情況下,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化 部114,將地址范圍比較處理插入到存儲(chǔ)器參照處理的緊前面(圖9的S33)。 如下求出地址范圍比較處理。即,由于依據(jù)pA的存放對(duì)象大小和依據(jù)pB 的裝入對(duì)象大小分別是2字節(jié)和4字節(jié),因此可求出最大公約數(shù)gcd為2、 比較次數(shù)n為4字節(jié)/gcd(2字節(jié)、4字節(jié))g卩2。而且,由于依據(jù)地址變量 pB分配的寄存器是rl、依據(jù)地址變量pA分配的寄存器是rO,因此作為地 址范圍比較處理,可求出對(duì)rl=r0+2*0和rl=rO+2* 1的兩個(gè)地址一致進(jìn)行 的比較處理。模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,將如此求出的地址范 圍比較處理插入到存儲(chǔ)器參照處理的緊前面(圖9的S33)。在圖12B(b)的中 間代碼中,為了高效地進(jìn)行所述比較處理,取兩個(gè)地址的異或,并且進(jìn)行 比較處理來(lái)判斷其結(jié)果為零、還是兩個(gè)地址的差距為2字節(jié)。
最后,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,為了在模糊的存儲(chǔ)器依 賴(lài)關(guān)系中實(shí)際發(fā)生依賴(lài)關(guān)系時(shí)準(zhǔn)確地保持邏輯,將帶有執(zhí)行可否標(biāo)記的校 正指令插入到所移動(dòng)的+pB的存儲(chǔ)器參照處理之后(圖9的S34),使得在地 址一致的情況下,通過(guò)執(zhí)行可否標(biāo)記寄存器以r10中相當(dāng)于存在依賴(lài)關(guān)系 的存儲(chǔ)區(qū)域部分的數(shù)據(jù)部分覆蓋rl 1 ,所述r10是依據(jù)* 八的存儲(chǔ)器代入處 理所代入的值,所述rll是依據(jù)* 8的存儲(chǔ)器參照處理而獲得的值。模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,在圖12B(b)的中間代碼中,如圖12D的 校正處理的存儲(chǔ)圖像所示,在低16位部分存在依賴(lài)關(guān)系的情況下,作為 "valnrll、 r10、 rll",以r10的低16位覆蓋rll的低16位。而且,模糊 的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,在高16位部分存在依賴(lài)關(guān)系的情況下, 作為"valnrll、 rlll、 rl0",以r10的高16位覆蓋rll的高16位。
如此,在依賴(lài)關(guān)系緩解處理(圖7的S13)中實(shí)施依賴(lài)關(guān)系緩解。據(jù)此, 在圖7的S14成為"是",在對(duì)緩解了依賴(lài)關(guān)系的中間代碼再次檢測(cè)關(guān)鍵路 徑的情況下(圖7的S15),如圖12(:(15)所示,關(guān)鍵路徑只由第一次的依據(jù)* 8 的存儲(chǔ)器參照、帶有執(zhí)行可否標(biāo)記的校正指令以及依據(jù)* 八的存儲(chǔ)器代入 處理的真的依賴(lài)關(guān)系構(gòu)成。即,在依據(jù)存儲(chǔ)器參照處理的等待時(shí)間為3周 期的情況下,關(guān)鍵路徑長(zhǎng)度從圖12C(a)的7周期變?yōu)?2C(b)的4周期,而 被縮短3周期。據(jù)此,在圖7的S16成為"是",遞歸地實(shí)施圖7的S11。 在該例子的情況下,由于所有的模糊的存儲(chǔ)器依賴(lài)關(guān)系被刪除,因此在第 二次的模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖9的Sll)中,不能檢測(cè)依賴(lài)關(guān)系 緩解對(duì)象的存儲(chǔ)器存取。據(jù)此,在圖7的S12成為"否",模糊的存儲(chǔ)器依 賴(lài)關(guān)系緩解優(yōu)化部114結(jié)束處理。
如此,在存儲(chǔ)器存取對(duì)象的大小不同的情況下,也通過(guò)進(jìn)行模糊的存 儲(chǔ)器依賴(lài)關(guān)系緩解處理(圖7、圖6的S4)、縮短關(guān)鍵路徑,從而可以依據(jù)指 令調(diào)度處理(圖6的S5)實(shí)現(xiàn)更高性能的中間代碼,并在匯編代碼輸出處理 (圖6的S6)中生成對(duì)象代碼,從而結(jié)束編譯處理。 [循環(huán)構(gòu)造、在循環(huán)外進(jìn)行判斷〗
圖13A 圖13C是用于說(shuō)明針對(duì)循環(huán)構(gòu)造的、相同對(duì)象大小存取的依 賴(lài)關(guān)系緩解處理、且可以將比較處理處于循環(huán)外的的情況的圖。
圖13A是示出非循環(huán)構(gòu)造的、相同對(duì)象大小存取的源程序200的一個(gè) 例子的圖。該源程序200的處理內(nèi)容是指,在循環(huán)內(nèi)連續(xù)兩次進(jìn)行以下的 處理將函數(shù)的引數(shù)pA以及pB作為基準(zhǔn)地址并將pB所指的區(qū)域的值代 入到pA所指的區(qū)域,為了使pA和pB的地址分別示出下一個(gè)要素而加上 地址值,并且,循環(huán)反復(fù)一百次所述連續(xù)兩次的處理。依據(jù)地址變量pA代 入的存儲(chǔ)區(qū)域大小(存放對(duì)象大小)和依據(jù)地址變量pB參照的存儲(chǔ)區(qū)域大小 (裝入對(duì)象大小),由于彼此的地址變量為同型,因此相同。圖13B(a)是中間代碼,即,所述源程序200被輸入到圖6所示的編譯 處理中,并在圖6的Sl至S3的處理中被轉(zhuǎn)換后成為S4的輸入的中間代碼。 從該所輸入的中間代碼(圖13B(a))中,在關(guān)鍵路徑檢測(cè)處理(圖7的S10)中 可以檢測(cè)圖13C(a)所示的關(guān)鍵路徑。由于第一次的依據(jù)* 八++的存儲(chǔ)器代 入處理和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,因此該關(guān)鍵路徑的流程成為第一次的依據(jù)* 8的存儲(chǔ)器參照和依據(jù)+pA 的存儲(chǔ)器代入、和第二次的依據(jù) B的存儲(chǔ)器參照和依據(jù)* 八的存儲(chǔ)器代 入連續(xù)的處理。
針對(duì)該關(guān)鍵路徑,執(zhí)行模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖7的Sll、 圖8)。 g卩,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,從開(kāi)頭依次搜索關(guān)鍵 路徑上的處理(圖8的S20),并檢測(cè)第一次的依據(jù)* 八++的存儲(chǔ)器代入處理 和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系(圖8的 S21)。因此,在圖8的S21成為"是"。
由于在所輸入的中間代碼中作為執(zhí)行可否標(biāo)記只使用C6。因此存在 C6以外的執(zhí)行可否標(biāo)記寄存器資源。因此,在圖8的S24成為"是"。
在存儲(chǔ)器參照處理的移動(dòng)可否判斷處理(S25)中,除了要考慮成為存儲(chǔ) 器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系的原因的存儲(chǔ)器以外,還要考慮寄存 器rl以及rll。雖然,可以設(shè)想寄存器rl以及rll分別依賴(lài)于其它處理的 情況,但是,在該情況下,到移動(dòng)目的地的存儲(chǔ)器代入處理和存儲(chǔ)器參照 處理為止不存在依據(jù)寄存器rl以及rll的定義、參照的依賴(lài)關(guān)系。因此, 可以移動(dòng)存儲(chǔ)器參照處理,并在圖8的S25成為"是"。
據(jù)此,在圖8的S26中,第一次的依據(jù)* 八++的存儲(chǔ)器代入處理和第 二次的依據(jù)* 8++的存儲(chǔ)器參照處理被判斷為處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,并在圖7的S12成為"是",從而這些存儲(chǔ)器存取處理的信息被遞送到 依賴(lài)關(guān)系緩解處理(圖7的S13)。對(duì)成為該模糊的存儲(chǔ)器依賴(lài)關(guān)系的存儲(chǔ)器 存取處理,進(jìn)行依賴(lài)關(guān)系的緩解(圖7的S13、圖9)。
獲得的存儲(chǔ)器存取處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系是第一次的依據(jù) * 八++的對(duì)存儲(chǔ)器的定義和第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器的參照,因此是
真的依賴(lài)關(guān)系。據(jù)此,在圖9的S30成為"是",模糊的存儲(chǔ)器依賴(lài)關(guān)系緩 解優(yōu)化部114,如圖138(1))所示將第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器參照處理移動(dòng)到第一次的依據(jù)* 八++的對(duì)存儲(chǔ)器代入處理的前面(圖9的S31)。由于 這些存儲(chǔ)器存取處理的依據(jù)pA的存放對(duì)象大小和依據(jù)pB的裝入對(duì)象大小 相同,因此在圖9的S32成為"是",并且,由于在循環(huán)內(nèi)存在處理,因此 在圖9的S35成為"是"。
由于地址變量pA以及pB,分別在循環(huán)內(nèi)作為pA++、 ?8++按每一個(gè) 要素固定地增加,因此在圖9的S35成為"是"。
模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,將地址比較處理插入到循環(huán)的 前置節(jié)點(diǎn)處理的最末尾(圖9的S38),在所述地址比較處理中,比較依據(jù)地 址變量pB分配的寄存器rl的值和依據(jù)地址變量pA分配的寄存器r0的值 來(lái)判斷是否一致。
最后,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,為了在模糊的存儲(chǔ)器依 賴(lài)關(guān)系中實(shí)際發(fā)生依賴(lài)關(guān)系時(shí)準(zhǔn)確地保持邏輯,將帶有執(zhí)行可否標(biāo)記的校 正指令插入到所移動(dòng)的fpB的存儲(chǔ)器參照處理之后(圖9的S39),使得在地 址一致的情況下,通過(guò)執(zhí)行可否標(biāo)記寄存器以rlO覆蓋rll,所述rl0是依 據(jù)tpA的存儲(chǔ)器代入處理所代入的值,所述rll是依據(jù)* 8的存儲(chǔ)器參照處 理而獲得的值。
如此,在依賴(lài)關(guān)系緩解處理(圖7的S13)中實(shí)施依賴(lài)關(guān)系緩解。據(jù)此, 在圖7的S14成為"是",在對(duì)緩解了依賴(lài)關(guān)系的中間代碼再次檢測(cè)關(guān)鍵路 徑的情況下(圖7的S15),如圖130(1))所示,關(guān)鍵路徑只由第一次的依據(jù)* 8 的存儲(chǔ)器參照、帶有執(zhí)行可否標(biāo)記的校正指令以及依據(jù)* 八的存儲(chǔ)器代入 處理的真的依賴(lài)關(guān)系構(gòu)成。即,在依據(jù)存儲(chǔ)器參照處理的等待時(shí)間為3周 期的情況下,關(guān)鍵路徑長(zhǎng)度從圖13C(a)的7周期變?yōu)?3C(b)的4周期,而 被縮短3周期。據(jù)此,在圖7的S16成為"是",遞歸地實(shí)施圖7的S11。 在該例子的情況下,由于所有的模糊的存儲(chǔ)器依賴(lài)關(guān)系被刪除,因此在第 二次的模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖9的Sll)中,不能檢測(cè)依賴(lài)關(guān)系 緩解對(duì)象的存儲(chǔ)器存取。據(jù)此,在圖7的S12成為"否",模糊的存儲(chǔ)器依 賴(lài)關(guān)系緩解優(yōu)化部114結(jié)束處理。
如此,通過(guò)進(jìn)行模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解處理(圖7、圖6的S4)、縮 短關(guān)鍵路徑,從而可以依據(jù)指令調(diào)度處理(圖6的S5)實(shí)現(xiàn)更高性能的中間 代碼,并在匯編代碼輸出處理(圖6的S6)中生成對(duì)象代碼,從而結(jié)束編譯
32處理。
圖14A 圖14C是用于說(shuō)明針對(duì)循環(huán)構(gòu)造的、相同對(duì)象大小存取的依 賴(lài)關(guān)系緩解處理、且需要將比較處理處于循環(huán)內(nèi)的情況的圖。
圖14A是示出循環(huán)構(gòu)造的源程序200的一個(gè)例子的圖。該源程序200 的處理內(nèi)容是指,反復(fù)循環(huán)一百次進(jìn)行進(jìn)行更新的處理和進(jìn)行加上的處理: 所述進(jìn)行更新的處理是指,將函數(shù)的引數(shù)pA以及pB作為基準(zhǔn)地址并將pB 所示的區(qū)域的值代入到pA所指的區(qū)域,將引數(shù)inc所指定的數(shù)值作為增量 值來(lái)更新pA的地址,為了使pB示出下一個(gè)要素而更新地址;所述進(jìn)行加 上的處理是指,依據(jù)更新后的pA和pB的地址,將pB所指的區(qū)域的值代 入到pA所指的區(qū)域,并為了使兩個(gè)地址分別示出下一個(gè)要素而加上地址 值。依據(jù)地址變量pA代入的存儲(chǔ)區(qū)域大小(存放對(duì)象大小)和依據(jù)地址變量 pB參照的存儲(chǔ)區(qū)域大小(裝入對(duì)象大小),由于彼此的地址變量為同型,因 此相同。
圖14B(a)是中間代碼,即,所述源程序200被輸入到圖6所示的編譯 處理中,并在圖6的Sl至S3的處理中被轉(zhuǎn)換后成為S4的輸入的中間代碼。 從該所輸入的中間代碼(圖14B(a))中,在關(guān)鍵路徑檢測(cè)處理(圖7的S10)中 可以檢測(cè)圖14C(a)所示的關(guān)鍵路徑。由于第一次的依據(jù)* 八++的存儲(chǔ)器代 入處理和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,因此該關(guān)鍵路徑的流程成為第一次的依據(jù)+pB的存儲(chǔ)器參照和依據(jù)* 八 的存儲(chǔ)器代入、和第二次的依據(jù)+pB的存儲(chǔ)器參照和依據(jù)+pA的存儲(chǔ)器代 入連續(xù)的處理。
針對(duì)該關(guān)鍵路徑,執(zhí)行模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖7的Sll、 圖8)。 S卩,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,從開(kāi)頭依次搜索關(guān)鍵 路徑上的處理(圖8的S20),并檢測(cè)第一次的依據(jù)* 八++的存儲(chǔ)器代入處理 和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系(圖8的 S21)。因此,在圖8的S21成為"是"。
由于在所輸入的中間代碼中作為執(zhí)行可否標(biāo)記只使用C6。因此存在 C6以外的執(zhí)行可否標(biāo)記寄存器資源。因此,在圖8的S24成為"是"。
在存儲(chǔ)器參照處理的移動(dòng)可否判斷處理(S25)中,除了要考慮成為存儲(chǔ)器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系的原因的存儲(chǔ)器以外,還要考慮寄存
器rl以及rll。雖然,可以設(shè)想寄存器rl以及rll分別依賴(lài)于其它處理的 情況,但是,在該情況下,到移動(dòng)目的地的存儲(chǔ)器代入處理和存儲(chǔ)器參照 處理為止不存在依據(jù)寄存器rl以及rll的定義、參照的依賴(lài)關(guān)系。因此, 可以移動(dòng)存儲(chǔ)器參照處理,并在圖8的S25成為"是"。
據(jù)此,在圖8的S26中,第一次的依據(jù)* 八++的存儲(chǔ)器代入處理和第 二次的依據(jù)* 8++的存儲(chǔ)器參照處理被判斷為處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,并在圖7的S12成為"是",從而這些存儲(chǔ)器存取處理的信息被遞送到 依賴(lài)關(guān)系緩解處理(圖7的S13)。對(duì)成為該模糊的存儲(chǔ)器依賴(lài)關(guān)系的存儲(chǔ)器 存取處理,進(jìn)行依賴(lài)關(guān)系的緩解(圖7的S13、圖9)。
獲得的存儲(chǔ)器存取處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系是第一次的依據(jù) *卩八++的對(duì)存儲(chǔ)器的定義和第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器的參照,因此是 真的依賴(lài)關(guān)系。據(jù)此,在圖9的S30成為"是",模糊的存儲(chǔ)器依賴(lài)關(guān)系緩 解優(yōu)化部114,如圖138(13)所示將第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器參照處理 移動(dòng)到第一次的依據(jù)* 八++的對(duì)存儲(chǔ)器代入處理的前面(圖9的S31)。由于 這些存儲(chǔ)器存取處理的依據(jù)pA的存放對(duì)象大小和依據(jù)pB的裝入對(duì)象大小 相同,因此在圖9的S32成為"是",并且,由于在循環(huán)內(nèi)存在處理,因此 在圖9的S35成為"是"。
對(duì)于地址變量pA以及pB的增量值,在循環(huán)內(nèi)地址變量pA的增量值 是+l和+inc、地址變量pB的增量值是+l和+l,有可能分別具有不同增量 值,因此在S37成為"否"。
在S37成為"否"的情況下,需要每次實(shí)施循環(huán)內(nèi)的依賴(lài)關(guān)系判斷, 而且在先行處理中不存在原有的地址比較處理,因此在圖9的S36成為 "否"。據(jù)此,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,將地址比較處理, 插入到圖9的S31中所移動(dòng)的存儲(chǔ)器參照處理的緊前面(圖9的S40),在所 述地址比較處理中,比較依據(jù)地址變量pB分配的寄存器rl的值和依據(jù)地 址變量pA分配的寄存器r0的值來(lái)判斷是否一致。
最后,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,為了在模糊的存儲(chǔ)器依 賴(lài)關(guān)系中實(shí)際發(fā)生依賴(lài)關(guān)系時(shí)準(zhǔn)確地保持邏輯,將帶有執(zhí)行可否標(biāo)記的校 正指令插入到所移動(dòng)的tpB的存儲(chǔ)器參照處理之后(圖9的S39),使得在地址一致的情況下,通過(guò)執(zhí)行可否標(biāo)記寄存器以rlO覆蓋rll,所述rl0是依 據(jù)+pA的存儲(chǔ)器代入處理所代入的值,所述rll是依據(jù)* 8的存儲(chǔ)器參照處 理而獲得的值。
如此,在依賴(lài)關(guān)系緩解處理(圖7的S13)中實(shí)施依賴(lài)關(guān)系緩解。據(jù)此, 在圖7的S14成為"是",在對(duì)緩解了依賴(lài)關(guān)系的中間代碼再次檢測(cè)關(guān)鍵路 徑的情況下(圖7的S15),如圖14C(b)所示,關(guān)鍵路徑只由第一次的依據(jù)承pB 的存儲(chǔ)器參照、帶有執(zhí)行可否標(biāo)記的校正指令以及依據(jù)* 厶的存儲(chǔ)器代入 處理的真的依賴(lài)關(guān)系構(gòu)成。即,在依據(jù)存儲(chǔ)器參照處理的等待時(shí)間為3周 期的情況下,關(guān)鍵路徑長(zhǎng)度從圖14C(a)的7周期變?yōu)?4C(b)的4周期,而 被縮短3周期。據(jù)此,在圖7的S16成為"是",遞歸地實(shí)施圖7的S11。 在該例子的情況下,由于所有的模糊的存儲(chǔ)器依賴(lài)關(guān)系被刪除,因此在第 二次的模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖9的Sll)中,不能檢測(cè)依賴(lài)關(guān)系 緩解對(duì)象的存儲(chǔ)器存取。據(jù)此,在圖7的S12成為"否",模糊的存儲(chǔ)器依 賴(lài)關(guān)系緩解優(yōu)化部114結(jié)束處理。
如此,在每個(gè)存儲(chǔ)器存取的地址增量值不同的情況下,也通過(guò)進(jìn)行模 糊的存儲(chǔ)器依賴(lài)關(guān)系緩解處理(圖7、圖6的S4)、縮短關(guān)鍵路徑,從而可以 依據(jù)指令調(diào)度處理(圖6的S5)實(shí)現(xiàn)更高性能的中間代碼,并且以匯編代碼 輸出處理(圖6的S6)來(lái)生成對(duì)象代碼,從而結(jié)束編譯處理。
圖15A以及圖15B是用于說(shuō)明針對(duì)循環(huán)構(gòu)造的、不同對(duì)象大小存取(小 —大第一次的存儲(chǔ)器存取大小與第二次的存儲(chǔ)器存取大小相比小)的依賴(lài) 關(guān)系緩解處理的圖。
圖15A是示出循環(huán)構(gòu)造的、不同對(duì)象大小存取的源程序200的一個(gè)例 子的圖。
該源程序200的處理內(nèi)容是指,在循環(huán)內(nèi)連續(xù)兩次進(jìn)行以下的處理 將函數(shù)的引數(shù)pA以及pB作為基準(zhǔn)地址并將pB所指的區(qū)域的值代入到pA 所指的區(qū)域,為了使pA和pB的地址分別示出下一個(gè)要素而加上地址值, 并且,循環(huán)反復(fù)一百次所述連續(xù)兩次的處理。依據(jù)地址變量pA代入的存儲(chǔ) 區(qū)域大小(存放對(duì)象大小)和依據(jù)地址變量pB參照的存儲(chǔ)區(qū)域大小(裝入對(duì) 象大小),由于分別是4字節(jié)和2字節(jié),因此存放對(duì)象大小與裝入對(duì)象大小相比大。
圖15B(a)是中間代碼,即,所述源程序200被輸入到圖6所示的編譯 處理中,并在圖6的Sl至S3的處理中被轉(zhuǎn)換后成為S4的輸入的中間代碼。 從該所輸入的中間代碼(圖15B(a))中,在關(guān)鍵路徑檢測(cè)處理(圖7的S10)中 可以檢測(cè)與圖11C(a)相同的關(guān)鍵路徑。由于第一次的依據(jù)* 八++的存儲(chǔ)器 代入處理和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理處于模糊的存儲(chǔ)器依賴(lài) 關(guān)系,因此該關(guān)鍵路徑的流程成為第一次的依據(jù)申pB的存儲(chǔ)器參照和依據(jù) *pA的存儲(chǔ)器代入、和第二次的依據(jù)fpB的存儲(chǔ)器參照和依據(jù)+pA的存儲(chǔ) 器代入連續(xù)的處理。
針對(duì)該關(guān)鍵路徑,執(zhí)行模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖7的Sll、 圖8)。即,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,從開(kāi)頭依次搜索關(guān)鍵 路徑上的處理(圖8的S20),并檢測(cè)第一次的依據(jù)* 八++的存儲(chǔ)器代入處理 和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系(圖8的 S21)。因此,在圖8的S21成為"是"。
由于在所輸入的中間代碼中作為執(zhí)行可否標(biāo)記只使用C6。因此存在 C6以外的執(zhí)行可否標(biāo)記寄存器資源。因此,在圖8的S24成為"是"。
在存儲(chǔ)器參照處理的移動(dòng)可否判斷處理(S25)中,除了要考慮成為存儲(chǔ) 器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系的原因的存儲(chǔ)器以外,還要考慮寄存 器rl以及rll。雖然,可以設(shè)想寄存器rl以及rll分別依賴(lài)于其它處理的 情況,但是,在該情況下,到移動(dòng)目的地的存儲(chǔ)器代入處理和存儲(chǔ)器參照 處理為止不存在依據(jù)寄存器rl以及rll的定義、參照的依賴(lài)關(guān)系。因此, 可以移動(dòng)存儲(chǔ)器參照處理,并在圖8的S25成為"是"。
據(jù)此,在圖8的S26中,第一次的依據(jù)* 八++的存儲(chǔ)器代入處理和第 二次的依據(jù)* 8++的存儲(chǔ)器參照處理被判斷為處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,并在圖7的S12成為"是",從而這些存儲(chǔ)器存取處理的信息被遞送到 依賴(lài)關(guān)系緩解處理(圖7的S13)。對(duì)成為該模糊的存儲(chǔ)器依賴(lài)關(guān)系的存儲(chǔ)器 存取處理,進(jìn)行依賴(lài)關(guān)系的緩解(圖7的S13、圖9)。
獲得的存儲(chǔ)器存取處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系是第一次的依據(jù) * 八++的對(duì)存儲(chǔ)器的定義和第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器的參照,因此是 真的依賴(lài)關(guān)系。據(jù)此,在圖9的S30成為"是",模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,如圖158(1))所示將第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器參照處理 移動(dòng)到第一次的依據(jù)* 八++的對(duì)存儲(chǔ)器代入處理的前面(圖9的S31)。由于 這些存儲(chǔ)器存取處理的依據(jù)pA的存放對(duì)象大小和依據(jù)pB的裝入對(duì)象大小 不同,因此在圖9的S32成為"否"。
在圖9的S32成為"否"的情況下,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化 部114,將地址范圍比較處理插入到存儲(chǔ)器參照處理的緊前面(圖9的S33)。 如下求出地址范圍比較處理。即,由于依據(jù)pA的存放對(duì)象大小和依據(jù)pB 的裝入對(duì)象大小分別是4字節(jié)和2字節(jié),因此可求出最大公約數(shù)gcd為2、 比較次數(shù)n為4字節(jié)/gcd(4字節(jié)、2字節(jié))gp 2。而且,由于依據(jù)地址變量 pB分配的寄存器是rl、依據(jù)地址變量pA分配的寄存器是rO,因此作為地 址范圍比較處理,可求出對(duì)r0==rl+2*0和r0==rl+2*l的兩個(gè)地址一致進(jìn)行 的比較處理。模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,將如此求出的地址范 圍比較處理插入到存儲(chǔ)器參照處理的緊前面(圖9的S33)。在圖15B(b)的中 間代碼中,為了高效地進(jìn)行所述比較處理,取兩個(gè)地址的異或,并且進(jìn)行 比較處理來(lái)判斷其結(jié)果為零、還是兩個(gè)地址的差距為2字節(jié)。
最后,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,為了在模糊的存儲(chǔ)器依 賴(lài)關(guān)系中實(shí)際發(fā)生依賴(lài)關(guān)系時(shí)準(zhǔn)確地保持邏輯,將帶有執(zhí)行可否標(biāo)記的校 正指令插入到所移動(dòng)的* 8的存儲(chǔ)器參照處理之后(圖9的S34),使得在地 址一致的情況下,通過(guò)執(zhí)行可否標(biāo)記寄存器以r10覆蓋只在rll中相當(dāng)于存 在依賴(lài)關(guān)系的存儲(chǔ)區(qū)域部分的數(shù)據(jù)部分(與圖11D相同),所述r10是依據(jù) *pA的存儲(chǔ)器代入處理所代入的值,所述rll是依據(jù)* 8的存儲(chǔ)器參照處理 而獲得的值。模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,在圖11B(b)的中間 代碼中,如圖IID的校正處理的存儲(chǔ)圖像所示,在低16位部分存在依賴(lài)關(guān) 系的情況下,作為"extrrll、 r10、 15、 0",對(duì)r10的從第0位到第15位 的16位進(jìn)行擴(kuò)展符號(hào)后覆蓋r11。而且,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化 部114,在高16位部分存在依賴(lài)關(guān)系的情況下,作為"extrrll、 r10、 31、 16",對(duì)H0的從第16位到第31位的16位進(jìn)行擴(kuò)展符號(hào)后覆蓋r11。符號(hào) 擴(kuò)展的需要的有無(wú),應(yīng)該符合rll的存儲(chǔ)器參照指令的工作。在此情況下, 由于對(duì)ldh處理設(shè)想將16位數(shù)據(jù)符號(hào)擴(kuò)展為32位來(lái)代入到寄存器,因此 設(shè)想對(duì)校正處理也需要實(shí)施符號(hào)擴(kuò)展,而以extr處理進(jìn)行符號(hào)擴(kuò)展。如此,在依賴(lài)關(guān)系緩解處理(圖7的S13)中實(shí)施依賴(lài)關(guān)系緩解。據(jù)此, 在圖7的S14成為"是",在對(duì)緩解了依賴(lài)關(guān)系的中間代碼再次檢測(cè)關(guān)鍵路 徑的情況下(圖7的S15),,與圖llC(b)相同,關(guān)鍵路徑只由第一次的依據(jù) *pB的存儲(chǔ)器參照、帶有執(zhí)行可否標(biāo)記的校正指令以及依據(jù)* 八的存儲(chǔ)器 代入處理的真的依賴(lài)關(guān)系構(gòu)成。即,在依據(jù)存儲(chǔ)器參照處理的等待時(shí)間為3 周期的情況下,關(guān)鍵路徑長(zhǎng)度從圖11C(a)的7周期變?yōu)?1C(b)的4周期, 而被縮短3周期。據(jù)此,在圖7的S16成為"是",遞歸地實(shí)施圖7的S11。 在該例子的情況下,由于,所有的模糊的存儲(chǔ)器依賴(lài)關(guān)系被刪除,因此在 第二次的模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖9的Sll)中,不能檢測(cè)依賴(lài)關(guān) 系緩解對(duì)象的存儲(chǔ)器存取,因此,在圖7的S12成為"否",模糊的存儲(chǔ)器 依賴(lài)關(guān)系緩解優(yōu)化部114結(jié)束處理。
如此,在存儲(chǔ)器存取對(duì)象的大小不同的情況下,也通過(guò)進(jìn)行模糊的存 儲(chǔ)器依賴(lài)關(guān)系緩解處理(圖7、圖6的S4)、縮短關(guān)鍵路徑,從而可以依據(jù)指 令調(diào)度處理(圖6的S5)實(shí)現(xiàn)更高性能的中間代碼,并以匯編代碼輸出處理 (圖6的S6)來(lái)生成對(duì)象代碼,從而結(jié)束編譯處理。
圖16A以及圖16B是用于說(shuō)明針對(duì)循環(huán)構(gòu)造的、不同對(duì)象大小存取(大 —小第一次的存儲(chǔ)器存取大小與第二次的存儲(chǔ)器存取大小相比小)的依賴(lài) 關(guān)系緩解處理的圖。
圖16A是示出循環(huán)構(gòu)造的、不同對(duì)象大小存取的源程序200的一個(gè)例 子的圖。
該源程序200的處理內(nèi)容是指,在循環(huán)內(nèi)連續(xù)兩次進(jìn)行以下的處理 將函數(shù)的引數(shù)pA以及pB作為基準(zhǔn)地址并將pB所指的區(qū)域的值代入到pA 所指的區(qū)域,為了使pA和pB的地址分別示出下一個(gè)要素而加上地址值, 并且,循環(huán)反復(fù)一百次所述連續(xù)兩次的處理。依據(jù)地址變量pA代入的存儲(chǔ) 區(qū)域大小(存放對(duì)象大小)和依據(jù)地址變量pB參照的存儲(chǔ)區(qū)域大小(裝入對(duì) 象大小),由于分別是2字節(jié)和4字節(jié),因此裝入對(duì)象大小與存放對(duì)象大小 相比大。
圖16B(a)是中間代碼,BP,所述源程序200被輸入到圖6所示的編譯 處理中,并在圖6的Sl至S3的處理中被轉(zhuǎn)換后成為S4的輸入的中間代碼。從該所輸入的中間代碼(圖16B(a))中,在關(guān)鍵路徑檢測(cè)處理(圖7的S10)中 可以檢測(cè)與圖12C(a)相同的關(guān)鍵路徑。由于第一次的依據(jù)* 八4+的存儲(chǔ)器 代入處理和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理處于模糊的存儲(chǔ)器依賴(lài) 關(guān)系,因此該關(guān)鍵路徑的流程成為第一次的依據(jù)+pB的存儲(chǔ)器參照和依據(jù) *pA的存儲(chǔ)器代入、和第二次的依據(jù)* 8的存儲(chǔ)器參照和依據(jù)* 八的存儲(chǔ) 器代入連續(xù)的處理。
針對(duì)該關(guān)鍵路徑,執(zhí)行模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖7的S11、 圖8)。 g卩,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,從開(kāi)頭依次搜索關(guān)鍵 路徑上的處理(圖8的S20),并檢測(cè)第一次的依據(jù)* 八++的存儲(chǔ)器代入處理 和第二次的依據(jù)* 8++的存儲(chǔ)器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系(圖8的 S21)。因此,在圖8的S21成為"是"。
由于在所輸入的中間代碼中作為執(zhí)行可否標(biāo)記只使用C6。因此存在 C6以外的執(zhí)行可否標(biāo)記寄存器資源。因此,在圖8的S24成為"是"。
在存儲(chǔ)器參照處理的移動(dòng)可否判斷處理(S25)中,除了要考慮成為存儲(chǔ) 器參照處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系的原因的存儲(chǔ)器以外,還要考慮寄存 器rl以及rll。雖然,可以設(shè)想寄存器rl以及rll分別依賴(lài)于其它處理的 情況,但是,在該情況下,到移動(dòng)目的地的存儲(chǔ)器代入處理和存儲(chǔ)器參照 處理為止不存在依據(jù)寄存器rl以及rll的定義、參照的依賴(lài)關(guān)系。因此, 可以移動(dòng)存儲(chǔ)器參照處理,并在圖8的S25成為"是"。
據(jù)此,在圖8的S26中,第一次的依據(jù)* 八++的存儲(chǔ)器代入處理和第 二次的依據(jù)* 8++的存儲(chǔ)器參照處理被判斷為處于模糊的存儲(chǔ)器依賴(lài)關(guān) 系,并在圖7的S12成為"是",從而這些存儲(chǔ)器存取處理的信息被遞送到 依賴(lài)關(guān)系緩解處理(圖7的S13)。對(duì)成為該模糊的存儲(chǔ)器依賴(lài)關(guān)系的存儲(chǔ)器 存取處理,進(jìn)行依賴(lài)關(guān)系的緩解(圖7的S13、圖9)。
獲得的存儲(chǔ)器存取處理的模糊的存儲(chǔ)器依賴(lài)關(guān)系是第一次的依據(jù) * 八++的對(duì)存儲(chǔ)器的定義和第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器的參照,因此是 真的依賴(lài)關(guān)系。據(jù)此,在圖9的S30成為"是",模糊的存儲(chǔ)器依賴(lài)關(guān)系緩 解優(yōu)化部114,如圖168(1>)所示將第二次的依據(jù)* 8++的對(duì)存儲(chǔ)器參照處理 移動(dòng)到第一次的依據(jù)* 八++的對(duì)存儲(chǔ)器代入處理的前面(圖9的S31)。由于 這些存儲(chǔ)器存取處理的依據(jù)pA的存放對(duì)象大小和依據(jù)pB的裝入對(duì)象大小
39不同,因此在圖9的S32成為"否"。
在圖9的S32成為"否"的情況下,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化 部114,將地址范圍比較處理插入到存儲(chǔ)器參照處理的緊前面(圖9的S33)。 如下求出地址范圍比較處理。即,由于依據(jù)pA的存放對(duì)象大小和依據(jù)pB 的裝入對(duì)象大小分別是2字節(jié)4字節(jié),因此可求出最大公約數(shù)gcd為2、比 較次數(shù)n為4字節(jié)/gcd(2字節(jié)、4字節(jié))即2。而且,由于依據(jù)地址變量pB 分配的寄存器是rl、依據(jù)地址變量pA分配的寄存器是r0,因此作為地址 范圍比較處理,可求出對(duì)rl=r0+2*0和rl=r0+2*l的兩個(gè)地址一致進(jìn)行的 比較處理。模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,將如此求出的地址范圍 比較處理插入到存儲(chǔ)器參照處理的緊前面(圖9的S33)。在圖16B(b)的中間 代碼中,為了高效地進(jìn)行所述比較處理,取兩個(gè)地址的異或,并且進(jìn)行比 較處理來(lái)判斷其結(jié)果為零、還是兩個(gè)地址的差距為2字節(jié)。
最后,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,為了在模糊的存儲(chǔ)器依 賴(lài)關(guān)系中實(shí)際發(fā)生依賴(lài)關(guān)系時(shí)準(zhǔn)確地保持邏輯,將帶有執(zhí)行可否標(biāo)記的校 正指令插入到所移動(dòng)的4pB的存儲(chǔ)器參照處理之后(圖9的S34),使得在地 址一致的情況下,通過(guò)執(zhí)行可否標(biāo)記寄存器以r10中相當(dāng)于存在依賴(lài)關(guān)系 的存儲(chǔ)區(qū)域部分的數(shù)據(jù)部分覆蓋在rll,所述"0是依據(jù)* 八的存儲(chǔ)器代入 處理所代入的值,所述rll是依據(jù)+pB的存儲(chǔ)器參照處理而獲得的值。模糊 的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,在圖16B(b)的中間代碼中,與圖12D 的校正處理的存儲(chǔ)圖像相同,在低16位部分存在依賴(lài)關(guān)系的情況下,作為 "valnrll、 r10、 rll",以r10的低16位覆蓋rll的低16位。而且,模糊 的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,在高16位部分存在依賴(lài)關(guān)系的情況下, 作為"valnrll、 rll、 rl0",以r10的高16位覆蓋rll的高16位。
如此,在依賴(lài)關(guān)系緩解處理(圖7的S13)中實(shí)施依賴(lài)關(guān)系緩解。據(jù)此, 在圖7的S14成為"是",在對(duì)緩解了依賴(lài)關(guān)系的中間代碼再次檢測(cè)關(guān)鍵路 徑的情況下(圖7的S15),與圖12C(b)相同,關(guān)鍵路徑只由第一次的依據(jù)氺pB 的存儲(chǔ)器參照、帶有執(zhí)行可否標(biāo)記的校正指令以及依據(jù)tpA的存儲(chǔ)器代入 處理的真的依賴(lài)關(guān)系構(gòu)成。即,在依據(jù)存儲(chǔ)器參照處理的等待時(shí)間為3周 期的情況下,關(guān)鍵路徑長(zhǎng)度從圖11C(a)的7周期變?yōu)?1C(b)的4周期,而 被縮短3周期。據(jù)此,在圖7的S16成為"是",遞歸地實(shí)施圖7的S11。在該例子的情況下,由于,所有的模糊的存儲(chǔ)器依賴(lài)關(guān)系被刪除,因此在
第二次的模糊的存儲(chǔ)器依賴(lài)關(guān)系檢測(cè)處理(圖9的Sll)中,不能檢測(cè)依賴(lài)關(guān) 系緩解對(duì)象的存儲(chǔ)器存取。據(jù)此,在圖7的S12成為"否",模糊的存儲(chǔ)器 依賴(lài)關(guān)系緩解優(yōu)化部114結(jié)束處理。
如此,在存儲(chǔ)器存取對(duì)象的大小不同的情況下,也通過(guò)進(jìn)行模糊的存 儲(chǔ)器依賴(lài)關(guān)系緩解處理(圖7、圖6的S4)、縮短關(guān)鍵路徑,從而可以依據(jù)指 令調(diào)度處理(圖6的S5)實(shí)現(xiàn)更高性能的中間代碼,并在匯編代碼輸出處理 (圖6的S6)中生成對(duì)象代碼,從而結(jié)束編譯處理。
圖17A 圖17C是用于說(shuō)明針對(duì)非循環(huán)構(gòu)造的、相同對(duì)象大小存取連 續(xù)的情況下的依賴(lài)關(guān)系緩解處理的圖。
圖17A是示出非循環(huán)構(gòu)造的、相同對(duì)象大小存取連續(xù)的源程序200的 一個(gè)例子的圖。
該源程序200的處理內(nèi)容是指,連續(xù)兩次以上進(jìn)行以下處理將函數(shù) 的引數(shù)pA以及pB作為基準(zhǔn)地址來(lái)將pB所示的區(qū)域的值代入到pA所示 的區(qū)域、且為了使pA和pB分別示出下一個(gè)要素而加上地址值。依據(jù)地址 變量pA代入的存儲(chǔ)區(qū)域大小(存放對(duì)象大小)和依據(jù)地址變量pB參照的存 儲(chǔ)區(qū)域大小(裝入對(duì)象大小),由于彼此的地址變量為同型,因此相同。
圖17B(a)是中間代碼,即,所述源程序200被輸入到圖6所示的編譯 處理中,并在圖6的Sl至S3的處理中被轉(zhuǎn)換后成為S4的輸入的中間代碼。 依據(jù)該所輸入的中間代碼(圖17B(a)),通過(guò)所述圖10A 圖10C中說(shuō)明的 轉(zhuǎn)換,從而生成如圖17B(b)的依賴(lài)關(guān)系緩解后的中間代碼,進(jìn)一步,對(duì)中 間代碼上的后續(xù)的模糊的存儲(chǔ)器依賴(lài)關(guān)系實(shí)施同樣的依賴(lài)關(guān)系緩解。此時(shí), 在前面的地址比較指令判斷處理(圖9的S36)中,像圖17C(a)的中間代碼那 樣,應(yīng)該在第三次的依據(jù)* 8++的存儲(chǔ)器存取處理"ldrl2、 (rl+)"的緊前 面插入"cmpeqCO、 rl、 r0"。然而,在前面存在同樣的cmp叫處理,并且 比較地址變量為pA(rO)和pB(rl),并且處于從前一個(gè)cmpeq處理到預(yù)定插 入的ld處理的緊前面為止的比較地址變量pA以及pB的增量值是固定的。 因此,被判斷為可以挪用地址比較處理。據(jù)此,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩 解優(yōu)化部114,不插入地址比較處理,而挪用原有的地址比較處理的結(jié)果即執(zhí)行可否標(biāo)記寄存器,插入校正處理(圖9的S39)。
如此,在連續(xù)的存儲(chǔ)器存取的依賴(lài)關(guān)系緩解中,通過(guò)緩解地址比較處 理,從而可以實(shí)現(xiàn)性能更高的中間代碼(圖17C(b))。
在成為優(yōu)化抑制指示的編譯選項(xiàng)被指定的情況下,在優(yōu)化信息解析處 理(圖6的S2),編譯選項(xiàng)被解析。其結(jié)果是,即使在例如所述圖10A 圖 10C的包含成為優(yōu)化對(duì)象的模糊的依賴(lài)關(guān)系的源程序200被輸入的情況下, 也按照優(yōu)化信息解析處理(圖6的S2)的解析結(jié)果,與所述相同被轉(zhuǎn)換的中 間代碼在圖7的S9成為"否",從而可以抑制模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解 優(yōu)化、可以防止生成機(jī)械語(yǔ)言代碼大小的增加。
在成為優(yōu)化特定指示的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化是關(guān)于模糊的存儲(chǔ)器 依賴(lài)關(guān)系緩解的指定的情況下,在優(yōu)化信息解析處理(圖6的S2)中解析符 號(hào)信息。其結(jié)果是,在例如所述圖10A 圖10C的包含成為優(yōu)化對(duì)象的模 糊的存儲(chǔ)器依賴(lài)關(guān)系的源程序200被輸入的情況下,在圖8的S22成為 "是"。因此,模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114,確認(rèn)符號(hào)信息中是 否包含所指定的pA和pB,在不包含的情況下,S23成為"否",而對(duì)下一 個(gè)模糊的存儲(chǔ)器依賴(lài)關(guān)系繼續(xù)進(jìn)行處理,在包含的情況下,S23成為"是", 而繼續(xù)進(jìn)行S24以后的模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解處理。如此,可以確定 模糊的存儲(chǔ)器依賴(lài)關(guān)系的緩解對(duì)象,也可以調(diào)整代碼大小的增加和執(zhí)行性 能的平衡。
如上所述,根據(jù)本實(shí)施例涉及的編譯系統(tǒng),通過(guò)將地址比較處理和按 照該結(jié)果的校正處理插入到模糊的存儲(chǔ)器依賴(lài)關(guān)系處理,從而緩解模糊的 存儲(chǔ)器依賴(lài)關(guān)系。據(jù)此,可以縮短關(guān)鍵路徑、可以提高程序執(zhí)行時(shí)的處理 速度。
在上面,對(duì)于本發(fā)明的實(shí)施例涉及的編譯系統(tǒng),雖然根據(jù)實(shí)施例說(shuō)明 了,但是本發(fā)明不僅限于該實(shí)施例。
在所述實(shí)施例中,雖然設(shè)想用于C語(yǔ)言的編譯系統(tǒng),但是本發(fā)明不僅 限于c語(yǔ)言。即使在采用其它程序語(yǔ)言的情況下,也可以保持本發(fā)明的意義。在所述實(shí)施例中,雖然作為編程員抑制依賴(lài)關(guān)系緩解優(yōu)化的用戶(hù)接口 采用編譯選項(xiàng),但是本發(fā)明不僅限于該接口。例如,可以以編譯指示指定 來(lái)傳達(dá)。并且,對(duì)于傳達(dá)方法,不僅限于像所述實(shí)施例那樣的、以文件為 單位來(lái)指定的方法,而是記述處理范圍的形式。
在所述實(shí)施例中,雖然作為編程員指定依賴(lài)關(guān)系緩解對(duì)象的用戶(hù)接口 采用編譯選項(xiàng),但是本發(fā)明不僅限于該接口。例如,可以以選項(xiàng)指定來(lái)傳 達(dá)。并且,對(duì)于傳達(dá)方法,不僅限于像所述實(shí)施例那樣的、記述符號(hào)信息 的方法,而可以是記述處理范圍的形式。進(jìn)一步,作為指定范圍的粒度, 可以以更大的粒度即以文件為單位來(lái)指定用途。
在所述實(shí)施例中,雖然作為存儲(chǔ)器存取處理設(shè)想數(shù)據(jù)高速緩存或內(nèi)置、 外部存儲(chǔ)器,但是本發(fā)明不僅限于存儲(chǔ)空間。對(duì)其它共享資源的處理,也 可以保持本發(fā)明的意義。例如,也可以是,向資源有可能動(dòng)態(tài)地被共享的
存儲(chǔ)變換(Memory-mapped)外部端口的存取指令等其它指令。
在所述實(shí)施例中,雖然設(shè)想關(guān)于模糊的存儲(chǔ)器依賴(lài)關(guān)系的依賴(lài)關(guān)系緩 解,但是本發(fā)明不僅限于模糊的存儲(chǔ)器依賴(lài)關(guān)系。例如,在存在不模糊的 真的存儲(chǔ)器依賴(lài)關(guān)系的情況下,也可以保持本發(fā)明的意義。
在所述實(shí)施例中,雖然設(shè)想產(chǎn)生互鎖(在產(chǎn)生數(shù)據(jù)依賴(lài)關(guān)系的指令間先 行指令的執(zhí)行結(jié)果未被轉(zhuǎn)發(fā)到后續(xù)指令所參照的寄存器的情況下,后續(xù)指 令的執(zhí)行被處理器動(dòng)態(tài)地停止的現(xiàn)象)的目標(biāo)處理器,但是本發(fā)明不僅限于 此。本發(fā)明也可以適用于采用應(yīng)該不產(chǎn)生互鎖而靜態(tài)地解決這些問(wèn)題的結(jié) 構(gòu)的處理器。
例如,若不是以通過(guò)模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解優(yōu)化部114緩解依賴(lài) 關(guān)系為目的,而是以刪除不必要的等待時(shí)間為目的,則不調(diào)換裝入處理和 存放處理,也可以縮短關(guān)鍵路徑。
在所述實(shí)施例中,雖然插入按照所述地址比較處理的結(jié)果的、依據(jù)執(zhí) 行可否標(biāo)記的附帶條件的校正處理,但是本發(fā)明中不將執(zhí)行可否標(biāo)記僅限 于校正處理。例如,通過(guò)裝入處理也被附帶執(zhí)行可否條件,從而可以緩解 不必要的情況下的裝入處理。
應(yīng)該認(rèn)為的是,這次所公開(kāi)的實(shí)施例中的所有內(nèi)容是舉例說(shuō)明的,因 此不僅限于此例子。對(duì)于本發(fā)明的范圍,不是依據(jù)所述說(shuō)明示出的、而是依據(jù)權(quán)利要求的范圍示出的,并且,意味著包含與權(quán)利要求的范圍相等的 意思以及范圍內(nèi)的所有的變更。
本發(fā)明可以適用于緩解資源有可能動(dòng)態(tài)地被共享的指令的模糊的依賴(lài)
關(guān)系的編譯器、操作系統(tǒng)(Operating System)、被處理器執(zhí)行的進(jìn)程等。
權(quán)利要求
1、 一種程序重寫(xiě)裝置,將輸入程序重寫(xiě)為用于處理器的程序,該處理 器可以根據(jù)執(zhí)行可否標(biāo)記來(lái)控制處理的執(zhí)行可否,所述程序重寫(xiě)裝置包括:比較處理插入單元,將比較處理插入到所述輸入程序中,所述比較處 理所進(jìn)行的處理是,對(duì)第一地址信息和第二地址信息進(jìn)行比較,而將比較 結(jié)果寫(xiě)入到執(zhí)行可否標(biāo)記中,所述第一地址信息是所述輸入程序中包含的 第一存儲(chǔ)器存取處理所存取的存儲(chǔ)器的地址信息,所述第二地址信息是所述輸入程序中包含的第二存儲(chǔ)器存取處理所存取的存儲(chǔ)器的地址信息;以及邏輯保證處理插入單元,將帶有執(zhí)行可否標(biāo)記的邏輯保證處理插入到 所述輸入程序中,所述邏輯保證處理是,根據(jù)所述執(zhí)行可否標(biāo)記的值執(zhí)行 的處理、且是用于保證與所述輸入程序的執(zhí)行時(shí)相同的處理結(jié)果的處理。
2、 如權(quán)利要求1所述的程序重寫(xiě)裝置,所述第一存儲(chǔ)器存取處理是存放處理,將數(shù)據(jù)寫(xiě)入到存儲(chǔ)器中; 所述第二存儲(chǔ)器存取處理是裝入處理,從存儲(chǔ)器中讀取數(shù)據(jù)。
3、 如權(quán)利要求2所述的程序重寫(xiě)裝置,還包括關(guān)鍵路徑檢測(cè)單元,從所述輸入程序中檢測(cè)成為關(guān)鍵路徑的處理;以及模糊的存儲(chǔ)器依賴(lài)關(guān)系解析單元,判斷所述關(guān)鍵路徑檢測(cè)單元所檢測(cè) 的關(guān)鍵路徑中是否包含所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處 理,在包含所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處理的情況下, 解析所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處理之間是否存在模 糊的真的存儲(chǔ)器依賴(lài)關(guān)系,所述比較處理插入單元,將第一地址信息以及第二地址信息作為比較 的對(duì)象,將比較處理插入到所述輸入程序中,所述第一地址信息以及第二 地址信息分別與由所述模糊的存儲(chǔ)器依賴(lài)關(guān)系解析單元判斷為處于模糊的真的存儲(chǔ)器依賴(lài)關(guān)系的所述第一存儲(chǔ)器存取處理以及所述第二存儲(chǔ)器存取 處理相對(duì)應(yīng)。
4、 如權(quán)利要求3所述的程序重寫(xiě)裝置,還包括,執(zhí)行順序變更單元,將由所述模糊的存儲(chǔ)器依賴(lài)關(guān)系解析單 元判斷為處于模糊的真的存儲(chǔ)器依賴(lài)關(guān)系的所述第一存儲(chǔ)器存取處理和所 述第二存儲(chǔ)器存取處理的執(zhí)行順序變更。
5、 如權(quán)利要求4所述的程序重寫(xiě)裝置,還包括,數(shù)據(jù)大小比較單元,判斷是否滿(mǎn)足以下條件,即,所述第一 存儲(chǔ)器存取處理一次存取的數(shù)據(jù)大小與所述第二存儲(chǔ)器存取處理一次存取 的數(shù)據(jù)大小相同,所述邏輯保證處理插入單元,在由所述數(shù)據(jù)大小比較單元判斷為滿(mǎn)足 所述條件的情況下,將覆蓋處理作為所述邏輯保證處理插入到所述輸入程 序中,所述覆蓋處理是指,以所述第一存儲(chǔ)器存取處理寫(xiě)入到存儲(chǔ)器中的 值覆蓋所述第二存儲(chǔ)器存取處理從存儲(chǔ)器中讀取的值的處理。
6、 如權(quán)利要求5所述的程序重寫(xiě)裝置,所述比較處理插入單元,將所述比較處理插入在所述邏輯保證處理的 前面的一個(gè)地方,以作為執(zhí)行順序。
7、 如權(quán)利要求5所述的程序重寫(xiě)裝置,還包括,規(guī)則性判斷單元,判斷是否滿(mǎn)足以下條件,即,所述第一以 及第二存儲(chǔ)器存取處理連續(xù)進(jìn)行,并且,在各個(gè)存儲(chǔ)器存取處理中所存取 的存儲(chǔ)器的地址規(guī)則性地被更新,所述比較處理插入單元,在由所述規(guī)則性判斷單元判斷為滿(mǎn)足所述條 件的情況下,將所述比較處理插入到對(duì)所述第一以及第二存儲(chǔ)器存取處理 的開(kāi)頭的所述邏輯保證處理的前面的位置,以作為執(zhí)行順序。
8、 如權(quán)利要求5所述的程序重寫(xiě)裝置,還包括,規(guī)則性判斷單元,判斷是否滿(mǎn)足以下條件,S卩,反復(fù)執(zhí)行所 述第一以及第二存儲(chǔ)器存取處理,并且,在各個(gè)存儲(chǔ)器存取處理中所存取 的存儲(chǔ)器的地址規(guī)則性地被更新,所述比較處理插入單元,在由所述規(guī)則性判斷單元判斷為滿(mǎn)足所述條 件的情況下,將所述比較處理插入到所述第一以及第二存儲(chǔ)器存取處理的 反復(fù)的前面的位置,以作為執(zhí)行順序。'
9、 如權(quán)利要求4所述的程序重寫(xiě)裝置,還包括,數(shù)據(jù)大小比較單元,判斷是否滿(mǎn)足以下條件,g卩,所述第二 存儲(chǔ)器存取處理一次存取的數(shù)據(jù)大小比所述第一存儲(chǔ)器存取處理一次存取 的數(shù)據(jù)大小小,所述邏輯保證處理插入單元,在由所述數(shù)據(jù)大小比較單元判斷為滿(mǎn)足 所述條件的情況下,將覆蓋處理作為所述邏輯保證處理插入到所述輸入程 序中,所述覆蓋處理是指,以所述第一存儲(chǔ)器存取處理寫(xiě)入到存儲(chǔ)器中的 值的一部分覆蓋所述第二存儲(chǔ)器存取處理從存儲(chǔ)器中讀取的值的處理。
10、 如權(quán)利要求4所述的程序重寫(xiě)裝置,還包括,數(shù)據(jù)大小比較單元,判斷是否滿(mǎn)足以下條件,即,所述第二 存儲(chǔ)器存取處理一次存取的數(shù)據(jù)大小比所述第一存儲(chǔ)器存取處理一次存取 的數(shù)據(jù)大小大,所述邏輯保證處理插入單元,在由所述數(shù)據(jù)大小比較單元判斷為滿(mǎn)足 所述條件的情況下,將覆蓋處理作為所述邏輯保證處理插入到所述輸入程 序中,所述覆蓋處理是指,以所述第一存儲(chǔ)器存取處理寫(xiě)入到存儲(chǔ)器中的 值覆蓋所述第二存儲(chǔ)器存取處理從存儲(chǔ)器中讀取的值的一部分的處理。
11、 如權(quán)利要求1所述的程序重寫(xiě)裝置,還包括,優(yōu)化指定信息附加單元,接受與優(yōu)化有關(guān)的優(yōu)化指示信息, 所述比較處理插入單元以及所述邏輯保證處理插入單元,根據(jù)所述優(yōu) 化指定信息附加單元接受的所述優(yōu)化指示信息,選擇性地進(jìn)行工作。
12、 如權(quán)利要求ll所述的程序重寫(xiě)裝置,所述優(yōu)化指定信息附加單元,接受與模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解的實(shí) 施抑制有關(guān)的優(yōu)化指示信息,在所述優(yōu)化指定信息附加單元接受所述與模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解 的實(shí)施抑制有關(guān)的優(yōu)化指示信息的情況下,所述比較處理插入單元以及所 述邏輯保證處理插入單元不進(jìn)行工作。
13、 如權(quán)利要求ll所述的程序重寫(xiě)裝置,所述優(yōu)化指定信息附加單元,接受確定模糊的存儲(chǔ)器依賴(lài)關(guān)系緩解對(duì) 象的存儲(chǔ)器存取處理的符號(hào)信息,所述比較處理插入單元,將與所述優(yōu)化指定信息附加單元接受的符號(hào) 信息所確定的存儲(chǔ)器存取處理相對(duì)應(yīng)的地址信息作為比較的對(duì)象,將所述 比較處理插入到所述輸入程序中。
14、 一種程序重寫(xiě)方法,將輸入程序重寫(xiě)為用于處理器的程序,該處 理器根據(jù)執(zhí)行可否標(biāo)記來(lái)可以控制處理的執(zhí)行可否,所述程序重寫(xiě)方法包括比較處理插入步驟,將比較處理插入到所述輸入程序中,所述比較處 理所進(jìn)行的處理是,對(duì)第一地址信息和第二地址信息進(jìn)行比較,而將比較 結(jié)果寫(xiě)入到執(zhí)行可否標(biāo)記中,所述第一地址信息是所述輸入程序中包含的 第一存儲(chǔ)器存取處理所存取的存儲(chǔ)器的地址信息,所述第二地址信息是所述輸入程序中包含的第二存儲(chǔ)器存取處理所存取的存儲(chǔ)器的地址信息;以 及邏輯保證處理插入步驟,將帶有執(zhí)行可否標(biāo)記的邏輯保證處理插入到 所述輸入程序中,所述邏輯保證處理是,根據(jù)所述執(zhí)行可否標(biāo)記的值執(zhí)行 的處理、且是用于保證與所述輸入程序的執(zhí)行時(shí)相同的處理結(jié)果的處理。
15、 如權(quán)利要求14所述的程序重寫(xiě)方法,所述第一存儲(chǔ)器存取處理是存放處理,將數(shù)據(jù)寫(xiě)入到存儲(chǔ)器中, 所述第二存儲(chǔ)器存取處理是裝入處理,從存儲(chǔ)器中讀取數(shù)據(jù)。
16、 如權(quán)利要求15所述的程序重寫(xiě)方法,還包括關(guān)鍵路徑檢測(cè)步驟,從所述輸入程序中檢測(cè)成為關(guān)鍵路徑的處理;以及模糊的存儲(chǔ)器依賴(lài)關(guān)系解析步驟,判斷在所述關(guān)鍵路徑檢測(cè)步驟所檢 測(cè)的關(guān)鍵路徑中是否包含所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取 處理,在包含所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處理的情況 下,解析所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處理之間是否存 在模糊的真的存儲(chǔ)器依賴(lài)關(guān)系,所述比較處理插入步驟,將第一地址信息以及第二地址信息作為比較 的對(duì)象,將比較處理插入到所述輸入程序中,所述第一地址信息以及第二 地址信息分別與在所述模糊的存儲(chǔ)器依賴(lài)關(guān)系解析步驟判斷為處于模糊的 真的存儲(chǔ)器依賴(lài)關(guān)系的所述第一存儲(chǔ)器存取處理以及所述第二存儲(chǔ)器存取 處理相對(duì)應(yīng)。
17、 如權(quán)利要求16所述的程序重寫(xiě)方法,還包括,執(zhí)行順序變更步驟,將在所述模糊的存儲(chǔ)器依賴(lài)關(guān)系解析步 驟判斷為處于模糊的真的存儲(chǔ)器依賴(lài)關(guān)系的所述第一存儲(chǔ)器存取處理和所 述第二存儲(chǔ)器存取處理的執(zhí)行順序變更。
18、 如權(quán)利要求17所述的程序重寫(xiě)方法,還包括,數(shù)據(jù)大小比較步驟,判斷是否滿(mǎn)足以下條件,即,所述第一 存儲(chǔ)器存取處理一次存取的數(shù)據(jù)大小與所述第二存儲(chǔ)器存取處理一次存取 的數(shù)據(jù)大小相同,所述邏輯保證處理插入步驟,在所述數(shù)據(jù)大小比較步驟判斷為滿(mǎn)足所 述條件的情況下,將覆蓋處理作為所述邏輯保證處理插入到所述輸入程序 中,所述覆蓋處理是指,以所述第一存儲(chǔ)器存取處理寫(xiě)入到存儲(chǔ)器中的值 覆蓋依據(jù)所述第二存儲(chǔ)器存取處理從存儲(chǔ)器中讀取的值的處理。
19、 如權(quán)利要求18所述的程序重寫(xiě)方法,在所述比較處理插入步驟,將所述比較處理插入在所述邏輯保證處理 的前面的一個(gè)地方,以作為執(zhí)行順序。
20、 一種程序,將輸入程序重寫(xiě)為用于處理器的程序,該處理器根據(jù) 執(zhí)行可否標(biāo)記來(lái)可以控制處理的執(zhí)行可否,所述程序使計(jì)算機(jī)執(zhí)行以下步驟比較處理插入步驟,將比較處理插入到所述輸入程序中,所述比較處 理所進(jìn)行的處理是,對(duì)第一地址信息和第二地址信息進(jìn)行比較,而將比較 結(jié)果寫(xiě)入到執(zhí)行可否標(biāo)記中,所述第一地址信息是所述輸入程序中包含的 第一存儲(chǔ)器存取處理所存取的存儲(chǔ)器的地址信息,所述第二地址信息是所述輸入程序中包含的第二存儲(chǔ)器存取處理所存取的存儲(chǔ)器的地址信息;以 及邏輯保證處理插入步驟,將帶有執(zhí)行可否標(biāo)記的邏輯保證處理插入到 所述輸入程序中,所述邏輯保證處理是,根據(jù)所述執(zhí)行可否標(biāo)記的值執(zhí)行 的處理、且是用于保證與所述輸入程序的執(zhí)行時(shí)相同的處理結(jié)果的處理。
21、 如權(quán)利要求20所述的程序,所述第一存儲(chǔ)器存取處理是存放處理,將數(shù)據(jù)寫(xiě)入到存儲(chǔ)器中, 所述第二存儲(chǔ)器存取處理是裝入處理,從存儲(chǔ)器中讀取數(shù)據(jù)。
22、 如權(quán)利要求21所述的程序, 還使計(jì)算機(jī)執(zhí)行以下步驟關(guān)鍵路徑檢測(cè)步驟,從所述輸入程序中檢測(cè)成為關(guān)鍵路徑的處理;以及模糊的存儲(chǔ)器依賴(lài)關(guān)系解析步驟,判斷在所述關(guān)鍵路徑檢測(cè)步驟所檢 測(cè)的關(guān)鍵路徑中是否包含所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取 處理,在包含所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處理的情況 下,解析所述第一存儲(chǔ)器存取處理和所述第二存儲(chǔ)器存取處理之間是否存 在模糊的真的存儲(chǔ)器依賴(lài)關(guān)系,所述比較處理插入步驟,將第一地址信息以及第二地址信息作為比較的對(duì)象,將比較處理插入到所述輸入程序中,所述第一地址信息以及第二 地址信息分別與在所述模糊的存儲(chǔ)器依賴(lài)關(guān)系解析步驟判斷為處于模糊的 真的存儲(chǔ)器依賴(lài)關(guān)系的所述第一存儲(chǔ)器存取處理以及所述第二存儲(chǔ)器存取 處理相對(duì)應(yīng)。
23、 如權(quán)利要求22所述的程序,還使計(jì)算機(jī)執(zhí)行, 執(zhí)行順序變更步驟,將在所述模糊的存儲(chǔ)器依賴(lài)關(guān)系解析步驟判斷為處于模糊的真的存儲(chǔ)器依賴(lài)關(guān)系的所述第一存儲(chǔ)器存取處理和所述第二存 儲(chǔ)器存取處理的執(zhí)行順序變更。
24、 如權(quán)利要求23所述的程序,還使計(jì)算機(jī)執(zhí)行, 數(shù)據(jù)大小比較步驟,判斷是否滿(mǎn)足以下條件,即,所述第一存儲(chǔ)器存取處理一次存取的數(shù)據(jù)大小與所述第二存儲(chǔ)器存取處理一次存取的數(shù)據(jù)大 小相同,所述邏輯保證處理插入步驟,在所述數(shù)據(jù)大小比較步驟判斷為滿(mǎn)足所 述條件的情況下,將覆蓋處理作為所述邏輯保證處理插入到所述輸入程序 中,所述覆蓋處理是指,以所述第一存儲(chǔ)器存取處理寫(xiě)入到存儲(chǔ)器中的值 覆蓋依據(jù)所述第二存儲(chǔ)器存取處理從存儲(chǔ)器中讀取的值的處理。
25、 如權(quán)利要求24所述的程序,在所述比較處理插入步驟,將所述比較處理插入在所述邏輯保證處理 的前面的一個(gè)地方,以作為執(zhí)行順序。
26、 一種計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì),存儲(chǔ)程序,該程序?qū)⑤斎氤绦蛑貙?xiě) 為用于處理器的程序,該處理器根據(jù)執(zhí)行可否標(biāo)記來(lái)可以控制處理的執(zhí)行 可否,所述程序使計(jì)算機(jī)執(zhí)行以下步驟比較處理插入步驟,將比較處理插入到所述輸入程序中,所述比較處 理所進(jìn)行的處理是,對(duì)第一地址信息和第二地址信息進(jìn)行比較,而將比較 結(jié)果寫(xiě)入到執(zhí)行可否標(biāo)記中,所述第一地址信息是所述輸入程序中包含的 第一存儲(chǔ)器存取處理所存取的存儲(chǔ)器的地址信息,所述第二地址信息是所述輸入程序中包含的第二存儲(chǔ)器存取處理所存取的存儲(chǔ)器的地址信息;以 及邏輯保證處理插入步驟,將帶有執(zhí)行可否標(biāo)記的邏輯保證處理插入到所述 輸入程序中,所述邏輯保證處理是,根據(jù)所述執(zhí)行可否標(biāo)記的值執(zhí)行的處 理、且是用于保證與所述輸入程序的執(zhí)行時(shí)相同的處理結(jié)果的處理。
全文摘要
一種程序重寫(xiě)方法,將輸入程序重寫(xiě)為用于處理器的程序,該處理器根據(jù)執(zhí)行可否標(biāo)記來(lái)可以控制處理的執(zhí)行可否,所述程序重寫(xiě)方法包括比較處理插入步驟,將比較處理插入到輸入程序中,所述比較處理所進(jìn)行的處理是,對(duì)第一地址信息和第二地址信息進(jìn)行比較,而將比較結(jié)果寫(xiě)入到執(zhí)行可否標(biāo)記中,所述第一地址信息是第一存儲(chǔ)器存取處理所存取的存儲(chǔ)器的地址信息,所述第二地址信息是第二存儲(chǔ)器存取處理所存取的存儲(chǔ)器的地址信息;以及邏輯保證處理插入步驟,將帶有執(zhí)行可否標(biāo)記的邏輯保證處理插入到輸入程序中,所述邏輯保證處理是,根據(jù)執(zhí)行可否標(biāo)記的值執(zhí)行的處理、且是用于保證與輸入程序的執(zhí)行時(shí)相同的處理結(jié)果的處理。
文檔編號(hào)G06F9/45GK101311901SQ200810100529
公開(kāi)日2008年11月26日 申請(qǐng)日期2008年5月20日 優(yōu)先權(quán)日2007年5月25日
發(fā)明者大門(mén)正嗣, 小川一, 川端輝雄, 瓶子岳人 申請(qǐng)人:松下電器產(chǎn)業(yè)株式會(huì)社
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
尚志市| 凉城县| 新邵县| 通海县| 镇原县| 苍溪县| 黑河市| 建宁县| 沂水县| 三门峡市| 延安市| 凯里市| 永年县| 大化| 新兴县| 通城县| 射阳县| 满城县| 京山县| 宿迁市| 绥宁县| 准格尔旗| 广德县| 安庆市| 兴安县| 牟定县| 黄龙县| 唐河县| 东港市| 新丰县| 秦皇岛市| 蒲江县| 垣曲县| 许昌市| 罗定市| 武义县| 保亭| 虞城县| 西贡区| 稻城县| 泗水县|