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

存儲器訪問指令向量化的制作方法

文檔序號:6378385閱讀:211來源:國知局
專利名稱:存儲器訪問指令向量化的制作方法
技術(shù)領(lǐng)域
本說明書涉及存儲器訪問指令向量化。
背景當(dāng)程序源代碼被編譯成目標(biāo)代碼或匯編代碼時,常常使用存儲器訪問指令向量化。向量化還可以在匯編器的優(yōu)化器(optimizer)中被使用。在編譯期間,存儲器訪問指令向量化將兩個或更多個存儲器訪問指令組合成單存儲器訪問指令以增加存儲器帶寬。因此,在程序執(zhí)行期間需要較少的存儲器訪問,這提高了具有長存儲器訪問延時(latency)的計算設(shè)備的性能。


圖1是框圖。
圖2是流程圖。
圖3是存儲器圖。
圖4是源代碼列表。
圖5是框圖。
圖6是指令模式。
詳細說明如圖1所示,示例性系統(tǒng)10包括處理器12和存儲器14。存儲器14包括操作系統(tǒng)16、編譯器18、源代碼20和目標(biāo)代碼22。在一些實施方案中,編譯和執(zhí)行沒有被組合在單個系統(tǒng)中。在這樣的實施方案中,源代碼在第一系統(tǒng)中被編譯成目標(biāo)文件(多個目標(biāo)文件),而已鏈接目標(biāo)文件的執(zhí)行在第二系統(tǒng)中發(fā)生。在一個實施例中,編譯器18讀取儲存設(shè)備(例如硬盤)上的源代碼文件中的源代碼。系統(tǒng)10可以包括輸入/輸出設(shè)備24和儲存設(shè)備26。
處理器12執(zhí)行包含在目標(biāo)代碼22中的指令。所述指令可以包括存儲器訪問指令,例如從存儲器14讀的指令和寫到存儲器14的指令。在一些計算機體系結(jié)構(gòu)中,存儲器訪問指令具有訪問可選數(shù)目的字節(jié)的能力。存儲器14典型地以這樣一種邏輯方式來組織,其中儲存數(shù)據(jù)的存儲器中的位置由稱為地址的數(shù)字來表示。存儲器14可以被想象為儲存箱陣列(array),其中的每一個箱為1字節(jié)長。每個箱子具有指派給它的一個地址(唯一的數(shù)字)。通過指定存儲器地址,程序設(shè)計者可以訪問數(shù)據(jù)的特定字節(jié)。
存儲器14可以具有不同的類型或區(qū)塊(bank)。例如,存儲器14可以包括靜態(tài)隨機訪問存儲器(SRAM)區(qū)塊、動態(tài)隨機訪問存儲器(DRAM)區(qū)塊和便箋式存儲器存儲區(qū)塊。存儲器14還可以包括電可編程只讀存儲器(EEPROM)區(qū)塊、非易失性隨機訪問(NVRAM)區(qū)塊和閃存區(qū)塊。因為對不同存儲器存儲區(qū)塊的存儲器訪問彼此獨立,可以獨立地執(zhí)行針對指向特定的存儲區(qū)塊(memory bank)的存儲器訪問指令的存儲器訪問向量化。
每個存儲器訪問指令遵循一指令格式。所述指令格式包括存儲器訪問的類型(例如讀或?qū)?、要讀和寫信息的存儲區(qū)塊、所述訪問要開始的起始地址以及要處理的字節(jié)數(shù)。被處理的字節(jié)數(shù)可以隨著存儲器的類型(例如SRAM、DRAM、便箋式存儲器等等)和要被執(zhí)行的操作(例如讀、寫)而變化。存儲器訪問指令用來讀和寫的最小字節(jié)數(shù)被稱為最小數(shù)據(jù)訪問單元(MDAU)。
一旦存儲器訪問已經(jīng)開始,處理器12等待訪問完成。編譯器18通過將包含在源代碼20中的兩個或更多個存儲器訪問指令組合成單個等效的向量化的存儲器訪問指令來減少處理器12的等待時間。
如圖2所示,編譯器18對源代碼20進行多趟遍歷,并且使用指令模式匹配來向量化存儲器訪問。在格式化趟(102)中,編譯器18將提供來讀取少于MDAU個字節(jié)的每個存儲器訪問讀指令格式化為訪問MDAU個字節(jié)的讀指令。例如,如果MDAU是4個字節(jié)并且遇到的存儲器讀指令讀取2個字節(jié),那么所述遇到的存儲器讀指令被格式化為讀取4個字節(jié)。類似地,寫少于MDAU個字節(jié)的存儲器訪問寫指令被編譯器18格式化以形成MDAU個字節(jié)的部分寫指令。
在隨后的趟中,編譯器18將盡可能多的已格式化的存儲器訪問指令轉(zhuǎn)化(104)為存儲器地址引用(reference)是基地址加偏移形式的標(biāo)準(zhǔn)格式,其中基地址是作為其他地址的參考點的地址。例如,基地址可以指示程序的開始。程序中每條指令的地址可以隨后通過把偏移加到基地址來指定。將存儲器訪問指令轉(zhuǎn)化為基地址加偏移的形式有助于存儲器訪問的向量化,這一點是通過使得更容易將幾個存儲器訪問組合在一起來實現(xiàn)的。
在轉(zhuǎn)化存儲器訪問指令的趟之后,編譯器18基于數(shù)據(jù)流圖為對特定存儲區(qū)塊的存儲器讀或存儲器寫的每個集合產(chǎn)生(106)存儲器訪問分片(partition)。存儲器訪問分片包含一個基本塊內(nèi)的多組存儲器訪問指令。在一個組(也被稱為存儲器訪問分片的子節(jié)點)中的所有存儲器訪問指令執(zhí)行對同一存儲區(qū)塊的相同的存儲器訪問(寫或讀)。編譯器18基于為每個存儲器訪問分片的每個組(每個子節(jié)點)執(zhí)行的指令模式匹配來向量化(108)多條存儲器訪問指令。
如圖3所示,使用一組規(guī)則來產(chǎn)生(106)存儲器訪問分片(例如存儲器訪問分片200、202、204)。數(shù)據(jù)流圖206被產(chǎn)生。在該實施例中,數(shù)據(jù)流圖206包括三個基本塊208、210、212。基本塊208、210、212中的每一個包括存儲器訪問指令。
對于數(shù)據(jù)流圖206中的每個基本塊208、210、212,應(yīng)用以下準(zhǔn)則以分別產(chǎn)生對應(yīng)的存儲器訪問分片200、202、204。分片的每個子節(jié)點僅包含針對具體存儲區(qū)塊的存儲器訪問操作。例如,子節(jié)點214包括對SRAM存儲區(qū)塊的讀。子節(jié)點216包括到DRAM存儲區(qū)塊的寫。
如果分片不包含任何存儲器訪問操作,那么所述分片是可以在以下的指令模式匹配中被忽略的空分片。
每個子節(jié)點僅包含存儲器讀或存儲器寫,而不能包含存儲器讀和存儲器寫兩者。例如,分片200的子節(jié)點214僅包含存儲器讀。分片202的子節(jié)點218僅包含存儲器寫。如果在兩個存儲器訪問指令間存在著依賴性(dependence),那么它們不被放置在同一子節(jié)點中。
數(shù)據(jù)流圖206中的一個基本塊對應(yīng)一個存儲器訪問分片,而每個存儲器訪問分片可以包括一個或更多個子結(jié)點。例如,基本塊208對應(yīng)于包含子結(jié)點214、216的存儲器訪問分片200。
我們使用MDAU為4來描述編譯器18,盡管可以使用其他的MDAU值。
如圖4所示,使用存儲器圖150來描述將兩個SRAM讀組合成一個SRAM讀的向量化。存儲器圖150包括由Addr+0到Addr+13表示的14個SRAM存儲器位置。在該實施例中,Addr+0被看作是基地址152。第一SRAM讀指令154被解析成讀取在字節(jié)Addr+0開始的4個字節(jié),即包含在字節(jié)Addr+0、Addr+1、Addr+2和Addr+3中的數(shù)據(jù)。第二SRAM讀指令156被解析成讀取在字節(jié)Addr+4開始的4個字節(jié),即包含在字節(jié)Addr+4、Addr+5、Addr+6和Addr+7中的數(shù)據(jù)。向量化這兩個SRAM讀產(chǎn)生單個被向量化的SRAM讀指令158,所述讀指令158被解析成讀取在字節(jié)Addr+0開始的8個字節(jié),即包含在字節(jié)Addr+0、Addr+1、Addr+2、Addr+3、Addr+4、Addr+5、Addr+6和Addr+7中的數(shù)據(jù)。
向量化兩個或更多個存儲器讀(或兩個或更多個存儲器寫)不要求讀(或?qū)?地址是連續(xù)的。例如,讀取在字節(jié)Addr+0開始的4個字節(jié)的第一SRAM讀指令154和讀取在字節(jié)Addr+8開始的4個字節(jié)的第二SRAM讀指令160可以被向量化為讀取在字節(jié)Addr+0開始并且包括字節(jié)Addr+11的12個字節(jié)的單個被向量化的SRAM讀指令162。雖然沒有使用Addr+4、Addr+5、Addr+6和Addr+7這4個字節(jié),執(zhí)行取12個字節(jié)的一個存儲器讀還是比每次取4個字節(jié)的兩個存儲器讀節(jié)省時間。對4個未使用的字節(jié)Addr+4、Addr+5、Addr+6、Addr+7的存儲器讀被稱為可實例化(instantiable)存儲器讀。
對于例如分片200、202、204的存儲器訪問分片,使用指令模式匹配來執(zhí)行存儲器訪問向量化是方便的。針對每個存儲器訪問指令和在源代碼語言的定義中允許的指令變化(variance),可以產(chǎn)生指令模式來描述指令語義。編譯器18包括所有指令模式的庫。例如,如圖5所示,指令模式300描述具有向量化度為2的SRAM存儲器讀,即從SRAM讀取2*MDAU個字節(jié)的SRAM存儲器讀。
指令模式300指示兩個SRAM讀可以形成向量化度為2的單個向量化的SRAM讀指令。指令模式300包括兩個語義從句302、304(也被稱為段)。指令模式300被稱為兩段模式。
如果指令模式300與在輸入程序中出現(xiàn)的兩個SRAM讀指令匹配,模式匹配成功,也即,如果在源代碼中的兩條順續(xù)的指令遵循所述兩段所要求的語義,模式匹配成功。作為成功模式匹配的結(jié)果,要求那兩個分段(fragment)的目標(biāo)符號寄存器(Reg1和Reg2)指派為相同寄存器類別的寄存器,并且物理寄存器號(number)應(yīng)該是連續(xù)的,這在指令模式300的條件部分306中被指定。
成功的指令模式匹配并非總是要求所有段匹配。對于指令模式300,只要匹配了一個段,那么該匹配是成功的,因為另一個段的屬性是可實例化的。有時,這種段實例化是有用的。例如,對于在分片200的子節(jié)點214中出現(xiàn)的兩個SRAM讀,更有益的是,使“SRAM_read Reg1+0”和“SRAM_read Reg1+8”的組合與三分段(three-fragment)模式匹配而不是將它們分別與一分段(one-fragment)模式匹配。雖然要求“SRAM_read Reg1+4”的實例化,但是一個存儲器訪問總是比兩個存儲器訪問更經(jīng)濟。還值得注意的是,存儲器寫的段不能被實例化。
針對在所述庫中的每個指令模式,編譯器18為每個分片的每個子節(jié)點執(zhí)行指令模式匹配。因為每個子節(jié)點或者是READ(讀),或者是WRITE(寫),所以可以僅僅使用READ或WRITE模式來執(zhí)行子節(jié)點的指令模式匹配。為了便于模式匹配的描述,我們將那些具有以下兩個屬性的指令模式稱為“合法模式候選”1-訪問與子節(jié)點相同的存儲區(qū)塊;2-描述與子節(jié)點的存儲器操作屬性相同的存儲器操作(READ或WRITE)。
對于具體的子節(jié)點,為該子節(jié)點內(nèi)的不同存儲器操作的所有組合進行針對所有合法模式候選的模式匹配。
記錄所有成功的匹配并且隨后選擇優(yōu)化的匹配來產(chǎn)生模式匹配的最終匹配集。使用以下準(zhǔn)則來選擇優(yōu)化的匹配(1)最終匹配集包含覆蓋節(jié)點中的所有存儲器操作的匹配的最小數(shù)目。
(2)出現(xiàn)在節(jié)點中的每個存儲器操作只可以在屬于最終匹配集的一個匹配中出現(xiàn)。
(3)如果兩個模式匹配包含相同個數(shù)的匹配的(matched)分段,那么選擇具有更少被實例化分段的匹配。
如果在最終匹配集中的所有匹配是一分段匹配,那么已經(jīng)確定沒有機會來進行存儲向量化。
在存儲器訪問模式設(shè)計中,包括所有的一分段模式和部分寫模式,這保證總是可以形成最終的匹配。
使用該最終匹配集,被編譯程序可以被轉(zhuǎn)化以形成向量化的存儲器訪問。
一些指令模式是專門為向量化部分寫而設(shè)計的。對于包含部分寫的子節(jié)點,首先為該子節(jié)點內(nèi)所有部分寫執(zhí)行模式匹配,試圖將幾個部分寫組合在一起以形成MDAU個字節(jié)的寫。如果部分寫向量化成功,應(yīng)該更新子節(jié)點以從那些匹配的部分寫形成MDAU個字節(jié)的寫。部分寫向量化擴大了后面的存儲器訪問向量化的機會。
圖3的分片200、202、204的向量化結(jié)果400在圖6中被示出。
其他實施方案落在所附權(quán)利要求書的范圍之內(nèi)。
權(quán)利要求
1.一種方法,包括將源代碼中的存儲器訪問指令轉(zhuǎn)換為標(biāo)準(zhǔn)格式;產(chǎn)生包含已格式化的存儲器訪問指令的分片;產(chǎn)生匹配集,所述匹配集包括指令模式對所述分片中的所述已格式化的存儲器訪問指令的匹配;以及將所述匹配轉(zhuǎn)化為向量存儲器訪問指令。
2.如權(quán)利要求1所述的方法,其中轉(zhuǎn)換操作包括將讀或?qū)懮儆谧钚?shù)據(jù)訪問單元(MDAU)的存儲器訪問指令轉(zhuǎn)換為讀或?qū)懚鄠€所述最小數(shù)據(jù)訪問單元的存儲器訪問指令。
3.如權(quán)利要求2所述的方法,其中轉(zhuǎn)換步驟還包括將讀或?qū)懰龆鄠€所述最小數(shù)據(jù)訪問單元的所述存儲器訪問指令轉(zhuǎn)化為包括基地址加偏移的格式。
4.如權(quán)利要求1所述的方法,其中產(chǎn)生分片步驟包括產(chǎn)生包含基本塊的數(shù)據(jù)流圖,所述基本塊包括所述存儲器訪問指令;以及針對每個基本塊,應(yīng)用一組規(guī)則。
5.如權(quán)利要求4所述的方法,其中應(yīng)用步驟包括將分片的子節(jié)點限定為指向具體存儲區(qū)塊的存儲器訪問指令。
6.如權(quán)利要求5所述的方法,其中應(yīng)用步驟還包括將所述分片的子節(jié)點限定為存儲器讀或存儲器寫。
7.如權(quán)利要求5所述的方法,其中所述存儲區(qū)塊是靜態(tài)隨機訪問存儲器(SRAM)。
8.如權(quán)利要求5所述的方法,其中所述存儲區(qū)塊是動態(tài)隨機訪問存儲器(DRAM)。
9.如權(quán)利要求5所述的方法,其中所述存儲區(qū)塊是便箋式存儲器。
10.如權(quán)利要求5所述的方法,其中所述存儲區(qū)塊是EEPROM。
11.如權(quán)利要求5所述的方法,其中所述存儲區(qū)塊是閃存。
12.如權(quán)利要求5所述的方法,其中所述存儲區(qū)塊是NVRAM。
13.如權(quán)利要求1所述的方法,其中所述指令模式包括描述指令語義的模式。
14.如權(quán)利要求1所述的方法,其中所述向量存儲器訪問指令包括表示對一類存儲器的多個存儲器訪問的單存儲器訪問指令。
15.一種編譯方法,包括將讀或?qū)懮儆谧钚?shù)據(jù)訪問單元(MDAU)的存儲器訪問指令轉(zhuǎn)換為讀或?qū)懚鄠€所述最小數(shù)據(jù)訪問單元的存儲器訪問指令;將所述存儲器訪問指令轉(zhuǎn)換為包括基地址加偏移的格式;將已轉(zhuǎn)換的存儲器訪問指令的子集分組成分片;以及向量化在與指令模式匹配的所述子集中的所述已轉(zhuǎn)換的存儲器訪問指令。
16.如權(quán)利要求15所述的編譯方法,其中分組步驟包括產(chǎn)生包含基本塊的數(shù)據(jù)流圖,所述基本塊包括存儲器訪問指令;以及產(chǎn)生分片中的子節(jié)點,所述子節(jié)點包括指向存儲區(qū)塊并且執(zhí)行相同的操作的存儲器訪問指令。
17.如權(quán)利要求16所述的編譯方法,其中所述操作是讀。
18.如權(quán)利要求16所述的編譯方法,其中所述操作是寫。
19.如權(quán)利要求16所述的編譯方法,其中所述存儲區(qū)塊是靜態(tài)隨機訪問存儲器(SRAM)。
20.如權(quán)利要求16所述的編譯方法,其中所述存儲區(qū)塊是動態(tài)隨機訪問存儲器(DRAM)。
21.如權(quán)利要求16所述的編譯方法,其中所述存儲區(qū)塊是便箋式存儲器。
22.如權(quán)利要求16所述的編譯方法,其中所述存儲區(qū)塊是EEPROM。
23.如權(quán)利要求16所述的編譯方法,其中所述存儲區(qū)塊是閃存。
24.如權(quán)利要求16所述的編譯方法,其中所述存儲區(qū)塊是NVRAM。
25.如權(quán)利要求15所述的編譯方法,其中所述指令模式包括指令語義。
26.如權(quán)利要求25所述的編譯方法,其中所述指令語義包括段。
27.一種在信息載體上可感知地實施的計算機程序產(chǎn)品,用于向量化存儲器訪問指令,所述計算機程序產(chǎn)品可以運行以導(dǎo)致數(shù)據(jù)處理裝置將駐留在源代碼中的存儲器訪問指令轉(zhuǎn)換成標(biāo)準(zhǔn)格式;產(chǎn)生包含已格式化的存儲器訪問指令的分片;產(chǎn)生匹配集,所述匹配集包括指令模式對所述子集中的所述已格式化的存儲器訪問指令的匹配;以及將所述匹配轉(zhuǎn)化為向量存儲器訪問指令。
28.如權(quán)利要求27所述的產(chǎn)品,其中轉(zhuǎn)換步驟包括將讀或?qū)懮儆谧钚?shù)據(jù)訪問單元(MDAU)的存儲器訪問指令轉(zhuǎn)換為讀或?qū)懚鄠€所述最小數(shù)據(jù)訪問單元的存儲器訪問指令。
29.如權(quán)利要求28所述的產(chǎn)品,其中轉(zhuǎn)換步驟還包括將讀或?qū)懰龆鄠€所述最小數(shù)據(jù)訪問單元的所述存儲器訪問指令轉(zhuǎn)化為包括基地址加偏移的格式。
30.如權(quán)利要求27所述的產(chǎn)品,其中產(chǎn)生分片的步驟包括產(chǎn)生包含基本塊的數(shù)據(jù)流圖,所述基本塊包括存儲器訪問指令;以及產(chǎn)生分片中的子節(jié)點,所述子節(jié)點包括指向存儲區(qū)塊并且執(zhí)行相同的操作的存儲器訪問指令。
全文摘要
一種編譯方法包括將讀或?qū)懮儆谧钚?shù)據(jù)訪問單元(MDAU)的存儲器訪問指令轉(zhuǎn)換為讀或?qū)懚鄠€最小數(shù)據(jù)訪問單元的存儲器訪問指令,將存儲器訪問指令轉(zhuǎn)換為包括基地址加偏移的格式,將已轉(zhuǎn)換的存儲器訪問指令的子集分組成分片,以及向量化在與指令模式匹配的子集中的已轉(zhuǎn)換的存儲器訪問指令。
文檔編號G06F12/00GK1894674SQ200380110993
公開日2007年1月10日 申請日期2003年11月24日 優(yōu)先權(quán)日2003年11月19日
發(fā)明者B·黃, L·李(保羅), J·戴(賈森), 勒迪·哈里森(威廉姆斯) 申請人:英特爾公司, 英特爾(中國)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
信丰县| 搜索| 南和县| 嵊州市| 九江市| 碌曲县| 日喀则市| 宜城市| 墨江| 三明市| 巫溪县| 钟祥市| 桓台县| 阳山县| 南陵县| 屯留县| 林西县| 灌阳县| 湘阴县| 桂东县| 宾阳县| 社旗县| 修文县| 疏勒县| 鸡泽县| 大石桥市| 鄢陵县| 勐海县| 堆龙德庆县| 文化| 乌什县| 常德市| 勐海县| 阿合奇县| 赤水市| 望城县| 郯城县| 淮北市| 沙雅县| 霍邱县| 西盟|