專利名稱:用于壓縮程序指令的壓縮條目最優(yōu)選擇的制作方法
技術(shù)領(lǐng)域:
本要求保護的發(fā)明的實現(xiàn)總體上涉及數(shù)據(jù)壓縮,特別涉及在執(zhí)行程序 之前壓縮在程序(或代碼)中的指令。
背景技術(shù):
許多處理系統(tǒng)執(zhí)行指令。因此,生成、存儲和/或訪問構(gòu)成程序的指令 的能力是令人期望的。特別地,為了節(jié)省存儲容量和/或帶寬,通常期望減 小程序/代碼的大小。已經(jīng)提出一些技術(shù),用于壓縮在運行時間存儲在高速
緩存(例如,L2)中的數(shù)據(jù)。但是,在運行時間的壓縮會使硬件復(fù)雜化,并且 帶來額外的延遲,該延遲是由對數(shù)據(jù)是否需要壓縮來做決策所引起的。
已經(jīng)提出的另一個技術(shù)是ECHO指令,這種方案可通過使用ECHO指 令替代公共的湘似的指令序列,來減小程序/代碼的大小。但是,這個技術(shù) 關(guān)注于搜索在公共的/相似的指令序列中的指令級信息,因此,該技術(shù)忽略 了在指令內(nèi)任何有用的信息。
然而,這種用于減小程序/代碼的大小的方案會是計算密集型的,和/ 或會使得對于特定程序不是最優(yōu)壓縮的。
附圖并入并構(gòu)成該說明書的一部分,圖示了一個或多個與本發(fā)明的原 理一致的實現(xiàn),并與說明部分一起解釋了這些實現(xiàn)。附圖并非必然是按照 比例繪制的,相反地,其重點在于圖示出本發(fā)明的原理。在該附圖中
圖1示出了具有第一和第二處理系統(tǒng)的一個系統(tǒng)的方框圖2示出了圖1的第一處理系統(tǒng)的方框圖3示出了一種用于最優(yōu)地壓縮程序中的比特模式(pattern)的方法; 圖4示出了一種示例性指令設(shè)置以便說明比特模式到變量的映射。
具體實施例方式
參照附圖進行了以下詳細(xì)地描述。在不同的附圖中可以使用相同的標(biāo) 號來標(biāo)識相同或相似的要素。在以下描述中,為了解釋的目的而不是用于 限定,闡明了多個具體細(xì)節(jié),例如,特定的結(jié)構(gòu)、架構(gòu)、接口和技術(shù)等, 以便透徹地理解要求保護的發(fā)明的各種方面。但是,對于獲得本公開的利 益的本領(lǐng)域普通技術(shù)人員顯而易見的是,可以以脫離這些具體細(xì)節(jié)的其它 示例,來實施要求保護的發(fā)明的各個方面。在某些示例中,省略了對公知 的器件、電路和方法的描述,以免不必要的細(xì)節(jié)影響本發(fā)明的描述。
在一些實現(xiàn)中,第一處理系統(tǒng)可以用來生成由第二處理系統(tǒng)執(zhí)行的至 少部分地壓縮的指令(或由這種指令構(gòu)成的程序)。
圖1是根據(jù)一些實現(xiàn)的系統(tǒng)100的方框圖。參照圖1,系統(tǒng)100包括第 一處理系統(tǒng)110和第二處理系統(tǒng)120。第一處理系統(tǒng)110和第二處理系統(tǒng) 120可以彼此耦合,例如,經(jīng)由第一通信鏈路130進行耦合。系統(tǒng)100還可 以包括一個或多個被索引的高速緩存190,用于存儲在指令和/或程序壓縮 期間由第一處理系統(tǒng)IIO生成的比特模式,將在下文詳細(xì)地解釋以上內(nèi)容。
根據(jù)一些實現(xiàn),使用第一處理系統(tǒng)110來生成用于第二處理系統(tǒng)120 的指令。在這點上,在一些實現(xiàn)中,系統(tǒng)100可以接收在140處指明的輸 入或第一數(shù)據(jù)結(jié)構(gòu)。第一數(shù)據(jù)結(jié)構(gòu)140可以通過第二通信鏈路150來接收, 并且可以包括但并不限于包含有第一數(shù)量的指令的程序,所述第一數(shù)量的 指令可以包括采用第一語言的指令,例如,高級語言或匯編語言。在一些 實現(xiàn)中,采用第一語言的這些指令可以是128比特指令,盡管本發(fā)明并不 限于此。
向第一處理系統(tǒng)110的輸入提供第一數(shù)據(jù)結(jié)構(gòu)140,第一處理系統(tǒng)110 可以包括編譯器(compiler)和/或匯編器(assembler),它們可以根據(jù)一個 或多個與第二處理系統(tǒng)120相關(guān)的需求,來編譯和/或匯編第一數(shù)據(jù)結(jié)構(gòu)140 的一個或多個部分。第一處理系統(tǒng)110的輸出可以提供在160處指明的第 二數(shù)據(jù)結(jié)構(gòu)。第二數(shù)據(jù)結(jié)構(gòu)160可以包括但并不限于包含有第二數(shù)量的指 令的程序,所述第二數(shù)量的指令可以包括采用第二語言的指令,例如,機 器或二進制語言。在一些實現(xiàn)中,第二語言可以與第一語言相同,除了它 可以包含64比特指令之外。在一些實現(xiàn)中,采用第二語言的一些或所有指令可以是64比特指令,盡管采用第二語言的指令也可以包括一些128比特 指令。當(dāng)然,本發(fā)明并不限于任意特定長度的指令,但是采用第二語言的 指令中的至少一些可以比采用第一語言的指令短,或者是從采用第一語言 的指令壓縮得到的。
圖2是第一處理系統(tǒng)110的一個實現(xiàn)的方框圖。參照圖2,在一些實現(xiàn) 中,第一處理系統(tǒng)110包括編譯器和/或匯編器210和壓縮器220,其中在 一些實現(xiàn)中可能不存在編譯器和/或匯編器210。編譯器和/或匯編器210和 壓縮器220可以彼此耦合,例如,經(jīng)由通信鏈路230進行耦合。盡管為了 便于描述而作為兩個分開的元件來顯示,但是在一些實現(xiàn)中,壓縮器220 可以是編譯器和/或匯編器110的一個功能部分。
在一些實現(xiàn)中,第一處理系統(tǒng)110可以通過通信鏈路150來接收第一 數(shù)據(jù)結(jié)構(gòu)140。如上所述,第一數(shù)據(jù)結(jié)構(gòu)140可包括但并不限于第一多個指 令,所述第一多個指令可以包括采用第一語言的指令,例如,高級語言或 匯編語言。
第一數(shù)據(jù)結(jié)構(gòu)140可以被提供到編譯器和/或匯編器210的輸入。編譯 器和/或匯編器210包括編譯器、匯編器和/或其組合,它們根據(jù)與第二處理 系統(tǒng)120相關(guān)的一個或多個需求,來編譯和/或匯編第一數(shù)據(jù)結(jié)構(gòu)140的一 個或多個部分。
編譯器和/或匯編器210可以生成在240處指明的數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié) 構(gòu)240可以包括但并不限于多個指令,所述多個指令可以包括采用第二 語言的指令,例如,二進制語言或機器語言。在一些實現(xiàn)中,第二語言可 以與第一語言相同,除了它可以包含64比特指令之外。在一些實現(xiàn)中,所 述多個指令可以是要由第二處理系統(tǒng)120的執(zhí)行引擎執(zhí)行的多個機器碼指 令。在一些實現(xiàn)中,所述多個指令可以包括多于一種類型的指令。
可以向壓縮器220的輸入提供數(shù)據(jù)結(jié)構(gòu)240,該壓縮器220可以處理在 數(shù)據(jù)結(jié)構(gòu)240中的每個指令,以便確定該指令是否能由用于第二處理系統(tǒng) 120的壓縮指令來替換。如果能替換該指令,則壓縮器220就可以生成壓縮 指令來替換該指令。在一些實現(xiàn)中,壓縮器220至少部分地基于要替換的 指令,來生成壓縮指令。在一些實現(xiàn)中,壓縮指令包括表明該壓縮指令是 一壓縮指令的字段。根據(jù)一些實現(xiàn),壓縮器220可以用壓縮指令來替換所述指令。在這點 上,所述多個指令可以代表一個指令序列??梢詫⒅噶顝钠湓谠撔蛄兄械?位置處移除,并將壓縮指令插入在該序列中的該位置處,從而使得壓縮指 令在序列中的位置與由此被替代的指令在從序列中移除該指令之前的位置 相同。
如將在下文詳細(xì)地解釋的,壓縮器220可以通過在高速緩存190中存 儲常用的比特模式,來壓縮在數(shù)據(jù)結(jié)構(gòu)240中的一些指令。壓縮器220可 以通過在第二數(shù)據(jù)結(jié)構(gòu)160中的指令中使用對于在高速緩存190中的比特 模式的位置的索引來替代比特模式本身,而對指令進行壓縮。
返回圖l,可以通過第一通信鏈路130,向第二處理系統(tǒng)120的輸入提 供第二數(shù)據(jù)結(jié)構(gòu)160。第二處理系統(tǒng)可以執(zhí)行第二多個指令中的一個或多 個,并且可以生成在170處指明的數(shù)據(jù)。在一些實現(xiàn)中,第二處理系統(tǒng)120 可以在執(zhí)行之前,通過使用壓縮指令中的索引值訪問高速緩存190中的適 當(dāng)?shù)谋忍啬J?,來對在第二?shù)據(jù)結(jié)構(gòu)160中的任意壓縮指令(例如,64比特 指令)進行解壓。在第二數(shù)據(jù)結(jié)構(gòu)160中沒有壓縮的(例如,128比特指令) 指令可以由第二處理系統(tǒng)120在不使用高速緩存190的情況下進行處理。
第二處理系統(tǒng)120可以通過一個或多個通信鏈路,例如第三通信鏈路 180,而耦合到一個或多個外部設(shè)備(沒有示出),并且可以通過一個或多個 這種通信鏈路來向一個或多個這種外部設(shè)備提供數(shù)據(jù)170的一些或全部。
如上所說明,用于第二處理系統(tǒng)120的指令的一個或多個部分(例如, 比特模式)可以存儲到一個或多個存儲單元中(例如,高速緩存190)。在這點 上,高速緩存190可以包括單個存儲單元或多個存儲單元。在特定的情況 下(例如,對于相對較小的程序),高速緩存190會具有足夠的空間來存儲對 于完全壓縮在第一數(shù)據(jù)結(jié)構(gòu)140(或數(shù)據(jù)結(jié)構(gòu)240)中的指令所必需的全部比 特模式。在其它情況下(例如,對于相對較大的程序),高速緩存190可能不 具有足夠的空間來存儲對于完全壓縮在第一數(shù)據(jù)結(jié)構(gòu)140(或數(shù)據(jù)結(jié)構(gòu)240) 中的指令所必需的全部比特模式。在這種實現(xiàn)中,期望優(yōu)化在數(shù)據(jù)結(jié)構(gòu)140 或240中的指令的壓縮率,以便在給定了高速緩存190的大小約束的情況 下獲得最大壓縮量?,F(xiàn)在將轉(zhuǎn)為描述這種代碼優(yōu)化方案。
如上所提到的并且如在相關(guān)應(yīng)用中所說明的,在程序中的指令可以通過從例如128比特指令中提取出常用的比特模式來進行壓縮。被索引的高 速緩存190可以保存這些常用的比特模式和對于新的壓縮指令(例如,64比 特指令)而言所需要的任意其它信息。編譯器和/或匯編器210可以識別要將 何種比特模式存儲到被索引的高速緩存190中,并且還可以確定哪些指令 能夠用新的壓縮指令來替代。根據(jù)包含指令的程序的大小和/或高速緩存 190的大小,由于在高速緩存190中有限的空間,可能不能壓縮特定的指令。 在這種情況,會期望壓縮器220(或者在壓縮功能是編譯器模塊的一部分的 情況下則是編譯器210)能最優(yōu)地壓縮(例如,盡可能地壓縮)程序。
更詳細(xì)地說,例如在圖4中概念性地示出,可以將程序中的每個指令 分割為幾個字段。但是,請注意,在一些實現(xiàn)中, 一個指令的一些部分可 能并不是任何字段的部分?;谝呀?jīng)執(zhí)行的經(jīng)驗,大多數(shù)程序會包含用于 這些字段中某些字段的多個常用的反復(fù)出現(xiàn)的比特模式(M個,其中M是大 于或等于一的整數(shù))。還應(yīng)注意,這M個字段中的各個字段不必是相同的大 小(即,每個字段可以包含的比特數(shù)量與所有其它字段都完全不同)。如果一 個指令的所有M個比特模式都由用于對存儲了原始比特模式的高速緩存 190進行索引的索引值所替代,那么就能夠使用更為壓縮的指令來替代該指 令,從而得到了更為壓縮的程序。由于高速緩存190具有有限數(shù)量的條目 (entry),所以不是所有在程序的指令中找到的比特模式都能夠存儲到表中并 由索引值所替代。
圖3中的方法300描述了用于選擇要存儲在高速緩存190中的比特模 式的一種方案,該方案能獲得最佳代碼壓縮率(例如,由壓縮器220輸出的 壓縮數(shù)據(jù)結(jié)構(gòu)160的大小與輸入到壓縮器220的數(shù)據(jù)結(jié)構(gòu)240(或數(shù)據(jù)結(jié)構(gòu) 140)的大小的最低比率)。盡管參照圖l、 2和4來說明方法300,但這個方 案并不限于在這些圖中所示的特定的示例。方法300可以從已經(jīng)被轉(zhuǎn)換為 機器格式或二進制格式的指令開始(例如,通過編譯器210編譯它們),從這 些指令中識別出比特模式。
方法300可以用以下行動開始壓縮器220從目標(biāo)程序的指令中的可 壓縮字段中提取出唯一性的比特模式[行動310]??梢允褂枚喾N己知的比特 識別方案中的任意方案來在行動310中確定在指令中的唯一性的比特模式 的數(shù)量。如參考行動320所說明,這些唯一性的比特模式可以映射到在整數(shù)或線性規(guī)劃公式(programmingformulation)中的變量上。
在識別了這組比特模式之后,壓縮器220可以構(gòu)造目標(biāo)程序的最優(yōu)壓 縮的整數(shù)規(guī)劃或線性整數(shù)規(guī)劃表示[行動320]。這種整數(shù)規(guī)劃或線性整數(shù)規(guī) 劃表示可以由壓縮器220根據(jù)以下原則、示例和歸納,根據(jù)在行動310中 提取的唯一性的比特模式來自動地構(gòu)造。
在高速緩存190中可能存在用于存儲壓縮比特模式的N個表(N〉-1), 并且可能存在有M個字段(M〉-1,M〉-N),可以從這些字段中選擇要插入表 中的比特模式。如圖4所示,例如,每個指令都可以包括多個字段。例如, 兩個可能的情景是所有M個字段共享單個(N4)表,或每個字段具有自己 的表(M-N)。在每個情景中,每個字段具有專用的表,如果指令被壓縮,則 我們就能從該表中取回壓縮的比特模式。在行動320中的方案可以使用從 可壓縮字段到表的多對一的映射。
第i個表可以由Mi個字段所共享。對于第i個表,可以存在一組變量。 每個變量與出現(xiàn)在Mj個字段中的唯一性的比特模式相對應(yīng)。因此,變量的 數(shù)量與Mi個字段中找到的唯一性的比特模式的總數(shù)量相對應(yīng)。
行動320可以使用用于構(gòu)造最優(yōu)代碼壓縮公式的兩個(或更多個)方案 中的一個(a)作為整數(shù)規(guī)劃問題,以及(b)作為線性整數(shù)規(guī)劃。然后,用于 解決任一類問題的任意算法都能夠在行動330中應(yīng)用,以計算最優(yōu)代碼壓 縮。盡管將說明這兩個方案,但是請注意,在行動320中,可以使用任意 多變量優(yōu)化方案來建立為了獲得最優(yōu)程序壓縮而要求解的公式。 (A)整數(shù)規(guī)劃
對于每個方案,將給出兩個具體的示例(即,M-N和N-1),來提供用 于實現(xiàn)行動320的直觀的想法。然后,將給出對這兩個示例的歸納。圖4 示出了具有四條指令的示例程序410(該程序是輸入數(shù)據(jù)結(jié)構(gòu)240或140的 一個具體實例),每個指令具有三個字段以及它們的比特模式,以下示例將 公式化這些字段以便進行壓縮。為了便于描述而沒有示出并非壓縮候選的 其它字段,盡管這些字段也可以在程序中出現(xiàn)。為了便于描述,在該示例 中,假定所有字段都是大小相同的,但之后提供的歸納并不需要這種假定。
M-N的示例
如果每個字段都具有其自己的表,那么X、 Y和Z可以被定義為多組變量,每組變量對應(yīng)一個表。字段X、 Y和Z分別具有3個、2個和3個唯
—性的比特模式。因此,有3個變量用于表X(X,,X2,X3),有2個變量用于表
Y(yi,y2),有3個變量用于表Z (Zl,z2,z3)。 一個可替換的觀點是,分別有3 個、2個和3個候選比特模式要存儲到表X、 Y和Z中。請注意,在這種情 景中,即使是指令1的字段都具有相同的比特模式,但是仍然存在3個變 量,每個變量對應(yīng)一個表。表X、 Y和Z分別地被進一步定義為具有Tx、 Ty和Tz個條目。
當(dāng)且僅當(dāng)壓縮了比特模式時,才為每個變量賦值l(即,其獲得了在相 應(yīng)的表中的條目);否則其被賦值為0。當(dāng)且僅當(dāng)壓縮了(即,實際上是用對 表的索引來進行替換)一個指令的所有可壓縮字段時,該指令才是被壓縮了。 如果一個指令被壓縮了,那么將該指令賦值為1,否則就將該指令賦值為o。
為了構(gòu)造這個公式,每個指令都由所有與其字段的比特模式相對應(yīng)的 變量的乘積來表示。在這個示例中,表示指令l到4的乘積分別是x⑦zp x2y2z2 、 x!y2z3和x3yz3 。
期望將代碼壓縮(即,壓縮指令的數(shù)量)最大化。對于M-N的情況,整 數(shù)規(guī)劃公式則要尋找使得以下乘積之和最大化的Xi、力和Zi的值
最大化 + X2y2Z2 + Xi》Z3 + x3y,z3
滿足以下約束
*1..3) = 0或1 yi(i-l,2)-0或1 咖1"3) = 0或1
L=..3Xi^rx
L=1..2yi^Ty
I^oz^Tz (即,被壓縮的比特模式的數(shù)量必須適合每個相應(yīng)的表。)
N=l的示例
如果所有字段共享單個表,那么對于整數(shù)規(guī)劃公式僅需要一組變量(例
如,變量組X)。在圖4中的字段X、 Y和Z中,只存在4個唯一性的比特
模式。因此,有4個變量用于表X(^,X2,X3,X4)或4個候選比特模式。在這個
情景中,在指令1中的所有字段都由同一變量A表示,因為它們都具有相 同的比特模式。表X可以具有T個條目。于此,對于N-1的情況的整數(shù)規(guī)劃公式要尋找使得以下乘積之和最大
化的Xj的值
最大化 XX!X+ X2X2X2 + XjX詢+ X4X1X3 要滿足以下約束-
Xi(i:l…4)-0或1
歸納
一般而言,在高速緩存190中有N&1)個表。第i個表具有在所有指令 (例如,所有Q條指令)的Mi個字段中找到的Pi個候選比特模式。M, + M2 + ...+MN = M=可壓縮字段的總數(shù)量。然后,這組Mi個字段(和對應(yīng)的第 i個表)具有一組Pi個變量,每個變量對應(yīng)一個候選比特模式。
每個指令可以由M個變量的乘積來表示,每個變量都來自一個可壓縮 字段。如果M-N(如上述示例),則每個變量來自于不同的組。通用整數(shù)規(guī) 劃公式要最大化以下所有乘積之和
最大化 》=l..Qnk=l,...MX(j,k)
其中,x(j,k)是用于位于第j個指令的第k個字段中的比特模式的變量。如 果第k個字段的比特模式是要存儲到第i個表中的候選,那么x(j,k)變量是
來自于與第i個表相關(guān)聯(lián)的Pi個變量之中。
由以下給出對于上述的約束
X-O,l,對于來自所有N個表的所有變量X而言;并且
Zk^Pi Xk^Ti ,其中Ti是第i個表中的條目的數(shù)量。也就是說,可插入
到任意表中的候選比特模式的最大數(shù)量受到該表的大小的限制。
ns)線性整數(shù)規(guī)劃
行動320的第二方法是以線性整數(shù)規(guī)劃問題的形式,來公式化該代碼 壓縮目的。在描述其歸納之前,再次使用以上示例的參數(shù),以兩個不同的 情景(即,MHN并且N-1)給出行動320的直觀的想法。此外,圖4以4條 指令來進行討論,每個指令具有3個可壓縮字段。
M-N的示例
如之前的方案中所示,當(dāng)且僅當(dāng)每個比特模式被壓縮時,與該比特模 式相關(guān)的變量才接收值1;否則該變量值為0。此外,還有4個變量(Wl,W2,W3,W4),每個變量對應(yīng)一個指令。當(dāng)且僅當(dāng)一個指令被壓縮時,與該 指令相關(guān)的變量才接收數(shù)值O;否則,其被賦值為l。當(dāng)且僅當(dāng)壓縮指令的 數(shù)量最大化時,和^《4Wj才是最小的。
也可以在與指令相關(guān)的變量(Wi's)和與比特模式相關(guān)的變量(Xi's, y卩s,
Zi'S)之間建立約束關(guān)系。對于每個指令,如果其字段的比特模式中的任何一
個都沒有被壓縮(即,與比特模式相關(guān)的變量=0),則該指令未被壓縮(即,
與指令相關(guān)的變量=1)。例如,對于第一個指令
v^ + xgl, Wi + y^;l, Wi+z!^;l
線性整數(shù)規(guī)劃公式是要尋找使得以下和最小化的Wi值-最小化Wi + W2 + W3 + W4
約束是
Xi(i-l,.3)-0或1 力(—1,2) = 0或1 咖1..3) = 0或1 Wi(i-l,.4)-0或1
以及
Wi + x^;l , w2+ x^l , w3 + x^l, W4+ ,
W2+y21, W2+Z么l
w3 + y2^1, w3+z3^l
w4+ygl, W4+z化l (即,僅當(dāng)一個指令的所有
字段都被壓縮時,該指令才是被壓縮的) 以及
L=i..2y^Ty
Zi^3Z^Tz (即,被壓縮的比特模式的數(shù)量必須適合每個相應(yīng)的表。) N=l的示例
如果所有字段共享單個表(例如,在高速緩存190中),那么僅存在4個
唯一性的比特模式。除了用于4個候選比特模式的4個變量(X,,X2,X3,X4)之外, 還有4個與指令相關(guān)的變量(WhW2,W3,W4)。此外,表X可以具有T個條目。 整數(shù)規(guī)劃公式是要尋找使得以下和最小化的Wi值最小化W! + W2+W3+W4 要滿足的約束是
Xi(i-l.,4)-0或1 Wj(i-l.,4)-0或1
i:k.4x^t,用于將所選擇的候選的數(shù)量限制到表的大小
Wi + x>l, Wi + x]^:l, v^ + Xi^;l
w2 + xgl , W2 + , w2 + x^;l
W3 + X,>1, W3+X^l, W3+X3^;l
W4+X4>1, W4 + Xi^l, W4+X3>1
為了清楚起見,列出了所有上述這些約束,即使他們中的一些是冗余的。
歸納
一般而言,在高速緩存190中有N(^1)個表。第i個表必須從所有指令 的Mi個字段中找到的Pi個候選比特模式中(例如,所有Q條指令)選擇,以 適合它的大小。M1 + M2 + ...+MN = M=可壓縮字段的總數(shù)量。然后,每 個第i個表具有一組Pi個變量,每個變量對應(yīng)于一個候選比特模式。還有Q 個變量(Wj,j-l...Q),每個變量對應(yīng)于一個指令。每個指令生成一組M個約 束,每個約束對應(yīng)于一個可壓縮字段。
通用線性整數(shù)規(guī)劃公式是要尋找使得以下和最小化的Wi值
最小化S=l..QWj 給出如下約束
x = 0,1 ,對于所有與唯一性的比特模式相對應(yīng)的變量x, w廣O,l,對于所有與指令相關(guān)的變量,
Zk^Pi Xk^Ti其中Ti是第i個表中條目的數(shù)量。(即,我們能插入到 任意表中的候選比特模式的最大數(shù)量是由表的大小所限制的)。
此外,對于每個第j個指令,有M個約束
Wj + x(j,歐l (k=l,...M)
其中x(),k)是用于位于第j個指令的第k個字段中的比特模式的變量。 總之,在行動320中,以上的整數(shù)規(guī)劃公式或線性整數(shù)規(guī)劃公式可以由編 譯器220,根據(jù)在行動310中提取的唯一性的比特模式來自動地構(gòu)造。方法300繼續(xù),使用編譯器220求解線性或整數(shù)規(guī)劃公式[行動330]。 因此,可將公式或表達(dá)式提供到任意的整數(shù)規(guī)劃或線性整數(shù)規(guī)劃解算器 (solver)。這種解算器是已知的,并且可以生成使得線性或整數(shù)規(guī)劃問題最 小化的最優(yōu)解。在行動330中對變量解算出的解會識別出那些要被壓縮從 而使得代碼壓縮率最大化的比特模式。
壓縮器220可以基于在行動330中獲得的解,來壓縮在程序中的適當(dāng) 的比特模式[行動340]。在相關(guān)的應(yīng)用中描述了用于壓縮指令的幾個技術(shù)。 當(dāng)在編譯時間(或在此之后很短時間內(nèi)),在行動340中壓縮程序時,在給定 了高速緩存190的大小約束的情況下來最優(yōu)地壓縮程序。如上所說明,在 行動340中,在行動330被識別為要進行壓縮的這些唯一性的比特模式可 以存儲到高速緩存190中,并且可以將它們的索引插入到壓縮指令中。
在執(zhí)行程序時,方法300在執(zhí)行時間繼續(xù)進行,當(dāng)?shù)诙幚硐到y(tǒng)120 執(zhí)行該程序時,其對任意的壓縮指令進行解壓縮[行動350]。如上所述,不 是所有指令都需要被壓縮,盡管如果高速緩存190具有足夠的存儲空間則 就可以壓縮所有的指令。對于那些沒有被壓縮的指令,則不使用行動350。 對于被壓縮的指令(例如,從128比特壓縮到64比特的指令),在行動350 中,第二處理系統(tǒng)120可以基于在壓縮指令中的索引,從高速緩存190中 取回所存儲的比特模式,來重新組合原始的、更大的指令。例如,在行動 350中,可以將解壓縮后的指令插入到由第二處理系統(tǒng)120執(zhí)行的流水線中。
上述方案和系統(tǒng)可方便地并最優(yōu)地壓縮程序(例如,內(nèi)核或其它程序), 并且其獨立于具體的整數(shù)規(guī)劃或線性整數(shù)規(guī)劃算法或?qū)崿F(xiàn)。在編譯時間的 這種最優(yōu)的程序壓縮可以通過壓縮顯著地減小指令占用區(qū)域,從而允許大 的、復(fù)雜的內(nèi)核適于指令高速緩存。指令代碼大小的減少與指令高速緩存 大小的增加具有等同的效果。指令壓縮還可以減少指令讀取的功率和/或帶 寬需求(流水線、高速緩存等)。
前面的一個或多個實現(xiàn)的描述提供了圖示和描述,但并不旨在窮舉或 限制本發(fā)明的范圍到公開的精確的形式。多種變形例和變化例可以根據(jù)上 述指導(dǎo)實現(xiàn)或從本發(fā)明的各種實現(xiàn)的實施中獲得。
例如,盡管已經(jīng)描述了線性和整數(shù)規(guī)劃方案,但可以使用任意的多變 量優(yōu)化方案來確定要壓縮編譯的指令中的哪些比特模式來獲得最優(yōu)程序壓縮。
除非明確地進行了描述,否則本發(fā)明的說明書中使用的要素、行動或 指令不應(yīng)理解為對于本發(fā)明是關(guān)鍵的或是重要的。此外,在此使用的冠詞 "一"旨在包括一個或多個項。根據(jù)要求保護的發(fā)明的上述的實現(xiàn),不實 質(zhì)地背離本發(fā)明的精神和原則的情況下可以做出多個變化例和變形例。所 有這些變形例和變化例都旨在包括在本公開的范圍內(nèi),并且由以下權(quán)利要 求來保護。
權(quán)利要求
1、一種用于壓縮程序中的指令的方法,包括以下步驟從所述程序中的指令中,提取唯一性的比特模式;根據(jù)所述唯一性的比特模式和所述指令,構(gòu)造線性規(guī)劃公式或整數(shù)規(guī)劃公式;求解所述線性規(guī)劃公式或所述整數(shù)規(guī)劃公式,以產(chǎn)生解;并且基于所述解,通過以下步驟來壓縮至少一些所述指令在存儲器中存儲至少一些所述唯一性的比特模式并將對所述存儲器的相應(yīng)索引放置在新壓縮的指令中。
2、 根據(jù)權(quán)利要求1所述的方法,還包括在所述提取步驟之前,編譯在所述程序中的所述指令,以便將所述指 令從第一表示轉(zhuǎn)換為二進制語言表示或機器語言表示。
3、 根據(jù)權(quán)利要求1所述的方法,其中,所述構(gòu)造步驟包括 構(gòu)造線性規(guī)劃公式,所述線性規(guī)劃公式包括一組不等式約束以及方程,當(dāng)使得所述方程最小化時,將最優(yōu)地壓縮所述程序。
4、 根據(jù)權(quán)利要求1所述的方法,其中,所述構(gòu)造步驟包括 構(gòu)造整數(shù)規(guī)劃公式,所述整數(shù)規(guī)劃公式包括一組不等式限制以及方程,當(dāng)使得所述方程最小化時,將最優(yōu)地壓縮所述程序。
5、 根據(jù)權(quán)利要求1所述的方法,其中,所述構(gòu)造步驟包括 至少部分地基于用來存儲所述比特模式的存儲器的大小,來構(gòu)造所述線性規(guī)劃公式或所述整數(shù)規(guī)劃公式。
6、 根據(jù)權(quán)利要求1所述的方法,其中,所述構(gòu)造步驟包括 將所述唯一性的比特模式表示為在所述線性規(guī)劃公式或所述整數(shù)規(guī)劃公式中的變量,并且將所述指令表示為在所述線性規(guī)劃公式或所述整數(shù)規(guī)劃公式中的變
7、 根據(jù)權(quán)利要求1所述的方法,還包括在執(zhí)行之前通過以下步驟將所述新壓縮的指令進行解壓縮基于在所 述新壓縮的指令中的相應(yīng)索引,從所述存儲器中取回所述至少一些唯一性 的比特模式。
8、 一種用于壓縮程序中的指令的方法,包括以下步驟 編譯所述程序,以產(chǎn)生二進制數(shù)據(jù); 從所述二進制數(shù)據(jù)中提取唯一性的比特模式;基于所述唯一性的比特模式和用于所述唯一性的比特模式的存儲容 量,來構(gòu)造線性規(guī)劃公式或整數(shù)規(guī)劃問題,當(dāng)所述線性規(guī)劃公式或整數(shù)規(guī) 劃問題被解出時,將針對所述存儲容量而產(chǎn)生所述程序的最優(yōu)壓縮; 求解所述線性規(guī)劃公式或所述整數(shù)規(guī)劃問題,以產(chǎn)生解;并且 基于所述解,來壓縮在所述程序中的至少一些所述指令。
9、 根據(jù)權(quán)利要求8所述的方法,其中,所述構(gòu)造步驟包括 將所述唯一性的比特模式映射到在所述線性規(guī)劃公式或所述整數(shù)規(guī)劃問題中的變量上。
10、 根據(jù)權(quán)利要求8所述的方法,其中,所述整數(shù)規(guī)劃問題包括線性 整數(shù)規(guī)劃問題。
11、 根據(jù)權(quán)利要求8所述的方法,其中,所述解指定了在所述壓縮步 驟中要使用的被指派的唯一性的模式,以及其中,所述壓縮步驟包括在存儲器中的所述存儲容量內(nèi)存儲所述被 指派的唯一性的模式。
12、 根據(jù)權(quán)利要求8所述的方法,還包括以下步驟-在執(zhí)行壓縮的指令之前,將所述壓縮的指令進行解壓縮。
13、 根據(jù)權(quán)利要求12所述的方法,其中,由第一處理系統(tǒng)來執(zhí)行所述 編譯步驟、提取步驟、構(gòu)造步驟、求解步驟和壓縮步驟,并且其中,由第二處理系統(tǒng)來執(zhí)行所述解壓縮步驟。
14、 一種用于壓縮程序的系統(tǒng),包括 編譯器,用于將所述程序翻譯為二進制格式;存儲器,用于存儲二進制數(shù)據(jù),所述存儲器具有一容量;以及 壓縮器,連接到所述編譯器和所述存儲器,用于從所述程序的所述二 進制格式中提取唯一性的比特模式,并且基于所述存儲器的容量和所述唯 一性的比特模式,通過在所述存儲器中存儲至少一些所述唯一性的比特模 式并將相應(yīng)的索引插入到所述程序中,來最優(yōu)地壓縮所述程序。
15、 根據(jù)權(quán)利要求14所述的系統(tǒng),還包括處理系統(tǒng),連接到所述存儲器和所述壓縮器,用于執(zhí)行所述最優(yōu)地壓 縮的程序。
16、 根據(jù)權(quán)利要求15所述的系統(tǒng),其中,所述處理系統(tǒng)用于通過使用 所述相應(yīng)的索引從所述存儲器中取回所述至少一些唯一性的比特模式,來 對所述最優(yōu)地壓縮的程序進行解壓縮。
17、 根據(jù)權(quán)利要求14所述的系統(tǒng),其中,所述壓縮器用于公式化并求 解整數(shù)規(guī)劃問題,以最優(yōu)地壓縮所述程序。
18、 根據(jù)權(quán)利要求17所述的系統(tǒng),其中,所述壓縮器還用于在公式化 所述整數(shù)規(guī)劃問題時,將所述唯一性的比特模式映射到變量上。
19、 根據(jù)權(quán)利要求17所述的系統(tǒng),其中,所述整數(shù)規(guī)劃問題是線性整 數(shù)規(guī)劃問題。
全文摘要
一種用于壓縮程序中的指令的方法,可以包括以下步驟從所述程序中的指令中提取唯一性的比特模式;并且根據(jù)所述唯一性的比特模式、所述指令、和/或存儲器存儲容量的大小,構(gòu)造線性規(guī)劃公式或整數(shù)規(guī)劃公式??梢郧蠼馑鼍€性規(guī)劃公式或所述整數(shù)規(guī)劃公式,以產(chǎn)生解。該方法還可以包括基于所述解,通過在存儲器中存儲至少一些所述唯一性的比特模式并將對所述存儲器的相應(yīng)索引放置在新壓縮的指令中,來壓縮至少一些所述指令。
文檔編號H03M7/30GK101622790SQ200880006440
公開日2010年1月6日 申請日期2008年3月21日 優(yōu)先權(quán)日2007年3月27日
發(fā)明者B·鄭, C-C·林, G-Y·魯, 洪 江 申請人:英特爾公司