專利名稱:使用相關(guān)矩陣追蹤解除分配的加載指令的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)一般地涉及一種改進(jìn)的數(shù)據(jù)處理裝置和方法,更具體地說,涉及一種用于使用相關(guān)矩陣追蹤解除分配的加載指令的裝置和方法。
背景技術(shù):
微處理器是現(xiàn)代計(jì)算機(jī)的心臟,其是由組織成特定功能操作單元(包括算術(shù)單元、高速緩沖存儲(chǔ)器和存儲(chǔ)器管理、預(yù)測性邏輯以及數(shù)據(jù)移動(dòng))的數(shù)百萬個(gè)晶體管及其他元件組成的芯片?,F(xiàn)代計(jì)算機(jī)中的處理器在過去十年中已在性能、能力及復(fù)雜性方面有了巨大增長。任何計(jì)算機(jī)程序都包括用于對(duì)數(shù)據(jù)執(zhí)行操作的許多指令??蓪⑻幚砥鞣诸悶橛行蛱幚砥骰驘o序處理器。在現(xiàn)代高性能處理器中,可調(diào)度指令以便無序執(zhí)行。指令可被調(diào)度為在其源操作數(shù)可用后執(zhí)行。公知的動(dòng)態(tài)指令調(diào)度器可使用相關(guān)矩陣(也稱為喚醒數(shù)組)來追蹤源操作數(shù)。相關(guān)矩陣最初被引入以在處理器中用作一種追蹤加載和存儲(chǔ)之間的存儲(chǔ)器相關(guān)性的方式,并且相關(guān)矩陣已用于追蹤發(fā)出隊(duì)列中的寄存器相關(guān)性。在一些實(shí)施方式中,可能希望在來自發(fā)出隊(duì)列的指令已被發(fā)出后盡可能快地解除分配這些指令以便為新指令騰出空間。然而,在與生產(chǎn)方關(guān)聯(lián)的指令仍位于發(fā)出隊(duì)列中的情況下,公知相關(guān)矩陣僅追蹤生產(chǎn)方的可用性。因此,如果消費(fèi)方指令仍正在追蹤其結(jié)果的可用性,則可能不會(huì)解除分配來自隊(duì)列的指令。
發(fā)明內(nèi)容
根據(jù)第一方面,提供了一種在數(shù)據(jù)處理系統(tǒng)中用于追蹤解除分配的加載指令的方法,所述方法包括檢測發(fā)出隊(duì)列內(nèi)的一組指令中的加載指令是否未命中;響應(yīng)于所述加載指令的未命中,將所述加載指令分配給加載未命中隊(duì)列;解除分配來自所述發(fā)出隊(duì)列的所述加載指令;判定相關(guān)矩陣的發(fā)出隊(duì)列部分中是否存在用于所述加載指令的相關(guān)表項(xiàng); 響應(yīng)于所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分中存在用于所述加載指令的相關(guān)表項(xiàng),從所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分的所述相關(guān)表項(xiàng)讀取指定依賴于所述加載指令的一組相關(guān)指令的數(shù)據(jù);及將所述數(shù)據(jù)寫入所述相關(guān)矩陣的與所述加載未命中隊(duì)列關(guān)聯(lián)的加載未命中隊(duì)列部分中的新表項(xiàng)內(nèi)。根據(jù)第二方面,提供了一種處理器,所述處理器包括指令調(diào)度器;發(fā)出隊(duì)列;及加載未命中隊(duì)列,其中所述指令調(diào)度器響應(yīng)于所述發(fā)出隊(duì)列中的加載指令的未命中,將所述加載指令分配給所述加載未命中隊(duì)列,其中由所述處理器檢測一組指令中的所述加載指令的未命中;解除分配來自所述發(fā)出隊(duì)列的所述加載指令;判定相關(guān)矩陣的發(fā)出隊(duì)列部分中是否存在用于所述加載指令的相關(guān)表項(xiàng);響應(yīng)于所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分中存在用于所述加載指令的相關(guān)表項(xiàng),從所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分的所述相關(guān)表項(xiàng)讀取指定依賴于所述加載指令的一組相關(guān)指令的數(shù)據(jù);及將所述數(shù)據(jù)寫入所述相關(guān)矩陣的與所述加載未命中隊(duì)列關(guān)聯(lián)的加載未命中隊(duì)列部分中的新表項(xiàng)內(nèi)。
根據(jù)第三方面,提供了一種裝置,所述裝置包括處理器;及耦接至所述處理器的存儲(chǔ)器,其中所述存儲(chǔ)器包括當(dāng)由所述處理器執(zhí)行時(shí)使所述處理器執(zhí)行以下操作的指令 檢測發(fā)出隊(duì)列內(nèi)的一組指令中的加載指令是否未命中;響應(yīng)于所述加載指令的未命中,將所述加載指令分配給加載未命中隊(duì)列;解除分配來自所述發(fā)出隊(duì)列的所述加載指令;判定相關(guān)矩陣的發(fā)出隊(duì)列部分中是否存在用于所述加載指令的相關(guān)表項(xiàng);響應(yīng)于所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分中存在用于所述加載指令的相關(guān)表項(xiàng),從所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分的所述相關(guān)表項(xiàng)讀取指定依賴于所述加載指令的一組相關(guān)指令的數(shù)據(jù);及將所述數(shù)據(jù)寫入所述相關(guān)矩陣的與所述加載未命中隊(duì)列關(guān)聯(lián)的加載未命中隊(duì)列部分中的新表項(xiàng)內(nèi)。在示例性實(shí)施例中,提供了一種包括具有計(jì)算機(jī)可讀程序的計(jì)算機(jī)可用或可讀介質(zhì)的計(jì)算機(jī)程序產(chǎn)品。所述計(jì)算機(jī)可讀程序當(dāng)在計(jì)算設(shè)備上執(zhí)行時(shí)使所述計(jì)算設(shè)備執(zhí)行以上關(guān)于方法概述的操作中的各種操作和操作組合。在另一示例性實(shí)施例中,提供了一種系統(tǒng)/裝置。所述系統(tǒng)/裝置可包括一個(gè)或多個(gè)處理器及耦接至所述一個(gè)或多個(gè)處理器的存儲(chǔ)器。所述存儲(chǔ)器可包括當(dāng)由所述一個(gè)或多個(gè)處理器執(zhí)行時(shí)使所述一個(gè)或多個(gè)處理器執(zhí)行以上關(guān)于方法概述的操作中的各種操作和操作組合的指令。本發(fā)明的這些和其他特征和優(yōu)點(diǎn)將在以下對(duì)本發(fā)明的實(shí)例實(shí)施例的詳細(xì)描述中予以描述,或?qū)㈣b于以下對(duì)本發(fā)明的實(shí)例實(shí)施例的詳細(xì)描述而變得對(duì)本領(lǐng)域技術(shù)人員顯而易見。
現(xiàn)在將僅通過實(shí)例的方式并參考附圖描述本發(fā)明的實(shí)施例,這些附圖是圖1描繪可實(shí)施示例性實(shí)施例的方面的實(shí)例分布式數(shù)據(jù)處理系統(tǒng)的圖形表示;圖2展示可實(shí)施示例性實(shí)施例的方面的實(shí)例數(shù)據(jù)處理系統(tǒng)的方塊圖;圖3是根據(jù)一個(gè)示例性實(shí)施例的展示功能單元和寄存器的常規(guī)雙線程處理器設(shè)計(jì)的例示性方塊圖;圖4描繪根據(jù)一個(gè)示例性實(shí)施例的使用相關(guān)矩陣追蹤解除分配的加載指令的例示性方塊圖;圖5描繪根據(jù)一個(gè)示例性實(shí)施例的例示性基本相關(guān)矩陣;圖6描繪根據(jù)一個(gè)示例性實(shí)施例的例示性擴(kuò)展的相關(guān)矩陣;及圖7描繪根據(jù)一個(gè)示例性實(shí)施例的在使用相關(guān)矩陣追蹤解除分配的加載指令中執(zhí)行的操作的流程圖。
具體實(shí)施例方式示例性實(shí)施例提供了一種允許加載指令的相關(guān)方在加載被從發(fā)出隊(duì)列解除分配之前和之后追蹤加載結(jié)果的可用性的機(jī)制。示例性實(shí)施例提供并非為N行和N列而是通過 L個(gè)額外列擴(kuò)展的相關(guān)矩陣,其中L是加載未命中隊(duì)列中的表項(xiàng)數(shù)。當(dāng)已知加載指令在Ll 高速緩存中未命中且被分配給加載未命中隊(duì)列時(shí),可解除分配該加載指令在發(fā)出隊(duì)列中的表項(xiàng)。當(dāng)解除分配加載指令時(shí),讀取標(biāo)記加載指令的所有相關(guān)方的矩陣的列,且將此列寫入屬于加載未命中隊(duì)列表項(xiàng)的新列中。因此,示例性實(shí)施例允許在加載指令的結(jié)果可用之前將加載指令從發(fā)出隊(duì)列解除分配,同時(shí)仍允許相關(guān)指令使用相關(guān)矩陣追蹤它們的源操作數(shù)的可用性。通過在加載指令的結(jié)果可用之前解除分配加載指令,將新指令置于發(fā)出隊(duì)列中。 隊(duì)列利用率的增加改進(jìn)了處理器性能。另外,示例性實(shí)施例允許在將指令置于發(fā)出隊(duì)列中之后修改指令的相關(guān)信息,這在先前使用相關(guān)矩陣的情況下是不可能的,即,在將指令首先置于發(fā)出隊(duì)列時(shí),該指令的生產(chǎn)方在任何時(shí)刻的位置可與該指令追蹤的資源相同或不同。所屬技術(shù)領(lǐng)域的技術(shù)人員知道,本發(fā)明可以體現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。 因此,本發(fā)明可以具體實(shí)現(xiàn)為以下形式,即,可以是完全的硬件、完全的軟件(包括固件、駐留軟件、微代碼等)、或者本文一般稱為“電路”、“模塊”或“系統(tǒng)”的軟件部分與硬件部分的組合。此外,本發(fā)明還可以采取體現(xiàn)在任何有形的表達(dá)介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式,該介質(zhì)中包含計(jì)算機(jī)可用程序代碼??梢允褂靡粋€(gè)或多個(gè)計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)的任何組合。計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)例如可以是-但不限于-電的、磁的、光的、電磁的、紅外線的、或半導(dǎo)體的系統(tǒng)、裝置、器件或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的更具體的例子(非窮舉的列表)包括以下有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式緊湊盤只讀存儲(chǔ)器 (CD-ROM)、光存儲(chǔ)器件、諸如支持因特網(wǎng)或內(nèi)部網(wǎng)的傳輸介質(zhì),或磁存儲(chǔ)器件。注意,所述計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)甚至可以是程序被打印在其上的紙張或其他適合的介質(zhì),因?yàn)樗龀绦蚩梢酝ㄟ^例如光掃描所述紙張或其他介質(zhì)被電子地捕獲,然后被編譯、解釋或另外以適合的方式被處理(如果必要),然后被存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)器中。在此文檔的上下文中,計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可以是任何能夠包含、存儲(chǔ)、傳送、傳播或傳輸由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與指令執(zhí)行系統(tǒng)、裝置或設(shè)備有關(guān)的程序的介質(zhì)。計(jì)算機(jī)可用介質(zhì)可以包括其中包含計(jì)算機(jī)可用程序代碼(在基帶中或作為載波的一部分)的傳播數(shù)據(jù)信號(hào)??梢允褂萌魏芜m當(dāng)?shù)慕橘|(zhì)(包括但不限于無線、有線、光纜、射頻(RF)或其他裝置)來傳輸計(jì)算機(jī)可用程序代碼。用于執(zhí)行本發(fā)明的操作的計(jì)算機(jī)程序代碼,可以以一種或多種編程語言的任何組合來編寫,所述編程語言包括面向?qū)ο蟮木幊陶Z言-諸如Java、Smalltalk, C++之類,還包括常規(guī)的過程編程語言-諸如“C”編程語言或類似編程語言(Java和所有基于Java的商標(biāo)和徽標(biāo)是Sun Microsystems, Inc.在美國、其他國家或兩者中的商標(biāo);其他產(chǎn)品和服務(wù)名稱可能是IBM或其他公司的商標(biāo))。程序代碼可以完全地在用戶的計(jì)算上執(zhí)行、部分地在用戶的計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶的計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在后一種情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任何種類的網(wǎng)絡(luò)-包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)-連接到用戶的計(jì)算機(jī),或者,可以 (例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng))連接到外部計(jì)算機(jī)。以下參考根據(jù)本發(fā)明的示例性實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的方塊圖和/或流程圖在下面描述了本發(fā)明的示例性實(shí)施例。將理解,所述方塊圖和/或流程圖的每個(gè)方塊以及所述方塊圖和/或流程圖中的方塊的組合可以由計(jì)算機(jī)程序指令來實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以被提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置的處理器以產(chǎn)生一種機(jī)器,以便通過所述計(jì)算機(jī)和/或其他可編程數(shù)據(jù)處理裝置的處理器執(zhí)行的所述指令將創(chuàng)建用于實(shí)現(xiàn)所述方塊圖和/或流程圖方塊(多個(gè))中指定的功能/操作的裝置。這些計(jì)算機(jī)程序指令也可以被存儲(chǔ)在能夠以特定方式引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置執(zhí)行功能的計(jì)算機(jī)可讀存儲(chǔ)器中,以便存儲(chǔ)在所述計(jì)算機(jī)可讀介質(zhì)中的所述指令將產(chǎn)生一件包括實(shí)現(xiàn)在所述方塊圖和/或流程圖方塊(多個(gè))中指定的功能/操作的指令裝置的制品。所述計(jì)算機(jī)程序指令還可以被加載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置上以導(dǎo)致將在所述計(jì)算機(jī)或其他可編程裝置上執(zhí)行一系列的操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程, 以便在所述計(jì)算機(jī)或其他可編程裝置上執(zhí)行的所述指令將提供用于實(shí)現(xiàn)在所述方塊圖和/ 或流程圖方塊(多個(gè))中指定的功能/操作的過程。附圖中的流程圖和方塊圖示出了根據(jù)本發(fā)明的各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)施方式的體系結(jié)構(gòu)、功能和操作。在此方面,所述流程圖或方塊圖中的每個(gè)方塊都可以表示代碼的模塊、段或部分,所述代碼包括用于實(shí)現(xiàn)指定的邏輯功能(多個(gè)) 的一個(gè)或多個(gè)可執(zhí)行指令。還應(yīng)指出,在某些備選實(shí)施方式中,在方塊中說明的功能可以不按圖中說明的順序發(fā)生。例如,示出為連續(xù)的兩個(gè)方塊可以實(shí)際上被基本同時(shí)地執(zhí)行,或者某些時(shí)候,取決于所涉及的功能,可以以相反的順序執(zhí)行所述方塊。還將指出,所述方塊圖和/或流程圖的每個(gè)方塊以及所述方塊圖和/或流程圖中的方塊的組合可以由執(zhí)行指定功能或操作的基于專用硬件的系統(tǒng)或?qū)S糜布陀?jì)算機(jī)指令的組合來實(shí)現(xiàn)。因此,示例性實(shí)施例可用于包括分布式數(shù)據(jù)處理環(huán)境、單個(gè)數(shù)據(jù)處理設(shè)備等的許多不同類型的數(shù)據(jù)處理環(huán)境中。為了提供示例性實(shí)施例的具體元件和功能性的描述的上下文,下文將圖1和圖2提供為可實(shí)施示例性實(shí)施例的各方面的實(shí)例環(huán)境。雖然遵循圖1和圖2的描述將主要地聚焦于用于使用假相關(guān)性在無序處理器中有序地發(fā)出指令的單個(gè)數(shù)據(jù)處理設(shè)備實(shí)施,但這只是實(shí)例且并非旨在陳述或暗示關(guān)于本發(fā)明的特征的任何限制。相反,示例性實(shí)施例旨在包括分布式數(shù)據(jù)處理環(huán)境和其中指令是使用假相關(guān)性在無序處理器中有序地發(fā)出的指令的實(shí)施例?,F(xiàn)在參考附圖,具體地說參考圖1至圖2,提供其中可實(shí)施本發(fā)明的示例性實(shí)施例的數(shù)據(jù)處理環(huán)境的實(shí)例圖。應(yīng)了解,圖1至圖2僅為實(shí)例且并非旨在斷言或暗示關(guān)于其中可實(shí)施本發(fā)明的方面或?qū)嵤├沫h(huán)境的任何限制??稍诓幻撾x本發(fā)明的精神和范圍的情況下做出對(duì)所描繪環(huán)境的許多修改。參考附圖,圖1描繪可實(shí)施示例性實(shí)施例的方面的實(shí)例分布式數(shù)據(jù)處理系統(tǒng)的圖形表示。分布式數(shù)據(jù)處理系統(tǒng)100可包括可實(shí)施示例性實(shí)施例的方面的計(jì)算機(jī)網(wǎng)絡(luò)。分布式數(shù)據(jù)處理系統(tǒng)100含有至少一個(gè)網(wǎng)絡(luò)102,網(wǎng)絡(luò)102是用于在分布式數(shù)據(jù)處理系統(tǒng)100內(nèi)連接在一起的各種設(shè)備和計(jì)算機(jī)之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)102可包括諸如有線、無線通信鏈路或光纜之類的連接。在所描繪的實(shí)例中,服務(wù)器104及服務(wù)器106與存儲(chǔ)單元108 —起連接至網(wǎng)絡(luò) 102。此外,客戶端110、112及114亦連接至網(wǎng)絡(luò)102。例如,這些客戶端110、112及114可為個(gè)人計(jì)算機(jī)、網(wǎng)絡(luò)計(jì)算機(jī)等。在所描繪的實(shí)例中,服務(wù)器104將諸如引導(dǎo)文件、操作系統(tǒng)映像和應(yīng)用之類的數(shù)據(jù)提供至客戶端110、112及114。在描繪的實(shí)例中,客戶端110、112及 114是至服務(wù)器104的客戶端。分布式數(shù)據(jù)處理系統(tǒng)100可包括額外服務(wù)器、客戶端及未圖示的其他設(shè)備。
在所描繪的實(shí)例中,分布式數(shù)據(jù)處理系統(tǒng)100是因特網(wǎng),同時(shí)網(wǎng)絡(luò)102代表全球范圍內(nèi)使用傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)協(xié)議集來相互通信的網(wǎng)絡(luò)和網(wǎng)關(guān)的集合。在因特網(wǎng)的核心是主節(jié)點(diǎn)或主機(jī)之間的高速數(shù)據(jù)通信線路的主干,它包括數(shù)以千計(jì)的商業(yè)、政府、教育以及其他路由數(shù)據(jù)和消息的計(jì)算機(jī)系統(tǒng)。當(dāng)然,分布式數(shù)據(jù)處理系統(tǒng)100也可以被實(shí)現(xiàn)為包括許多不同類型的網(wǎng)絡(luò),例如企業(yè)內(nèi)部互聯(lián)網(wǎng)、局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)等。 如上所述,圖1旨在作為一個(gè)實(shí)例,并非旨在作為對(duì)本發(fā)明的不同實(shí)施例的體系結(jié)構(gòu)限制, 因此,圖1中所示的特定元件不應(yīng)被視為限制關(guān)于其中可實(shí)施本發(fā)明的示例性實(shí)施例的環(huán)
^Ml O現(xiàn)在參考圖2,展示了其中可實(shí)施示例性實(shí)施例的方面的實(shí)例數(shù)據(jù)處理系統(tǒng)的方塊圖。數(shù)據(jù)處理系統(tǒng)200是諸如圖1中的客戶端100之類的計(jì)算機(jī)的一個(gè)實(shí)例,實(shí)現(xiàn)本發(fā)明的示例性實(shí)施例的諸過程的計(jì)算機(jī)可用代碼或指令可以位于其中。在所描繪的實(shí)例中,數(shù)據(jù)處理系統(tǒng)200采用集線器架構(gòu),其包括北橋和存儲(chǔ)器控制器集線器(NB/MCH)202以及南橋和輸入/輸出(I/O)控制器集線器(SB/ICH)204。處理單元206、主存儲(chǔ)器208及圖形處理器210連接至NB/MCH 202。圖形處理器210可經(jīng)由加速圖形端口(AGP)連接至NB/MCH 202。在所描繪的實(shí)例中,局域網(wǎng)(LAN)適配器212連接至SB/ICH 204。音頻適配器 216、鍵盤和鼠標(biāo)適配器220、調(diào)制解調(diào)器222、只讀存儲(chǔ)器(ROM) 224、硬盤驅(qū)動(dòng)器(HDD) 226、 ⑶-ROM驅(qū)動(dòng)器230、通用串行總線(USB)端口和其他通信端口 232及PCI/PCIe設(shè)備2;34經(jīng)由總線238和總線240連接至SB/ICH 204。PCI/PCIe設(shè)備可包括(例如)以太網(wǎng)適配器、 附加卡和用于筆記型計(jì)算機(jī)的PC卡。PCI使用卡總線控制器,而PCIe不使用卡總線控制器。例如,ROM 2 可以是閃速基本輸入/輸出系統(tǒng)(BIOS)。HDD 226 及 CD-ROM 驅(qū)動(dòng)器 230 經(jīng)由總線 240 連接至 SB/ICH 204。HDD 226 及 CD-ROM驅(qū)動(dòng)器230可使用(例如)集成驅(qū)動(dòng)電子設(shè)備(IDE)或串行高級(jí)技術(shù)附件(SATA) 接口。超級(jí)I/0(SI0)設(shè)備236可連接至SB/ICH 204。操作系統(tǒng)在處理單元206上運(yùn)行。所述操作系統(tǒng)協(xié)調(diào)并提供對(duì)圖2中的數(shù)據(jù)處理系統(tǒng)200內(nèi)的各種組件的控制。作為客戶端,操作系統(tǒng)可為可以從市面上購買的操作系統(tǒng), 如Micr0S0ft \Vind0WS xp(Micr0S0f 1^tlwindows *Microsoft Corporation在美國、 其他國家或兩者中的商標(biāo))。諸如Java 編程系統(tǒng)之類的面向?qū)ο蟮木幊滔到y(tǒng)可以與操作系統(tǒng)一起運(yùn)行并從在數(shù)據(jù)處理系統(tǒng)200上執(zhí)行的Java 程序或應(yīng)用來提供對(duì)操作系統(tǒng)的調(diào)用(Java為Sun Microsystems, Inc.在美國、其他國家或兩者中的商標(biāo))。作為服務(wù)器,數(shù)據(jù)處理系統(tǒng)200可為(例如)運(yùn)行高級(jí)交互執(zhí)行(AIX )操作系
統(tǒng)或LEVUX 操作系統(tǒng)的IBM e%rver System ρ 計(jì)算機(jī)系統(tǒng)(必erver、System ρ及 AIX 為 International Business Machines Corporation 在美國、其他國家或兩者中的商標(biāo),而LINUX為Linus Torvalds在美國、其他國家或兩者中的商標(biāo))。數(shù)據(jù)處理系統(tǒng)200可為在處理單元206中包括多個(gè)處理器的對(duì)稱多處理器(SMP)系統(tǒng)。備選地,可使用單處理器系統(tǒng)。用于操作系統(tǒng)、面向?qū)ο蟮木幊滔到y(tǒng)及應(yīng)用或程序的指令位于諸如HDD 226之類的存儲(chǔ)設(shè)備上且可被載入主存儲(chǔ)器208以供處理單元206執(zhí)行。本發(fā)明的示例性實(shí)施例的處理可由處理單元206使用計(jì)算機(jī)可用程序代碼來執(zhí)行,所述計(jì)算機(jī)可用程序代碼可位于諸如主存儲(chǔ)器208、ROM 224之類的存儲(chǔ)器中或位于(例如)一個(gè)或多個(gè)外圍設(shè)備2 及 230 中。總線系統(tǒng)(如圖2所示的總線238或總線M0)可包括一個(gè)或多個(gè)總線。當(dāng)然,可使用任何類型的通信結(jié)構(gòu)或架構(gòu)來實(shí)施總線系統(tǒng),所述通信結(jié)構(gòu)或架構(gòu)在附接至結(jié)構(gòu)或架構(gòu)的不同組件或設(shè)備之間提供數(shù)據(jù)傳輸。通信單元(如圖2的調(diào)制解調(diào)器222或網(wǎng)絡(luò)適配器21 可包括用于傳輸和接收數(shù)據(jù)的一個(gè)或多個(gè)設(shè)備。存儲(chǔ)器可為(例如)圖2中的主存儲(chǔ)器208、ROM 224或諸如在NB/MCH 202中發(fā)現(xiàn)的高速緩存。本領(lǐng)域的技術(shù)人員將理解,圖2中的硬件可以根據(jù)實(shí)現(xiàn)方式而變化。除了圖2中所示的硬件以外,或替代圖2中所示的硬件,還可以使用諸如閃速存儲(chǔ)器、等同的非易失性存儲(chǔ)器或光盤驅(qū)動(dòng)器等其他內(nèi)部硬件或外圍設(shè)備。此外,在不脫離本發(fā)明的精神和范圍的情況下,示例性實(shí)施例的處理可應(yīng)用于除上述SMP系統(tǒng)以外的多處理器數(shù)據(jù)處理系統(tǒng)。此外,數(shù)據(jù)處理系統(tǒng)200可采用許多不同數(shù)據(jù)處理系統(tǒng)中的任一者的形式,包括客戶端計(jì)算設(shè)備、服務(wù)器計(jì)算設(shè)備、平板計(jì)算機(jī)、膝上型計(jì)算機(jī)、電話或其他通信設(shè)備、個(gè)人數(shù)字助理(PDA)等。例如,在一些示例性實(shí)例中,數(shù)據(jù)處理系統(tǒng)200可為攜帶型計(jì)算設(shè)備, 其具備閃存以提供用于存儲(chǔ)操作系統(tǒng)文件及/或用戶生成的數(shù)據(jù)的非易失性存儲(chǔ)器。實(shí)質(zhì)上,在無架構(gòu)限制的情況下,數(shù)據(jù)處理系統(tǒng)200可為任何已知的或稍后開發(fā)的數(shù)據(jù)處理系統(tǒng)。參看圖3,描繪根據(jù)一個(gè)示例性實(shí)施例的展示功能單元及寄存器的常規(guī)雙線程處理器設(shè)計(jì)的例示性方塊圖。在這些示例性實(shí)例中,處理器300可實(shí)施為圖2中的處理單元 206。處理器300包括具有也可在單線程模式下操作的雙線程同時(shí)多線程(SMT)的單個(gè)集成電路超標(biāo)量微處理器。因此,如下文進(jìn)一步論述,處理器300包括皆由集成電路形成的各種單元、寄存器、緩沖器、存儲(chǔ)器及其他部件。此外,在一個(gè)示例性實(shí)施例中,處理器300根據(jù)精簡指令集計(jì)算機(jī)(RISC)技術(shù)操作。參看圖3,描繪根據(jù)一個(gè)示例性實(shí)施例的展示功能單元及寄存器的常規(guī)雙線程處理器設(shè)計(jì)的例示性方塊圖。在這些示例性實(shí)例中,處理器300可實(shí)施為圖2中的處理單元 206。處理器300包括具有也可在單線程模式下操作的雙線程同時(shí)多線程(SMT)的單個(gè)集成電路超標(biāo)量微處理器。因此,如下文進(jìn)一步論述,處理器300包括皆由集成電路形成的各種單元、寄存器、緩沖器、存儲(chǔ)器及其他部件。此外,在一個(gè)示例性實(shí)施例中,處理器300根據(jù)精簡指令集計(jì)算機(jī)(RISC)技術(shù)操作。如圖3中所示,指令取回單元(IFU)302連接至指令高速緩存304。指令高速緩存 304保存用于待執(zhí)行的多個(gè)程序(線程)的指令。指令高速緩存304還具有至2級(jí)(L2)高速緩存/存儲(chǔ)器306的接口。IFU 302根據(jù)指令地址請(qǐng)求來自指令高速緩存304的指令,且將指令傳遞至指令解碼單元308。在一個(gè)示例性實(shí)施例中,IFU 302可同時(shí)請(qǐng)求來自指令高速緩存304的多個(gè)指令用于多達(dá)兩個(gè)線程。指令解碼單元308同時(shí)解碼多個(gè)指令用于多達(dá)兩個(gè)線程,且將解碼后的指令傳遞至指令分派單元(IDU) 309。IDU 309自指令解碼單元308接收解碼后的指令,且可選擇性地將解碼后的指令分組以用于每個(gè)線程。IDU 309將指令輸出至指令調(diào)度器310,指令調(diào)度器310使用相關(guān)矩陣追蹤與指令關(guān)聯(lián)的源操作數(shù)。一旦IDU 309識(shí)別了所接收指令之間的相關(guān)性,指令調(diào)度器310就將指令發(fā)出至發(fā)出隊(duì)列311,發(fā)出隊(duì)列311將用于每個(gè)線程的一組指令輸出或發(fā)出至處理器的執(zhí)行單元312、314、316、318、320、322、324、3洸及328。當(dāng)加載指令在Ll高速緩存(未示出)中未命中時(shí),指令調(diào)度器310將加載指令分配給加載未命中隊(duì)列360,且解除分配來自發(fā)出隊(duì)列311的該指令。以下將詳細(xì)描述由指令調(diào)度器310執(zhí)行的處理的詳細(xì)描述。在一個(gè)示例性實(shí)施例中,處理器的執(zhí)行單元可包括分支單元312、加載/存儲(chǔ)單元 (LSUA) 314 及(LSUB) 316、定點(diǎn)執(zhí)行單元(FXUA) 318 及(FXUB) 320、浮點(diǎn)執(zhí)行單元(FPUA) 322 及(FPUB) 3 ,以及向量多媒體擴(kuò)展單元(VMXA)3^及(VMXB)328。執(zhí)行單元312、314、316、 318,320,322,324,326及3 跨兩個(gè)線程被完全共享,意味著執(zhí)行單元312、314、316、318、 320,322,324,326及3 可自任一或兩個(gè)線程接收指令。處理器包括多個(gè)寄存器集合330、 332,334,336,338,340,342,344及;346,它們亦可被稱為架構(gòu)式寄存器文件(ARF)。ARF是一旦指令已完成執(zhí)行即存儲(chǔ)完成的數(shù)據(jù)的文件。ARF 330、332、334、336、 338、340、342、344及346可針對(duì)兩個(gè)線程中的每個(gè)線程且按照指令類型(即,通用寄存器 (GPR) 330及332、浮點(diǎn)寄存器(FPR) 3;34及336、專用寄存器(SPR) 338及;340,及向量寄存器 (VR) 344及346)單獨(dú)地存儲(chǔ)數(shù)據(jù)。按照類型及按照線程單獨(dú)地存儲(chǔ)完成的數(shù)據(jù)有助于減少在處理指令期間的處理器競爭。處理器額外地包括一組共享的專用寄存器(SPR) 342用于保存程序狀態(tài),如指令指針、堆棧指針或處理器狀態(tài)字,它們可用于來自任一或兩個(gè)線程的指令上。執(zhí)行單元312、 314、316、318、320、322、324、3洸及3 經(jīng)由簡化的內(nèi)部總線結(jié)構(gòu)349連接至ARF 330,332, 334、336、338、340、342、344 及 346。為了執(zhí)行浮點(diǎn)指令,如果執(zhí)行該指令所需的指令數(shù)據(jù)是完整的或如果數(shù)據(jù)已通過了管線中的清除(flushing)點(diǎn),則FPUA 322及FPUB 3M從FPR 3;34及336檢索寄存器源操作數(shù)信息,該信息是執(zhí)行指令所需的輸入數(shù)據(jù)。完整數(shù)據(jù)是一旦指令已完成執(zhí)行且存儲(chǔ)在ARF(如ARF 330、332、334、336、338、340、342、344及346)中時(shí)由執(zhí)行單元生成的數(shù)據(jù)。 不完整的數(shù)據(jù)是在指令尚未完成執(zhí)行的指令執(zhí)行期間生成的數(shù)據(jù)。FPUA 322及FPUB 324 根據(jù)每個(gè)正在執(zhí)行的指令屬于哪一線程來輸入它們的數(shù)據(jù)。例如,F(xiàn)PUA 322將完成的數(shù)據(jù)輸入至FPR 334,而FPUB 3 將完成的數(shù)據(jù)輸入至FPR 336,因?yàn)镕PUA 322,FPUB 3 以及 FPR 334和336是線程特定的。在指令的執(zhí)行期間,當(dāng)指令已通過管線中的清除點(diǎn)時(shí),F(xiàn)PUA 322及FPUB 3M將其目的地寄存器操作數(shù)數(shù)據(jù)或在指令的執(zhí)行期間生成的指令數(shù)據(jù)輸出至FPR 334及336。在指令的執(zhí)行期間,當(dāng)指令已通過管線中的清除點(diǎn)時(shí),F(xiàn)XUA 318,FXUB 320,LSUA 314及LSUB 316將其目的地寄存器操作數(shù)數(shù)據(jù)或在指令的執(zhí)行期間生成的指令數(shù)據(jù)輸出至GPR 330及 332。在指令子集的執(zhí)行期間,當(dāng)指令已通過管線中的清除點(diǎn)時(shí),F(xiàn)XUA 318、FXUB 320及分支單元312將其目的地寄存器操作數(shù)數(shù)據(jù)輸出至SPR 338、340及342。在指令的執(zhí)行期間, 當(dāng)指令已通過管線中的清除點(diǎn)時(shí),VMXA3^及VMXB 328將其目的地寄存器操作數(shù)數(shù)據(jù)輸出至 VR ;344 及;346。數(shù)據(jù)高速緩存350還可關(guān)聯(lián)有不可緩存單元(未示出),該不可緩存單元從處理器接受數(shù)據(jù)且將數(shù)據(jù)直接寫入2級(jí)高速緩存/存儲(chǔ)器306。以此方式,不可緩存單元繞過存儲(chǔ)至高速緩存所需的一致性協(xié)議。
響應(yīng)于從指令高速緩存304輸入且由指令解碼單元308解碼的指令,IDU 309根據(jù)指令類型和線程將指令選擇性地分派至執(zhí)行單元312、314、316、318、320、322、3對(duì)、3沈及 328。接下來,執(zhí)行單元312、314、316、318、320、322、324、3沈及3 執(zhí)行具有特定指令類別或類型的一個(gè)或多個(gè)指令。例如,F(xiàn)XUA 318及FXUB 320針對(duì)寄存器源操作數(shù)執(zhí)行定點(diǎn)算術(shù)運(yùn)算,如加法、減法、“與”運(yùn)算、“或”運(yùn)算及“異或”運(yùn)算。FPUA322及FPUB 3 針對(duì)寄存器源操作數(shù)執(zhí)行浮點(diǎn)算術(shù)運(yùn)算,如浮點(diǎn)乘法及除法。LSUA 314及LSUB 316執(zhí)行加載和存儲(chǔ)指令,所述指令在數(shù)據(jù)高速緩存350與ARF 330、332、334及336之間移動(dòng)操作數(shù)數(shù)據(jù)。VMXA 3 及VMXB 3 執(zhí)行包括多個(gè)數(shù)據(jù)的單一指令運(yùn)算。分支單元312執(zhí)行分支指令,所述分支指令通過修改由IFU 302用于從指令高速緩存304請(qǐng)求指令的指令地址來有條件地更改通過程序的執(zhí)行流。取決于已解碼指令與可用執(zhí)行單元312、314、316、318、320、322、324、3洸及328的混合,IDU 309將由指令解碼單元308解碼的指令分組在一起以同時(shí)執(zhí)行,以便針對(duì)每個(gè)指令執(zhí)行所需運(yùn)算。例如,因?yàn)閮H存在兩個(gè)加載/存儲(chǔ)單元314及316,所以最多可將兩個(gè)加載/存儲(chǔ)型指令分組在一起。在一個(gè)示例性實(shí)施例中,可將高達(dá)七個(gè)指令分組在一起(兩個(gè)定點(diǎn)算術(shù)、兩個(gè)載入/存儲(chǔ)、兩個(gè)浮點(diǎn)算術(shù)或兩個(gè)向量多媒體擴(kuò)展及一個(gè)分支),且高達(dá)五個(gè)指令可屬于同一線程。在包括來自較低優(yōu)先級(jí)線程的指令前,IDU 309在組中包括來自較高優(yōu)先級(jí)線程的盡可能多的指令(高達(dá)五個(gè))。線程優(yōu)先級(jí)由線程的優(yōu)先級(jí)值及其進(jìn)程的優(yōu)先級(jí)類別確定。處理系統(tǒng)使用所有可執(zhí)行線程的基本優(yōu)先級(jí)級(jí)別來確定哪一線程獲得處理器時(shí)間的下一分配。指令調(diào)度器310在每個(gè)優(yōu)先級(jí)級(jí)別處按循環(huán)方式調(diào)度線程,且僅當(dāng)在較高級(jí)別處不存在可執(zhí)行線程時(shí),才發(fā)生在較低級(jí)別處調(diào)度線程。然而,IDU 309將同一組中的FPU指令322及324或VMX指令3 及3 與FXU 指令318及320 —起分派。也就是說,IDU 309不分派同一組中的FPU指令322及3M與 VMX指令3 及328。存儲(chǔ)于SPR 338及340中的諸如指令指針、堆棧指針或處理器狀態(tài)字之類的程序狀態(tài)向IDU309指示線程優(yōu)先級(jí)352。指令完成單元邪4監(jiān)視內(nèi)部總線結(jié)構(gòu)349以判定正在執(zhí)行單元312、314、316、318、 320,322,324,326及328中執(zhí)行的指令何時(shí)結(jié)束將它們的操作數(shù)結(jié)果寫入ARF 330、332、 334、336、338、340、342、344 及 346。由分支單元 312、FXUA 318,FXUB 320,LSUA 314 及 LSUB 316執(zhí)行的指令需要相同數(shù)目的循環(huán)來執(zhí)行,而由FPUA 322、FPUB 324、VMXA 326及VMXB 3 執(zhí)行的指令需要變量,且因而需要較大數(shù)目的循環(huán)來執(zhí)行。因此,被分組在一起且同時(shí)開始執(zhí)行的指令未必同時(shí)結(jié)束執(zhí)行。指令的“完成”意味著指令正在結(jié)束在執(zhí)行單元312、 314、316、318、320、322、324、3沈及3 之一中的執(zhí)行、已通過了清除點(diǎn),且所有較舊的指令已經(jīng)在架構(gòu)的狀態(tài)下更新(因?yàn)楸仨氂行虻赝瓿芍噶?。因此,指令現(xiàn)在準(zhǔn)備完成且更新架構(gòu)的狀態(tài),這意味著當(dāng)指令已經(jīng)完成時(shí)更新數(shù)據(jù)的最終狀態(tài)。僅可有序地更新架構(gòu)的狀態(tài), 即,指令必須按其被分派的次序完成,且當(dāng)每個(gè)指令完成時(shí)必須更新完成的數(shù)據(jù),使得下一個(gè)指令使用最完整的數(shù)據(jù)。指令完成單元邪4監(jiān)視指令的完成,且將控制信息356發(fā)送至IDU 309以通知IDU 309可將更多指令組分派至執(zhí)行單元312、314、316、318、320、322、324、326及328。IDU 309 將分派信號(hào)358(其充當(dāng)節(jié)流閥以沿著管線向下將更多指令攜帶至IDU 309)發(fā)送至IFU 302及指令解碼單元308以指示其準(zhǔn)備接收更多解碼后的指令。
圖4描繪根據(jù)一個(gè)示例性實(shí)施例的使用相關(guān)矩陣追蹤解除分配的加載指令的例示性方塊圖。指令調(diào)度器402從指令分派單元404接收指令,且使用相關(guān)分析器406生成相關(guān)矩陣以追蹤源操作數(shù),即,將在指令執(zhí)行中使用的數(shù)據(jù)。相關(guān)矩陣追蹤加載和存儲(chǔ)之間的存儲(chǔ)器相關(guān)性,且追蹤來自發(fā)出隊(duì)列408中的指令的寄存器相關(guān)性。圖5描繪根據(jù)一個(gè)示例性實(shí)施例的例示性基本相關(guān)矩陣。在基本相關(guān)矩陣500中,存在N個(gè)行502及N個(gè)列 504,其中N為發(fā)出隊(duì)列408中的指令數(shù)。對(duì)于在發(fā)出隊(duì)列408中等待執(zhí)行的每個(gè)指令都存在一行。對(duì)于給定行和列,行中的指令依賴于該指令在列中的結(jié)果的可用性(如果矩陣的該列和該行中的位為“1”)??纱嬖陬~外列來指示諸如執(zhí)行單元的其他資源之間的相關(guān)性。 例如,在圖5中,行3中的加法指令506依賴于行1中的寄存器r5的加載508的結(jié)果。因此,指令調(diào)度器402將表示加載指令的列1、表示加法指令的行3的位更新至“1”。返回圖4,再次地,需要在已發(fā)出指令后盡可能快地解除分配來自發(fā)出隊(duì)列408的指令以為新指令騰出空間;然而,先前相關(guān)矩陣(如圖5的基本相關(guān)矩陣500)的缺點(diǎn)在于, 如果指令生產(chǎn)方仍位于發(fā)出隊(duì)列408內(nèi),則指令僅追蹤該生產(chǎn)方的可用性。因此,如果消費(fèi)方指令(即,依賴于先前指令的結(jié)果的指令)仍正在追蹤指令結(jié)果的可用性,則指令調(diào)度器 402不能解除分配來自發(fā)出隊(duì)列408的指令。示例性實(shí)施例描述了一種允許加載指令的相關(guān)方在從發(fā)出隊(duì)列解除分配加載之前及之后追蹤加載結(jié)果的可用性的方式。因此,相關(guān)分析器406生成含有N行及N+L列的相關(guān)矩陣414,其中N為發(fā)出隊(duì)列408中的指令數(shù),且L為加載未命中隊(duì)列410中的指令數(shù)。 如果發(fā)出隊(duì)列408發(fā)出加載指令且該加載指令在1級(jí)(Li)數(shù)據(jù)高速緩存中未命中,則加載未命中隊(duì)列410分配用于該加載指令的表項(xiàng)。在相關(guān)矩陣414中,如果行418中的指令416 具有相關(guān)性(諸如,對(duì)由與發(fā)出隊(duì)列關(guān)聯(lián)的列420中的1指示的指令426的相關(guān)性),則指令調(diào)度器402解除分配列420中指示的相關(guān)性,且將相關(guān)性分配給與加載未命中隊(duì)列關(guān)聯(lián)的列422。即,指令調(diào)度器402讀取指示與加載指令420關(guān)聯(lián)的相關(guān)性的列中的任何表項(xiàng), 且將相關(guān)性寫入與相關(guān)矩陣414的加載未命中隊(duì)列關(guān)聯(lián)的關(guān)聯(lián)列422。在此實(shí)例中,表項(xiàng)由箭頭似4指示。圖6描繪根據(jù)一個(gè)示例性實(shí)施例的例示性擴(kuò)展后的相關(guān)矩陣。擴(kuò)展后的相關(guān)矩陣提供當(dāng)指令被分配在發(fā)出隊(duì)列中時(shí)及在加載指令已從發(fā)出隊(duì)列解除分配且被分配給加載未命中隊(duì)列(在加載未命中的情況下)后允許加載指令的相關(guān)方追蹤加載指令結(jié)果的可用性的方式。在擴(kuò)展后的相關(guān)矩陣600中,存在與發(fā)出隊(duì)列408及加載未命中隊(duì)列410關(guān)聯(lián)的 N-I個(gè)行602及Ν+L-l個(gè)列604。繼續(xù)以上實(shí)例,行3中的加法指令606依賴于行1中的寄存器r5的加載608的結(jié)果。如果發(fā)出隊(duì)列408發(fā)出加載指令608且加載指令608在1級(jí) (Li)數(shù)據(jù)高速緩存中未命中,則指令調(diào)度器402從列610解除分配加載指令608的關(guān)聯(lián)表項(xiàng),且將該表項(xiàng)分配給擴(kuò)展后的相關(guān)矩陣600中與加載未命中隊(duì)列關(guān)聯(lián)的列612。S卩,指令調(diào)度器402讀取擴(kuò)展后的相關(guān)矩陣600中的列610中的表項(xiàng)(通過其識(shí)別具有相關(guān)性的加載指令),且將該表項(xiàng)寫入擴(kuò)展后的相關(guān)矩陣600的列N+1^612 (由箭頭614指示)。因此, 在示例性實(shí)施例中,對(duì)發(fā)出隊(duì)列中的第二指令的指令相關(guān)性被轉(zhuǎn)換成對(duì)發(fā)出隊(duì)列外的第二指令的相關(guān)性。 返回圖4,指令調(diào)度器402還可包括追蹤在發(fā)出隊(duì)列408中等待的所有指令的隊(duì)列位置的映射器412。當(dāng)指令調(diào)度器402首先將指令分配給發(fā)出隊(duì)列408時(shí),指令通過讀取映射器412獲得它們的源操作數(shù)的位置。當(dāng)指令調(diào)度器402從發(fā)出隊(duì)列408解除分配加載指令以將加載指令分配給加載未命中隊(duì)列410時(shí),映射器412使用加載指令的加載未命中隊(duì)列表項(xiàng)替換加載指令的發(fā)出隊(duì)列表項(xiàng)。圖7描繪根據(jù)一個(gè)示例性實(shí)施例的在使用相關(guān)矩陣追蹤解除分配的加載指令過程中執(zhí)行的操作的流程圖。當(dāng)操作開始時(shí),處理器檢測到加載指令在1級(jí)(Li)高速緩存中未命中(步驟702)。如果在步驟702,處理器未能檢測到未命中,則操作返回步驟702。如果在步驟702,處理器判定加載指令在Ll高速緩存中未命中,則指令調(diào)度器將加載指令分配給加載未命中隊(duì)列(步驟704)。指令調(diào)度器接著從發(fā)出隊(duì)列解除分配加載指令(步驟 706)。指令調(diào)度器接著判定在相關(guān)矩陣的發(fā)出隊(duì)列部分中是否存在用于加載指令的相關(guān)表項(xiàng)(步驟708)。如果在步驟708處,指令調(diào)度器判定在相關(guān)矩陣的發(fā)出隊(duì)列部分中不存在用于加載指令的相關(guān)表項(xiàng),則操作返回步驟702。如果在步驟708處,指令調(diào)度器判定在相關(guān)矩陣的發(fā)出隊(duì)列部分中存在用于加載指令的相關(guān)表項(xiàng),則指令調(diào)度器從相關(guān)矩陣的與加載指令關(guān)聯(lián)的列讀取指定哪些指令依賴于加載指令的數(shù)據(jù)(步驟710)。指令調(diào)度器接著將所述數(shù)據(jù)寫入與加載未命中隊(duì)列關(guān)聯(lián)的相關(guān)矩陣的與加載指令關(guān)聯(lián)的新列中(步驟 712),其后,操作返回步驟702。示例性實(shí)施例提供了一種允許加載指令的相關(guān)方在加載被從發(fā)出隊(duì)列解除分配之前和之后追蹤加載結(jié)果的可用性的機(jī)制。示例性實(shí)施例提供并非為N行和N列而是通過 L個(gè)額外列擴(kuò)展的相關(guān)矩陣,其中L是加載未命中隊(duì)列中的表項(xiàng)數(shù)。當(dāng)已知加載指令在Ll 高速緩存中未命中且被分配給加載未命中隊(duì)列時(shí),可解除分配該加載指令在發(fā)出隊(duì)列中的表項(xiàng)。當(dāng)解除分配加載指令時(shí),讀取標(biāo)記加載指令的所有相關(guān)方的矩陣的列,且將此列寫入屬于加載未命中隊(duì)列表項(xiàng)的新列中。示例性實(shí)施例允許在加載指令的結(jié)果可用之前將加載指令從發(fā)出隊(duì)列解除分配, 同時(shí)仍允許相關(guān)指令使用相關(guān)矩陣追蹤它們的源操作數(shù)的可用性。通過在加載指令的結(jié)果可用之前解除分配加載指令,將新指令置于發(fā)出隊(duì)列中。隊(duì)列利用率的增加改進(jìn)了處理器性能。另外,示例性實(shí)施例允許在將指令置于發(fā)出隊(duì)列中之后修改指令的相關(guān)信息,這在先前使用相關(guān)矩陣的情況下是不可能的,即,在將指令首先置于發(fā)出隊(duì)列時(shí),該指令的生產(chǎn)方在任何時(shí)刻的位置可與該指令追蹤的資源相同或不同。如上指出,應(yīng)了解,示例性實(shí)施例可采用完全硬件實(shí)施例、完全軟件實(shí)施例或者含有硬件及軟件元素兩者的實(shí)施例的形式。在一個(gè)實(shí)例實(shí)施例中,示例性實(shí)施例的機(jī)制以軟件或程序代碼實(shí)施,所述軟件或程序代碼包括(但不限于)固件、駐留軟件、微碼等。適合于存儲(chǔ)和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個(gè)直接或通過系統(tǒng)總線間接連接到存儲(chǔ)器元件的處理器。所述存儲(chǔ)器元件可以包括在程序代碼的實(shí)際執(zhí)行期間采用的本地存儲(chǔ)器、大容量存儲(chǔ)裝置以及提供至少某些程序代碼的臨時(shí)存儲(chǔ)以減少必須在執(zhí)行期間從大容量存儲(chǔ)裝置檢索代碼的次數(shù)的高速緩沖存儲(chǔ)器。輸入/輸出或I/O設(shè)備(包括但不限于鍵盤、顯示器、指點(diǎn)設(shè)備等)可以直接或通過中間I/O控制器與系統(tǒng)相連。網(wǎng)絡(luò)適配器也可以被連接到系統(tǒng)以使所述數(shù)據(jù)處理系統(tǒng)能夠通過中間專用或公共網(wǎng)絡(luò)變得與其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機(jī)或存儲(chǔ)設(shè)備相連。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡只是當(dāng)前可用的網(wǎng)絡(luò)適配器類型中的少數(shù)幾種。
出于示例和說明目的給出了對(duì)本發(fā)明的描述,并且所述描述并非旨在是窮舉的或是將本發(fā)明限于所公開的形式。對(duì)于本領(lǐng)域的技術(shù)人員來說,許多修改和變化都將是顯而易見的。實(shí)施例的選擇和描述是為了最佳地解釋本發(fā)明的原理、實(shí)際應(yīng)用,并且當(dāng)適合于所構(gòu)想的特定使用時(shí),使得本領(lǐng)域的其他技術(shù)人員能夠理解本發(fā)明的具有各種修改的各種實(shí)施例。
權(quán)利要求
1.一種在數(shù)據(jù)處理系統(tǒng)中用于追蹤解除分配的加載指令的方法,所述方法包括檢測發(fā)出隊(duì)列內(nèi)的一組指令中的加載指令是否未命中;響應(yīng)于所述加載指令的未命中,將所述加載指令分配給加載未命中隊(duì)列;解除分配來自所述發(fā)出隊(duì)列的所述加載指令;判定相關(guān)矩陣的發(fā)出隊(duì)列部分中是否存在用于所述加載指令的相關(guān)表項(xiàng);響應(yīng)于所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分中存在用于所述加載指令的相關(guān)表項(xiàng),從所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分的所述相關(guān)表項(xiàng)讀取指定依賴于所述加載指令的一組相關(guān)指令的數(shù)據(jù);及將所述數(shù)據(jù)寫入所述相關(guān)矩陣的與所述加載未命中隊(duì)列關(guān)聯(lián)的加載未命中隊(duì)列部分中的新表項(xiàng)內(nèi)。
2.如權(quán)利要求1的方法,其中所述檢測由所述數(shù)據(jù)處理系統(tǒng)中的處理器執(zhí)行,并且其中所述分配、解除分配、判定、讀取及寫入由所述數(shù)據(jù)處理系統(tǒng)中的指令調(diào)度器執(zhí)行。
3.如權(quán)利要求1或2的方法,還包括由相關(guān)分析器基于所述發(fā)出隊(duì)列中的所述一組指令生成所述相關(guān)矩陣,其中所述相關(guān)矩陣包括用于所述發(fā)出隊(duì)列內(nèi)的所述一組指令中的每個(gè)指令的表項(xiàng)以及用于指令具有的對(duì)所述發(fā)出隊(duì)列內(nèi)的所述一組指令中的另一指令的每個(gè)相關(guān)性的表項(xiàng)。
4.如權(quán)利要求3的方法,還包括由指令調(diào)度器基于所述一組指令中被分配給所述加載未命中隊(duì)列的一個(gè)或多個(gè)指令將額外表項(xiàng)分配給所述相關(guān)矩陣。
5.如權(quán)利要求1至4中的任一權(quán)利要求的方法,還包括由映射器追蹤所述一組相關(guān)指令在所述發(fā)出隊(duì)列中的隊(duì)列位置。
6.如權(quán)利要求1至5中的任一權(quán)利要求的方法,其中所述相關(guān)矩陣追蹤所述發(fā)出隊(duì)列中的所述一組指令和所述加載未命中隊(duì)列中的一組指令之間的相關(guān)性。
7.如權(quán)利要求1至6中的任一權(quán)利要求的方法,其中將指令對(duì)所述發(fā)出隊(duì)列內(nèi)的所述一組指令中的第二指令的相關(guān)性轉(zhuǎn)換為對(duì)所述發(fā)出隊(duì)列以外的所述第二指令的相關(guān)性。
8.如權(quán)利要求1至7中的任一權(quán)利要求的方法,其中所述加載指令在一級(jí)(Li)高速緩存中未命中。
9.一種處理器,包括指令調(diào)度器;發(fā)出隊(duì)列;及加載未命中隊(duì)列,其中所述指令調(diào)度器響應(yīng)于所述發(fā)出隊(duì)列中的加載指令的未命中,將所述加載指令分配給所述加載未命中隊(duì)列,其中由所述處理器檢測一組指令中的所述加載指令的未命中;解除分配來自所述發(fā)出隊(duì)列的所述加載指令;判定相關(guān)矩陣的發(fā)出隊(duì)列部分中是否存在用于所述加載指令的相關(guān)表項(xiàng);響應(yīng)于所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分中存在用于所述加載指令的相關(guān)表項(xiàng),從所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分的所述相關(guān)表項(xiàng)讀取指定依賴于所述加載指令的一組相關(guān)指令的數(shù)據(jù);及將所述數(shù)據(jù)寫入所述相關(guān)矩陣的與所述加載未命中隊(duì)列關(guān)聯(lián)的加載未命中隊(duì)列部分中的新表項(xiàng)內(nèi)。
10.如權(quán)利要求9的處理器,其中所述處理器還包括相關(guān)分析器,并且其中所述相關(guān)分析器基于所述發(fā)出隊(duì)列中的所述一組指令生成所述相關(guān)矩陣,其中所述相關(guān)矩陣包括用于所述發(fā)出隊(duì)列內(nèi)的所述一組指令中的每個(gè)指令的表項(xiàng)以及用于指令具有的對(duì)所述發(fā)出隊(duì)列內(nèi)的所述一組指令中的另一指令的每個(gè)相關(guān)性的表項(xiàng)。
11.如權(quán)利要求10的處理器,其中所述指令調(diào)度器進(jìn)一步基于所述一組指令中被分配給所述加載未命中隊(duì)列的一個(gè)或多個(gè)指令將額外表項(xiàng)分配給所述相關(guān)矩陣。
12.如權(quán)利要求9至11中的任一權(quán)利要求的處理器,其中所述處理器還包括映射器,并且其中所述映射器追蹤所述一組相關(guān)指令在所述發(fā)出隊(duì)列中的隊(duì)列位置。
13.如權(quán)利要求9至12中的任一權(quán)利要求的處理器,其中所述相關(guān)矩陣追蹤所述發(fā)出隊(duì)列中的所述一組指令和所述加載未命中隊(duì)列中的一組指令之間的相關(guān)性。
14.如權(quán)利要求9至13中的任一權(quán)利要求的處理器,其中將指令對(duì)所述發(fā)出隊(duì)列內(nèi)的所述一組指令中的第二指令的相關(guān)性轉(zhuǎn)換為對(duì)所述發(fā)出隊(duì)列以外的所述第二指令的相關(guān)性。
15.一種裝置,包括處理器;及耦接至所述處理器的存儲(chǔ)器,其中所述存儲(chǔ)器包括當(dāng)由所述處理器執(zhí)行時(shí)使所述處理器執(zhí)行以下操作的指令檢測發(fā)出隊(duì)列內(nèi)的一組指令中的加載指令是否未命中;響應(yīng)于所述加載指令的未命中,將所述加載指令分配給加載未命中隊(duì)列;解除分配來自所述發(fā)出隊(duì)列的所述加載指令;判定相關(guān)矩陣的發(fā)出隊(duì)列部分中是否存在用于所述加載指令的相關(guān)表項(xiàng);響應(yīng)于所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分中存在用于所述加載指令的相關(guān)表項(xiàng),從所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分的所述相關(guān)表項(xiàng)讀取指定依賴于所述加載指令的一組相關(guān)指令的數(shù)據(jù);及將所述數(shù)據(jù)寫入所述相關(guān)矩陣的與所述加載未命中隊(duì)列關(guān)聯(lián)的加載未命中隊(duì)列部分中的新表項(xiàng)內(nèi)。
16.如權(quán)利要求15的裝置,其中所述指令還使所述處理器基于所述發(fā)出隊(duì)列中的所述一組指令生成所述相關(guān)矩陣,其中所述相關(guān)矩陣包括用于所述發(fā)出隊(duì)列內(nèi)的所述一組指令中的每個(gè)指令的表項(xiàng)以及用于指令具有的對(duì)所述發(fā)出隊(duì)列內(nèi)的所述一組指令中的另一指令的每個(gè)相關(guān)性的表項(xiàng)。
17.如權(quán)利要求16的裝置,其中所述指令還使所述處理器基于所述一組指令中被分配給所述加載未命中隊(duì)列的一個(gè)或多個(gè)指令將額外表項(xiàng)分配給所述相關(guān)矩陣。
18.如權(quán)利要求15至17中的任一權(quán)利要求的裝置,其中所述指令還使所述處理器追蹤所述一組相關(guān)指令在所述發(fā)出隊(duì)列中的隊(duì)列位置。
19.如權(quán)利要求15至18中的任一權(quán)利要求的裝置,其中所述相關(guān)矩陣追蹤所述發(fā)出隊(duì)列中的所述一組指令和所述加載未命中隊(duì)列中的一組指令之間的相關(guān)性。
20.如權(quán)利要求15至19中的任一權(quán)利要求的裝置,其中將指令對(duì)所述發(fā)出隊(duì)列內(nèi)的所述一組指令中的第二指令的相關(guān)性轉(zhuǎn)換為對(duì)所述發(fā)出隊(duì)列以外的所述第二指令的相關(guān)性。
21.一種包括程序代碼裝置的計(jì)算機(jī)程序,當(dāng)所述程序在計(jì)算機(jī)上運(yùn)行時(shí),所述程序代碼裝置適于執(zhí)行如權(quán)利要求1至8中的任一權(quán)利要求的方法。
全文摘要
本發(fā)明提供一種用于追蹤解除分配的加載指令的機(jī)制。處理器檢測發(fā)出隊(duì)列內(nèi)的一組指令中的加載指令是否未命中。響應(yīng)于所述加載指令的未命中,指令調(diào)度器將所述加載指令分配給加載未命中隊(duì)列且解除分配來自所述發(fā)出隊(duì)列的所述加載指令。所述指令調(diào)度器判定相關(guān)矩陣的發(fā)出隊(duì)列部分中是否存在用于所述加載指令的相關(guān)表項(xiàng)。響應(yīng)于所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分中存在用于所述加載指令的相關(guān)表項(xiàng),所述指令調(diào)度器從所述相關(guān)矩陣的所述發(fā)出隊(duì)列部分的所述相關(guān)表項(xiàng)讀取指定依賴于所述加載指令的一組相關(guān)指令的數(shù)據(jù),且將所述數(shù)據(jù)寫入所述相關(guān)矩陣的加載未命中隊(duì)列部分中的新表項(xiàng)內(nèi)。
文檔編號(hào)G06F9/38GK102362257SQ201080013137
公開日2012年2月22日 申請(qǐng)日期2010年3月16日 優(yōu)先權(quán)日2009年3月24日
發(fā)明者C·M·阿伯內(nèi)西, M·D·布朗, T·A·文特昂, W·E·布爾科 申請(qǐng)人:國際商業(yè)機(jī)器公司