專利名稱:預(yù)測(cè)處理器中的競(jìng)爭(zhēng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)系統(tǒng),并特別地,涉及如執(zhí)行多個(gè)線程的系統(tǒng)。
背景技術(shù):
包括多處理器(MP)系統(tǒng)和單處理器系統(tǒng)的計(jì)算機(jī)系統(tǒng)可以包括多個(gè)“線程”,每一個(gè)線程均獨(dú)立于其他的線程執(zhí)行程序指令。使用多個(gè)處理器或者線程允許更有效率地并且以更高的速度來(lái)處理各種任務(wù)或函數(shù),甚至多個(gè)應(yīng)用程序。應(yīng)用多線程或處理器意味著兩個(gè)或更多個(gè)處理器或者線程可以共享儲(chǔ)存在系統(tǒng)內(nèi)的同一數(shù)據(jù)并且同時(shí)訪問(wèn)它們。但是,在共享數(shù)據(jù)時(shí)必須注意保持存儲(chǔ)器排序(memory ordering)。
出于數(shù)據(jù)一致性的目的,如果多個(gè)線程或處理器期望讀、修改和寫(xiě)單個(gè)存儲(chǔ)器位置,則不應(yīng)該允許多個(gè)主體(agent)同時(shí)對(duì)數(shù)據(jù)進(jìn)行操作。使多個(gè)處理器的使用進(jìn)一步復(fù)雜的是數(shù)據(jù)經(jīng)常儲(chǔ)存在與處理器相關(guān)聯(lián)、用于加速該處理器對(duì)數(shù)據(jù)的訪問(wèn)的緩存(cache)中。因?yàn)檫@種緩存通常被局限于特定處理器,所以大多數(shù)近來(lái)的對(duì)數(shù)據(jù)的更新可以被置于系統(tǒng)中緩存的任何一個(gè)中。任何訪問(wèn)該數(shù)據(jù)的主體應(yīng)該從最近更新過(guò)的緩存接收到有效或更新過(guò)的數(shù)據(jù)值,并且,從該緩存寫(xiě)回存儲(chǔ)器的數(shù)據(jù)或轉(zhuǎn)移到其他緩存的數(shù)據(jù)必須是當(dāng)前的數(shù)據(jù),以便保持緩存一致性(cache coherency)。
多線程(MT)軟件使用不同的機(jī)制來(lái)在不同的線程之間交互作用和協(xié)調(diào)。一個(gè)常見(jiàn)的MT同步形式是信號(hào)量(semaphore)旋轉(zhuǎn)鎖(spin-lock)。信號(hào)量旋轉(zhuǎn)鎖機(jī)制是在訪問(wèn)共享的存儲(chǔ)器變量或結(jié)構(gòu)(即共享元素)時(shí)用來(lái)保證多個(gè)線程間的相互排斥(即防止同時(shí)訪問(wèn))的鎖操作。為了提供共享元素的唯一且一致的視圖,它由鎖變量保護(hù)。每一個(gè)需要訪問(wèn)共享元素的線程必須通過(guò)原子化信號(hào)量操作獲得保護(hù)鎖。為了獲得該鎖,線程要讀鎖變量的值,將該值與預(yù)先確定的“自由”值比較,然后寫(xiě)“鎖”值。這種讀-修改-寫(xiě)操作必須要像是發(fā)生在一個(gè)步驟中,以使多個(gè)線程不同時(shí)地讀“自由”值且寫(xiě)所述“鎖”值,從而允許兩個(gè)線程都相信它們已經(jīng)獲得了該鎖。
在給定線程獲得了關(guān)于鎖變量的鎖以后,其他期望訪問(wèn)該鎖變量的線程通常必須一直等到最初的線程完成其鎖操作為止。通常,尋求訪問(wèn)的其他線程將開(kāi)始對(duì)鎖變量地址的探查(snoop),以便對(duì)狀態(tài)(即“自由”還是“鎖定”)進(jìn)行檢查。發(fā)現(xiàn)了“鎖定”值的線程將經(jīng)常等一小段時(shí)間并再次探查,從而在小的探查-等待循環(huán)中旋轉(zhuǎn)。當(dāng)一個(gè)或更多個(gè)線程期望訪問(wèn)已經(jīng)由另一個(gè)線程擁有的鎖變量或者期望訪問(wèn)正被另一個(gè)線程訪問(wèn)的鎖變量時(shí),競(jìng)爭(zhēng)出現(xiàn)了。在運(yùn)行時(shí)期間,當(dāng)一次只有唯一一個(gè)主體尋求執(zhí)行關(guān)于該鎖變量的鎖操作時(shí),鎖操作是無(wú)競(jìng)爭(zhēng)的。當(dāng)線程完成修改共享變量或結(jié)構(gòu)時(shí),它將把“自由”值寫(xiě)回鎖變量。
因?yàn)橥皆贛T應(yīng)用程序中經(jīng)常發(fā)生,所以處理器應(yīng)該高效率地實(shí)現(xiàn)鎖操作,以使MT應(yīng)用程序可以如期望的那樣執(zhí)行。如果鎖操作在運(yùn)行時(shí)無(wú)競(jìng)爭(zhēng),則它能夠被大大地優(yōu)化。這種優(yōu)化可以包括相關(guān)聯(lián)緩存線(cache line)的推測(cè)性預(yù)取、鎖省略(lock elision)等。但是,如果鎖操作有競(jìng)爭(zhēng),則這些優(yōu)化技術(shù)導(dǎo)致高昂的代價(jià)。
因此,存在預(yù)測(cè)有競(jìng)爭(zhēng)的鎖操作的需求,從而使得處理器能夠高效率地實(shí)現(xiàn)鎖操作。
圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施方案的處理器的一部分的框圖。
圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施方案的方法的流程圖。
圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施方案的系統(tǒng)的框圖。
圖4是根據(jù)本發(fā)明另一個(gè)實(shí)施方案的多處理器系統(tǒng)的框圖。
發(fā)明內(nèi)容
在一個(gè)實(shí)施方案中,本發(fā)明包括預(yù)測(cè)器,用于預(yù)測(cè)要在程序中執(zhí)行的操作的競(jìng)爭(zhēng)。所述操作可以基于所述預(yù)測(cè)的結(jié)果來(lái)處理,所述預(yù)測(cè)可以基于多個(gè)獨(dú)立的預(yù)測(cè)。在一個(gè)實(shí)施方案中,如果沒(méi)有競(jìng)爭(zhēng)被預(yù)測(cè)到,則可以優(yōu)化所述操作。其他的實(shí)施方案被描述并被要求保護(hù)。
根據(jù)本發(fā)明的一個(gè)方面,公開(kāi)了一種裝置,包括用于預(yù)測(cè)要被執(zhí)行的操作的競(jìng)爭(zhēng)的預(yù)測(cè)器。
根據(jù)本發(fā)明的另一方面,公開(kāi)了一種系統(tǒng),包括第一預(yù)測(cè)器,用于預(yù)測(cè)鎖操作是否有競(jìng)爭(zhēng);第二預(yù)測(cè)器,用于指示程序中競(jìng)爭(zhēng)的水平;以及耦合到所述第一預(yù)測(cè)器并耦合到所述第二預(yù)測(cè)器的動(dòng)態(tài)隨機(jī)訪問(wèn)存儲(chǔ)器(DRAM),以儲(chǔ)存所述程序。
根據(jù)本發(fā)明的又一方面,公開(kāi)了一種方法,包括預(yù)測(cè)鎖操作在執(zhí)行期間是否有競(jìng)爭(zhēng);以及如果預(yù)測(cè)所述鎖操作沒(méi)有競(jìng)爭(zhēng),則優(yōu)化所述鎖操作。
根據(jù)本發(fā)明的再一方面,公開(kāi)了一種制品,包括包含指令的機(jī)器可讀儲(chǔ)存介質(zhì),所述指令如果被機(jī)器執(zhí)行,則使得所述機(jī)器能夠執(zhí)行一種方法,所述方法包括預(yù)測(cè)要被執(zhí)行的操作的競(jìng)爭(zhēng);以及基于所述預(yù)測(cè)來(lái)處理所述操作。
根據(jù)本發(fā)明的又再一方面,公開(kāi)了一種裝置,包括用于預(yù)測(cè)操作是否有競(jìng)爭(zhēng)的第一預(yù)測(cè)器,所述第一預(yù)測(cè)器具有帶有多個(gè)條目的表;指示全局競(jìng)爭(zhēng)水平的第二預(yù)測(cè)器,所述第二預(yù)測(cè)器包括全局計(jì)數(shù)器;以及耦合到所述第一預(yù)測(cè)器和所述第二預(yù)測(cè)器的預(yù)測(cè)器控制器,所述預(yù)測(cè)器控制器用于基于來(lái)自所述第一預(yù)測(cè)器和所述第二預(yù)測(cè)器的輸入產(chǎn)生最終預(yù)測(cè)。
具體實(shí)施方案參考圖1,示出了根據(jù)本發(fā)明的一個(gè)實(shí)施方案的處理器100的一部分的框圖。如圖1中所示,處理器100包括鎖預(yù)測(cè)器110和存儲(chǔ)器排序緩沖器(MOB)150。雖然在圖1中只示出了這些元件,但是要理解,處理器100可以包括額外的部件,例如數(shù)據(jù)緩存、分支預(yù)測(cè)單元、流水線級(jí)、各種寄存器,等等。
鎖預(yù)測(cè)器110可以用來(lái)預(yù)測(cè)程序內(nèi)的鎖操作在執(zhí)行期間是否可能是有競(jìng)爭(zhēng)的。在圖1的實(shí)施方案中,鎖預(yù)測(cè)器110包括第一預(yù)測(cè)器(即表或T預(yù)測(cè)器)120和第二預(yù)測(cè)器(即全局或G預(yù)測(cè)器)130。T預(yù)測(cè)器120和G預(yù)測(cè)器130可以獨(dú)立地預(yù)測(cè)鎖操作是否可能是有競(jìng)爭(zhēng)的。作為結(jié)果的來(lái)自兩個(gè)預(yù)測(cè)器的預(yù)測(cè)都被提供給預(yù)測(cè)器邏輯140,預(yù)測(cè)器邏輯140可以是控制器等,用于以期望的方式對(duì)結(jié)果進(jìn)行組合。雖然示出了兩個(gè)單獨(dú)的預(yù)測(cè)器,但是本發(fā)明的范圍不限于此,并且,在一些實(shí)施方案中可以存在額外的預(yù)測(cè)器(或者甚至是單獨(dú)一個(gè))。
由預(yù)測(cè)器邏輯140產(chǎn)生的最終預(yù)測(cè)通過(guò)線145提供給MOB 150。更具體地說(shuō),最終預(yù)測(cè)被提供給MOB控制邏輯180,MOB控制邏輯180可以是控制器等,它用來(lái)控制MOB150內(nèi)的緩沖器,所述緩沖器包括加載緩沖器160和儲(chǔ)存緩沖器170。加載緩沖器160可以用來(lái)在加載微操作(mop)執(zhí)行之前儲(chǔ)存它們,并跟蹤以前的加載或者其他的存儲(chǔ)器操作,所述其他的存儲(chǔ)器操作必須在給定的存儲(chǔ)器操作自身可以被完成之前完成。類似地,儲(chǔ)存緩沖器170可以用來(lái)儲(chǔ)存例如儲(chǔ)存操作的存儲(chǔ)器操作,并用來(lái)跟蹤以前的存儲(chǔ)器操作(一般是加載),在可以提交(commit)給定的存儲(chǔ)器操作自身之前,必須完成所述的以前的存儲(chǔ)器操作。
當(dāng)計(jì)算加載鎖操作的地址時(shí),對(duì)應(yīng)于鎖變量的地址可以通過(guò)線162從執(zhí)行單元105提供給T預(yù)測(cè)器120,以便開(kāi)始預(yù)測(cè)。此外,操作可以被輸入加載緩沖器160的條目。提供給T預(yù)測(cè)器120的這個(gè)地址可以用來(lái)訪問(wèn)T預(yù)測(cè)器120內(nèi)的查找表125,以便輸出與鎖變量的地址相關(guān)聯(lián)的計(jì)數(shù)。該計(jì)數(shù)可以指示程序執(zhí)行期間在那個(gè)鎖變量上已經(jīng)發(fā)生過(guò)的競(jìng)爭(zhēng)次數(shù)。當(dāng)然,有關(guān)加載鎖操作的其他信息(例如其程序計(jì)數(shù)器)也可以被提供給T預(yù)測(cè)器以幫助表查找。
如圖1中所示,在一些實(shí)施方案中,額外的線163可以耦合在加載緩沖器160和T預(yù)測(cè)器120之間,以便將對(duì)應(yīng)于表變量的地址提供給T預(yù)測(cè)器120。該線可以用于從加載緩沖器160獲得關(guān)于重分派的預(yù)測(cè)。
如圖1中進(jìn)一步所示,來(lái)自T預(yù)測(cè)器120的計(jì)數(shù)可以從T預(yù)測(cè)器120提供給預(yù)測(cè)器邏輯140。同時(shí),當(dāng)前存在的對(duì)線程內(nèi)全局競(jìng)爭(zhēng)的預(yù)測(cè)從G預(yù)測(cè)器輸出,并提供給預(yù)測(cè)器邏輯140。預(yù)測(cè)器邏輯140可以組合這些輸入,以獲得最終預(yù)測(cè),然后,所述最終預(yù)測(cè)被提供給MOB控制邏輯180。
依次,MOB控制邏輯180可以基于預(yù)測(cè)來(lái)處理鎖操作。例如,MOB控制邏輯180可以基于最終預(yù)測(cè)來(lái)確定是否優(yōu)化鎖操作。雖然MOB控制邏輯180可以以各種方式來(lái)處理鎖操作的執(zhí)行,但是,如果預(yù)測(cè)指示不可能有競(jìng)爭(zhēng),則MOB控制邏輯180可以實(shí)現(xiàn)對(duì)鎖操作的優(yōu)化。相反,如果預(yù)測(cè)指示有可能有競(jìng)爭(zhēng),則MOB控制邏輯180可以使得鎖操作被保守地執(zhí)行。
在一個(gè)實(shí)施方案中,T預(yù)測(cè)器120可以包括在程序執(zhí)行期間曾遭遇競(jìng)爭(zhēng)的鎖變量的地址表125。雖然在圖1的實(shí)施方案中示出了單個(gè)表,但是可以存在多個(gè)表,每一個(gè)均對(duì)應(yīng)于不同的線程?;蛘?,單個(gè)表可以存在,并且在每一個(gè)條目中可以包括線程標(biāo)識(shí)符,以便將條目與對(duì)應(yīng)的線程相關(guān)聯(lián)。
表125的每一個(gè)條目均可以具有飽和計(jì)數(shù)器(saturating counter),例如兩位的飽和計(jì)數(shù)器。當(dāng)表變量的地址在程序中第一次有競(jìng)爭(zhēng)時(shí),它被添加到表125,并且該條目的計(jì)數(shù)器被初始化為零。如果對(duì)應(yīng)于表標(biāo)量的地址再次有競(jìng)爭(zhēng),則該條目的計(jì)數(shù)可以被遞增。如果在程序執(zhí)行期間計(jì)數(shù)飽和,則T預(yù)測(cè)器120可以預(yù)測(cè)每一個(gè)后續(xù)的訪問(wèn)該表變量的鎖操作將是有競(jìng)爭(zhēng)的。相反,如果地址未儲(chǔ)存在該表中,或者與該表中的條目相關(guān)聯(lián)的計(jì)數(shù)還沒(méi)有飽和,則T預(yù)測(cè)器120可以預(yù)測(cè)鎖操作將是無(wú)競(jìng)爭(zhēng)的。
在一些實(shí)施方案中,由于表?xiàng)l目競(jìng)爭(zhēng)所致,表125內(nèi)的條目可能被覆寫(xiě)。此外,在一些實(shí)施方案中,整個(gè)表可以被周期性地清除。在一個(gè)實(shí)施方案中,可以將128個(gè)條目的表用于該表。在這樣的實(shí)施方案中,表125可以直接被映射,具有被用于每一個(gè)條目的4位的標(biāo)簽。在一個(gè)實(shí)現(xiàn)中,表變量地址的低六位可以被屏蔽掉,接下來(lái)較高的七位地址可以用作進(jìn)入表的索引,并且接下來(lái)的4個(gè)最高位可以被儲(chǔ)存為標(biāo)簽。地址的剩余位可以被丟棄。
在程序的執(zhí)行期間,一些鎖變量很少有競(jìng)爭(zhēng),而其他的則經(jīng)常有競(jìng)爭(zhēng)。在各種實(shí)施方案中,T預(yù)測(cè)器120中的計(jì)數(shù)器的飽和本質(zhì)可以捕獲這種行為。即,經(jīng)常競(jìng)爭(zhēng)的鎖變量可以很快地使T預(yù)測(cè)器120內(nèi)的計(jì)數(shù)器飽和,而很少競(jìng)爭(zhēng)的鎖變量將持續(xù)地被T預(yù)測(cè)器120預(yù)測(cè)為無(wú)競(jìng)爭(zhēng)。在一個(gè)實(shí)施方案中,可以使用飽和上/下計(jì)數(shù)器。利用這種計(jì)數(shù)器,當(dāng)鎖變量有競(jìng)爭(zhēng)時(shí),可以遞增計(jì)數(shù)器條目,而當(dāng)其不競(jìng)爭(zhēng)時(shí),計(jì)數(shù)器條目可以被遞減。然后,T預(yù)測(cè)器120內(nèi)的邏輯可以將計(jì)數(shù)值與閾值進(jìn)行比較,以確定給定的鎖操作是否有可能有競(jìng)爭(zhēng)。
在一個(gè)實(shí)施方案中,G預(yù)測(cè)器130可以包括指示程序內(nèi)的競(jìng)爭(zhēng)量的全局(G)計(jì)數(shù)器132。雖然在圖1中被示出為單個(gè)計(jì)數(shù)器,但是可以存在多個(gè)計(jì)數(shù)器,每一個(gè)均與不同的線程相關(guān)聯(lián)。
G預(yù)測(cè)器130可以用來(lái)指示程序內(nèi)的競(jìng)爭(zhēng)的全局視圖。雖然在這里針對(duì)程序描述,但是在一些實(shí)施方案中,G預(yù)測(cè)器130可以以線程為基礎(chǔ)對(duì)競(jìng)爭(zhēng)進(jìn)行分析。無(wú)論何時(shí)鎖操作有競(jìng)爭(zhēng),G計(jì)數(shù)器132就可以被遞增。G預(yù)測(cè)器130還可以包括指示程序內(nèi)的競(jìng)爭(zhēng)水平的控制邏輯。在一個(gè)實(shí)施方案中,可以將計(jì)數(shù)器值與第一閾值和第二閾值進(jìn)行比較。如果當(dāng)前計(jì)數(shù)低于第一閾值,則G預(yù)測(cè)器130預(yù)測(cè)程序內(nèi)的競(jìng)爭(zhēng)為低。相反,如果計(jì)數(shù)器值超過(guò)了第一閾值但是低于第二閾值,則G預(yù)測(cè)器130可以預(yù)測(cè)程序內(nèi)的競(jìng)爭(zhēng)處于中等水平。如果當(dāng)前計(jì)數(shù)在第二閾值之上,則G預(yù)測(cè)器130可以預(yù)測(cè)程序內(nèi)的競(jìng)爭(zhēng)為高。在一個(gè)實(shí)施方案中,第一閾值可以被設(shè)置為5并且第二閾值可以被設(shè)置為25,盡管本發(fā)明的范圍不限于此。而且,不是向預(yù)測(cè)器邏輯140發(fā)送預(yù)測(cè),G預(yù)測(cè)器130可以輸出G計(jì)數(shù)器132的當(dāng)前計(jì)數(shù)值,并且預(yù)測(cè)器邏輯140可以基于該值來(lái)預(yù)測(cè)競(jìng)爭(zhēng)。
在一些實(shí)施方案中,計(jì)數(shù)器132可以被間隔性地復(fù)位。此外,計(jì)數(shù)器132可以是飽和計(jì)數(shù)器(即,被防止溢出)。以這種方式,G預(yù)測(cè)器130可以捕獲程序內(nèi)的競(jìng)爭(zhēng)突發(fā)。即,在程序的某個(gè)部分期間(例如給定數(shù)量的指令),競(jìng)爭(zhēng)可能為高,而在程序的不同部分,競(jìng)爭(zhēng)可以為低(或中等)。以這種方式,G預(yù)測(cè)器130可以捕獲競(jìng)爭(zhēng)的突發(fā)。此外,G預(yù)測(cè)器130可以起到對(duì)抗緣于不良書(shū)寫(xiě)的代碼等的病態(tài)競(jìng)爭(zhēng)情形的看門狗(watchdog)機(jī)制的作用。例如,當(dāng)T預(yù)測(cè)器120中的表125被太多的鎖和跟蹤湮沒(méi)時(shí),G預(yù)測(cè)器130可以基于其全局視圖來(lái)預(yù)測(cè)競(jìng)爭(zhēng)。
如上所述,計(jì)數(shù)器132可以以各種間隔復(fù)位。例如,在一個(gè)實(shí)施方案中,它可以大約每隔30,000個(gè)處理器周期被復(fù)位。在這樣的實(shí)施方案中,可以每個(gè)處理器周期遞增第二個(gè)計(jì)數(shù)器(即復(fù)位(R)計(jì)數(shù)器)134,并且,當(dāng)?shù)诙?jì)數(shù)器134溢出時(shí),計(jì)數(shù)器132可以被復(fù)位。在一個(gè)實(shí)施方案中,R計(jì)數(shù)器134可以是15位的計(jì)數(shù)器,且也包括在G預(yù)測(cè)器130內(nèi)。在其他的實(shí)施方案中,R計(jì)數(shù)器134可以被置于G預(yù)測(cè)器130之外。此外,在其他實(shí)施方案中,G計(jì)數(shù)器132可以是飽和增/減計(jì)數(shù)器,所述計(jì)數(shù)器在發(fā)生競(jìng)爭(zhēng)時(shí)被遞增,并且在不發(fā)生競(jìng)爭(zhēng)時(shí)被遞減。
因此,獨(dú)立的預(yù)測(cè)可以被從T預(yù)測(cè)器120和G預(yù)測(cè)器130提供給預(yù)測(cè)器邏輯140?,F(xiàn)在參考表1,所示的是可以在預(yù)測(cè)器邏輯140中實(shí)施的狀態(tài)圖。如表1中所示,預(yù)測(cè)器邏輯140可以基于獨(dú)立預(yù)測(cè)發(fā)展出最終預(yù)測(cè)。
表1
如表1中所示,G預(yù)測(cè)器130可以起到看門狗的作用。當(dāng)競(jìng)爭(zhēng)的全局預(yù)測(cè)是高時(shí),無(wú)論單個(gè)鎖變量的競(jìng)爭(zhēng)歷史如何,總可以預(yù)測(cè)競(jìng)爭(zhēng)。類似地,如果G預(yù)測(cè)器130指示全局競(jìng)爭(zhēng)為低,則有可能單個(gè)鎖變量將繼續(xù)是無(wú)競(jìng)爭(zhēng)的,而不管其歷史。
相反,如果G預(yù)測(cè)器130預(yù)測(cè)競(jìng)爭(zhēng)是中等的,則最終預(yù)測(cè)可以基于特定鎖變量的競(jìng)爭(zhēng)歷史(即T預(yù)測(cè)器120的輸出)。雖然在表1中以特定實(shí)現(xiàn)示出,但是要理解,在其他的實(shí)施方案中,來(lái)自兩個(gè)獨(dú)立的預(yù)測(cè)器的預(yù)測(cè)可以被以其他的方式組合。
現(xiàn)在參考圖2,所示是根據(jù)本發(fā)明的一個(gè)實(shí)施方案的方法的流程圖。如圖2中所示,方法200是競(jìng)爭(zhēng)預(yù)測(cè)器的一個(gè)實(shí)現(xiàn),并且可以用來(lái)確定對(duì)于給定的鎖操作,競(jìng)爭(zhēng)是否是可能的。如果預(yù)測(cè)沒(méi)有競(jìng)爭(zhēng),則鎖操作可以被優(yōu)化。方法200可以通過(guò)接收從從保留站(reservation station)分派的加載操作開(kāi)始(框210)。這個(gè)操作可以被寫(xiě)入MOB 150(框215)。同時(shí),可以確定該加載是否是加載鎖操作(菱形220)。如果它不是,則可以正常執(zhí)行該操作(框230)。
相反,如果確定該加載是加載鎖操作,則控制從菱形220直接傳遞到菱形250,在菱形250中,地址可以被分派到基于地址來(lái)預(yù)測(cè)競(jìng)爭(zhēng)的預(yù)測(cè)器(菱形250)。例如,回頭參考圖1的預(yù)測(cè)器,鎖變量的地址可以從線162提供給T預(yù)測(cè)器120。依次,T預(yù)測(cè)器120可以使用該地址(如上所述)來(lái)訪問(wèn)表125,以便確定那里是否包含鎖變量。如果是,則與鎖變量相關(guān)聯(lián)的計(jì)數(shù)被施加到T預(yù)測(cè)器120中的邏輯,T預(yù)測(cè)器120中的邏輯將預(yù)測(cè)輸出到預(yù)測(cè)器邏輯140,預(yù)測(cè)器邏輯140也從G預(yù)測(cè)器130接收當(dāng)前的預(yù)測(cè)。依次,預(yù)測(cè)器邏輯140可以基于這兩個(gè)輸入來(lái)產(chǎn)生最終的競(jìng)爭(zhēng)預(yù)測(cè)。該預(yù)測(cè)被提供給MOB控制邏輯180。
基于該預(yù)測(cè),可以開(kāi)始如下面進(jìn)一步描述的協(xié)議?;诹庑?50處的競(jìng)爭(zhēng)預(yù)測(cè),如果不滿足某些條件,則協(xié)議可以阻塞(block)實(shí)際操作,而同時(shí),如果預(yù)測(cè)是沒(méi)有競(jìng)爭(zhēng),則仍然允許被優(yōu)化的部分(例如預(yù)取或省略)繼續(xù)下去。
如果在菱形250處預(yù)測(cè)了競(jìng)爭(zhēng),則可以執(zhí)行保守的鎖定協(xié)議(框270)。例如,MOB150可以等待加載緩沖器160中是最老的微操作(uop)的加載鎖操作,或者可以等待儲(chǔ)存緩沖器170排出(drain),或者是類似的過(guò)程。
反之,如果預(yù)測(cè)沒(méi)有競(jìng)爭(zhēng),則控制從菱形250傳遞倒框260。在那里,鎖操作可以被優(yōu)化(框260)。例如,加載鎖操作可以被推測(cè)性地分派,以便預(yù)取對(duì)應(yīng)于加載變量的緩存線。也可以實(shí)現(xiàn)其他類似的這種優(yōu)化。例如,在加載鎖微操作和依賴性(dependent)微操作變成機(jī)器中最老的之前,或者儲(chǔ)存緩沖器被排出之前,加載鎖微操作和依賴性微操作可以被推測(cè)性地執(zhí)行。
此外,在一些實(shí)施方案中,在從MOB 150重分派之后,預(yù)測(cè)器可以被訪問(wèn),控制從菱形220傳遞倒菱形250,以便為了預(yù)測(cè)重新檢查?;蛘?,可以儲(chǔ)存和重新使用先前的預(yù)測(cè)。
在操作期間,MOB 150監(jiān)視進(jìn)入的探查,以便確定任何其他的線程或處理器是否想要訪問(wèn)同一鎖變量。MOB 150繼續(xù)這種監(jiān)視,直到加載鎖微操作已經(jīng)從機(jī)器中退出為止。在MOB 150正監(jiān)視鎖變量時(shí)發(fā)生的探查將指示不當(dāng)推測(cè),并且將要求重新執(zhí)行加載鎖及其依賴性(dependent)操作。
在一個(gè)實(shí)施方案中,通過(guò)使額外的指示符與加載緩沖器160內(nèi)的條目相關(guān)聯(lián)來(lái)指示競(jìng)爭(zhēng),可以檢測(cè)到加載操作的實(shí)際競(jìng)爭(zhēng)。但是要理解,在其他實(shí)施例中可以用其他的方式檢測(cè)競(jìng)爭(zhēng)。
當(dāng)為了加載操作分配了加載緩沖器160中的條目時(shí),競(jìng)爭(zhēng)指示符(它可以是單個(gè)的競(jìng)爭(zhēng)位)可以被復(fù)位。如果探查操作在條目已經(jīng)被分配之后并且在指令已經(jīng)退出之前進(jìn)入對(duì)應(yīng)于加載操作的加載緩沖器,則競(jìng)爭(zhēng)位可被置位。當(dāng)對(duì)應(yīng)于加載操作的加載緩沖器160的條目以后被解除分配時(shí)(在鎖指令已退出之后),可以查看競(jìng)爭(zhēng)位以檢測(cè)競(jìng)爭(zhēng)。更具體地說(shuō),條目及其相關(guān)聯(lián)的競(jìng)爭(zhēng)位可以被傳遞倒T預(yù)測(cè)器120和G預(yù)測(cè)器130,以便對(duì)它們進(jìn)行更新。即,如果競(jìng)爭(zhēng)位被置位,則T預(yù)測(cè)器120和G預(yù)測(cè)器130內(nèi)的計(jì)數(shù)器可以被遞增。在圖1的實(shí)施方案中,對(duì)于這種更新,可以存在單獨(dú)的更新通道165。
現(xiàn)在參考圖3,所示是根據(jù)本發(fā)明的一個(gè)實(shí)施方案的代表性計(jì)算機(jī)系統(tǒng)300的框圖。如圖3中所示,計(jì)算機(jī)系統(tǒng)300包括第一處理器310a和第二處理器310b。在一個(gè)實(shí)施方案中,處理器310a可以經(jīng)第二層(L2)緩存305,通過(guò)存儲(chǔ)器系統(tǒng)互連320耦合到緩存一致(coherent)共享存儲(chǔ)器子系統(tǒng)(“一致性存儲(chǔ)器(coherent memory)”)330。在一個(gè)實(shí)施方案中,一致性存儲(chǔ)器330可以包括動(dòng)態(tài)隨機(jī)訪問(wèn)存儲(chǔ)器(DRAM),并且還可以包括用于在處理器310a和處理器310b之間共享一致性存儲(chǔ)器330的一致性存儲(chǔ)器控制器邏輯。
要理解,在其他的實(shí)施方案中,額外的處理器可以耦合到一致性存儲(chǔ)器330。此外,在某些實(shí)施方案中,一致性存儲(chǔ)器330可以分部分實(shí)現(xiàn),并分散開(kāi),以使系統(tǒng)300內(nèi)處理器的子集與一致性存儲(chǔ)器330的某些部分通信,而其他的處理器與一致性存儲(chǔ)器330的其他部分通信。
如圖3中所示,處理器310a可以包括鎖預(yù)測(cè)器312a、存儲(chǔ)器排序緩沖器(MOB)314a,以及執(zhí)行單元316a。如上所述,鎖預(yù)測(cè)器312a可以耦合到MOB 314a,以提供對(duì)鎖競(jìng)爭(zhēng)的預(yù)測(cè)?;谶@些預(yù)測(cè),MOB 314a可以優(yōu)化鎖操作。然后,被優(yōu)化的操作可以被傳遞到執(zhí)行單元316a,執(zhí)行單元316a可以具有執(zhí)行所述操作的流水線級(jí)。然后,有關(guān)操作的信息可以被傳遞回MOB 314a,以指示操作完成且準(zhǔn)備好了解除分配。此時(shí),MOB 314a可以用操作的競(jìng)爭(zhēng)狀態(tài)(即有競(jìng)爭(zhēng)或無(wú)競(jìng)爭(zhēng))來(lái)對(duì)鎖預(yù)測(cè)器312a進(jìn)行更新。當(dāng)然,在處理器310a中可以存在額外的元件,例如第一層(L1)緩存。
如圖3中進(jìn)一步所示,處理器310b中可以存在類似的處理器元件,處理器310b可以是多處理器系統(tǒng)的第二個(gè)核心處理器。雖然在圖3的實(shí)施方案中示出為每一個(gè)均包括預(yù)測(cè)器,但是在一些實(shí)施方案中,可能只有單個(gè)核心包括這樣的預(yù)測(cè)器,所述預(yù)測(cè)器可以由多個(gè)核心共享。更進(jìn)一步,在一些實(shí)施方案中,多線程應(yīng)用程序可針對(duì)每一個(gè)線程使用單獨(dú)的預(yù)測(cè)器。在其他的實(shí)施方案中,鎖預(yù)測(cè)器可以存在于單處理器系統(tǒng)中。
一致性存儲(chǔ)器330也可以(經(jīng)過(guò)中心鏈路(hub link))耦合到輸入/輸出(I/O)中心(hub)335,輸入/輸出中心335耦合到I/O擴(kuò)展總線355和外部總線350。在不同的實(shí)施方案中,I/O擴(kuò)展總線355可以耦合到各種I/O設(shè)備,例如鍵盤或鼠標(biāo),以及其他設(shè)備。外部總線350可以耦合到各種部件,例如外部設(shè)備370,外部設(shè)備370可以是存儲(chǔ)器設(shè)備,例如快閃存儲(chǔ)器、插卡(add-in card),等等。盡管描述參考了系統(tǒng)300的具體部件,但是所示實(shí)施方案的很多修改是可能的。
在一些實(shí)施方案中,多處理器系統(tǒng)可以是點(diǎn)到點(diǎn)總線系統(tǒng),例如在公共系統(tǒng)接口(CSI)系統(tǒng)中?,F(xiàn)在參考圖4,所示是根據(jù)本發(fā)明的另一個(gè)實(shí)施方案的多處理器系統(tǒng)的框圖。如圖4中所示,多處理器系統(tǒng)是點(diǎn)到點(diǎn)總線系統(tǒng),并且包括經(jīng)過(guò)點(diǎn)到點(diǎn)互連450耦合的第一處理器470和第二處理器480。第一處理器470包括處理器核心474、存儲(chǔ)器控制器中心(MCH)472,以及點(diǎn)到點(diǎn)(P-P)接口476和478。類似地,第二處理器480包括相同的部件,即處理器核心484、MCH 483,以及P-P接口486和488。根據(jù)本發(fā)明的實(shí)施方案,每一個(gè)處理器470和480均可以包括預(yù)測(cè)電路。
如圖4中所示,MCH 472和482將處理器耦合到相應(yīng)的存儲(chǔ)器,即存儲(chǔ)器432和存儲(chǔ)器434,所述存儲(chǔ)器可以是在局部上連接到相應(yīng)處理器的主存儲(chǔ)器的一部分。
第一處理器470和第二處理器480可以通過(guò)P-P接口(interface)452和454分別耦合到芯片組490。如圖4中所示,芯片組900包括P-P接口494和498。此外,芯片組490包括將芯片組490耦合到高性能圖形引擎438的接口492。在一個(gè)實(shí)施方案中,先進(jìn)圖形端口(AGP)總線439可以用來(lái)將圖形引擎438耦合到芯片組490。AGP總線439可以符合加州圣克拉拉的英特爾公司1998年4月公布的圖形加速端口接口規(guī)范2.0修訂本。或者,點(diǎn)到點(diǎn)互連439可以耦合這些部件。
依次,芯片組490可以通過(guò)接口496耦合到第一總線416。在一個(gè)實(shí)施方案中,第一總線416可以是如1995年6月的PCI局部總線規(guī)范,生產(chǎn)版,修訂本2.1定義的外設(shè)部件互連(PCI)總線,或者是例如PCI Express總線或其他第三代I/O互連總線的總線,盡管本發(fā)明的范圍不限于此。
如圖4中所示,各種輸入/輸出(I/O)設(shè)備414以及總線橋418可以耦合到第一總線416,總線橋418將第一總線416耦合到第二總線420。在一個(gè)實(shí)施方案中,第二總線420可以是低引腳數(shù)(low pin count,LPC)總線。各種設(shè)備可以耦合到第二總線420,例如包括鍵盤/鼠標(biāo)422、通訊設(shè)備426和數(shù)據(jù)儲(chǔ)存單元428,在一個(gè)實(shí)施方案中,數(shù)據(jù)儲(chǔ)存單元428可以包括代碼430。此外,音頻I/O 424可以耦合到第二總線420。
可以在計(jì)算機(jī)程序中實(shí)現(xiàn)實(shí)施方案,所述計(jì)算機(jī)程序儲(chǔ)存在儲(chǔ)存介質(zhì)上,具有用于對(duì)計(jì)算機(jī)系統(tǒng)編程來(lái)執(zhí)行所述實(shí)施方案的指令。儲(chǔ)存介質(zhì)可以包括但不限于任何類型的盤片、半導(dǎo)體器件,或者任何類型的適于儲(chǔ)存電子指令的介質(zhì),所述盤片包括軟盤、光盤、致密盤只讀存儲(chǔ)器(CD-ROM)、致密盤可讀寫(xiě)存儲(chǔ)器(CD-RW),以及磁光盤;所述半導(dǎo)體器件例如只讀存儲(chǔ)器(ROM)、諸如靜態(tài)和動(dòng)態(tài)RAM的隨機(jī)訪問(wèn)存儲(chǔ)器(RAM),可擦除可編程只讀存儲(chǔ)器(EPROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃存儲(chǔ)器、磁卡或光卡。其他的實(shí)施方案可以實(shí)現(xiàn)為被可編程控制設(shè)備執(zhí)行的軟件模塊。
雖然這里描述為基于鎖變量的地址來(lái)預(yù)測(cè)競(jìng)爭(zhēng),但是在其他實(shí)施方案中,預(yù)測(cè)也可以基于鎖定指令的線性指令指針(LIP)(有時(shí)候也稱為程序計(jì)數(shù)器)。此外,在其他實(shí)施方案中,預(yù)測(cè)可以基于LIP和鎖變量地址的某種組合。在另一種實(shí)施方案中,預(yù)測(cè)也可以包含來(lái)自過(guò)去的分支歷史/目標(biāo)信息的信息。而且,其他操作的競(jìng)爭(zhēng)預(yù)測(cè)可能受影響。
雖然已經(jīng)參考有限數(shù)量的實(shí)施方案描述了本發(fā)明,但是熟練技術(shù)人員將理解由此產(chǎn)生的各種修改和變化。所附權(quán)利要求書(shū)旨在覆蓋所有這種落入本發(fā)明的真正精神和范圍的修改和變化。
權(quán)利要求
1.一種裝置,包括用于預(yù)測(cè)要被執(zhí)行的操作的競(jìng)爭(zhēng)的預(yù)測(cè)器。
2.如權(quán)利要求1的裝置,其中,所述預(yù)測(cè)器包括用于儲(chǔ)存對(duì)應(yīng)于鎖變量的地址信息及所述鎖變量的競(jìng)爭(zhēng)發(fā)生的表。
3.如權(quán)利要求2的裝置,其中,所述預(yù)測(cè)器還包括用于對(duì)線程中的競(jìng)爭(zhēng)的發(fā)生進(jìn)行計(jì)數(shù)的計(jì)數(shù)器。
4.如權(quán)利要求3的裝置,還包括用于基于來(lái)自所述表和所述計(jì)數(shù)器的信息預(yù)測(cè)所述鎖操作的競(jìng)爭(zhēng)的預(yù)測(cè)器邏輯。
5.如權(quán)利要求4的裝置,還包括用于基于所述預(yù)測(cè)器邏輯的輸出優(yōu)化所述操作的控制器。
6.如權(quán)利要求1的裝置,其中,所述預(yù)測(cè)器基于鎖操作的鎖變量的地址來(lái)預(yù)測(cè)所述競(jìng)爭(zhēng)。
7.如權(quán)利要求1的裝置,其中,所述預(yù)測(cè)器基于第一和第二獨(dú)立預(yù)測(cè)來(lái)預(yù)測(cè)所述競(jìng)爭(zhēng)。
8.如權(quán)利要求1的裝置,還包括耦合到所述預(yù)測(cè)器的緩沖器,所述緩沖器將所述操作儲(chǔ)存在條目中,所述條目具有與其相關(guān)聯(lián)的競(jìng)爭(zhēng)指示符。
9.如權(quán)利要求8的裝置,其中,如果所述條目被探查,則所述競(jìng)爭(zhēng)指示符指示競(jìng)爭(zhēng)。
10.一種系統(tǒng),包括第一預(yù)測(cè)器,用于預(yù)測(cè)鎖操作是否有競(jìng)爭(zhēng);第二預(yù)測(cè)器,用于指示程序中競(jìng)爭(zhēng)的水平;以及耦合到所述第一預(yù)測(cè)器并耦合到所述第二預(yù)測(cè)器的動(dòng)態(tài)隨機(jī)訪間存儲(chǔ)器(DRAM),以儲(chǔ)存所述程序。
11.如權(quán)利要求10的系統(tǒng),還包括第一控制器,所述第一控制器用于基于所述第一預(yù)測(cè)器和所述第二預(yù)測(cè)器的結(jié)果產(chǎn)生組合預(yù)測(cè)。
12.如權(quán)利要求11的系統(tǒng),還包括用于接收所述組合預(yù)測(cè)的第二控制器。
13.如權(quán)利要求12的系統(tǒng),其中,如果所述組合預(yù)測(cè)指示沒(méi)有競(jìng)爭(zhēng),則所述第二控制器將把至少一個(gè)優(yōu)化施加于所述鎖操作。
14.如權(quán)利要求10的系統(tǒng),其中,所述第一預(yù)測(cè)器包括儲(chǔ)存器,所述儲(chǔ)存器用于至少儲(chǔ)存對(duì)應(yīng)于所述程序的鎖變量的地址的一部分。
15.如權(quán)利要求10的系統(tǒng),其中,所述第二預(yù)測(cè)器包括計(jì)數(shù)器,所述計(jì)數(shù)器用于對(duì)所述程序中的競(jìng)爭(zhēng)發(fā)生進(jìn)行計(jì)數(shù)。
16.如權(quán)利要求15的系統(tǒng),還包括復(fù)位機(jī)制,所述復(fù)位機(jī)制用于在預(yù)定數(shù)量的處理器周期之后復(fù)位所述計(jì)數(shù)器。
17.如權(quán)利要求15的系統(tǒng),其中,所述計(jì)數(shù)器包括增/減計(jì)數(shù)器。
18.一種方法,包括預(yù)測(cè)鎖操作在執(zhí)行期間是否有競(jìng)爭(zhēng);以及如果預(yù)測(cè)所述鎖操作沒(méi)有競(jìng)爭(zhēng),則優(yōu)化所述鎖操作。
19.如權(quán)利要求18的方法,還包括使用第一預(yù)測(cè)器和第二預(yù)測(cè)器來(lái)獨(dú)立地預(yù)測(cè)。
20.如權(quán)利要求19的方法,還包括組合所述第一預(yù)測(cè)器和所述第二預(yù)測(cè)器的結(jié)果。
21.如權(quán)利要求19的方法,還包括將第一有競(jìng)爭(zhēng)鎖變量的地址插入所述第一預(yù)測(cè)器的第一條目。
22.如權(quán)利要求21的方法,還包括如果所述第一有競(jìng)爭(zhēng)鎖變量再次遭遇競(jìng)爭(zhēng),則遞增所述第一預(yù)測(cè)器的所述第一條目的計(jì)數(shù)。
23.如權(quán)利要求22的方法,還包括基于所述計(jì)數(shù)來(lái)在所述第一預(yù)測(cè)器中預(yù)測(cè)所述第一有競(jìng)爭(zhēng)鎖變量的競(jìng)爭(zhēng)。
24.如權(quán)利要求19的方法,還包括如果程序的任何鎖操作有競(jìng)爭(zhēng),則遞增所述第二預(yù)測(cè)器中的計(jì)數(shù)器。
25.如權(quán)利要求19的方法,還包括如果所述條目被探查,則置位對(duì)應(yīng)于所述鎖操作的緩沖器條目中的競(jìng)爭(zhēng)指示符。
26.如權(quán)利要求25的方法,還包括基于所述競(jìng)爭(zhēng)指示符來(lái)更新所述第一預(yù)測(cè)器和所述第二預(yù)測(cè)器其中的至少一個(gè)。
27.一種制品,包括包含指令的機(jī)器可讀儲(chǔ)存介質(zhì),所述指令如果被機(jī)器執(zhí)行,則使得所述機(jī)器能夠執(zhí)行一種方法,所述方法包括預(yù)測(cè)要被執(zhí)行的操作的競(jìng)爭(zhēng);以及基于所述預(yù)測(cè)來(lái)處理所述操作。
28.如權(quán)利要求27的制品,其中,所述方法還包括如果所述條目被探查,則置位對(duì)應(yīng)于所述鎖操作的緩沖器條目中的競(jìng)爭(zhēng)指示符。
29.如權(quán)利要求28的制品,其中,所述方法還包括基于所述競(jìng)爭(zhēng)指示符來(lái)更新所述第一預(yù)測(cè)器和所述第二預(yù)測(cè)器其中的至少一個(gè)。
30.如權(quán)利要求27的制品,其中,所述方法還包括以兩種方式獨(dú)立地預(yù)測(cè)所述競(jìng)爭(zhēng)。
31.一種裝置,包括用于預(yù)測(cè)操作是否有競(jìng)爭(zhēng)的第一預(yù)測(cè)器,所述第一預(yù)測(cè)器具有帶有多個(gè)條目的表;指示全局競(jìng)爭(zhēng)水平的第二預(yù)測(cè)器,所述第二預(yù)測(cè)器包括全局計(jì)數(shù)器;以及耦合到所述第一預(yù)測(cè)器和所述第二預(yù)測(cè)器的預(yù)測(cè)器控制器,所述預(yù)測(cè)器控制器用于基于來(lái)自所述第一預(yù)測(cè)器和所述第二預(yù)測(cè)器的輸入產(chǎn)生最終預(yù)測(cè)。
32.如權(quán)利要求31的裝置,還包括耦合來(lái)接收所述最終預(yù)測(cè)的排序控制器。
33.如權(quán)利要求31的裝置,其中,如果所述最終預(yù)測(cè)指示沒(méi)有競(jìng)爭(zhēng),則所述排序控制器將把至少一個(gè)優(yōu)化施加于所述操作。
34.如權(quán)利要求31的裝置,其中,所述表至少要儲(chǔ)存對(duì)應(yīng)于鎖變量的地址的一部分。
35.如權(quán)利要求31的裝置,還包括用于復(fù)位所述全局計(jì)數(shù)器的復(fù)位機(jī)制。
全文摘要
在一個(gè)實(shí)施方案中,本發(fā)明包括預(yù)測(cè)器,用于預(yù)測(cè)要在程序中執(zhí)行的操作的競(jìng)爭(zhēng)。所述操作可以基于所述預(yù)測(cè)的結(jié)果來(lái)處理,所述預(yù)測(cè)可以基于多個(gè)獨(dú)立的預(yù)測(cè)。在一個(gè)實(shí)施方案中,如果沒(méi)有競(jìng)爭(zhēng)被預(yù)測(cè)到,則可以優(yōu)化所述操作。其他的實(shí)施方案被描述并被要求保護(hù)。
文檔編號(hào)G06F9/46GK1797348SQ200510135238
公開(kāi)日2006年7月5日 申請(qǐng)日期2005年12月29日 優(yōu)先權(quán)日2004年12月29日
發(fā)明者布拉廷·薩哈, 馬修·默藤, 塞巴斯蒂恩·希利, 戴維·庫(kù)法迪, 珀?duì)枴すR倫德 申請(qǐng)人:英特爾公司