專利名稱:使用基本塊高速緩存的微處理器的制作方法
本申請(qǐng)的主題和1999,10,28中請(qǐng)的序列號(hào)為09/428399,名稱為“微處理器中的指令組組織和例外處理”的美國(guó)專利的主題相關(guān),其和本申請(qǐng)為同一受讓人,在此列為參考。
本發(fā)明一般涉及微處理器結(jié)構(gòu)領(lǐng)域,尤其涉及利用指令組結(jié)構(gòu)、相應(yīng)的高速緩存功能及其有用的擴(kuò)展的微處理器。
微處理器技術(shù)已經(jīng)達(dá)到千兆赫的性能,對(duì)微處理器設(shè)計(jì)者的主要的挑戰(zhàn)是利用達(dá)到最新技術(shù)發(fā)展水平的技術(shù),同時(shí)又保持和為利用特定的指令系統(tǒng)結(jié)構(gòu)(ISA)操作而設(shè)計(jì)的大量的已安裝軟件兼容。為了解決這個(gè)問(wèn)題,設(shè)計(jì)者已經(jīng)實(shí)現(xiàn)了“分層結(jié)構(gòu)”的微處理器,其適應(yīng)于接收按照現(xiàn)有的ISA構(gòu)成的指令,并把接收的指令的指令格式轉(zhuǎn)換為更適合于在千兆赫?qǐng)?zhí)行流水線中操作的內(nèi)部ISA。參看圖4,圖中示出了分層結(jié)構(gòu)的微處理器401的選擇的部分。在這種設(shè)計(jì)中,微處理器401的高速緩存410接收并存儲(chǔ)借助于取單元402從主存儲(chǔ)器取來(lái)的指令。在指令高速緩存單元410中存儲(chǔ)的指令按照第一ISA(即其中寫有由處理器401執(zhí)行的程序的ISA)被格式化。然后從指令高速緩存410中檢索指令并通過(guò)ISA轉(zhuǎn)換單元412被轉(zhuǎn)換為第二ISA。因?yàn)閺牡谝籌SA到第二ISA的轉(zhuǎn)換需要多個(gè)周期,所以轉(zhuǎn)換處理一般是流水線處理,因而,在任何給定的時(shí)刻,可能有多個(gè)被從第一ISA轉(zhuǎn)換為第二ISA的指令。然后輸出被轉(zhuǎn)換的指令,以便在處理器401的執(zhí)行流水線422中執(zhí)行。取單元402包括分支預(yù)測(cè)邏輯406,其借助于預(yù)測(cè)分支決定的結(jié)果試圖確定伴隨著分支指令的將被執(zhí)行的指令的地址。然后,指令被預(yù)測(cè)性地發(fā)出并被根據(jù)分支預(yù)測(cè)執(zhí)行。然而,當(dāng)一個(gè)分支預(yù)測(cè)錯(cuò)誤時(shí),被懸在微處理器401的指令高速緩存410和結(jié)束級(jí)432之間的指令必須被刷新。當(dāng)誤預(yù)測(cè)的分支引起系統(tǒng)刷新時(shí),則招致作為流水線長(zhǎng)度的函數(shù)的性能損失。必須被刷新的流水線的數(shù)量越大,分支誤預(yù)測(cè)性能損失也越大。因?yàn)榉謱芋w系結(jié)構(gòu)加于處理器流水線,并增加了在一個(gè)給定的時(shí)刻可能處于“飛行”中的指令的數(shù)量,所以和分層體系結(jié)構(gòu)相關(guān)的分支預(yù)測(cè)損失可能成為處理器性能的一個(gè)限制因素。因此非常需要實(shí)現(xiàn)一種能夠解決分支誤預(yù)測(cè)性能損失的分層體系結(jié)構(gòu)的微處理器。此外,還需要能夠至少部分地解決由重復(fù)執(zhí)行一段代碼而引起的例外條件反復(fù)發(fā)生的解決方案。還需要一種能夠操作實(shí)際上較大的發(fā)出隊(duì),而不犧牲檢索下一個(gè)要執(zhí)行的指令的能力。
上述的問(wèn)題通過(guò)一種利用指令組和與所述指令組的格式匹配的高速緩存裝置的微處理器被大部分解決了。本發(fā)明的一個(gè)實(shí)施例提出了一種微處理器和一種相關(guān)的方法以及數(shù)據(jù)處理系統(tǒng)。所述微處理器包括指令分裂單元,其被構(gòu)成用于接收第一個(gè)微處理器指令集。所述分裂單元把所述指令集組織指令組。在所述指令組中的每個(gè)指令共用公共的指令組標(biāo)記。所述處理器還包括基本塊高速緩存裝置,其利用指令組格式被組織,并且被構(gòu)成用于高速緩存由分裂單元產(chǎn)生的指令組。處理器的執(zhí)行單元適用于執(zhí)行指令組中的指令。在一個(gè)實(shí)施例中,當(dāng)在執(zhí)行指令組中的指令期間產(chǎn)生引起刷新的異常時(shí),則所述的刷新只刷新那些已被從基本塊高速緩存中分派的指令。通過(guò)只刷新那些已經(jīng)到達(dá)基本塊高速緩存的指令,處理器用不著刷新懸掛在分裂單元流水線中的指令。因?yàn)楸凰⑿碌闹噶钶^少,所以可以減少異常性能損失。在一個(gè)實(shí)施例中,接收的指令被按照第一指令格式格式化,并且按照第二指令格式對(duì)第二指令集格式化,其中所述第二指令格式比第一指令格式寬?;緣K高速緩存被合適地構(gòu)成,用于在基本塊高速緩存的相應(yīng)的入口中存儲(chǔ)每個(gè)指令組。在一個(gè)實(shí)施例中,基本塊高速緩存中的每個(gè)入口包括表示相應(yīng)的基本塊高速緩存入口的入口字段和預(yù)測(cè)下一個(gè)要被執(zhí)行的指令組的指針。處理器最好被構(gòu)成用于響應(yīng)誤預(yù)測(cè)的分支更新高速緩存的指針。
本發(fā)明還提出了一種利用指令歷史信息和基本塊高速緩存一起來(lái)改善性能的微處理器、數(shù)據(jù)處理系統(tǒng)和方法。這種處理器適用于接收一個(gè)指令集,并把所述指令集組織指令組,然后,指令組被分派執(zhí)行。在執(zhí)行指令組時(shí),記錄表示和指令組相關(guān)的異常事件的指令歷史信息。此后,響應(yīng)指令歷史信息修改指令的執(zhí)行,以便阻止在隨后的指令組執(zhí)行期間發(fā)生異常事件。所述處理器包括存儲(chǔ)裝置,例如指令高速緩存,L2高速緩存和系統(tǒng)存儲(chǔ)器,分裂單元,和基本塊高速緩存。分裂單元被構(gòu)成用于從存儲(chǔ)裝置接收指令集。分裂單元適用于把指令集組織成指令組。分裂單元可以從第一指令格式到第二指令格式修改指令集的格式?;緣K高速緩存的結(jié)構(gòu)適用于存儲(chǔ)指令組。基本塊高速緩存包括相應(yīng)于每個(gè)基本塊高速緩存入口的指令歷史字段。指令歷史信息表示和指令組相關(guān)的異常事件。在優(yōu)選實(shí)施例中,基本塊高速緩存的每個(gè)入口相應(yīng)于由分裂單元產(chǎn)生的一個(gè)指令組。處理器還可以包括完成表控制邏輯,其被構(gòu)成用于當(dāng)指令組完成時(shí)存儲(chǔ)執(zhí)行歷史字段中的信息。指令歷史信息可以表示在指令組中的指令是否具有對(duì)另一個(gè)指令依賴性,或者可以表示先前的指令組的執(zhí)行是否引起存儲(chǔ)輸送異常。在這個(gè)實(shí)施例中,處理器被構(gòu)成用于響應(yīng)檢測(cè)到指令組先前的執(zhí)行引起過(guò)存儲(chǔ)輸送異常而以有序方式執(zhí)行指令。
本發(fā)明還提出一種利用第一發(fā)出隊(duì)和第二發(fā)出隊(duì)的處理器、數(shù)據(jù)處理系統(tǒng)和相關(guān)的方法。所述處理器適用于向發(fā)出單元分派指令。所述發(fā)出單元包括第一發(fā)出隊(duì)和第二發(fā)出隊(duì)。如果指令在當(dāng)前不滿足被發(fā)出的條件則被存儲(chǔ)在第一發(fā)出隊(duì)中。如果指令在當(dāng)前滿足被發(fā)出的條件則被存儲(chǔ)在第二發(fā)出隊(duì)中。處理器從第一發(fā)出隊(duì)的指令中確定要發(fā)出的下一個(gè)指令。如果指令依賴于另一個(gè)指令的執(zhí)行結(jié)果,則可以從第一發(fā)出隊(duì)中轉(zhuǎn)移到第二發(fā)出隊(duì)中。在一個(gè)實(shí)施例中,指令可以在被發(fā)出以便執(zhí)行之后被從第一發(fā)出隊(duì)中轉(zhuǎn)移到第二發(fā)出隊(duì)中。在這個(gè)實(shí)施例中,在一個(gè)特定的時(shí)間間隔內(nèi),指令可以被保存在第二發(fā)出隊(duì)中。此后,如果該指令尚未被拒絕,則包含該指令的第二發(fā)出隊(duì)入口不再被分配。所述微處理器包括指令高速緩存,分配單元,其被構(gòu)成用于接收來(lái)自指令高速緩存的指令,以及發(fā)送單元,其被構(gòu)成用于接收來(lái)自分配單元的指令。發(fā)送單元適用于分配當(dāng)前夠執(zhí)行條件的分派的指令到第一發(fā)出隊(duì)中,并把當(dāng)前不夠執(zhí)行條件的指令分配到第二發(fā)出隊(duì)中。
本發(fā)明的其它的目的和優(yōu)點(diǎn)通過(guò)下面結(jié)合附圖詳細(xì)說(shuō)明本發(fā)明可以更加清楚,其中
圖1是包括按照本發(fā)明的一個(gè)實(shí)施例的數(shù)據(jù)處理系統(tǒng)的選擇的部分的方塊圖;圖2是按照本發(fā)明的一個(gè)實(shí)施例的微處理器的選擇的部分的方塊圖;圖3表示由圖2所示的處理器的一個(gè)實(shí)施例執(zhí)行的指令分裂功能的一個(gè)例子;圖4是一種微處理器的選擇的部分的方塊圖;圖5是圖2的微處理器的基本高速緩存塊的方塊圖;圖6說(shuō)明圖2的微處理器可能遇到的各種分支情況;圖7是適用于利用本發(fā)明的一個(gè)填空表的方塊圖;圖8是包括指令歷史信息的基本塊高速緩存的方塊圖;以及圖9是包括按照本發(fā)明的一個(gè)實(shí)施例的一次發(fā)出隊(duì)和二次發(fā)出隊(duì)的發(fā)出隊(duì)的方塊圖。
雖然本發(fā)明可以用各種不同的形式實(shí)施,此處還是以舉例的方式在附圖中示出了一些特定的實(shí)施例并加以詳細(xì)說(shuō)明。不過(guò),應(yīng)當(dāng)理解,這里的附圖和詳細(xì)說(shuō)明并不是為了把本發(fā)明限制于這些特定的實(shí)施例,而恰恰相反,本發(fā)明應(yīng)當(dāng)包括落在由所附權(quán)利要求限定的本發(fā)明的構(gòu)思范圍內(nèi)的所有改型和等效替代方案。
參見(jiàn)圖1,其中示出了按照本發(fā)明的數(shù)據(jù)處理系統(tǒng)100的一個(gè)實(shí)施例。系統(tǒng)100包括一個(gè)或幾個(gè)中央處理單元(處理器)101a,101b,101c等(一般被稱為處理器101)。在一個(gè)實(shí)施例中,每個(gè)處理器101可以包括簡(jiǎn)化指令系統(tǒng)計(jì)算機(jī)(RISC)微處理器。關(guān)于RISC處理器的的附加信息一般可以在C.May et al.Ed.,PowerPCArchitecture:A Specification for a New Family of RISC Peocessors(Morgan Kaufmann,1994 2d edition)得到。處理器101通過(guò)系統(tǒng)總線113和系統(tǒng)存儲(chǔ)器250以及各種其它元件相連。只讀存儲(chǔ)器(ROM)102和系統(tǒng)總線113相連,并且可以包括基本輸入輸出系統(tǒng)(BIOS),其用于控制系統(tǒng)100的某個(gè)基本功能。圖1還示出了I/O適配器107和網(wǎng)絡(luò)適配器106,它們和系統(tǒng)總線113相連。I/O適配器107連接系統(tǒng)總線113和大容量的存儲(chǔ)裝置104例如硬盤103和/或磁帶存儲(chǔ)驅(qū)動(dòng)器105。網(wǎng)絡(luò)適配器106互連總線113和外部網(wǎng)絡(luò),以便使數(shù)據(jù)處理系統(tǒng)100能夠和其它這樣的的系統(tǒng)進(jìn)行通信。顯示監(jiān)視器136通過(guò)顯示適配器112和系統(tǒng)總線113相連,其中可以包括圖形適配器,用于改善圖形密集應(yīng)用的性能,以及視頻控制器。在一個(gè)實(shí)施例中,適配器107,106和112可以通過(guò)中間總線橋(未示出)和一個(gè)或幾個(gè)與系統(tǒng)總線113相連的I/O總線。適用于連接外圍設(shè)備例如硬盤控制器、網(wǎng)絡(luò)適配器、和圖形適配器的I/O總線包括按照PCI本地總線規(guī)范Rev.2.2規(guī)定的外圍元件接口(PCI)總線,其可以從PCI Special Interest Group,Hillsboro,OR,得到,在此列為參考。還示出了通過(guò)用戶接口適配器108和系統(tǒng)總線113相連的附加的輸入輸出裝置。鍵盤109、鼠標(biāo)110、以及揚(yáng)聲器111都通過(guò)用戶接口適配器108和總線113相連,所述用戶接口適配器可以包括把多個(gè)設(shè)備適配器集成一個(gè)集成電路的超I/O芯片。關(guān)于這種芯片的其它信息,讀者可以參閱PC87338/PC97338ACPI 1.0 and PC98/99 Compliant SuperI/O data sheet from NationalSemiconductor Corporation (November 1998) at微處理器.national.com.。這樣,如圖1所示的配置,系統(tǒng)100包括呈處理器101的形式的處理裝置,包括系統(tǒng)存儲(chǔ)器250和大容量存儲(chǔ)器104的存儲(chǔ)裝置,輸入裝置例如鍵盤109和鼠標(biāo)110,以及包括揚(yáng)聲器111和顯示器136的輸出裝置。在一個(gè)實(shí)施例中,系統(tǒng)存儲(chǔ)器250和大容量存儲(chǔ)器104集中存儲(chǔ)一種操作系統(tǒng)例如IBM公司的AIX操作系統(tǒng)或其它合適的操作系統(tǒng),用于協(xié)調(diào)圖1所示的各種元件的功能。關(guān)于AIX操作系統(tǒng)的其它細(xì)節(jié)可以在AIXVersion 4.3 TechnicalReference:Base Operating System and Extensions,Volumes land 2(order numbers SC23-4159and SC23-4160);AIX Version 4.3 SystemUser’s Guide:Communications and Networks(order number SC23-4122);and AIX Version 4.3 System User’s Guide:Operating Systemand Devices(order number SC23-4121)from IBM Corporation at微處理器.ibm.com得到,在此列為參考。
參見(jiàn)圖2,其中示出了按照本發(fā)明的一個(gè)實(shí)施例的處理器101的一個(gè)簡(jiǎn)化的方塊圖。圖2所示的處理器101包括適用于產(chǎn)生要被讀取的下一個(gè)指令的地址的指令讀取單元202。由指令讀取單元202產(chǎn)生的指令地址被提供給指令高速緩存210。讀取單元202可以包括分支預(yù)測(cè)邏輯,顧名思義,其用于進(jìn)行關(guān)于影響程序執(zhí)行流程的決定結(jié)果的預(yù)測(cè)。為了通過(guò)推測(cè)地和無(wú)序地執(zhí)行指令來(lái)實(shí)現(xiàn)改善性能,在處理器101的所有的能力中,正確地預(yù)測(cè)分支決定的能力是一個(gè)重要的元素。由讀取單元202產(chǎn)生的地址被提供給指令高速緩存210,其在一種高速存儲(chǔ)裝置中包含一個(gè)系統(tǒng)存儲(chǔ)器內(nèi)容的子集。在指令高速緩存210中存儲(chǔ)的指令最好具有第一ISA的格式,其一般是一種傳統(tǒng)的ISA,例如PowerPC或x86兼容的指令集。關(guān)于PowerPC指令集的詳細(xì)信息可以在PowerPC 620 RISCMicroprocessor User’s Manual available from Motorola,Inc.(OrderNo.MPC620UM/AD)中得到,在此列為參考。如果由讀取單元202產(chǎn)生的地址指令相應(yīng)于當(dāng)前被復(fù)制在指令高速緩存中的系統(tǒng)存儲(chǔ)器位置,則指令高速緩存210把相應(yīng)的指令送到指令分裂單元212。如果相應(yīng)于由讀取單元202產(chǎn)生的指令地址的指令當(dāng)前不在指令高速緩存210中(即由讀取單元202提供的指令地址不在指令高速緩存210中),則在指令被送到分裂單元212之前,指令必須從L2高速緩存(未示出)或系統(tǒng)存儲(chǔ)器中被讀取。
分裂單元212適用于修改輸入的指令流,從而產(chǎn)生一組優(yōu)化的指令,用于以高的操作頻率(例如超過(guò)1GHz的操作頻率)在下面的執(zhí)行流水線中執(zhí)行。在一個(gè)實(shí)施例中,例如,分裂單元212以32位寬ISA接收指令,例如由PowerPC支持的指令組,并把指令轉(zhuǎn)換成最好是較寬的第二ISA,其易于在以1GHz或更高的頻率范圍內(nèi)操作的高速執(zhí)行單元中執(zhí)行。由分裂單元212產(chǎn)生的指令的較寬的格式可以包括例如含有信息(例如操作數(shù)值)的顯式字段,所述信息只在由分裂單元212接收的指令中隱含或參考,所述字段按照第一格式被格式化。在一個(gè)實(shí)施例中,例如,由分裂單元212產(chǎn)生的指令的ISA具有64位或更寬的寬度。
在一個(gè)實(shí)施例中,設(shè)計(jì)分裂單元212,如此處所設(shè)想的,除去把指令從第一格式轉(zhuǎn)換成最好是較寬的第二格式之外,還把讀取的指令集組織在指令“組”302中,其例子如圖3所示。每個(gè)指令組302包括一組指令位置304a,304b等(一般被稱為指令位置304)。把指令集組織在指令組中有利于高速執(zhí)行,其中主要通過(guò)對(duì)于大量的飛行中的指令簡(jiǎn)化為保持重新命名寄存器變換和完成表所需的邏輯。在圖3中,示出了通過(guò)分裂單元212可以實(shí)現(xiàn)的指令組的3個(gè)例子。
在例1中,由標(biāo)號(hào)301表示的一組指令由分裂單元212轉(zhuǎn)換成一個(gè)單個(gè)的指令組302。在所示的本發(fā)明的實(shí)施例中,每個(gè)指令組302包括由標(biāo)號(hào)304a,304b,304c,304d,304e表示的5個(gè)位置。每個(gè)位置304可以包含一個(gè)指令。在本實(shí)施例中,每個(gè)指令組最多可以包括5個(gè)指令。在一個(gè)實(shí)施例中,由分裂單元212接收的指令集301中的指令按照第一ISA被格式化,如上所述,并且存儲(chǔ)在組302中的指令按照第二較寬的格式被格式化。使用指令組通過(guò)減少必須被單獨(dú)啟動(dòng)和跟蹤的指令的數(shù)量簡(jiǎn)化了重新命名恢復(fù)的和完成的表邏輯。因而,在無(wú)序處理器中,估計(jì)使用指令組在力圖簡(jiǎn)化跟蹤掛起指令時(shí)會(huì)犧牲關(guān)于每個(gè)指令的一些信息。
圖3的例2說(shuō)明按照本發(fā)明的一個(gè)實(shí)施例由分裂單元212實(shí)現(xiàn)的指令組的第二個(gè)例子。這個(gè)例子表示分裂單元212把復(fù)雜的指令組織成簡(jiǎn)單的指令組以便高速執(zhí)行的能力。在所示的例子中,兩個(gè)更新加載(LDU)指令序列被組織成指令組,所述指令組包括分別位于304a和304c的一對(duì)加載指令和分別位于304b和304d的一對(duì)ADD指令。在這個(gè)例子中,因?yàn)榻M302不合有分支指令,所以指令組302的最后位置304e不含有指令。PowerPC更新加載指令和在其它指令集中的類似指令一樣,是一種復(fù)雜的指令,其影響多個(gè)通用寄存器(GPR)的內(nèi)容。具體地說(shuō),更新加載指令可以被分成影響第一GPR的內(nèi)容的加載指令和影響第二GPR的內(nèi)容的ADD指令。因而,在圖3的例2的指令組302中,兩個(gè)或多個(gè)指令位置304中的指令相應(yīng)于由分裂單元212接收的一個(gè)指令。
在例3中,輸入到分裂單元212的單個(gè)指令被分成占據(jù)多個(gè)組302的一組指令。更具體地說(shuō),例3說(shuō)明加載多重(LM)指令。加載多重指令(按照PowerPC指令集)將存儲(chǔ)器中的連續(xù)的位置的內(nèi)容裝入被連續(xù)編號(hào)的GPR中。在所示的例子中,6個(gè)連續(xù)的存儲(chǔ)器位置的多次加載被分成6個(gè)加載指令。因?yàn)榘凑账龅奶幚砥?01的實(shí)施例的每個(gè)組32最多包括5個(gè)指令,并且因?yàn)榈?個(gè)位置304e被保留用于分支指令,所以6個(gè)寄存器的多次加載分別被分成兩組302a和302b。加載指令當(dāng)中的4個(gè)被存儲(chǔ)在第一組302a中,而其余的兩個(gè)加載指令被存儲(chǔ)在第二組302b中。因而,在例3中,一個(gè)指令被分成生成多個(gè)指令組的指令集。
現(xiàn)在參看圖2,由分裂單元212的優(yōu)選實(shí)施例產(chǎn)生的指令組302被送到基本塊高速緩存213,在那里它們被存儲(chǔ)等待執(zhí)行。參看圖5,其中輸出量基本塊高速緩存213的實(shí)施例。在所示的實(shí)施例中,基本塊高速緩存213包括一組入口502a-502n(一般被稱為基本塊高速緩存入口)。在一個(gè)實(shí)施例中,在基本塊高速緩存213中的每個(gè)入口含有一個(gè)指令組302。此外,每個(gè)入口502可以包括入口識(shí)別符504,指針506和指令地址(IA)字段507。每個(gè)入口502的指令地址字段507類似于完整表218的IA字段704。在一個(gè)實(shí)施例中,在基本塊高速緩存504中的每個(gè)入口502相應(yīng)于在完整表218中的入口,并且指令地址字段507表示在相應(yīng)的指令組302中的第一指令的指令地址。在一個(gè)實(shí)施例中,指針506根據(jù)分支預(yù)測(cè)算法、分支歷史表或其它合適的分支因此機(jī)構(gòu)表示要被執(zhí)行的下一個(gè)指令組302的入口識(shí)別符。如前所述,利用分裂單元212形成指令組的優(yōu)選的實(shí)施方案在每個(gè)指令組302中的最后位置304分配分支指令。此外,分裂單元212的優(yōu)選實(shí)施例產(chǎn)生指令組302,其中在組302中的分支指令的數(shù)量是1(或更少)。在這種結(jié)構(gòu)中,每個(gè)指令組302可以被看作代表圖6所示的分支樹(shù)600的一條“腿”,其中指令組302用其相應(yīng)的指令組入口504的值表示。例如第一指令組302a用入口數(shù)(1)表示,依此類推。作為例子,假定處理器101的分支預(yù)測(cè)機(jī)構(gòu)預(yù)測(cè)腿2(相應(yīng)于第二組302b)將在腿1之后被執(zhí)行,并且腿3將在腿2之后被執(zhí)行。按照本發(fā)明的一個(gè)實(shí)施例,基本塊高速緩存213通過(guò)設(shè)置指針506指示要被執(zhí)行的下一組302來(lái)反映這些分支預(yù)測(cè)。在基本塊高速緩存213中的每個(gè)入口502的指針506可被用于確定要被調(diào)遣的下一個(gè)指令組302。
基本塊高速緩存213和塊讀取單元215以讀取單元202和指令高速緩存210協(xié)同操作的的方式類似的方式協(xié)同操作。更具體地說(shuō),塊讀取單元215負(fù)責(zé)產(chǎn)生被提供給基本塊高速緩存213的指令地址。被塊讀取單元215提供的指令地址和基本塊高速緩存213中的指令地址字段507中的地址相比較。如果被塊讀取單元213提供的指令地址在基本塊高速緩存213中,則向發(fā)出隊(duì)230輸入合適的指令組。如果由塊讀取單元215提供的地址不在基本塊高速緩存213內(nèi),則指令地址被回送到讀取單元202,從指令高速緩存210中檢索合適的指令。在用于其區(qū)域(小片尺寸)保存的一個(gè)實(shí)施例中,基本塊高速緩存213能夠取消指令高速緩存210。在這個(gè)實(shí)施例中,指令從一個(gè)合適的存儲(chǔ)裝置例如L2高速緩存或系統(tǒng)存儲(chǔ)器中被檢索,并被直接提供給分裂單元212。如果由塊讀取單元213產(chǎn)生的指令地址不在基本塊高速緩存213中,則從L2高速緩存或系統(tǒng)存儲(chǔ)器中而不從指令高速緩存210中檢索合適的指令。
所示的處理器101的實(shí)施例還表示調(diào)度單元214。調(diào)度單元214負(fù)責(zé)確保在在對(duì)其合適的發(fā)出隊(duì)220輸入每個(gè)指令組中的指令之前所有所需的資源都是可得到的。此外,調(diào)度單元214與調(diào)度和完成控制邏輯216通信,以便保持跟蹤指令被發(fā)出的順序和這些指令的完成狀態(tài),以利于無(wú)序執(zhí)行。在處理器101的實(shí)施例中,其中分裂單元212把輸入指令組織成為指令組,如上所述,每個(gè)指令組302通過(guò)傳遞發(fā)出的指令組的順序的完成和控制邏輯216分配一個(gè)組標(biāo)記(GTAG)。作為一個(gè)例子,調(diào)度單元214可以對(duì)連續(xù)的指令組分配一個(gè)單調(diào)增加的值。利用這種結(jié)構(gòu),使得知道具有較低的GTAG值的(即較新的)指令組已經(jīng)在具有較大的GTAG值的指令組之前被發(fā)出。雖然處理器101的所示的實(shí)施例表示調(diào)度單元214是一個(gè)單獨(dú)的功能塊,但是基本塊高速緩存213的組指令組織使其自身包括了調(diào)度單元214的功能。因而,在一個(gè)實(shí)施例中,調(diào)度單元214被包括在基本塊高速緩存213內(nèi),其和發(fā)出隊(duì)220直接相連。
和調(diào)度與完成控制邏輯216相結(jié)合,完成表218在本發(fā)明的一個(gè)實(shí)施例中被用于跟蹤發(fā)出的指令組的狀態(tài)。參看圖7,其中示出了完成表218的一個(gè)實(shí)施例的方塊圖。在所示的實(shí)施例中,完成表218包括一組入口702a-702n(被稱為完成表入口702)。在這個(gè)實(shí)施例中,在完成表218中的每個(gè)入口702包括指令地址(IA)字段704和狀態(tài)位字段706。在這個(gè)實(shí)施例中,每個(gè)指令組302的GTAG值識(shí)別完成表218中的入口702,在完成表218中存儲(chǔ)著相應(yīng)于指令組302的完成信息。因而,在完成表118的入口1中存儲(chǔ)的指令組302的GTAG的值為1,依此類推。在這個(gè)實(shí)施例中,完成表118還可以包括“回繞”位,用于表示具有較低的GTAG值的指令組實(shí)際上比具有較高的GTAG值的指令組新。在一個(gè)實(shí)施例中,指令地址字段704包括相應(yīng)的指令組302的第一位置304a中的指令的地址。狀態(tài)字段706可以含有一個(gè)或幾個(gè)狀態(tài)位,用于指示例如在完成表218中的相應(yīng)的入口702是否是可以利用的,或者該入口已經(jīng)被分配給一個(gè)待執(zhí)行的指令組。
在圖2所示的處理器101的實(shí)施例中,指令從調(diào)度單元214向發(fā)出隊(duì)220被發(fā)出,指令在發(fā)出隊(duì)等待在相應(yīng)的執(zhí)行管道中被執(zhí)行。處理器101可以包括各種類型的執(zhí)行管道,每個(gè)管道被指定用于執(zhí)行處理器的指令集的一個(gè)子集。在一個(gè)實(shí)施例中,執(zhí)行管道222可以包括分支單元流水線224,負(fù)載存儲(chǔ)流水線226,固定點(diǎn)算法單元228,和浮動(dòng)點(diǎn)單元230。每個(gè)執(zhí)行管道222可以包括兩個(gè)或多個(gè)流水線級(jí)。在發(fā)出隊(duì)220中存儲(chǔ)的指令可以通過(guò)使用任何一個(gè)發(fā)出優(yōu)先權(quán)算法被發(fā)送給執(zhí)行管道222。在一個(gè)實(shí)施例中,例如在發(fā)出隊(duì)220中的最早的待執(zhí)行指令是被發(fā)送給執(zhí)行管道222的下一個(gè)指令。在這個(gè)實(shí)施例中,由調(diào)度單元214指定的GTAG值被用于確定在發(fā)出隊(duì)220中待執(zhí)行的指令的相關(guān)的級(jí)。在被發(fā)出之前,指令的目標(biāo)寄存器操作數(shù)被指定給可利用的重新命名GPR。當(dāng)一個(gè)指令最后從發(fā)出隊(duì)120發(fā)送到合適的執(zhí)行管道時(shí),該執(zhí)行管道則按照該指令的操作碼的指示進(jìn)行合適的操作,并在該指令到達(dá)流水線的最后一級(jí)時(shí)(由標(biāo)號(hào)132表示)把執(zhí)行結(jié)果寫入指令的重新命名GPR中。在重新命名的GPR和其相應(yīng)的結(jié)構(gòu)寄存器之間保持一種映射。當(dāng)在指令組中的所有的指令(以及在較近的指令組中的指令)都被完成而沒(méi)有產(chǎn)生例外時(shí),在完成表218中的完成指針被遞增到下一個(gè)指令組。當(dāng)完成指針遞增到新的指令組時(shí),和老指令組中的指令相關(guān)的重新命名寄存器被釋放,借以用于寄存在老的指令組中的指令的結(jié)果。如果一個(gè)或幾個(gè)比完成的指令老的指令(但是尚未被提交)產(chǎn)生了一個(gè)異常,則產(chǎn)生異常的指令和所有較新的指令都被刷新,并調(diào)用重新命名恢復(fù)程序,使GPR變換返回最近得知的有效狀態(tài)。
如果預(yù)測(cè)的分支未被得到(分支預(yù)測(cè)錯(cuò)誤),則在指令管道222和發(fā)出隊(duì)220中等待執(zhí)行的指令被刷新。此外,和錯(cuò)誤預(yù)測(cè)的分支相關(guān)的基本塊高速緩存入口502的指針506被更新,從而反映最近得到的分支。圖5示出了這種更新處理的一個(gè)例子,所示的情況是,程序的執(zhí)行產(chǎn)生從腿1(指令組302a)到腿4(指令組302d)的一個(gè)分支。因?yàn)槿肟?02a的指針506以前預(yù)測(cè)過(guò)到基本塊高速緩存213的2號(hào)入口中存在的指令組(即組302b)的分支,所以從指令組302a到組302d的實(shí)際的分支是誤預(yù)測(cè)的。誤預(yù)測(cè)的分支被檢測(cè),并被送回塊讀取單元215,在基本塊高速緩存213和每個(gè)流水線222的最后級(jí)232之間懸掛著的指令被刷新,并且利用在基本塊高速緩存213的入口4中的指令組302d重新開(kāi)始執(zhí)行。此外,基本塊高速緩存入口502a的指針506被從其以前的值2改變到新的值4,以便反映最新的分支信息。通過(guò)在極接近于執(zhí)行流水線222處合并基本塊高速緩存213和塊讀取單元215,本發(fā)明預(yù)計(jì)能夠減少誤預(yù)測(cè)分支的性能損失。更具體地說(shuō),通過(guò)在指令分裂單元212的“下游側(cè)”上實(shí)施基本塊高速緩存213,本發(fā)明取消了在分裂單元212中懸掛的來(lái)自分支誤預(yù)測(cè)刷新通路的指令,從而減少了由于分支誤預(yù)測(cè)而必須清洗的流水線的級(jí)數(shù),因而減少了性能損失。此外,基本塊高速緩存213包括一個(gè)高速緩沖存儲(chǔ)機(jī)構(gòu),其具有和調(diào)度與完成控制單元216以及完成表218的組織相匹配的結(jié)構(gòu),借以簡(jiǎn)化插入邏輯的組織,并幫助實(shí)現(xiàn)對(duì)基本塊高速緩存213的有用的擴(kuò)展,如下所述。
在一個(gè)實(shí)施例中,基本塊高速緩存213還包括指令歷史信息,這能夠借助于記錄在同一指令組的隨后的執(zhí)行期間可能使用的信息,使得避免可能引起異常、刷新、中斷或其它性能限制事件(被統(tǒng)稱為異常事件)的情況,從而改善處理器的性能。在圖8所示的基本塊高速緩存213的實(shí)施例中,指令歷史信息被存儲(chǔ)在每個(gè)入口502的指令歷史字段508中。作為可以被存儲(chǔ)在指令歷史字段508中的信息類型的一個(gè)例子,可以舉出包含一個(gè)特定的加載指令的指令組,所述指令組在所述加載指令最后一次被執(zhí)行時(shí)導(dǎo)致存儲(chǔ)前面的異常。此處所用的術(shù)語(yǔ)“存儲(chǔ)前面的異?!碑?dāng)在無(wú)序計(jì)算機(jī)中存儲(chǔ)指令之前執(zhí)行在共用公共存儲(chǔ)器參考的存儲(chǔ)指令之后(按照程序順序)的加載指令時(shí)發(fā)生。因?yàn)槿绻诖鎯?chǔ)指令之前執(zhí)行負(fù)載指令,負(fù)載指令則從寄存器中檢索無(wú)效的值,所以產(chǎn)生一個(gè)引起指令刷新的異常。在基本塊高速緩存213和完成與控制邏輯216之間的對(duì)應(yīng)性大大有助于完成向基本塊高速緩存213的相應(yīng)的入口輸送由調(diào)度和完成控制邏輯216以指令被執(zhí)行和完成的方式得知的信息的任務(wù)。在沒(méi)有所述對(duì)應(yīng)性的情況下,來(lái)自調(diào)度和完成控制邏輯216的完成信息一般要求以插入散列表或其它合適的機(jī)構(gòu)的一些方式通過(guò),以便使組指令信息和其元件指令相關(guān)。在存儲(chǔ)輸送的例子中,在檢測(cè)到存儲(chǔ)輸送異常時(shí),調(diào)度和完成控制單元216將把合適的入口的指令歷史字段508中的一位或幾位寫在應(yīng)當(dāng)表示存儲(chǔ)輸送異常的基本塊高速緩存213中。如果指令組被隨后執(zhí)行,則可以使用表示以前發(fā)生的存儲(chǔ)輸送異常的指令歷史信息,例如,為了把處理器置于有序方式,其中在完成存儲(chǔ)之前阻止執(zhí)行加載。因而,本發(fā)明的這一實(shí)施例考慮記錄表示和指令組相關(guān)的異常事件的指令歷史信息,并且此后修改指令組的執(zhí)行,以便在隨后的指令組的執(zhí)行期間阻止異常事件的發(fā)生。雖然以存儲(chǔ)輸送為例進(jìn)行了說(shuō)明,但是此處考慮的指令歷史信息字段也適合于記錄和各種可能使處理器避免重新發(fā)生異常狀態(tài)的歷史事件相關(guān)的信息,例如和任何預(yù)測(cè)機(jī)構(gòu)的精度、操作數(shù)值的預(yù)測(cè)、高速緩存的有無(wú)等相關(guān)的信息。
可以在基本塊高速緩存213的執(zhí)行歷史字段508中被記錄的信息的一個(gè)例子由圖9所示的實(shí)施例說(shuō)明,其中一個(gè)或幾個(gè)發(fā)出隊(duì)220被細(xì)分為第一發(fā)出隊(duì)902和第二發(fā)出隊(duì)904。發(fā)出隊(duì)220的最佳的尺寸和深度表示完成考慮之間的平衡。在一方面,希望執(zhí)行非常大和非常深的發(fā)出隊(duì),以便最大限度地利用處理器101的執(zhí)行無(wú)序指令的能力。發(fā)出無(wú)序指令的能力受到在發(fā)出隊(duì)220中的指令數(shù)量的限制。較大的數(shù)量的發(fā)出隊(duì)相應(yīng)于較大數(shù)量的適合于無(wú)序處理的指令。在另一方面,隨著發(fā)出隊(duì)220的深度的增加,處理器在其周期時(shí)間限制內(nèi)確定下一個(gè)被發(fā)出的指令的能力也增加。換句話說(shuō),在發(fā)出隊(duì)220中懸掛的指令的數(shù)量越大,用于確定下一個(gè)要發(fā)出的指令所需的時(shí)間也越長(zhǎng)。因此,發(fā)出隊(duì)例如發(fā)出隊(duì)220通常被限制于大約20或更少的深度。本發(fā)明的一個(gè)實(shí)施例考慮利用深的發(fā)出隊(duì)而不需過(guò)大地增加檢索下一個(gè)能夠發(fā)出的指令的發(fā)出隊(duì)所需的邏輯的優(yōu)點(diǎn)。本發(fā)明利用這樣的事實(shí),即,通常在發(fā)出隊(duì)220中懸掛的指令不能被立即發(fā)出,這或者是因?yàn)槠湟呀?jīng)被發(fā)出,或者是因?yàn)槠浔粦覓煸谔幚砥?01的執(zhí)行流水線222中,或者其正在等待因操作數(shù)值而所依賴的另一個(gè)指令的完成。
參看圖9,按照本發(fā)明的一個(gè)實(shí)施例的發(fā)出隊(duì)220包括第一發(fā)出隊(duì)902和第二發(fā)出隊(duì)904。第一發(fā)出隊(duì)902含有能夠被立即發(fā)出的指令。在一個(gè)實(shí)施例中,從調(diào)度單元214中派遣的指令首先被存儲(chǔ)在第一發(fā)出隊(duì)902的可得到的發(fā)出中。如果隨后確定一個(gè)指令具有和另一個(gè)指令的相關(guān)性,則相關(guān)的指令被移動(dòng)到第二發(fā)出隊(duì)904,直到相關(guān)的指令所依賴的指令檢索到所需的信息。例如,如果在加載指令之后的一個(gè)附加的指令需要加載指令的結(jié)果,則可以把兩個(gè)指令首先調(diào)入第一發(fā)出隊(duì)902中。不過(guò),在接著確定附加的指令具有對(duì)加載指令的依賴性時(shí),附加的指令被從第一隊(duì)902被轉(zhuǎn)移到第二發(fā)出隊(duì)904。在上面參照?qǐng)D8所述的利用指令歷史字段508的實(shí)施例中,可以記錄附加指令的依賴性,使得在該指令的隨后執(zhí)行期間,附加指令可被直接存儲(chǔ)在第二發(fā)出隊(duì)220中。也可以使用第二發(fā)出隊(duì)904存儲(chǔ)最近被發(fā)出的仍然被懸掛在處理器的執(zhí)行流水線中的指令。在本實(shí)施例中,指令從第一發(fā)出隊(duì)902發(fā)出,然后被轉(zhuǎn)移到第二發(fā)出隊(duì)904。在一個(gè)實(shí)施例中,指令可以駐留在第二發(fā)出隊(duì)904中,直到確定該指令不被拒絕為止。確定一個(gè)指令尚未被拒絕的一個(gè)方法是實(shí)施一個(gè)和第二發(fā)出隊(duì)904中的每個(gè)發(fā)出相關(guān)的計(jì)時(shí)器/計(jì)數(shù)器(未示出)。當(dāng)開(kāi)始把指令從第一發(fā)出隊(duì)902轉(zhuǎn)移到第二發(fā)出隊(duì)904時(shí),計(jì)數(shù)器/計(jì)時(shí)器被啟動(dòng)。在一個(gè)實(shí)施例中,計(jì)時(shí)器/計(jì)數(shù)器對(duì)從計(jì)時(shí)器/計(jì)數(shù)器被啟動(dòng)時(shí)已經(jīng)經(jīng)過(guò)的時(shí)鐘周期的數(shù)量計(jì)數(shù)。如果計(jì)數(shù)器/計(jì)時(shí)器在一個(gè)預(yù)定的周期數(shù)之內(nèi)繼續(xù)計(jì)數(shù),則沒(méi)有檢測(cè)到指令已被拒絕,指令被假定已經(jīng)成功地被完成,并且在第二發(fā)出隊(duì)904中的項(xiàng)不再被分配。通過(guò)利用這樣的一個(gè)發(fā)出隊(duì),其中包括第一發(fā)出隊(duì)和第二發(fā)出隊(duì),所述第一發(fā)出隊(duì)專用于當(dāng)前夠條件發(fā)出以便被執(zhí)行的指令,在所述第二發(fā)出隊(duì)中的指令或者因?yàn)橹噶畹南嚓P(guān)性,或者因?yàn)樵撝噶钍亲罱鼜牡谝话l(fā)出隊(duì)發(fā)出的而尚未被發(fā)送,但是所述指令當(dāng)前不夠執(zhí)行條件,可以增加發(fā)出隊(duì)的有效尺寸或深度,而不顯著地增加用于確定下一個(gè)要被發(fā)出的指令所需的時(shí)間(即邏輯電平的數(shù)量)。
本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,根據(jù)上面披露的內(nèi)容,可以設(shè)想許多不同的微處理器的實(shí)施例,其中包括適合于存儲(chǔ)分組指令(即已被從第一格式轉(zhuǎn)換為第二格式的指令)的高速緩存,以便減少誤預(yù)測(cè)的分支有關(guān)的等待時(shí)間。應(yīng)當(dāng)理解此處詳細(xì)說(shuō)明的本發(fā)明的形式僅僅是目前的優(yōu)選的例子,旨在在一個(gè)寬的范圍內(nèi)解釋下面的權(quán)利要求,所附的權(quán)利要求包括這些實(shí)施例的所有的改變和改型。
權(quán)利要求
1一種用于執(zhí)行微處理器指令的方法,包括以下步驟把接收的第一指令集轉(zhuǎn)換為指令組;在被設(shè)置的基本塊高速緩存的入口中存儲(chǔ)所述指令組,其中每個(gè)高速緩存裝置的入口含有指令組;發(fā)出在所述指令組中的指令進(jìn)行執(zhí)行;以及響應(yīng)在指令組中的指令執(zhí)行期間產(chǎn)生的異常,只刷新懸掛在基本塊高速緩存和最后一級(jí)之間的那些指令。
2如權(quán)利要求1所述的方法,其中產(chǎn)生的異常包括分支誤預(yù)測(cè)異常。
3如權(quán)利要求1所述的方法,其中被接收的指令按照第一指令格式被格式化,并且在指令組中的指令按照第二指令格式被格式化。
4如權(quán)利要求3所述的方法,其中第二指令格式比第一指令格式寬。
5如權(quán)利要求4所述的方法,還包括對(duì)高速緩存裝置中的每個(gè)入口分配一個(gè)指針,其中所述指針用于預(yù)測(cè)要被執(zhí)行的下一個(gè)指令組。
6如權(quán)利要求5所述的方法,還包括響應(yīng)在一個(gè)指令組的執(zhí)行期間檢測(cè)到一個(gè)誤預(yù)測(cè)分支更新相應(yīng)于誤預(yù)測(cè)的分支的高速緩存入口的指針。
7一種微處理器,包括指令分裂單元,其構(gòu)成用于接收第一微處理器指令集,并且把所指令集組織成指令組;以及基本塊高速緩存裝置,其構(gòu)成用于高速緩存由分裂單元產(chǎn)生的指令組;以及執(zhí)行單元,其適用于執(zhí)行指令組中的指令;其中在指令組中的指令執(zhí)行期間產(chǎn)生的引起刷新的異常,只刷新從基本塊高速緩存分配的那些指令。
8如權(quán)利要求7所述的處理器,還包括分配單元,其構(gòu)成用于從基本塊高速緩存中的指令組中檢索指令,并把所述指令輸送到發(fā)出隊(duì)中。
9如權(quán)利要求7所述的處理器,其中被接收的指令按照第一指令格式被格式化,并且第二指令集按照第二指令格式被格式化,其中第二指令格式比第一指令格式寬。
10如權(quán)利要求7所述的處理器,其中在基本塊高速緩存被構(gòu)成用于在相應(yīng)的基本塊高速緩存的每個(gè)入口存儲(chǔ)每個(gè)指令組。
11如權(quán)利要求10所述的處理器,其中基本塊高速緩存包括表示相應(yīng)的基本塊高速緩存入口的入口字段。
12如權(quán)利要求11所述的處理器,其中基本塊高速緩存的每個(gè)入口包括用于預(yù)測(cè)下一要被執(zhí)行的指令組的指針。
13如權(quán)利要求12所述的處理器,其中處理器被構(gòu)成使得響應(yīng)誤預(yù)測(cè)的分支更新每個(gè)入口的指針。
14一種包括至少一個(gè)處理器,存儲(chǔ)器,輸入裝置和顯示裝置的數(shù)據(jù)處理系統(tǒng),其中所述處理器包括指令分裂單元,其構(gòu)成用于接收第一微處理器指令集,并且把所述指令集組織成指令組;基本塊高速緩存裝置,其構(gòu)成用于高速緩存由分裂單元產(chǎn)生的指令組;以及執(zhí)行單元,其適用于執(zhí)行指令組中的指令;其中在指令組中的指令執(zhí)行期間產(chǎn)生的引起刷新的異常,只刷新從基本塊高速緩存分配的那些指令。
15如權(quán)利要求14所述的數(shù)據(jù)處理系統(tǒng),還包括分配單元,其構(gòu)成用于從基本塊高速緩存中的指令組中檢索指令,并把所述指令輸送到發(fā)出隊(duì)中。
16如權(quán)利要求14所述的數(shù)據(jù)處理系統(tǒng),其中被接收的指令按照第一指令格式被格式化,并且第二指令集按照第二指令格式被格式化,其中第二指令格式比第一指令格式寬。
17如權(quán)利要求14所述的數(shù)據(jù)處理系統(tǒng),其中在基本塊高速緩存被構(gòu)成用于在相應(yīng)的基本塊高速緩存的每個(gè)入口存儲(chǔ)每個(gè)指令組。
18如權(quán)利要求17所述的數(shù)據(jù)處理系統(tǒng),其中基本塊高速緩存包括表示相應(yīng)的基本塊高速緩存入口的入口字段。
19如權(quán)利要求18所述的數(shù)據(jù)處理系統(tǒng),其中基本塊高速緩存的每個(gè)入口包括用于預(yù)測(cè)下一要被執(zhí)行的指令組的指針。
20如權(quán)利要求14所述的數(shù)據(jù)處理系統(tǒng),其中處理器被構(gòu)成使得響應(yīng)誤預(yù)測(cè)的分支更新每個(gè)入口的指針。
全文摘要
本發(fā)明披露了一種微處理器和一種相關(guān)的方法以及數(shù)據(jù)處理系統(tǒng)。所述微處理器包括指令分裂單元,其被構(gòu)成用于接收第一個(gè)微處理器指令集。所述分裂單元把所述指令集組織成為指令組。在所述指令組中的每個(gè)指令共用公共的指令組標(biāo)記。所述處理器還包括基本塊高速緩存裝置,其利用指令組格式被組織,并且被構(gòu)成用于高速緩存由分裂單元產(chǎn)生的指令組。處理器的執(zhí)行單元適用于執(zhí)行指令組中的指令。
文檔編號(hào)G06F9/38GK1303044SQ0013700
公開(kāi)日2001年7月11日 申請(qǐng)日期2000年12月27日 優(yōu)先權(quán)日2000年1月6日
發(fā)明者詹姆斯·A·卡爾 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司