專利名稱:用于減少硬件資源沖突的數(shù)據(jù)布局機制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實施例涉及用于減少硬件資源沖突的數(shù)據(jù)布局機制。
背景技術(shù):
在計算機系統(tǒng)中,例如在相同的執(zhí)行周期內(nèi)或在相互的幾個執(zhí)行周期內(nèi)訪問在時間上接近的存儲單元的確定組合的處理器可能會導(dǎo)致性能懲罰。性能懲罰典型情況下是不利的結(jié)果,所述結(jié)果可能由計算機系統(tǒng)在確定條件集下的操作產(chǎn)生。性能懲罰例如可以包括存儲器訪問延遲。存儲器訪問延遲例如可能由于硬件資源沖突而出現(xiàn),諸如當(dāng)存儲單元要求相同的硬件資源(諸如高速緩沖存儲器中的數(shù)據(jù)存儲體(data bank))時,所述硬件資源一次只可以處理一個數(shù)據(jù)請求。
例如在可從本申請受讓人處買到的IntelItanium2處理器中,2級高速緩存器數(shù)據(jù)陣列可以包括16個存儲體,其中每個存儲體可以保持16字節(jié)的數(shù)據(jù)。此外,可以存在從存儲單元到數(shù)據(jù)存儲體的塊循環(huán)映射。由于例如IntelItanium2處理器中的存儲器子系統(tǒng)在執(zhí)行周期期間只可以處理對數(shù)據(jù)存儲體的一個請求,所以在相同執(zhí)行周期內(nèi)所發(fā)出的兩個加載或兩個存儲(例如訪問映射到相同數(shù)據(jù)存儲體的存儲單元)可能會導(dǎo)致硬件資源沖突并且可能會導(dǎo)致存儲器訪問延遲。
一種用于減少或消除諸如高速緩存器數(shù)據(jù)存儲體沖突之類的硬件資源沖突的現(xiàn)有機制,使用關(guān)于數(shù)據(jù)布局(layout)的信息來確定映射或可能映射到相同硬件資源的數(shù)據(jù),并且調(diào)度用于在無沖突周期內(nèi)訪問這種數(shù)據(jù)的指令。數(shù)據(jù)布局機制是用于把由程序指令所訪問的數(shù)據(jù)映射到存儲單元的方法。數(shù)據(jù)布局可能靜態(tài)發(fā)生,在這種情況下數(shù)據(jù)在編譯或鏈接時間期間被映射到存儲單元,或者動態(tài)發(fā)生,在這種情況下數(shù)據(jù)在程序執(zhí)行期間被映射到存儲單元?,F(xiàn)有機制限制了編譯器早在程序?qū)傩栽试S之前就調(diào)度存儲器訪問指令的能力。此外,它沒有消除可能由訪問在指令調(diào)度之后分配的數(shù)據(jù)所產(chǎn)生的硬件資源沖突,所述數(shù)據(jù)諸如在鏈接時間期間所分配的數(shù)據(jù)。
在附圖中以舉例形式而并非以限制形式圖示了本發(fā)明的實施例,并且其中同樣的附圖標(biāo)記指代類似的元件,并且其中圖1圖示了一種系統(tǒng)。
圖2圖示了依照一個實施例的系統(tǒng)實施例。
圖3-9圖示了示例性實施例中的例子。
圖10圖示了塊循環(huán)映射。
圖11是用于圖示依照第一實施例的方法的流程圖。
圖12是用于圖示依照第一實施例的另一方法的流程圖。
具體實施例方式
本發(fā)明實施例包括下面將要描述的各個操作。與本發(fā)明實施例相關(guān)聯(lián)的操作可以由硬件組件來執(zhí)行或者可以被具體化為機器可執(zhí)行指令,所述機器可執(zhí)行指令當(dāng)執(zhí)行時可以使利用所述機器可執(zhí)行指令來編程的通用或?qū)S锰幚砥骰螂娐穲?zhí)行所述操作。作為選擇和/或另外,一些或全部操作可以由硬件和軟件的組合來執(zhí)行。
本發(fā)明的實施例例如可以被作為計算機程序產(chǎn)品提供,所述計算機程序產(chǎn)品可以包括其上存儲有機器可執(zhí)行指令的一個或多個機器可讀介質(zhì),所述機器可執(zhí)行指令當(dāng)由諸如計算機、計算機網(wǎng)絡(luò)或其它電子設(shè)備之類的一個或多個機器執(zhí)行時,可以使所述一個或多個機器執(zhí)行依照本發(fā)明實施例的操作。機器可讀介質(zhì)可以包括但不局限于軟盤、光盤、CD-ROM(光盤只讀存儲器)和磁光盤、ROM(只讀存儲器)、RAM(隨機訪問存儲器)、EPROM(可擦可編程只讀存儲器)、EEPROM(電可擦可編程只讀存儲器)、磁或光卡、閃速存儲器或其它類型的適于存儲機器可執(zhí)行指令的媒體/機器可讀介質(zhì)。
此外,本發(fā)明的實施例還可以作為計算機程序產(chǎn)品下載,其中可以經(jīng)由通信鏈路(例如,調(diào)制解調(diào)器和/或網(wǎng)絡(luò)連接)通過由載波或其它傳播介質(zhì)所包含和/或調(diào)制的一個或多個數(shù)據(jù)信號來把所述程序從遠(yuǎn)程計算機(例如,服務(wù)器)轉(zhuǎn)送到請求計算機(例如,客戶端)。據(jù)此,如這里所用,機器可讀介質(zhì)可以但并不要求包括這種載波。
下述例子只用于說明性目的,并且目的決不在于限制本發(fā)明的實施例。因而,在可以詳細(xì)描述例子的情況下,或在可以提供一列例子的情況下,應(yīng)當(dāng)理解的是,所述例子并不被解釋為窮舉性的,并且不把本發(fā)明的實施例限制為所描述和/或圖示的例子。
介紹圖1圖示了一種系統(tǒng)。系統(tǒng)100可以包括主機處理器102、主機存儲器104、總線106和芯片組108。主機處理器102例如可以包括IntelItanium處理器。當(dāng)然作為選擇,在不脫離此實施例的情況下,主機處理器102可以包括另一類型的微處理器,諸如可從本申請受讓人之外的源制造和/或買到的微處理器。
主機處理器102可以可通信地耦合到芯片組108。如這里所用,“可通信地耦合”到第二組件的第一組件將意指第一組件可以經(jīng)由有線線路(例如,銅線)或無線(例如,射頻)手段與所述第二組件通信。芯片組108可以包括主機橋接/集線器系統(tǒng),該主機橋接/集線器系統(tǒng)可以使主機處理器102、主機存儲器104和用戶接口系統(tǒng)114彼此耦合并且耦合到總線106。芯片組108還可以包括I/O橋接/集線器系統(tǒng)(未示出),所述I/O橋接/集線器系統(tǒng)可以把主機橋接/總線系統(tǒng)108耦合到總線106。芯片組108可以包括集成電路芯片,諸如可從本申請受讓人處買到的集成電路芯片組中選擇的那些(例如,圖形存儲器和I/O控制器集線器芯片組),不過還可以作為選擇而使用其它集成電路芯片。用戶接口系統(tǒng)114例如可以包括鍵盤、指示裝置和顯示系統(tǒng),其可以允許人類用戶向系統(tǒng)100輸入命令并且監(jiān)視所述系統(tǒng)100的操作。
總線106可以包括符合可從PCI專用業(yè)務(wù)組獲得的外圍組件互連(Peripheral Component Interconnect PCI)本地總線規(guī)范修訂版2.2的總線,1998年12月18日,Portland,Oregon美國(所述總線以下被稱為“PCI總線”)。作為選擇,總線106作為替代可以包括符合可從上述PCI專用業(yè)務(wù)組獲得的PCI-X規(guī)范修訂版1.0a的總線,2000年7月24日,Portland,Oregon美國(所述總線以下被稱為“PCI-X總線”)。作為選擇,總線106還可以包括其它類型和配置的總線系統(tǒng)。
系統(tǒng)100可以包括一個或多個存儲器來存儲能夠被執(zhí)行的機器可執(zhí)行指令130、132,和/或能夠被諸如主機處理器102之類的處理器和/或諸如電路126之類的電路訪問、操作和/或操縱的數(shù)據(jù)。存儲器例如可以包括主機存儲器104和電路126中的存儲器128。存儲器104、128可以包括只讀、海量存儲器和/或隨機訪問計算機可讀存儲器。程序指令130、132的執(zhí)行和/或由處理器102和/或電路126對此數(shù)據(jù)的訪問、操作和/或操縱例如可以使處理器102和/或電路126執(zhí)行這里所描述的一些或全部操作。
可以把主機處理器102、主機存儲器104、總線106、芯片組108和電路卡槽116包括在諸如系統(tǒng)主板118之類的單個電路板中。電路卡槽116可以包括PCI擴展槽,所述PCI擴展槽包括PCI總線連接器120。PCI總線連接器120可以在電學(xué)上和機械上與在電路卡124中所包括的PCI總線連接器122配合??梢詷?gòu)造電路卡槽116和電路卡124用以允許電路卡124插入到電路卡槽116中。當(dāng)電路卡124被插入到電路卡槽116中時,PCI總線連接器120、122可以變得在電學(xué)上和機械上彼此耦合。當(dāng)PCI總線連接器120、122這樣彼此耦合時,電路卡124中的電路126可以變得與總線106電耦合。
圖2圖示了依照本發(fā)明一個實施例的系統(tǒng)實施例200,可以在系統(tǒng)100的一個或多個組件中實現(xiàn)所述實施例。系統(tǒng)200可以包括編譯器202、高速緩沖存儲器204、存儲器206和處理器208。
編譯器202涉及可以把源代碼或字節(jié)碼218轉(zhuǎn)換為可以由諸如主機處理器102之類的處理器208所執(zhí)行的機器可執(zhí)行指令220的功能。機器可執(zhí)行指令220可以駐留在諸如存儲器104之類的存儲器中,并且例如可以是機器可執(zhí)行指令132。在一個實施例中,編譯器202可以包括被具體化為機器可執(zhí)行指令的機器可執(zhí)行程序,所述機器可執(zhí)行指令諸如是在主機存儲器104上的機器可執(zhí)行指令132。在本發(fā)明的實施例中,編譯器202還可以產(chǎn)生有色沖突圖212。編譯器202可以通過依照有色沖突圖212把由機器可執(zhí)行指令220所訪問的程序數(shù)據(jù)216映射到存儲器206中的多個存儲單元214來布局?jǐn)?shù)據(jù)。在程序執(zhí)行時間,處理器208可以依照存儲單元-數(shù)據(jù)存儲體映射來把存儲器206中的存儲單元214分配到高速緩沖存儲器204中的數(shù)據(jù)存儲體210。
編譯器202可以是即時(just-in-time)編譯器(以下稱為“JIT編譯器”)。JIT編譯器指的是可以把字節(jié)碼動態(tài)地轉(zhuǎn)換為對象代碼的機器可執(zhí)行程序,在這種情況下源代碼可以首先被轉(zhuǎn)換為字節(jié)碼。當(dāng)機器可執(zhí)行程序正被執(zhí)行時(即,動態(tài)地,與靜態(tài)相對比),JIT編譯器可以識別并適應(yīng)諸如指令長度之類的計算機平臺差異,這是因為字節(jié)碼可以是獨立于平臺的代碼,其可以被直接發(fā)送到任何平臺并在該平臺上運行。
例如在JavaTM編程語言和環(huán)境中,所述JavaTM編程語言和環(huán)境由James Gosling、Bill Joy和Guy Steele在“The Java LanguageSpecification”中描述,Addison-Wesley,1991,并且可從SunMicrosystems公司買到,可以用JavaTM編程語言(以下稱為“JAVATM程序”)來編寫源代碼程序。JAVATM程序可以在具有JavaTM虛擬機的機器上執(zhí)行。諸如JavaTM編譯器之類的編譯器可以把JavaTM程序轉(zhuǎn)換為字節(jié)碼,并且JavaTM虛擬機可以使用JIT編譯器來把字節(jié)代碼轉(zhuǎn)換為機器可執(zhí)行指令。作為選擇,編譯器202可以是靜態(tài)編譯器。靜態(tài)編譯器指的是可以把源代碼轉(zhuǎn)換為可以被特定平臺所理解的對象代碼的機器可執(zhí)行程序。
高速緩沖存儲器204指的是例如可以包括高速RAM(隨機存取存儲器)的高速存儲器??梢允褂酶咚倬彌_存儲器204來存儲諸如程序數(shù)據(jù)216或編程指令(例如,機器可執(zhí)行指令220)之類的信息,所述信息可以被常常訪問。例如,可以使用高速緩沖存儲器204來存儲在程序執(zhí)行期間在90%的時間上會被訪問的編程指令或者被機器可執(zhí)行程序重復(fù)訪問的程序數(shù)據(jù)216。
高速緩沖存儲器204可以是1級(以下稱為“L1”)高速緩存器。L1高速緩存器可以是直接位于主機處理器102上的存儲器(主機處理器102上的存儲器未示出)。作為選擇,高速緩沖存儲器204可以是2級(以下稱為“L2”)高速緩存器。L2高速緩存器可以是位于主機處理器102外的存儲器,諸如存儲器104或存儲器128。高速緩沖存儲器204可以包括一個或多個數(shù)據(jù)存儲體210?!皵?shù)據(jù)存儲體”是可以用來訪問高速緩沖存儲器中的數(shù)據(jù)的硬件資源。數(shù)據(jù)存儲體可以具有一個或多個處理約束。例如,數(shù)據(jù)存儲體210也可以在執(zhí)行周期期間只處理一個數(shù)據(jù)請求。從而,在執(zhí)行時間期間訪問存儲單元214中的程序數(shù)據(jù)216可能會導(dǎo)致硬件資源沖突,其中在相同的執(zhí)行周期期間由機器可執(zhí)行指令把所述存儲單元214映射到相同的數(shù)據(jù)存儲體210。
存儲器206可以包括諸如主機存儲器104或存儲器128之類的存儲器。在圖2所圖示的例子中,存儲器206可以存儲程序數(shù)據(jù)216,所述程序數(shù)據(jù)216可以被拷貝到高速緩沖存儲器204的一個或多個數(shù)據(jù)存儲體210中以供處理器208高速、更快地訪問。
圖11圖示了依照第一實施例的方法。另外參考圖2-8,在塊1100,編譯器202(圖2)可以調(diào)度從諸如存儲器206(圖2)之類的存儲器所讀取的機器可執(zhí)行指令328、330、332、334、336、338(圖3,和圖2中的220)的序列以供處理器208執(zhí)行。調(diào)度機器可執(zhí)行指令220可以確定在程序執(zhí)行期間機器可執(zhí)行指令220被發(fā)送到處理器208的次序。在本發(fā)明的實施例中,可以依照把機器可執(zhí)行指令220存儲在主存儲器206中的次序來把所調(diào)度的機器可執(zhí)行指令220發(fā)送到處理電路212。
在數(shù)據(jù)布局階段期間,在塊1102,編譯器202可以根據(jù)所調(diào)度的機器可執(zhí)行指令328、330、332、334、336、338的序列(圖3)來創(chuàng)建數(shù)據(jù)布局800(圖8)。在一個實施例中,數(shù)據(jù)布局800可以包括數(shù)據(jù)元352、354、356、358的布局(圖3),其中數(shù)據(jù)元352、354、356、358可以是程序數(shù)據(jù)216中的數(shù)據(jù)(圖2)??梢砸勒沼猩珱_突圖700(圖7)來創(chuàng)建數(shù)據(jù)布局800,所述有色沖突圖700是基于所調(diào)度的機器可執(zhí)行指令328、330、332、334、336、338的序列的。數(shù)據(jù)布局800可以對應(yīng)于數(shù)據(jù)元352、354、356、358到存儲單元214的映射以便消除或減少在程序執(zhí)行期間的硬件資源沖突。
圖12圖示了依照第一實施例的另一方法。另外再次參考圖2-8,在塊1200,編譯器202(圖2)可以創(chuàng)建具有多個節(jié)點302、304、306、308和多個邊310、312、314的沖突圖300(圖3),其中邊的數(shù)目可以大于或等于0。每個節(jié)點302、304、306、308可以表示可由至少一個機器可執(zhí)行指令所訪問的數(shù)據(jù)元352、354、356、358,并且每個邊310、312、314(如果存在的話)可以連接多個節(jié)點302、304、306、308中的節(jié)點對,并且可以表示潛在的硬件資源沖突。在塊1202,編譯器202(圖2)可以通過向多個節(jié)點302、304、306、308中的每個分配顏色C1(412)、C2(414)、C3(416)來給沖突圖上色以便產(chǎn)生有色沖突圖700(圖7),其中每種顏色可以表示一硬件資源。在塊1204,編譯器可以通過把每個數(shù)據(jù)元映射到存儲單元214來創(chuàng)建數(shù)據(jù)布局800(圖8),其中每個存儲單元214可以映射到相應(yīng)的硬件資源。
在本發(fā)明的實施例中,在沖突圖300中可以由邊310、312、314(圖3)來表示潛在的硬件資源沖突,如果由邊所連接的節(jié)點對被分配有相同的顏色,那么所述潛在的硬件資源沖突可能會導(dǎo)致硬件資源沖突。依照這種方式,可以使用有色沖突圖700(圖7)來向數(shù)據(jù)元352、354、356、358(圖3)分配硬件資源,以使得隨后避免硬件資源沖突。在一個實施例中,可以通過把對應(yīng)于節(jié)點302、304、306、308的數(shù)據(jù)元DATA1(352)、DATA2(354)、DATA3(356)、DATA4(358)分配給映射到數(shù)據(jù)存儲體210的存儲單元214來把硬件資源分配給數(shù)據(jù)元352、354、356、358。
“硬件資源沖突”意指可能由于對硬件資源的約束而由訪問硬件資源(諸如數(shù)據(jù)存儲體210)所產(chǎn)生的沖突?!皼_突圖”是在諸如數(shù)據(jù)元352、354、356、358之類的數(shù)據(jù)元之間潛在沖突的描繪。在一個實施例中,每個數(shù)據(jù)元352、354、356、358可以由相應(yīng)的節(jié)點302、304、306、308來表示,并且在多個節(jié)點302、304、306、308中的節(jié)點對之間的潛在沖突可以由邊310、312、314來表示??梢韵蛴猩珱_突圖800中的多個節(jié)點302、304、306、308進一步分配顏色來生成有色沖突圖700(圖7)?!坝猩珱_突圖”是可以描繪沖突(如果存在的話)的沖突圖,所述沖突可以通過向由邊所連接的任何節(jié)點對分配相同顏色來表示。每種顏色可以對應(yīng)于唯一的硬件資源,以致向由邊310、312、314所連接的多個節(jié)點302、304、306、308中的節(jié)點對(圖3)分配相同的顏色可能會在程序執(zhí)行期間導(dǎo)致沖突。通過小心地向多個節(jié)點302、304、306、308中的每個節(jié)點分配顏色,可以在某些情況下減少或消除硬件資源沖突。
根據(jù)圖3,編譯器202可以通過依照有色沖突圖700(圖7)把由機器可執(zhí)行指令328、330、332、334、336、338所引用的數(shù)據(jù)元352、354、356、358映射到存儲單元214(其中每個存儲單元214可以映射到硬件資源,諸如數(shù)據(jù)存儲體210)來創(chuàng)建數(shù)據(jù)布局800(圖8)。可以依照有色沖突圖700所創(chuàng)建的數(shù)據(jù)布局800可以使數(shù)據(jù)元352、354、356、358能夠被分配到硬件資源,以致可以減少或消除硬件資源沖突。編譯器202可以在數(shù)據(jù)布局階段中創(chuàng)建數(shù)據(jù)布局800。
沖突圖在本發(fā)明的實施例中,編譯器202可以使用存儲單元-數(shù)據(jù)存儲體映射信息來推斷什么數(shù)據(jù)存儲體210會用于哪些存儲單元214以減少或消除可能在程序執(zhí)行期間發(fā)生的數(shù)據(jù)存儲體沖突。在一個實施例中,編譯器202可以產(chǎn)生沖突圖300,所述沖突圖300可以表明潛在的數(shù)據(jù)存儲體沖突。數(shù)據(jù)存儲體沖突可以是由指令328、330、332、334、336、338在相同執(zhí)行周期中訪問數(shù)據(jù)元352、354、356、358(位于映射到相同數(shù)據(jù)存儲體210的存儲單元214中)的結(jié)果。在此實施例中,節(jié)點可以表示數(shù)據(jù)元352、354、356、358,并且如果對應(yīng)于節(jié)點對的數(shù)據(jù)元332、354、356、358位于映射到相同存儲體210的存儲單元214中,并且由指令328、330、332、334、336、338在相同的執(zhí)行周期316、320、324內(nèi)訪問,那么在節(jié)點對之間的邊可以表示數(shù)據(jù)存儲體沖突??梢员硎緮?shù)據(jù)元352、354、356、358的節(jié)點可以是對應(yīng)于數(shù)據(jù)元352、354、356、358的節(jié)點。
如圖3中所圖示,沖突圖300可以包括多個節(jié)點302、304、306、308和多個邊310、312、314,其中邊的數(shù)目可以大于或等于0。每個邊310、312、314(如果存在的話)可以連接多個節(jié)點302、304、306、308中的節(jié)點對。如圖3中所圖示,例如,EDGE1(310)把節(jié)點302連接到節(jié)點304;EDGE2(312)把節(jié)點304連接到節(jié)點306;并且EDGE3(314)把節(jié)點306連接到節(jié)點308。
在圖3中,指令I(lǐng)1(328)可以在執(zhí)行周期Y1(316)中訪問數(shù)據(jù)元DATA1(352);指令I(lǐng)2(330)可以在執(zhí)行周期Y1(316)中訪問數(shù)據(jù)元DATA2(354);指令I(lǐng)3(332)可以在執(zhí)行周期Y10(320)中訪問數(shù)據(jù)元DATA2(354);指令I(lǐng)4(334)可以在執(zhí)行周期Y10(320)中訪問數(shù)據(jù)元DATA3(356);指令I(lǐng)5(336)可以在執(zhí)行周期Y20(324)中訪問數(shù)據(jù)元DATA3(356),并且指令I(lǐng)6(338)可以在執(zhí)行周期Y20(324)中訪問數(shù)據(jù)元DATA4(358)。
在本發(fā)明的實施例中,可以為可由一個或多個機器可執(zhí)行指令I(lǐng)1(328)、I2(330)、I3(332)、I4(334)、I5(336)、I6(338)訪問的每個數(shù)據(jù)元352、354、356、358來創(chuàng)建節(jié)點302、304、306、308,以致每個節(jié)點302、304、306、308對應(yīng)于唯一的數(shù)據(jù)元352、354、356、358。在本發(fā)明的一個實施例中,如果對應(yīng)于節(jié)點302、304、306、308中節(jié)點對的數(shù)據(jù)元352、354、356、358由指令328、330、332、334、336、338在相同的執(zhí)行周期316、320、324內(nèi)訪問,那么邊310、312、314可以連接所述節(jié)點302、304、306、308中的節(jié)點對。
編譯器202可以使用以下示例性算法來產(chǎn)生沖突圖1.為每個數(shù)據(jù)元創(chuàng)建節(jié)點。
2.對于多個節(jié)點中的每個節(jié)點對,如果把對應(yīng)于所述節(jié)點的數(shù)據(jù)元映射到相同硬件資源可能會導(dǎo)致沖突,那么在所述節(jié)點之間創(chuàng)建邊。這例如可以通過下列步驟來實現(xiàn)·確定沖突指令對,其中每個指令可以訪問一個或多個數(shù)據(jù)元,并且每個數(shù)據(jù)元可以對應(yīng)于節(jié)點(在上面項1中所創(chuàng)建的)。如這里所用,“沖突指令”指的是在相同周期內(nèi)執(zhí)行的指令。
·在對應(yīng)于數(shù)據(jù)元的節(jié)點之間創(chuàng)建邊,其中每個數(shù)據(jù)元可以由沖突指令對中的至少一個指令訪問。
例如在一個實施例中,如下面例子中所圖示,如果對應(yīng)于節(jié)點對的數(shù)據(jù)元342、344、346、348由指令328、330、332、334、336、338在相同的執(zhí)行周期316、320、324內(nèi)訪問,那么可以在多個節(jié)點302、304、306、308中的節(jié)點對之間創(chuàng)建邊。
在圖3中,可以按照如下創(chuàng)建沖突圖3001.為每個數(shù)據(jù)元創(chuàng)建節(jié)點。
可以把節(jié)點302分配給DATA1(352)。
可以把節(jié)點304分配給DATA2(354);可以把節(jié)點306分配給DATA3(356);可以把節(jié)點308分配給DATA4(358)。
2.對于多個節(jié)點中的每個節(jié)點對,如果對應(yīng)于節(jié)點對的數(shù)據(jù)元342、344、346、348由指令328、330、332、334、336、338在相同的執(zhí)行周期316、320、324中訪問,那么可以在多個節(jié)點302、304、306、308中的節(jié)點對之間創(chuàng)建邊。對于以下沖突指令對,可以按照如下創(chuàng)建邊310、312、314可以在Y1(316)中執(zhí)行I1(328)和I2(330)這些指令訪問數(shù)據(jù)元DATA1(352)和DATA2(354),所述數(shù)據(jù)元對應(yīng)于節(jié)點302和節(jié)點304。因而,可以在節(jié)點302和節(jié)點304之間創(chuàng)建邊EDGE1(310)。
可以在Y10(320)中執(zhí)行I3(332)和I4(334)這二者這些指令訪問數(shù)據(jù)元DATA2(354)和DATA3(356),所述數(shù)據(jù)元對應(yīng)于節(jié)點304和節(jié)點306。因而,可以在節(jié)點304和節(jié)點306之間創(chuàng)建邊EDGE2(312)。
可以在Y20(324)中執(zhí)行I5(336)和I6(338)這二者這些指令訪問對應(yīng)于節(jié)點306和節(jié)點308的數(shù)據(jù)元DATA3(356)和DATA4(358)。因而,可以在節(jié)點306和節(jié)點308之間創(chuàng)建邊EDGE3(314)。
概括地說,在沖突圖300中可以創(chuàng)建三個(3)邊310、312、314。EDGE1(310)可以連接節(jié)點302和節(jié)點304,這是因為在相同的執(zhí)行周期Y1(316)內(nèi)由指令I(lǐng)1(328)和I2(330)訪問對應(yīng)于那些節(jié)點的數(shù)據(jù)元DATA1(352)和DATA2(354)。EDGE2(312)連接節(jié)點304和節(jié)點306,這是因為由指令I(lǐng)3(332)和I4(334)在相同的執(zhí)行周期Y10(320)內(nèi)訪問對應(yīng)于那些節(jié)點的數(shù)據(jù)元DATA2(354)和DATA3(356)。EDGE 314連接節(jié)點306和308,這是因為由指令15(336)和16(338)在相同的執(zhí)行周期Y20(324)內(nèi)訪問對應(yīng)于那些節(jié)點的數(shù)據(jù)元DATA3(356)和DATA4(358)。
有色沖突圖在本發(fā)明的實施例中,每個顏色C1(412)、C2(414)、C3(416)可以對應(yīng)于硬件資源,諸如高速緩沖存儲器204中的數(shù)據(jù)存儲體210。作為一個例子使用數(shù)據(jù)存儲體,可以通過向節(jié)點分配顏色來為沖突圖300中的每個節(jié)點上色。把顏色分配給節(jié)點可以表示把硬件資源分配給由所述節(jié)點所表示的數(shù)據(jù)。連接兩個節(jié)點的邊可以表示可能會導(dǎo)致性能懲罰的潛在硬件資源沖突。如果由邊所連接的節(jié)點被分配有相同的顏色(即,相同的硬件資源),那么由邊所表示的這種潛在硬件資源沖突可能會導(dǎo)致硬件資源沖突。在本發(fā)明的實施例中,試圖給相鄰節(jié)點上以不同的顏色以免這些性能懲罰。如這里所用,“相鄰節(jié)點”是由諸如邊EDGE1(310)、EDGE2(312)、EDGE3(314)之類的一些邊所連接的節(jié)點?!坝猩?jié)點”是已經(jīng)被分配有顏色的節(jié)點,并且“無色節(jié)點”是尚未被分配顏色的節(jié)點。
對于沖突圖中的每個節(jié)點,編譯器202可以創(chuàng)建并維護顏色集,諸如顏色集410A、410B、410C、410D(圖4,其中每個顏色集以下被稱為“相應(yīng)的顏色集”)和/或團體顏色集410。每個相應(yīng)的顏色集410A、410B、410C、410D最初可以包括來自團體顏色集410的顏色,其中團體顏色集410可以包括多種顏色C1(412)、C2(414)、C3(416)。如圖4中所圖示,編譯器202可以把來自相應(yīng)的顏色集410A、410B、410C、410D或團體顏色集410的顏色分配給當(dāng)前節(jié)點。當(dāng)節(jié)點被上色時,可以從相應(yīng)的顏色集410A、410B、410C、410D中除去該顏色,以致相應(yīng)的顏色集410A、410B、410C、410D可以包括從沒有團體顏色集410中的顏色C1(412)、C2(414)、C3(416)到都有團體顏色集410中的顏色C1(412)、C2(414)、C3(416)中的任何情況,并且以致相應(yīng)的顏色集410A、410B、410C、410D可以表示尚未被分配給在當(dāng)前節(jié)點鄰近的節(jié)點的顏色集。從而,如果當(dāng)前節(jié)點具有相應(yīng)的非空顏色集410A、410B、410C、410D,那么當(dāng)前節(jié)點不會以與相鄰節(jié)點相同的顏色結(jié)束。
在所舉例說明的實施例中,每個節(jié)點可以與相應(yīng)的顏色集410A、410B、410C、410D相關(guān)聯(lián)。節(jié)點302、304、306、308均可以被分配有分別來自相應(yīng)顏色集410A、410B、410C、410D或來自團體顏色集410中的顏色C1(412)、C2(414)、C3(416)。編譯器202可以把多個節(jié)點302、304、306、308之一指定為當(dāng)前節(jié)點,把來自相應(yīng)顏色集410A、410B、410C、410D或團體顏色集410的顏色C1(412)、C2(414)、C3(416)分配到當(dāng)前節(jié)點。編譯器202可以從相應(yīng)的顏色集410A、410B、410C、410D或團體顏色集410選擇第一顏色,并且將其分配給當(dāng)前節(jié)點。在一個實施例中,如果相應(yīng)的顏色集410A、410B、410C、410D是非空的,那么編譯器202可以選擇來自所述相應(yīng)的顏色集410A、410B、410C、410D中的顏色C1(412)、C2(414)、C3(416)。如果相應(yīng)的顏色集410A、410B、410C、410D是空的,那么編譯器202可以選擇來自團體顏色集410的顏色。
當(dāng)處理每個節(jié)點302、304、306、308時可以確定相應(yīng)的顏色集410A、410B、410C、410D,以致例如編譯器可以初始化每個相應(yīng)的顏色集410A、410B、410C、410D用以包括來自團體顏色集410的所有顏色C1(412)、C2(414)、C3(416),并且可以在處理當(dāng)前節(jié)點期間從在當(dāng)前節(jié)點鄰近的所有節(jié)點的相應(yīng)顏色集410A、410B、410C、410D中除去被分配給所述當(dāng)前節(jié)點的顏色C1(412)、C2(414)、C3(416)。作為選擇,編譯器202可以在處理該節(jié)點期間例如通過首先初始化用于當(dāng)前節(jié)點的相應(yīng)顏色集410A、410B、410C、410D用以包括來自團體顏色集410的所有顏色C1(412)、C2(414)、C3(416),并且從所述當(dāng)前節(jié)點的相應(yīng)顏色集410A、410B、410C、410D中除去被分配給在所述當(dāng)前節(jié)點鄰近的節(jié)點的顏色C1(412)、C2(414)、C3(416),來確定用于每個節(jié)點的相應(yīng)顏色集410A、410B、410C、410D。依照此方法,可以不必維護用于每個節(jié)點的顏色集-可以維護單個顏色集并且為每個當(dāng)前節(jié)點重新計算所述顏色集。這兩種方法都是可接受的,并且不脫離本發(fā)明的實施例。
選擇來自顏色集的顏色在本發(fā)明的實施例中,如果相應(yīng)顏色集410A、410B、410C、410D是非空的,那么可以從相應(yīng)的顏色集410A、410B、410C、410D中任意地選擇顏色,或者對顏色的選擇使得所述顏色使存儲器使用最小化。在本發(fā)明的實施例中,如果該顏色對應(yīng)于當(dāng)除以塊大小時并不會產(chǎn)生整數(shù)的數(shù)據(jù)大小,那么所述顏色使存儲器使用最小化。如這里所用,“塊大小”意指映射到相同硬件資源(諸如數(shù)據(jù)存儲體)的鄰接存儲塊的大小。如這里所用,“對應(yīng)于”數(shù)據(jù)大小的顏色還意指所述顏色可以被分配給其整個數(shù)據(jù)大小等于數(shù)據(jù)大小的一個或多個數(shù)據(jù)元。作為一個例子,如果每個數(shù)據(jù)元是8個字節(jié),那么每當(dāng)對應(yīng)于數(shù)據(jù)元352、354、356、358的節(jié)點302、304、306、308被分配有顏色,那么可以使所述顏色的相應(yīng)數(shù)據(jù)大小增加8個字節(jié)。如果對應(yīng)于顏色的數(shù)據(jù)大小當(dāng)除以塊大小時產(chǎn)生整數(shù),那么向另一數(shù)據(jù)元分配所述顏色會導(dǎo)致開始新的存儲塊。因此為了使存儲器使用最小化,把顏色分配成使數(shù)據(jù)元可以被置于已經(jīng)具有一個或多個數(shù)據(jù)元的塊中,由此使對存儲器中存儲單元的使用最小化。選擇對應(yīng)于當(dāng)除以塊大小時不會產(chǎn)生整數(shù)的數(shù)據(jù)大小的顏色可以使存儲器使用最小化。
為了圖示此原理,可以注意圖10,圖10圖示了在諸如IntelItanium2處理器中的存儲單元0-15、16-31、…、240-255、256-271、272-287、…、496-511和數(shù)據(jù)存儲體1002A、1002B、…、1002N之間的塊循環(huán)映射。存儲單元0-15、16-31、…、240-255、256-271、272-287、…、496-511例如可以是存儲器206中的存儲單元214,并且數(shù)據(jù)存儲體1002A、1002B、…、1002N例如可以是高速緩沖存儲器204中的存儲體210。
在塊循環(huán)映射中,分別包括存儲單元0-15、16-31、…、240-255、256-271、272-287、…、496-511的存儲塊1004A、1004B、…、1004C、1004D、1004E、…、1004N均可以被映射到數(shù)據(jù)存儲體1002A、1002B、…、1002N,以致任何數(shù)據(jù)存儲體1002A、1002B、…、1002N可以包括來自一個或多個存儲塊1004A、1004B、…、1004C、1004D、1004E、…、1004N的數(shù)據(jù)。在圖10所圖示的例子中,數(shù)據(jù)存儲體1002A可以保持來自存儲塊1004A、1004D等的數(shù)據(jù);數(shù)據(jù)存儲體1002B可以保持來自存儲塊1004B、1004E等的數(shù)據(jù);并且數(shù)據(jù)存儲體1002N可以保持來自存儲塊1004C、1004Z等的數(shù)據(jù)(也可以存在位于存儲單元511之后的存儲單元以及位于存儲塊1004Z之后的存儲塊,但是并未示出)。
編譯器可以維持對應(yīng)于團體顏色集410中的每個顏色C1(412)、C2(414)、C3(416)的數(shù)據(jù)大小。為了確定用于當(dāng)前節(jié)點的顏色,所述顏色使存儲器使用最小化,編譯器可以分析可被分配給當(dāng)前節(jié)點的所有顏色C1(412)、C2(414)、C3(416)的數(shù)據(jù)大小。如果任何顏色C1(412)、C2(414)、C3(416)對應(yīng)于當(dāng)除以塊大小時不會產(chǎn)生整數(shù)的數(shù)據(jù)大小,那么可以選擇所述顏色C1(412)、C2(414)、C3(416)。如果多個顏色C1(412)、C2(414)、C3(416)對應(yīng)于當(dāng)除以塊大小時不會產(chǎn)生整數(shù)的數(shù)據(jù)大小,那么可以任意地選擇這些顏色C1(412)、C2(414)、C3(416)中的任何顏色。如果沒有顏色對應(yīng)于當(dāng)除以塊大小時不會產(chǎn)生整數(shù)的數(shù)據(jù)大小,那么可以選擇對應(yīng)于最小數(shù)據(jù)大小的顏色。
確定最小加權(quán)的沖突顏色如果不可能為相鄰節(jié)點上以不同的顏色(即,相應(yīng)的顏色集410A、410B、410C、410D是空的),那么在一個實施例中,可以任意地選擇來自團體顏色集410的顏色。在另一實施例中,可以選擇來自團體顏色集410的顏色以便使與硬件資源沖突相關(guān)聯(lián)的性能懲罰最小化。在一個實施例中,在沖突圖300中的潛在數(shù)據(jù)存儲體沖突可以由邊EDGE1(310)、EDGE2(312)、EDGE3(314)來描繪,并且如果這種沖突導(dǎo)致實際沖突,那么這種潛在數(shù)據(jù)存儲體沖突的性能懲罰可以由分配給所述邊EDGE1(310)、EDGE2(312)、EDGE3(314)的權(quán)重來表示。例如,較大的權(quán)重可以表示對性能具有更大影響的沖突。按照另一方式,確定邊EDGE1(310)、EDGE2(312)、EDGE3(314)的權(quán)重可以包括確定與由所述邊EDGE1(310)、EDGE2(312)、EDGE3(314)所表示的硬件資源沖突相關(guān)聯(lián)的性能懲罰。在一個實施例中,邊EDGE1(310)、EDGE2(312)、EDGE3(314)可以表示與在相同執(zhí)行周期期間訪問數(shù)據(jù)存儲體中的數(shù)據(jù)相關(guān)聯(lián)的存儲器訪問延遲。
使用這些分配的權(quán)重,編譯器202可以向當(dāng)前節(jié)點分配顏色,所述顏色被分配給相鄰節(jié)點,以致所述當(dāng)前節(jié)點和相鄰節(jié)點由在把當(dāng)前節(jié)點連接到其相鄰節(jié)點的所有邊之間具有最小權(quán)重的邊連接,并且由此所述邊表示對性能具有最小影響的硬件資源沖突。如果一個以上邊具有最小權(quán)重,那么在一個實施例中,可以任意地選擇這些邊之一。在另一實施例中,可以如上所述選擇一個邊來使存儲器使用最小化。
例如在一個實施例中,邊EDGE1(310)、EDGE2(312)、EDGE3(314)的性能懲罰可以被計算為由于硬件資源沖突所導(dǎo)致的停滯執(zhí)行周期乘以沖突指令的執(zhí)行計數(shù)。在一個例子中,參考圖9,團體顏色集可以包括兩種顏色C1(412)和C2(414),節(jié)點302被分配有顏色C1(412),節(jié)點306被分配顏色C2(414),而節(jié)點304尚未被分配顏色。在此例子中,可以假定因為在團體顏色集中的兩種顏色已經(jīng)被分配給在節(jié)點304鄰近的節(jié)點,所以在相應(yīng)的顏色集410B中沒有可用的顏色。如果確定的數(shù)據(jù)存儲體沖突導(dǎo)致6個周期延遲,并且用于訪問對應(yīng)于節(jié)點302和節(jié)點304的DATA1(352)和DATA2(354)的指令I(lǐng)1和I2總共被執(zhí)行了1000次,其中所述節(jié)點302和節(jié)點304由EDGE1(310)連接,那么可以向EDGE1(310)分配1000×6=6000的性能懲罰。EDGE1(310)的權(quán)重可以是6000。如果EDGE2(312)具有比EDGE1(310)更大的權(quán)重,那么因為節(jié)點302是由具有最小權(quán)重的邊EDGE1(310)連接到節(jié)點304的節(jié)點,所以被分配給節(jié)點304的顏色C1(412)、C2(414)可以是被分配給節(jié)點302的顏色C1(C1(412))。
例子最初,可以為每個節(jié)點302、304、306、308分別創(chuàng)建相應(yīng)的顏色集410A、410B、410C、410D。每個相應(yīng)的顏色集410A、410B、410C、410D最初可以包含來自團體顏色集410的所有顏色。在一個實施例中,可以使用以下示例性算法來創(chuàng)建有色沖突圖1.如果在多個節(jié)點302、304、306、308中存在至少一個未上色的節(jié)點,那么選擇一個作為當(dāng)前節(jié)點。節(jié)點的選擇可以是任意的,或者可以取決于被分配給節(jié)點302、304、306、308的優(yōu)先級,如下面所論述。為了說明性目的,節(jié)點302、304、306、308可以依照下列次序上色節(jié)點302、節(jié)點304、節(jié)點306和節(jié)點308。
2.如果相應(yīng)的顏色集是非空的,那么向當(dāng)前節(jié)點分配來自所述相應(yīng)顏色集的顏色。否則,向當(dāng)前節(jié)點分配最小加權(quán)沖突顏色的顏色。
編譯器可以任意地分配來自顏色集的顏色。作為選擇,編譯器202可以分配用于使存儲器使用最小化的、來自顏色集的顏色。為了圖示,可以假定數(shù)據(jù)元的數(shù)據(jù)大小是8個字節(jié),而且塊大小是16個字節(jié)。
3.對于未被上色且鄰近于所述當(dāng)前節(jié)點的每個節(jié)點,從對應(yīng)于相鄰節(jié)點的顏色集中除去被分配給所述當(dāng)前節(jié)點的顏色。
參考圖4-7,可以如下為節(jié)點302、304、306、308上色如圖4中所圖示,可以如下為節(jié)點302上色1.由于存在至少一個未上色的節(jié)點,所以編譯器202可以把節(jié)點302指定為當(dāng)前節(jié)點,所述節(jié)點302可以與具有顏色C1(412)、C2(414)、C3(416)的顏色集410A相關(guān)聯(lián)。
2.編譯器202可以向節(jié)點302任意分配顏色C1(412)。作為選擇,編譯器202可以分配用于使存儲器使用最小化的、來自顏色集410A的顏色。由于所有顏色C1(412)、C2(414)、C3(416)對應(yīng)于數(shù)據(jù)大小0(這是因為尚沒有顏色被分配給數(shù)據(jù)元),所以所有顏色的數(shù)據(jù)大小當(dāng)除以塊大小時都會產(chǎn)生整數(shù)。由于顏色集410A中的顏色對應(yīng)于相同的數(shù)據(jù)大小,所以可以選擇任何顏色來使存儲器使用最小化。節(jié)點302具有所分配的顏色402。
3.由于節(jié)點304未被上色且鄰近于節(jié)點302(這是因為節(jié)點304由EDGE1(310)連接到節(jié)點302),所以可以從對應(yīng)于節(jié)點304的顏色集(顏色集410B)中除去顏色C1(412)。然后,顏色集410B可以包括顏色C2(414)和C3(416)。
如圖5中所圖示,可以按照如下為節(jié)點304上色1.由于存在至少一個未上色的節(jié)點,所以編譯器202可以把節(jié)點304指定為當(dāng)前節(jié)點,所述節(jié)點304可以與具有顏色C2(414)、C3(416)的顏色集410B相關(guān)聯(lián)。
2.編譯器202可以向節(jié)點304任意分配顏色C2(414)。作為選擇,編譯器202可以分配用于使存儲器使用最小化的、來自顏色集410B的顏色。由于顏色C2(414)、C3(416)對應(yīng)于數(shù)據(jù)大小0(這是因為沒有顏色被分配給數(shù)據(jù)元),所以這兩個顏色的數(shù)據(jù)大小當(dāng)除以塊大小時都會產(chǎn)生整數(shù)。由于顏色集410B中的顏色對應(yīng)于相同的數(shù)據(jù)大小,所以可以選擇任何一種顏色來使存儲器使用最小化。節(jié)點304具有所分配的顏色504。
3.由于節(jié)點306未被上色且鄰近于節(jié)點304(這是因為節(jié)點306由EDGE2(312)連接到節(jié)點304),所以可以從對應(yīng)于節(jié)點306的顏色集(顏色集410C)中除去顏色C2(414)。那么顏色集410C可以包括顏色C1(412)和C3(416)。
如圖6中所圖示,可以如下為節(jié)點306上色1.由于存在至少一個未上色的節(jié)點,所以編譯器202可以把節(jié)點306指定為當(dāng)前節(jié)點,所述節(jié)點306可以與具有顏色C1(412)、C3(416)的顏色集410C相關(guān)聯(lián)。
2.編譯器202可以向節(jié)點306任意分配顏色C1(412)。作為選擇,編譯器202可以分配用于使存儲器使用最小化的、來自顏色集410C的顏色。由于顏色C1(412)對應(yīng)于8字節(jié)的數(shù)據(jù)大小(這是因為此顏色已經(jīng)被分配給1個數(shù)據(jù)元DATA1(352)),所以顏色C1(412)的數(shù)據(jù)大小當(dāng)除以塊大小時不會產(chǎn)生整數(shù)。由于顏色C3(416)對應(yīng)于數(shù)據(jù)大小0(這是因為此顏色未被分配給數(shù)據(jù)元),所以顏色C3(416)的數(shù)據(jù)大小當(dāng)除以塊大小時會產(chǎn)生整數(shù)。從而,顏色C1(412)使存儲器使用最小化并且可以被選擇。節(jié)點306具有所分配的顏色606。
3.由于節(jié)點308與節(jié)點306鄰接,這是因為節(jié)點308由EDGE3(314)連接到節(jié)點306,所以可以從對應(yīng)于節(jié)點308的顏色集(顏色集410D)中除去顏色C1(412)。然后,顏色集410D可以包括顏色C2(414)和C3(416)。
如圖7中所圖示,可以如下為節(jié)點308上色1.由于存在至少一個未上色的節(jié)點,所以編譯器202可以把節(jié)點308指定為當(dāng)前節(jié)點,所述節(jié)點308可以與具有顏色C2(414)、C3(416)的顏色集410D相關(guān)聯(lián)。
2.編譯器202可以向節(jié)點308任意分配顏色C3(416)。作為選擇,編譯器202可以分配用于使存儲器使用最小化的、來自顏色集410D的顏色。由于顏色C2(412)對應(yīng)于8字節(jié)的數(shù)據(jù)大小(這是因為此顏色已經(jīng)被分配給1個數(shù)據(jù)元DATA2(354)),所以顏色C2(414)的數(shù)據(jù)大小當(dāng)除以塊大小時不會產(chǎn)生整數(shù)。由于顏色C3(416)對應(yīng)于數(shù)據(jù)大小0(這是因為此顏色未被分配給數(shù)據(jù)元),所以顏色C3(416)的數(shù)據(jù)大小當(dāng)除以塊大小時會產(chǎn)生整數(shù)。從而,顏色C2(412)使存儲器使用最小化并且可以被選擇,并且被分配給節(jié)點308。節(jié)點308具有所分配的顏色708。
3.在節(jié)點308鄰近沒有未上色的節(jié)點。
由于所有節(jié)點已經(jīng)被上色,所以不再指定任何當(dāng)前節(jié)點??梢允褂糜猩珱_突圖700來布局?jǐn)?shù)據(jù)元352、354、356、358。
在圖4-7所示出的例子中,例如如果對應(yīng)于節(jié)點304的顏色集410B是空的,那么在一個實施例中,可以選擇最小加權(quán)的沖突顏色。參考圖9,如果與EDGE2(312)相關(guān)聯(lián)的權(quán)重W2(912)小于與EDGE1(310)相關(guān)聯(lián)的權(quán)重W1(910),那么對應(yīng)于節(jié)點302的顏色(即,顏色C1(402))可能會被選擇為用于節(jié)點304的最小加權(quán)的沖突顏色。
為顏色選擇節(jié)點如圖9中所圖示,沖突圖300中的每個節(jié)點302、304、306、308可以被分配有優(yōu)先級P1(922)、P2(924)、P3(926)、P4(928),并且依照優(yōu)先級P1(922)、P2(924)、P3(926)、P4(928)排列。在本發(fā)明的實施例中,節(jié)點的優(yōu)先級P1(922)、P2(924)、P3(926)、P4(928)可以被計算為節(jié)點最重邊的權(quán)重。例如,假定每個邊EDGE1(310)、EDGE2(312)、EDGE3(314)分別具有權(quán)重W1(910)、W2(912)和W3(914),而且W1(910)>W(wǎng)2(912)>W(wǎng)3(914)因為EDGE1(310)是節(jié)點302的唯一邊并且具有權(quán)重W1(910),所以可以向所述節(jié)點302分配優(yōu)先級W1(910)的P1(922)。
節(jié)點304具有兩個邊EDGE1(310)具有權(quán)重W1(910),并且EDGE2(312)具有權(quán)重W2(912)。因為W1(910)是在連接到節(jié)點304的所有邊之間最重邊EDGE1(310)的權(quán)重,所以可以向節(jié)點304分配優(yōu)先級W1(910)的P2(924)。
節(jié)點306具有兩個邊EDGE2(312)具有權(quán)重W2(912),并且EDGE3(314)具有權(quán)重W3(914)。因為W2(912)是在連接到節(jié)點306的所有邊之間最重邊EDGE2(312)的權(quán)重,所以可以向節(jié)點306分配優(yōu)先級W2(912)的P3(926)。
因為EDGE3(314)是節(jié)點308的唯一邊并且具有權(quán)重W3(914),所以可以向所述節(jié)點308分配優(yōu)先級W3(914)的P4(928)。
每個節(jié)點可以依照其優(yōu)先級來排列??梢匀我獾嘏帕芯哂邢嗤瑑?yōu)先級的節(jié)點。在一個實施例中,可以依照從最高到最低的優(yōu)先級來排列節(jié)點。例如,可以向節(jié)點302和節(jié)點304分別給出位列一(1)的等級902和位列二(2)的等級904,這是由于每個節(jié)點具有大于其它優(yōu)先級P3(926)、P4(928)的優(yōu)先級W1(910)的P1(922)、P2(924)。作為選擇,可以向節(jié)點302和節(jié)點304分別給出位列二(2)的等級902和位列一(1)的等級904,這是由于它們的優(yōu)先級P1(922)和P2(924)是相等的??梢韵蚬?jié)點306給出位列三(3)的等級906,并且可以向節(jié)點308給出位列四(4)的等級908??梢允褂霉?jié)點等級來依照等級次序向所述節(jié)點分配顏色。通過依照優(yōu)先級次序向節(jié)點302、304、306、308分配顏色C1(412)、C2(414)、C3(416),具有最大沖突的節(jié)點302、304、306、308具有更大的機會被分配有來自相應(yīng)顏色集410A、410B、410C、410D的顏色C1(412)、C2(414)、C3(416),由此減少了可能向高沖突節(jié)點分配與相鄰節(jié)點相同的顏色的機會。因此,這可以幫助減少和/或消除硬件資源沖突。
根據(jù)有色沖突圖來布局?jǐn)?shù)據(jù)如圖8中所圖示,可以使用有色沖突圖700來產(chǎn)生數(shù)據(jù)布局800。如這里所用,“數(shù)據(jù)布局”指的是把諸如數(shù)據(jù)元352、354、356、358之類的數(shù)據(jù)元分配到存儲器中的存儲單元,所述存儲單元諸如存儲器206中的存儲單元214。為了圖示,假定每個數(shù)據(jù)元是8個字節(jié)。例如在圖10中,由于編譯器202知道例如存儲單元0-15和256-271對應(yīng)于數(shù)據(jù)存儲體1002A,存儲單元16-31和272-287對應(yīng)于數(shù)據(jù)存儲體1002B,而且存儲單元240-255和496-511對應(yīng)于數(shù)據(jù)存儲體1002N,所以所述編譯器202可以按照如下依照有色沖突圖700來映射數(shù)據(jù)元352、354、356、3581.對于節(jié)點302、304、306、308,分配對應(yīng)于其所分配顏色的數(shù)據(jù)存儲體1002A、1002B、…、1002N。被分配給數(shù)據(jù)存儲體1002A、1002B、…、1002N的節(jié)點302、304、306、308意指可以把對應(yīng)于節(jié)點302、304、306、308的數(shù)據(jù)元DATA1(352)、DATA2(354)、DATA3(356)、DATA4(358)分配給存儲單元,所述存儲單元映射到所分配的數(shù)據(jù)存儲體1002A、1002B、…、1002N。
2.把與節(jié)點302、304、306、308相關(guān)聯(lián)的數(shù)據(jù)元DATA1(352)、DATA2(354)、DATA3(356)、DATA4(358)分配到存儲單元,所述存儲單元映射到數(shù)據(jù)存儲體1002A、1002B、…、1002N。為了使存儲器使用最小化,可以選擇第一可用的存儲單元,所述存儲單元映射到所要求的數(shù)據(jù)存儲體。
參考圖8,如果數(shù)據(jù)存儲體BANK0(1002A)對應(yīng)于顏色C1(412),并且數(shù)據(jù)存儲體BANK1(1002B)對應(yīng)于顏色C2(414),那么可以按照如下布局相應(yīng)的數(shù)據(jù)元DATA1(352)、DATA2(354)、DATA3(356)、DATA4(358)可以按照如下處理節(jié)點3021.由于節(jié)點302被分配有顏色C1(412),并且顏色C1(412)對應(yīng)于BANK0(1002A),所以向節(jié)點302分配數(shù)據(jù)存儲體BANK0(1002A)??梢园褜?yīng)于節(jié)點302的數(shù)據(jù)元DATA1(352)分配給存儲單元,所述存儲單元映射到數(shù)據(jù)存儲體BANK0(1002A)(即,0-15,256-271)。
2.把與節(jié)點302相關(guān)聯(lián)的數(shù)據(jù)元DATA1(352)分配給存儲單元0-7,所述存儲單元0-7是映射到數(shù)據(jù)存儲體BANK0(1002A)的第一可用的存儲單元。
可以按照如下處理節(jié)點3041.由于節(jié)點304被分配有顏色C2(414),并且顏色C2(414)對應(yīng)于BANK1(1002B),所以向節(jié)點304分配數(shù)據(jù)存儲體BANK1(1002B)??梢园褜?yīng)于節(jié)點304的數(shù)據(jù)元DATA2(354)分配給存儲單元,所述存儲單元映射到數(shù)據(jù)存儲體BANK0(1002A)(即,16-31,272-287)。
2.把與節(jié)點304相關(guān)聯(lián)的數(shù)據(jù)元DATA2(354)分配給存儲單元16-23,所述存儲單元16-23是映射到數(shù)據(jù)存儲體BANK1(1002B)的第一可用的存儲單元。
可以按照如下處理節(jié)點3061.由于節(jié)點306被分配有顏色C1(412),并且顏色C1(412)對應(yīng)于BANK0(1002A),所以向節(jié)點306分配數(shù)據(jù)存儲體BANK0(1002A)。可以把對應(yīng)于節(jié)點306的數(shù)據(jù)元DATA3(356)分配給可用的存儲單元,所述存儲單元映射到數(shù)據(jù)存儲體BANK0(1002A)(即,8-15,256-271)。
2.把與節(jié)點306相關(guān)聯(lián)的數(shù)據(jù)元DATA3(356)分配給存儲單元8-15,所述存儲單元8-15是映射到數(shù)據(jù)存儲體BANK0(1002A)的第一可用的存儲單元。
可以按照如下處理節(jié)點3081.由于節(jié)點302被分配有顏色C2(414),并且顏色C2(414)對應(yīng)于BANK1(1002B),所以向節(jié)點308分配數(shù)據(jù)存儲體BANK1(1002B)??梢园褜?yīng)于節(jié)點308的數(shù)據(jù)元DATA4(358)分配給可用的存儲單元,所述存儲單元映射到數(shù)據(jù)存儲體BANK1(1002B)(即,24-31,272-287)。
2.把與節(jié)點308相關(guān)聯(lián)的數(shù)據(jù)元DATA4(358)分配給存儲單元24-31,所述存儲單元24-31是映射到數(shù)據(jù)存儲體BANK15(1002N)的第一可用的存儲單元。
在此應(yīng)當(dāng)注意,數(shù)據(jù)存儲體BANK2可以對應(yīng)于顏色C3(416),而且可以被分配給顏色C3(416)的任何節(jié)點302、304、306、308可以具有被分配給數(shù)據(jù)存儲體BANK2的相應(yīng)數(shù)據(jù)元352、354、356、358。然而,在圖8和圖10中沒有顯式地圖示BANK2。
使用數(shù)據(jù)布局800,可以由處理器208在程序執(zhí)行期間執(zhí)行機器可執(zhí)行指令328、330、332、334、336、338的序列而沒有數(shù)據(jù)存儲體沖突。
例如,如果在執(zhí)行周期Y1(316)中,指令I(lǐng)1(328)訪問數(shù)據(jù)元DATA1(352),并且指令I(lǐng)2(330)訪問數(shù)據(jù)元DATA2(354)(參見圖3),并且假定每個數(shù)據(jù)存儲體每個執(zhí)行周期只可以處理一個數(shù)據(jù)請求,那么使用任意的數(shù)據(jù)布局可以使得把數(shù)據(jù)元DATA1(352)和DATA2(354)分配給存儲單元,所述存儲單元映射到相同的數(shù)據(jù)存儲體(即,所述存儲單元分別是存儲單元0-7和8-15)。因而,當(dāng)指令I(lǐng)1(328)和I2(330)試圖在相同的周期內(nèi)訪問DATA1(352)和DATA2(354)時,因為數(shù)據(jù)存儲體每個周期只可以處理一個數(shù)據(jù)請求導(dǎo)致不能在相同的周期內(nèi)訪問所述數(shù)據(jù)元,所以可能會出現(xiàn)延遲。
在本發(fā)明的實施例中(參考圖8),由于每個存儲體只接收一個數(shù)據(jù)請求,所以在相同的周期內(nèi)可以使用BANK0(1002A)來訪問數(shù)據(jù)元DATA1(352),并且可以使用BANK1(1002B)來訪問數(shù)據(jù)元DATA2(354)。從而在此例子中,避免了潛在的硬件資源沖突。
總結(jié)因此在一個實施例中,一種方法包括調(diào)度機器可執(zhí)行指令序列,并且根據(jù)有色沖突圖來創(chuàng)建數(shù)據(jù)元的數(shù)據(jù)布局,所述有色沖突圖基于機器可執(zhí)行指令序列。
通過創(chuàng)建沖突圖并且在所述沖突圖中向每個節(jié)點分配顏色,可以在某些情況下大大減少和/或消除硬件資源沖突的風(fēng)險。在仍然可能出現(xiàn)硬件資源沖突的情況下,可以通過在那些沖突出現(xiàn)之前分析那些沖突的影響來大大減少那些沖突的影響。與現(xiàn)有技術(shù)不同,本發(fā)明的實施例并不限制編譯器早在相關(guān)性和執(zhí)行部件資源允許之前就調(diào)度指令。此外,即使當(dāng)在指令調(diào)度期間并不知道數(shù)據(jù)布局時,也可以使用本發(fā)明的實施例。
在上述說明中,已經(jīng)參考本發(fā)明的具體實施例描述了本發(fā)明。然而在不脫離這些實施例的情況下顯然可以對它們進行各種修改和改變。因此,本說明書和附圖應(yīng)當(dāng)從說明性的意義而非限制性的意義來看待。
權(quán)利要求
1.一種方法,包括調(diào)度機器可執(zhí)行指令序列;根據(jù)所調(diào)度的機器可執(zhí)行指令序列來創(chuàng)建數(shù)據(jù)布局。
2.如權(quán)利要求1所述的方法,其中依照有色沖突圖來創(chuàng)建所述數(shù)據(jù)布局,所述有色沖突圖是基于所調(diào)度的機器可執(zhí)行指令序列的。
3.如權(quán)利要求2所述的方法,其中所述有色沖突圖包括多個節(jié)點,每個節(jié)點對應(yīng)于由一個或多個機器可執(zhí)行指令所訪問的唯一數(shù)據(jù)元,并且多個節(jié)點中的每個節(jié)點被分配有顏色,每個顏色表示硬件資源;和多個邊,其中如果存在邊的話,那么每個邊表示潛在的硬件資源沖突。
4.如權(quán)利要求3所述的方法,其中所述硬件資源包括高速緩沖存儲器中的數(shù)據(jù)存儲體。
5.如權(quán)利要求4所述的方法,其中所述硬件資源沖突包括多個在相同的執(zhí)行周期中訪問所述數(shù)據(jù)存儲體的一個或多個機器可執(zhí)行指令。
6.如權(quán)利要求4所述的方法,其中連接被分配有相同顏色的節(jié)點對的每個邊表示硬件資源沖突。
7.一種方法,包括創(chuàng)建具有多個節(jié)點和多個邊的沖突圖,每個節(jié)點表示由至少一個機器可執(zhí)行指令訪問的數(shù)據(jù)元,并且如果存在邊的話,那么每個邊連接多個節(jié)點中的節(jié)點對,并且表示潛在的硬件資源沖突;通過向多個節(jié)點中的每個節(jié)點分配顏色來為所述沖突圖上色用以產(chǎn)生有色沖突圖,每種顏色表示一硬件資源;并且通過把每個數(shù)據(jù)元映射到存儲單元來創(chuàng)建數(shù)據(jù)布局,所述存儲單元映射到相應(yīng)的硬件資源。
8.如權(quán)利要求7所述的方法,其中向多個節(jié)點中的每個節(jié)點分配顏色包括對于多個節(jié)點中的每個給定節(jié)點,分配來自相應(yīng)顏色集的顏色,所述相應(yīng)顏色集包括來自具有多種顏色的團體顏色集中的至少一種顏色,所述至少一種顏色并不處于一個或多個其它顏色集,所述一個或多個其它顏色集對應(yīng)于鄰近于所述給定節(jié)點的一個或多個節(jié)點。
9.如權(quán)利要求8所述的方法,其中對于多個節(jié)點中的每個給定節(jié)點,分配來自相應(yīng)顏色集的顏色包括把所述給定節(jié)點指定為第一節(jié)點,所述第一節(jié)點是未上色的節(jié)點,并且對應(yīng)于第一相應(yīng)顏色集;如果第一相應(yīng)顏色集是非空的,那么把來自所述第一相應(yīng)顏色集的第一顏色分配給所述第一節(jié)點;并且如果存在一個或多個第二節(jié)點,其中所述一個或多個第二節(jié)點是未上色的并且鄰近于所述第一節(jié)點,并且對應(yīng)于一個或多個第二相應(yīng)顏色集,那么從一個或多個第二相應(yīng)顏色集中的每一個中除去所述第一顏色。
10.如權(quán)利要求9所述的方法,其中如果第一相應(yīng)顏色集是空的,那么選擇來自所述團體顏色集的多種顏色之一。
11.如權(quán)利要求10所述的方法,其中多種顏色中所選擇的顏色是最小加權(quán)沖突的顏色。
12.如權(quán)利要求9所述的方法,其中所述第一顏色是使存儲器使用最小化的顏色。
13.如權(quán)利要求12所述的方法,其中使存儲器使用最小化的顏色包括對應(yīng)于不能被塊大小除盡的數(shù)據(jù)大小的顏色。
14.如權(quán)利要求7所述的方法,還包括向多個節(jié)點中的每個節(jié)點分配優(yōu)先級。
15.如權(quán)利要求14所述的方法,其中向多個節(jié)點中的每個節(jié)點分配優(yōu)先級包括對于多個節(jié)點中的每個給定節(jié)點,確定連接到給定節(jié)點的一個或多個邊中每個邊的權(quán)重;向每個節(jié)點分配對應(yīng)于連接到所述節(jié)點的節(jié)點的一個或多個邊的最大權(quán)重;并且排列所述多個節(jié)點。
16.如權(quán)利要求15所述的方法,其中確定連接到所述節(jié)點的一個或多個邊中的每個給定邊的權(quán)重包括根據(jù)與由所述給定邊所表示的硬件資源沖突相關(guān)聯(lián)的性能懲罰來確定所述權(quán)重。
17.如權(quán)利要求14所述的方法,其中向多個節(jié)點中的每個節(jié)點分配顏色包括依照分配給每個節(jié)點的相應(yīng)優(yōu)先級的次序來向多個節(jié)點中的每個節(jié)點分配顏色。
18.如權(quán)利要求17所述的方法,其中所述硬件資源包括數(shù)據(jù)存儲體,并且所述硬件資源沖突包括多個在相同的執(zhí)行周期內(nèi)訪問所述數(shù)據(jù)存儲體的至少一個機器可執(zhí)行指令。
19.一種設(shè)備,包括電路,能夠創(chuàng)建具有多個節(jié)點和多個邊的沖突圖,每個節(jié)點表示由至少一個機器可執(zhí)行指令訪問的數(shù)據(jù)元,并且如果存在邊的話,那么每個邊連接多個節(jié)點中的節(jié)點對,并且用于表示潛在的硬件資源沖突;通過向多個節(jié)點中的每個節(jié)點分配顏色來為所述沖突圖上色用以產(chǎn)生有色沖突圖,每種顏色表示一硬件資源;和通過把每個數(shù)據(jù)元映射到存儲單元來創(chuàng)建數(shù)據(jù)布局,所述存儲單元映射到相應(yīng)的硬件資源。
20.如權(quán)利要求19所述的設(shè)備,其中所述電路還能夠分配來自相應(yīng)顏色集的顏色,所述相應(yīng)顏色集包括來自具有多種顏色的團體顏色集中的至少一種顏色,所述至少一種顏色并不處于一個或多個其它顏色集中,所述一個或多個其它顏色集對應(yīng)于在給定節(jié)點鄰近的一個或多個節(jié)點。
21.如權(quán)利要求20所述的設(shè)備,其中對于多個節(jié)點中的每個給定節(jié)點,所述電路能夠把所述給定節(jié)點指定為第一節(jié)點,所述第一節(jié)點是未上色的節(jié)點并且對應(yīng)于第一相應(yīng)顏色集;如果第一相應(yīng)顏色集是非空的,那么把來自所述第一相應(yīng)顏色集的第一顏色分配給所述第一節(jié)點;并且如果存在一個或多個第二節(jié)點,其中所述一個或多個第二節(jié)點是未上色的并且鄰近于所述第一節(jié)點,并且對應(yīng)于一個或多個第二相應(yīng)顏色集,那么從一個或多個第二相應(yīng)顏色集中的每一個中除去所述第一顏色。
22.如權(quán)利要求19所述的設(shè)備,其中所述電路還能夠向多個節(jié)點中的每個節(jié)點分配優(yōu)先級。
23.一種系統(tǒng),包括存儲器,具有機器可執(zhí)行指令序列,所述機器可執(zhí)行指令訪問一個或多個存儲單元中的多個數(shù)據(jù)元;具有多個數(shù)據(jù)存儲體的L2(2級)高速緩存器,一個或多個存儲單元中的每個存儲單元映射到所述多個數(shù)據(jù)存儲體之一;和電路,能夠創(chuàng)建具有多個節(jié)點和多個邊的沖突圖,每個節(jié)點表示由至少一個機器可執(zhí)行指令訪問的數(shù)據(jù)元,并且如果存在邊的話,那么每個邊連接多個節(jié)點中的節(jié)點對,并且表示潛在的數(shù)據(jù)存儲體沖突;通過向多個節(jié)點中的每個節(jié)點分配顏色來為所述沖突圖上色用以產(chǎn)生有色沖突圖,每種顏色表示一數(shù)據(jù)存儲體;并且通過把每個數(shù)據(jù)元映射到存儲單元來創(chuàng)建數(shù)據(jù)布局,所述存儲單元映射到相應(yīng)的數(shù)據(jù)存儲體。
24.如權(quán)利要求23所述的系統(tǒng),其中所述電路還能夠分配來自相應(yīng)顏色集的顏色,所述相應(yīng)顏色集包括來自具有多種顏色的團體顏色集中的至少一種顏色,所述至少一種顏色并不處于一個或多個其它顏色集中,所述一個或多個其它顏色集對應(yīng)于在給定節(jié)點鄰近的一個或多個節(jié)點。
25.如權(quán)利要求24所述的系統(tǒng),其中對于多個節(jié)點中的每個給定節(jié)點,所述電路還能夠把所述給定節(jié)點指定為第一節(jié)點,所述第一節(jié)點是未上色的節(jié)點,并且對應(yīng)于第一相應(yīng)顏色集;如果第一相應(yīng)顏色集是非空的,那么把來自所述第一相應(yīng)顏色集的第一顏色分配給所述第一節(jié)點;并且如果存在一個或多個第二節(jié)點,其中所述一個或多個第二節(jié)點是未上色的并且鄰近于所述第一節(jié)點,并且對應(yīng)于一個或多個第二相應(yīng)顏色集,那么從一個或多個第二相應(yīng)顏色集中的每一個中除去所述第一顏色。
26.如權(quán)利要求24所述的系統(tǒng),其中所述電路還能夠向多個節(jié)點中的每個分配優(yōu)先級。
27.一種其上存儲有表示指令序列的數(shù)據(jù)的計算機可讀介質(zhì),所述指令序列當(dāng)由機器執(zhí)行時能夠使所述機器執(zhí)行以下步驟創(chuàng)建具有多個節(jié)點和多個邊的沖突圖,每個節(jié)點表示由至少一個機器可執(zhí)行指令訪問的數(shù)據(jù)元,并且如果存在邊的話,那么每個邊連接多個節(jié)點中的節(jié)點對,并且表示潛在的硬件資源沖突;通過向多個節(jié)點中的每個節(jié)點分配顏色來為所述沖突圖上色用以產(chǎn)生有色沖突圖,每種顏色表示一硬件資源;和通過把每個數(shù)據(jù)元映射到存儲單元來創(chuàng)建數(shù)據(jù)布局,所述存儲單元映射到相應(yīng)的硬件資源。
28.如權(quán)利要求27所述的計算機可讀介質(zhì),其中所述指令序列當(dāng)由所述機器執(zhí)行時能夠使所述機器向多個節(jié)點中的每個節(jié)點分配顏色,對于多個節(jié)點中的每個給定節(jié)點,還能夠使所述機器分配來自相應(yīng)顏色集的顏色,所述相應(yīng)顏色集包括來自具有多種顏色的團體顏色集中的至少一種顏色,所述至少一種顏色并不處于一個或多個其它顏色集中,所述一個或多個其它顏色集對應(yīng)于在所述給定節(jié)點鄰近的一個或多個節(jié)點。
29.如權(quán)利要求27所述的計算機可讀介質(zhì),其中所述指令序列當(dāng)由所述機器執(zhí)行時能夠使所述機器分配來自相應(yīng)顏色集的顏色,還能夠使所述機器對于多個節(jié)點中的每個給定節(jié)點把所述給定節(jié)點指定為第一節(jié)點,所述第一節(jié)點是未上色的節(jié)點,并且對應(yīng)于第一相應(yīng)顏色集;如果第一相應(yīng)顏色集是非空的,那么把來自所述第一相應(yīng)顏色集的第一顏色分配給所述第一節(jié)點;并且如果存在一個或多個第二節(jié)點,其中所述一個或多個第二節(jié)點是未上色的并且鄰近于所述第一節(jié)點,并且對應(yīng)于一個或多個第二相應(yīng)顏色集,那么從一個或多個第二相應(yīng)顏色集中的每一個中除去所述第一顏色。
30.如權(quán)利要求27所述的計算機可讀介質(zhì),其中所述電路還能夠向多個節(jié)點中的每個節(jié)點分配優(yōu)先級。
全文摘要
在一個實施例中,提供了一種方法。此實施例的方法提供了調(diào)度機器可執(zhí)行指令序列,并且根據(jù)所調(diào)度的機器可執(zhí)行指令序列來創(chuàng)建數(shù)據(jù)布局。
文檔編號G06F9/00GK1902586SQ200480039349
公開日2007年1月24日 申請日期2004年12月21日 優(yōu)先權(quán)日2003年12月29日
發(fā)明者T·什佩斯曼, A·-R·阿德爾-塔巴塔拜 申請人:英特爾公司