選擇性地阻止分支指令預(yù)測(cè)的制作方法
【專利摘要】實(shí)施例涉及選擇性地阻止分支指令預(yù)測(cè)。一方面包括用于執(zhí)行選擇性分支預(yù)測(cè)的計(jì)算機(jī)系統(tǒng)。該系統(tǒng)包括存儲(chǔ)器和處理器,且該系統(tǒng)被配置為執(zhí)行方法。該方法包括檢測(cè)指令流中的分支預(yù)測(cè)阻止指令,并基于對(duì)分支預(yù)測(cè)阻止指令的檢測(cè)來阻止分支預(yù)測(cè)阻止指令之后的預(yù)定數(shù)量的分支指令的分支預(yù)測(cè)。
【專利說明】選擇性地阻止分支指令預(yù)測(cè)
【技術(shù)領(lǐng)域】
[0001]本實(shí)施例涉及選擇性地阻止分支指令預(yù)測(cè),且更具體而言涉及在指令流中提供指令,其將被執(zhí)行以阻止預(yù)定數(shù)量的未來分支指令的分支預(yù)測(cè)。
【背景技術(shù)】
[0002]處理器使用流水線來提高指令流被處理的速度。流水線可以具有若干個(gè)處理階段,并且當(dāng)一個(gè)指令在一個(gè)階段中處理中,下一指令可在上游階段中處理。當(dāng)指令流包含分支指令時(shí),處理器可能需要執(zhí)行分支指令,或在整個(gè)流水線中運(yùn)行分支指令,以確定執(zhí)行的下一指令。為了提升效率,處理器可以確定指令流何時(shí)包含分支指令,并可以預(yù)測(cè)流水線中的分支指令之后應(yīng)是哪個(gè)指令。
[0003]但是,處理器的不正確的預(yù)測(cè)會(huì)導(dǎo)致降低的處理效率。例如,如果處理器預(yù)測(cè)了條件分支指令之后的下一指令,但該分支未被采用,則在流水線的各個(gè)階段已被處理的該下一指令和后續(xù)指令必須被清除,且來自包含分支指令的原始流的新指令必須在流水線開始處被提供。結(jié)果,在不正確的分支預(yù)測(cè)之后,流水線的上游階段可能閑置多個(gè)周期。
【發(fā)明內(nèi)容】
[0004]示例性實(shí)施例包括一種用于執(zhí)行選擇性分支預(yù)測(cè)的計(jì)算機(jī)系統(tǒng)。該系統(tǒng)包括:存儲(chǔ)器,其被配置為存儲(chǔ)指令,以及處理器,其被配置為執(zhí)行指令,以控制計(jì)算機(jī)系統(tǒng)來執(zhí)行指令所指示的功能。該系統(tǒng)被配置為執(zhí)行方法,該方法包括通過處理器來檢測(cè)指令流中的分支預(yù)測(cè)阻止指令,以及基于對(duì)分支預(yù)測(cè)阻止指令的檢測(cè),通過處理器來阻止分支預(yù)測(cè)阻止指令之后的預(yù)定數(shù)量的分支指令的分支預(yù)測(cè)。
[0005]另一示例性實(shí)施例包括一種計(jì)算機(jī)實(shí)現(xiàn)的用于執(zhí)行選擇性分支預(yù)測(cè)的方法,該方法包括通過處理器來檢測(cè)指令流中的分支預(yù)測(cè)阻止指令,以及基于對(duì)分支預(yù)測(cè)阻止指令的檢測(cè),通過處理器來阻止分支預(yù)測(cè)阻止指令之后的預(yù)定數(shù)量的分支指令的分支預(yù)測(cè)。
[0006]另一示例性實(shí)施例包括用于執(zhí)行選擇性分支預(yù)測(cè)的計(jì)算機(jī)程序產(chǎn)品。該計(jì)算機(jī)程序產(chǎn)品包括有形的存儲(chǔ)介質(zhì),其可被處理電路讀取并存儲(chǔ)指令,該指令由處理單元執(zhí)行以執(zhí)行一種方法。該方法包括通過處理器來檢測(cè)指令流中的分支預(yù)測(cè)阻止指令,以及基于對(duì)分支預(yù)測(cè)阻止指令的檢測(cè)、通過處理器來阻止分支預(yù)測(cè)阻止指令之后的預(yù)定數(shù)量的分支指令的分支預(yù)測(cè)。
[0007]通過公開的實(shí)施例,實(shí)現(xiàn)了額外的特征和優(yōu)勢(shì)。這里詳細(xì)描述了本公開的其他實(shí)施例和方面。為了更好地理解本發(fā)明的優(yōu)勢(shì)和特征,參考描述和附圖。
【專利附圖】
【附圖說明】
[0008]在所附權(quán)利要求書中特別指出并清楚地要求保護(hù)被認(rèn)為是實(shí)施例的主體。實(shí)施例的前述和其他特點(diǎn)以及優(yōu)勢(shì)將從以下結(jié)合附圖的詳細(xì)描述變得明顯,在附圖中:
[0009]圖1示出了根據(jù)本公開的一個(gè)實(shí)施例的選擇性分支預(yù)測(cè)阻止系統(tǒng)的框圖;[0010]圖2示出了根據(jù)一個(gè)實(shí)施例的指令執(zhí)行組合件;
[0011]圖3示出了根據(jù)一個(gè)實(shí)施例的指令編譯組合件;
[0012]圖4示出了根據(jù)一個(gè)實(shí)施例的選擇性分支預(yù)測(cè)阻止方法的流程圖;
[0013]圖5示出了根據(jù)另一實(shí)施例的選擇性分支預(yù)測(cè)阻止的方法的流程圖;
[0014]圖6示出了根據(jù)一個(gè)實(shí)施例的計(jì)算機(jī)系統(tǒng);并且
[0015]圖7示出了根據(jù)本公開的一個(gè)實(shí)施例的計(jì)算機(jī)可讀介質(zhì)。
【具體實(shí)施方式】
[0016]在示例性實(shí)施例中,指令流中的分支預(yù)測(cè)阻止指令避免了對(duì)阻止指令之后的預(yù)定數(shù)量的分支指令執(zhí)行分支預(yù)測(cè)功能。
[0017]圖1示出了根據(jù)本公開的實(shí)施例的分支預(yù)測(cè)阻止系統(tǒng)100的功能框圖。系統(tǒng)100可以包括指令編譯組合件110和指令執(zhí)行組合件120。指令編譯組合件110可以接收高級(jí)計(jì)算機(jī)編程語言的計(jì)算機(jī)代碼作為輸入并可以將計(jì)算機(jī)代碼轉(zhuǎn)換為可執(zhí)行指令。指令編譯組合件Iio可以包括阻止指令插入模塊112,其將分支預(yù)測(cè)阻止指令插入到計(jì)算機(jī)代碼或可執(zhí)行指令的指令流中。阻止指令插入模塊112可被用戶或計(jì)算機(jī)程序控制。例如,指令編譯組合件110可以包括條件檢測(cè)模塊111,其被配置為識(shí)別高級(jí)編程代碼、中間編程代碼或可執(zhí)行指令中的一個(gè)或多個(gè)中的預(yù)定條件。如果檢測(cè)到該條件,條件檢測(cè)模塊111可以將信號(hào)或指令發(fā)送到阻止指令插入模塊112,以指示阻止指令插入模塊將分支預(yù)測(cè)阻止指令插入到指令流中。
[0018]盡管圖1示出了條件檢測(cè)模塊111和阻止指令插入模塊112,本公開的實(shí)施例包括在指令流中提供分支預(yù)測(cè)阻止指令的任何手段。例如,用戶可以將阻止指令插入到編程代碼或可執(zhí)行指令中,且指令執(zhí)行組合件120可以執(zhí)行指令流中的阻止指令。換句話說,阻止指令的插入可以基于指令編譯組合件的分析,或基于用戶的分析,該用戶使用指令編譯組合件110以在編寫編程代碼、編寫中間代碼或編寫處理器可執(zhí)行指令的階段將阻止指令插入到指令流中。
[0019]可被條件檢測(cè)模塊111檢測(cè)的條件可以包括檢測(cè)到特定類型的分支指令,檢測(cè)到分支指令所在的特定類型的代碼,檢測(cè)到分支指令存取的特定地址、操作符或寄存器,檢測(cè)到分支指令是特定的預(yù)指定的分支指令,或任何其他條件。例如,特定的分支指令可以解決為(resolve in)分支在60%的時(shí)間不被采用,而執(zhí)行分支預(yù)測(cè)將產(chǎn)生10%的預(yù)測(cè)正確率。該特定的分支指令可被識(shí)別為難以預(yù)測(cè)或不可預(yù)測(cè),且用戶或條件檢測(cè)模塊111可以將阻止指令插入到該不可預(yù)測(cè)指令的指令流上游。結(jié)果,在執(zhí)行指令流時(shí),該不可預(yù)測(cè)指令不會(huì)使得執(zhí)行分支預(yù)測(cè)。
[0020]指令執(zhí)行組合件120通過獲取、解碼、發(fā)出并執(zhí)行指令來執(zhí)行指令流。指令執(zhí)行組合件120還可包括條件檢測(cè)模塊121,其檢測(cè)指令流中的條件,以及阻止指令插入模塊122,其基于條件檢測(cè)模塊121對(duì)條件的檢測(cè)來將阻止指令插入到指令流中。指令檢測(cè)模塊111和121以及阻止指令插入模塊112和122用虛線來表示,以指示本公開的實(shí)施例涵蓋了選擇性分支預(yù)測(cè)阻止系統(tǒng)100包括條件檢測(cè)模塊111和121以及阻止指令插入模塊112和122的全部、僅包括條件檢測(cè)模塊111和阻止指令插入模塊112、僅包括條件檢測(cè)模塊121和阻止指令插入模塊122、或者不包括條件檢測(cè)模塊111和121以及阻止指令插入模塊112和122中的任何一個(gè)。在這樣的例子中,用戶可以用編程語言來編寫代碼,該代碼可被指令編譯組合件110正常執(zhí)行并被提供給指令執(zhí)行組合件120來執(zhí)行,而沒有被指令編譯組合件110或指令執(zhí)行組合件120檢測(cè)條件。
[0021]可被條件檢測(cè)模塊121檢測(cè)的條件可以包括檢測(cè)到特定類型的分支指令,檢測(cè)到分支指令所在的特定類型的代碼,檢測(cè)到分支指令存取的特定地址、操作符或寄存器,檢測(cè)到分支指令是特定的預(yù)指定的分支指令,或任何其他條件。
[0022]指令執(zhí)行組合件包括阻止指令檢測(cè)模塊123,用于檢測(cè)指令流中的阻止指令。在檢測(cè)到阻止指令時(shí),阻止指令檢測(cè)模塊123控制分支預(yù)測(cè)阻止模塊124來跳過或阻止該阻止指令之后的預(yù)定數(shù)量的分支指令的分支預(yù)測(cè)。阻止指令檢測(cè)模塊123可以控制分支預(yù)測(cè)阻止模塊124來阻止每個(gè)分支指令、每個(gè)條件分支指令、特定類別或類型的分支指令、或具有特定目標(biāo)地址的特定分支指令。
[0023]一旦已經(jīng)跳過或阻止預(yù)定數(shù)量的分支指令,分支預(yù)測(cè)阻止模塊124可自動(dòng)恢復(fù)對(duì)阻止指令指定的分支指令執(zhí)行的分支預(yù)測(cè)操作。在一個(gè)實(shí)施例中,分支指令的預(yù)定數(shù)量是可編程的或可改變的。例如,阻止指令可以包括表示要跳過或阻止分支預(yù)測(cè)操作的分支指令數(shù)量的整數(shù)。在另一實(shí)施例中,阻止指令可以不包含與要跳過或阻止的分支指令數(shù)量相關(guān)的顯式信息,且阻止指令檢測(cè)模塊123可以提供要跳過的分支指令的默認(rèn)數(shù)量,其中,該默認(rèn)數(shù)量是有限的數(shù)字。
[0024]例如,條件檢測(cè)模塊111可以在編譯時(shí)檢測(cè)到特定的分支指令,其中,該特定的分支指令被定義為不應(yīng)執(zhí)行分支預(yù)測(cè)的分支指令。條件檢測(cè)模塊111可以向阻止指令插入模塊112指示已檢測(cè)到特定的分支指令,且阻止指令插入模塊112可以在該特定分支指令的上游的可執(zhí)行指令中插入分支預(yù)測(cè)阻止指令。分支預(yù)測(cè)阻止指令可以包括整數(shù)“1”,以向指令執(zhí)行組合件指示后面只有一條分支指令應(yīng)跳過分支預(yù)測(cè)操作。
[0025]在另一例子中,條件檢測(cè)模塊111可檢測(cè)到正在編譯特定類型的代碼,例如被指定為“敏感”的代碼,對(duì)該代碼不應(yīng)執(zhí)行分支預(yù)測(cè)。條件檢測(cè)模塊111可以向阻止指令插入模塊112指示已檢測(cè)到特定類型的代碼,且阻止指令插入模塊112可以在該特定類型代碼上游的可執(zhí)行代碼中插入分支預(yù)測(cè)阻止指令。阻止指令插入模塊112可以確定位于敏感代碼中的分支指令的數(shù)量,并可以產(chǎn)生分支預(yù)測(cè)阻止指令,以向指令執(zhí)行組合件指示只有與敏感代碼中的分支指令數(shù)量相對(duì)應(yīng)的數(shù)量的分支指令應(yīng)跳過分支預(yù)測(cè)操作。阻止指令插入模塊112可以在敏感代碼上游的預(yù)定數(shù)量的指令處插入阻止指令,從而在指令執(zhí)行組合件120執(zhí)行該阻止指令時(shí),敏感代碼還沒有在指令執(zhí)行流水線中,由此通過在獲取敏感代碼的分支時(shí)避免分支預(yù)測(cè)來避免處理時(shí)間損失。
[0026]盡管上面為了說明的目的描述了 “敏感”代碼的例子,可以理解,本公開的實(shí)施例涵蓋基于對(duì)任何預(yù)定或預(yù)指定類型的指令或指令塊的檢測(cè)來插入指令以阻止分支預(yù)測(cè)。
[0027]在另一例子中,指令執(zhí)行組合件120可以基于已執(zhí)行的分支操作的歷史來確定特定類型的分支指令是不可預(yù)測(cè)的,或者具有比預(yù)定閾值少的成功分支預(yù)測(cè)。指令執(zhí)行組合件120可以指示條件檢測(cè)模塊121來檢測(cè)特定類型的分支指令。例如可以通過識(shí)別分支指令的地址和作為分支指令的目標(biāo)的下一指令的地址,來識(shí)別特定的分支指令。當(dāng)條件檢測(cè)模塊121檢測(cè)到特定類型的分支指令時(shí),條件檢測(cè)模塊121控制阻止指令插入模塊122將指令插入到被執(zhí)行的指令流中,以跳過或阻止特定指令的分支預(yù)測(cè)。阻止指令插入模塊122可以在指令中提供整數(shù)例如“1”,以向分支預(yù)測(cè)阻止模塊124指示后面只有一條分支指令應(yīng)跳過或阻止分支預(yù)測(cè)功能。
[0028]在一個(gè)實(shí)施例中,特定的分支指令位于代碼流中,且阻止指令插入模塊122在特定分支指令的代碼流上游插入阻止指令。阻止指令可以被插入到特定分支指令上游足夠遠(yuǎn)的地方,從而在將指令流提供給指令執(zhí)行流水線時(shí),在阻止指令執(zhí)行時(shí)該特定的分支指令還沒有被解碼。
[0029]阻止指令檢測(cè)模塊123檢測(cè)到包含整數(shù)的阻止指令,該整數(shù)指示應(yīng)跳過或阻止分支預(yù)測(cè)的分支指令的數(shù)量。分支預(yù)測(cè)阻止模塊124阻止預(yù)定數(shù)量的分支指令執(zhí)行分支預(yù)測(cè),并且在阻止指令所指示的預(yù)定數(shù)量的分支指令已被跳過或阻止分支預(yù)測(cè)的執(zhí)行之后,清除阻止指令以在指令流中的特定類型的分支指令上執(zhí)行分支預(yù)測(cè)。
[0030]圖2示出了根據(jù)本公開的實(shí)施例的指令執(zhí)行組合件200的框圖。指令執(zhí)行組合件200可對(duì)應(yīng)于圖1的指令執(zhí)行組合件120。例如,在某些實(shí)施例中,指令獲取單元202、分支預(yù)測(cè)單元206和執(zhí)行單元205中的一個(gè)或多個(gè)可以對(duì)應(yīng)于阻止指令檢測(cè)模塊123和分支預(yù)測(cè)阻止模塊124。此外,獲取單元202和分支預(yù)測(cè)單元206可以對(duì)應(yīng)于圖1中的條件檢測(cè)模塊121和阻止指令插入模塊122。盡管圖2示出了指令執(zhí)行組合件200的一個(gè)實(shí)施例,可以理解,本公開的實(shí)施例包括檢測(cè)阻止指令以及基于檢測(cè)到的阻止指令來阻止或跳過預(yù)定數(shù)量的分支預(yù)測(cè)操作的任何指令執(zhí)行組合件。
[0031]指令執(zhí)行組合件200可以包括多線程處理器中的多個(gè)處理核心中的一個(gè)處理核心。指令執(zhí)行組合件200包括存儲(chǔ)程序指令的一級(jí)指令高速緩存(LI Icache)201,以及從LI Icache201獲取指令的執(zhí)行獲取單元202。特別地,Lllcache201與指令獲取單元202結(jié)合來提供指令流的載入。
[0032]指令解碼單元(IDU)203將獲取的指令解碼為指令處理數(shù)據(jù)。IDU203向發(fā)出單元204提供指令,該發(fā)出單元控制指令發(fā)出到各個(gè)執(zhí)行單元205,例如用于執(zhí)行一般運(yùn)算的一個(gè)或多個(gè)定點(diǎn)單元以及用于執(zhí)行浮點(diǎn)運(yùn)算的一個(gè)或多個(gè)浮點(diǎn)單元。
[0033]指令執(zhí)行組合件200包括與指令獲取單元202通信的分支預(yù)測(cè)單元206,用于預(yù)測(cè)分支指令的目標(biāo)地址。例如,分支預(yù)測(cè)單元206可以包括分支目標(biāo)緩沖器(BTB) 207,用于存儲(chǔ)與預(yù)測(cè)的分支相關(guān)的分支目標(biāo)地址。分支預(yù)測(cè)單元206還可以包括分支歷史單元208,用于存儲(chǔ)先前解決的分支指令中采用或未采用分支結(jié)果的模式(pattern)。分支歷史單元208可被實(shí)現(xiàn)為BTB207的一部分。在一個(gè)實(shí)施例中,分支預(yù)測(cè)單元206包括分支預(yù)測(cè)控制單元209,其可以使用預(yù)測(cè)阻止模塊210來開啟或關(guān)閉分支預(yù)測(cè)功能,可以分析分支歷史來確定不可預(yù)測(cè)分支,并可以執(zhí)行與分支預(yù)測(cè)功能相關(guān)的任何其他的控制或分析功能。
[0034]盡管分支預(yù)測(cè)單元206被描述為與指令獲取單元202分離的功能塊,本公開的實(shí)施例包括這樣的指令獲取單元202,其在指令執(zhí)行單元202中包含分支預(yù)測(cè)單元206。例如,一個(gè)或多個(gè)處理器、存儲(chǔ)器、邏輯和程序代碼可以在指令獲取單元202和分支預(yù)測(cè)單元206之間共享。此外,盡管分支預(yù)測(cè)控制單元209被描述為與執(zhí)行單元205分離,本公開的實(shí)施例包括這樣的執(zhí)行單元205,其執(zhí)行阻止指令來阻止指令獲取單元202和分支預(yù)測(cè)單元206執(zhí)行分支預(yù)測(cè)操作。
[0035]在操作中,指令流流過指令執(zhí)行組合件200。指令獲取單元202可以基于先前的指令以預(yù)定的順序從LI Icache 201獲取指令。指令獲取單元202可以一次地從LI Icache201獲取指令塊,并可以將該指令塊和來自先前的獲取操作的任何未解碼的指令一起存儲(chǔ)在指令存儲(chǔ)裝置210中。
[0036]在一個(gè)實(shí)施例中,指令流包括用戶或編譯器已提供的分支預(yù)測(cè)阻止指令。分支預(yù)測(cè)阻止指令可以流過流水線并且可被執(zhí)行單元205執(zhí)行?;谧柚怪噶畹膱?zhí)行,執(zhí)行單元205可以向預(yù)測(cè)阻止單元210提供控制信號(hào),以阻止之后預(yù)定數(shù)量的的分支指令的分支預(yù)測(cè)操作。例如,可以通過阻止指令獲取單元202存取分支目標(biāo)緩沖器207來阻止預(yù)測(cè)操作。此外,在執(zhí)行單元205執(zhí)行預(yù)定數(shù)量的分支指令時(shí),可以通過阻止指令來阻止指令執(zhí)行單元205向分支歷史單元208提供預(yù)定數(shù)量的分支指令的分支信息。
[0037]在另一實(shí)施例中,指令獲取單元202可以識(shí)別特定的分支指令、分支指令類型或圍繞分支指令的指令類型。被識(shí)別的特定分支指令可以對(duì)應(yīng)于被識(shí)別為不執(zhí)行分支預(yù)測(cè)操作的分支指令類型。一串指令可以包括例如下列:
[0038]Load, add, store, store, multiply, branch, load, load, add, store
[0039]例如可以通過確定分支指令的地址以及作為分支指令目標(biāo)的地址來識(shí)別特定分支指令或分支指令類型。在指令獲取單元202或分支預(yù)測(cè)單元206識(shí)別出特定分支指令、分支指令類型或圍繞分支指令的指令類型時(shí),分支預(yù)測(cè)控制單元209可以生成指令,該指令將被插入到所識(shí)別的分支指令的指令流上游。在執(zhí)行阻止指令時(shí),執(zhí)行單元205可以向預(yù)測(cè)阻止單元210提供控制信號(hào),以阻止之后的預(yù)定數(shù)量的分支指令的分支預(yù)測(cè)操作。例如,可以通過阻止指令獲取單元202存取分支目標(biāo)緩沖器207來阻止預(yù)測(cè)操作。此外,在執(zhí)行單元205執(zhí)行預(yù)定數(shù)量的分支指令時(shí),阻止指令可以阻止執(zhí)行單元205向分支歷史單元208提供預(yù)定數(shù)量的分支指令的分支信息。
[0040]在一個(gè)實(shí)施例中,分支預(yù)測(cè)控制單元209可以分析分支預(yù)測(cè)歷史來確定不可預(yù)測(cè)的或者具有低于預(yù)定閾值的成功預(yù)測(cè)水平的特定分支指令。分支預(yù)測(cè)控制單元209可以存儲(chǔ)識(shí)別的分支指令信息,且可以將識(shí)別的分支指令信息與獲取的分支指令進(jìn)行比較,以確定是否生成阻止指令。
[0041]下面是插入分支預(yù)測(cè)阻止指令的例子:
[0042]Load, add, store, blk—bpl_branch_l,store, multiply, branch, load, load, add, store
[0043]在以上的示例性指令串中,指令blk_bpl_branch_l指示分支預(yù)測(cè)單元206和/或指令獲取單元202跳過一個(gè)分支預(yù)測(cè)操作。換句話說,當(dāng)在指令串中檢測(cè)到下一分支時(shí),指令獲取單元202不會(huì)從分支預(yù)測(cè)單元206的BTB207獲得分支預(yù)測(cè)信息。
[0044]當(dāng)指令串中的分支指令被識(shí)別時(shí),分支預(yù)測(cè)控制單元209可以確定是否應(yīng)執(zhí)行分支預(yù)測(cè)操作,且指令獲取單元202可以查詢分支目標(biāo)緩沖器207來預(yù)測(cè)在該分支指令之后應(yīng)獲取那條指令來解碼。特別地,分支目標(biāo)緩沖器207可以向指令獲取單元202提供與指令獲取單元202所識(shí)別的分支指令相對(duì)應(yīng)的預(yù)測(cè)分支指令的預(yù)測(cè)目標(biāo)地址,從而允許指令獲取單元202獲取預(yù)測(cè)目標(biāo)地址處的指令。
[0045]獲取的指令被指令解碼單元203解碼,并基于該指令執(zhí)行的運(yùn)算類型被發(fā)出單元204發(fā)出到合適的執(zhí)行單元205。執(zhí)行單元205確定條件分支指令的分支條件是否被滿足,以及是否采用條件分支指令的分支還是無條件分支。執(zhí)行單元205可以將與是否已采用分支相關(guān)的信息提供給分支歷史單元208,該信息可被用于預(yù)測(cè)未來的分支。[0046]在本公開的實(shí)施例中,可由分支預(yù)測(cè)控制單元209提供的分支預(yù)測(cè)阻止指令可以包括一整數(shù)值,該整數(shù)值表示分支預(yù)測(cè)功能應(yīng)被跳過或阻止的分支指令的數(shù)量。該整數(shù)可以是任何整數(shù),包括I并達(dá)到任何想要的整數(shù)。在阻止了與該整數(shù)值相等的數(shù)量的分支指令的分支預(yù)測(cè)時(shí),分支預(yù)測(cè)單元206和指令獲取單元202可以恢復(fù)對(duì)指令流中的分支指令的分支預(yù)測(cè)操作。分支預(yù)測(cè)控制單元209提供的指令還可以包括諸如分支類型的信息,對(duì)于該類型的分支應(yīng)跳過或阻止分支預(yù)測(cè)功能。換句話說,該指令可以阻止預(yù)定數(shù)量的一種類型的分支指令的分支預(yù)測(cè),而允許所有其他類型的分支指令的分支預(yù)測(cè)操作。
[0047]圖3示出了根據(jù)本公開的實(shí)施例的指令編譯組合件300的框圖。例如,指令編譯組合件300可以對(duì)應(yīng)于圖1中的指令編譯組合件110。
[0048]指令編譯組合件300包括存儲(chǔ)器310和編譯器320。存儲(chǔ)器311可以存儲(chǔ)編程代碼311,例如用戶或計(jì)算機(jī)程序生成的高級(jí)編程代碼。編程代碼311被提供給編譯器323的代碼分析器321,其可以分析該編程代碼,并且基于該分析,可執(zhí)行指令生成器322可以將編程代碼轉(zhuǎn)換為可執(zhí)行指令312,所述可執(zhí)行指令可被存儲(chǔ)在存儲(chǔ)器310中??蓤?zhí)行指令可被處理器(例如圖2中的指令執(zhí)行組合件200)讀取,以執(zhí)行所述指令來控制計(jì)算機(jī)執(zhí)行可執(zhí)行指令312所指示的功能。
[0049]在一個(gè)實(shí)施例中,編程代碼包括用于阻止分支預(yù)測(cè)的指令。阻止指令可以包括在該阻止指令之后應(yīng)跳過或阻止分支預(yù)測(cè)的分支指令的預(yù)定數(shù)量。阻止指令還可以包括關(guān)于分支指令的信息,例如應(yīng)阻止或跳過分支預(yù)測(cè)功能的分支指令類型或特定分支指令。代碼分析器321可以分析編程代碼311,并可以向可執(zhí)行指令生成器322指示該編程代碼的阻止指令對(duì)應(yīng)于將由該可執(zhí)行指令生成器322生成的阻止指令??蓤?zhí)行指令生成器322生成包含阻止指令的可執(zhí)行指令312??蓤?zhí)行指令312可被生成,并作為可順序執(zhí)行的指令流來存儲(chǔ)。
[0050]在另一實(shí)施例中,代碼分析器321被配置或編程為分析編程代碼311并對(duì)將編程代碼的分析提供給可執(zhí)行指令生成器322和阻止指令插入單元323。當(dāng)代碼分析器321分析與一個(gè)或多個(gè)預(yù)定義或預(yù)確定的條件相對(duì)應(yīng)的代碼時(shí),阻止指令插入單元323可以控制代碼分析器321將與分支預(yù)測(cè)阻止指令對(duì)應(yīng)的指令插入到編程代碼311中?;蛘?,阻止指令插入單元323可以控制可執(zhí)行指令生成器322將可執(zhí)行分支預(yù)測(cè)阻止指令插入到可執(zhí)行指令串312中。例如,代碼分析器321可以分析編程代碼321并識(shí)別編程代碼中的特定分支指令。阻止指令插入單元323可以將特定分支指令識(shí)別為應(yīng)跳過或阻止分支預(yù)測(cè)的分支指令類型,并且可以指示代碼分析器321或可執(zhí)行指令生成器322在特定分支指令的上游提供分支預(yù)測(cè)阻止指令,以在可執(zhí)行指令312的處理期間避免特定分支指令的分支預(yù)測(cè)。阻止指令可被插入到上游的預(yù)定數(shù)量的指令處,從而在處理期間,可以最小化指令執(zhí)行流水線的中斷。例如,阻止指令可被插入到足夠上游,從而在執(zhí)行阻止指令時(shí),特定的分支指令還沒有被解碼。
[0051]盡管圖1-3示出了由指令執(zhí)行組合件200和指令編譯組合件300來基于指令流檢測(cè)條件,本公開的實(shí)施例包括基于指令流檢測(cè)條件的任何裝置。例如,在一個(gè)實(shí)施例中,指令執(zhí)行組合件200外部的計(jì)算機(jī)程序可以監(jiān)視分支指令的執(zhí)行,并可以識(shí)別應(yīng)阻止分支預(yù)測(cè)的分支指令。計(jì)算機(jī)程序可以在處理特定的分支指令之前向指令執(zhí)行組合件200或存儲(chǔ)器提供分支預(yù)測(cè)阻止指令。[0052]圖4示出了根據(jù)本公開的一個(gè)實(shí)施例的方法的流程圖。在框401中,確定在執(zhí)行指令流時(shí)是否遇到了分支預(yù)測(cè)阻止指令。例如,指令執(zhí)行流水線的執(zhí)行單元可以執(zhí)行分支預(yù)測(cè)阻止指令。在框402中,阻止指令使得分支預(yù)測(cè)阻止被設(shè)置。例如,執(zhí)行單元可以向指令獲取單元提供指令,來控制指令獲取單元不要針對(duì)阻止指令之后的預(yù)定數(shù)量的分支指令執(zhí)行分支預(yù)測(cè)操作。被阻止的分支預(yù)測(cè)操作的數(shù)量是I或更大的有限數(shù)字。在一個(gè)實(shí)施例中,該數(shù)字在阻止指令中定義。在一個(gè)實(shí)施例中,阻止指令還指定了應(yīng)跳過分支預(yù)測(cè)的分支指令類型。
[0053]在框403中,確定是否遇到了與不執(zhí)行分支預(yù)測(cè)的分支指令類型相對(duì)應(yīng)的分支指令。如果在框403中檢測(cè)到禁止的分支指令,則在框404中阻止該指令的分支預(yù)測(cè)功能。例如,阻止分支預(yù)測(cè)可以包括阻止獲取單元存取分支目標(biāo)緩沖器以及阻止來自分支指令的信息進(jìn)入到分支目標(biāo)緩沖器和分支歷史單元。
[0054]在框405中,確定是否已遇到分支預(yù)測(cè)阻止指令所指定的數(shù)量N的分支指令。例如,分支預(yù)測(cè)阻止指令可以包括從I到大于I的任何數(shù)字的整數(shù)值,以指示要跳過或阻止分支預(yù)測(cè)操作的分支指令的數(shù)量。
[0055]如果在框405中確定已遇到指定數(shù)量N的分支指令,在框406中清除分支預(yù)測(cè)阻止指令,且后續(xù)的分支指令可進(jìn)行正常的分支預(yù)測(cè)操作。
[0056]圖5示出了根據(jù)本公開的另一實(shí)施例的方法的流程圖。在框501中,確定分支預(yù)測(cè)阻止條件是否被滿足。阻止條件可以基于在獲取的指令的流中識(shí)別的分支指令、基于指令流中其他指令的特征、基于與何時(shí)執(zhí)行分支預(yù)測(cè)或應(yīng)該對(duì)哪類分支指令執(zhí)行分支預(yù)測(cè)相關(guān)的預(yù)編程指令、基于對(duì)前面的分支指令的分析(例如確定某些分支指令不可預(yù)測(cè))、或基于任何其他想要的條件。
[0057]如果在框501中檢測(cè)到該條件,則在框502中分支預(yù)測(cè)阻止指令被插入到指令流中。例如,如果該條件與指令流中被識(shí)別的分支指令相關(guān),則阻止指令可被插入到識(shí)別的分支指令的上游,以避免該識(shí)別的分支指令的分支預(yù)測(cè)。分支預(yù)測(cè)阻止指令可以指定要跳過分支預(yù)測(cè)的分支指令的非常窄的范圍,或者分支預(yù)測(cè)指令可以阻止任何類型的條件分支指令的分支預(yù)測(cè)。
[0058]在框503中,確定是否遇到了與不執(zhí)行分支預(yù)測(cè)的分支指令類型相對(duì)應(yīng)的分支指令。如果在框503中檢測(cè)到禁止的分支指令,則在框504中阻止針對(duì)該指令的分支預(yù)測(cè)功能。例如,阻止分支預(yù)測(cè)可以包括阻止獲取單元存取分支目標(biāo)緩沖器或者阻止來自分支指令的信息進(jìn)入到分支目標(biāo)緩沖器和分支歷史單元。
[0059]在框505中,確定是否已遇到分支預(yù)測(cè)阻止指令所指定的數(shù)量N的分支指令。例如,分支預(yù)測(cè)阻止指令可以包括從I到大于I的任何數(shù)字的整數(shù)值,以指示要跳過或阻止分支預(yù)測(cè)操作的分支指令的數(shù)量。
[0060]如果在框505中確定已遇到指定數(shù)量N的分支指令,在框506中清除分支預(yù)測(cè)阻止指令,且后續(xù)的分支指令可進(jìn)行正常的分支預(yù)測(cè)操作。
[0061]圖6示出了根據(jù)一個(gè)實(shí)施例的用于選擇性地阻止分支預(yù)測(cè)操作的系統(tǒng)600的框圖。這里描述的方法可以用硬件、軟件(例如固件)或其組合來實(shí)現(xiàn)。在一個(gè)示例性實(shí)施例中,這里描述的方法在硬件中實(shí)現(xiàn),所述硬件作為專用或通用數(shù)字計(jì)算機(jī)(例如個(gè)人計(jì)算機(jī)、工作中、小型機(jī)或大型機(jī)的微處理器)的一部分。系統(tǒng)600因此包括通用計(jì)算機(jī)601。[0062]在示例性實(shí)施例中,如圖6所示,在硬件架構(gòu)方面,計(jì)算機(jī)601包括處理器605,其可以是多線程處理器605,被配置為同時(shí)或無次序地執(zhí)行指令;耦合到存儲(chǔ)控制器615的存儲(chǔ)器610 ;以及一個(gè)或多個(gè)輸入和/或輸出(I/O)裝置640、645 (或外圍),其通過本地輸入/輸出控制器635來通信地耦合。輸入/輸出控制器635可以是例如但不限于本領(lǐng)域中已知的一種或多種總線或其他有線或無線連接。輸入/輸出控制器635可以具有為了簡(jiǎn)單起見而被省略的其他元件,例如控制器、緩沖器(高速緩存)、驅(qū)動(dòng)器、中繼器和接收器,以使能通信。此外,本地接口可以包括地址、控制和/或數(shù)據(jù)連接,以使能在上述組件之間的合適的通信。
[0063]處理器605是用于執(zhí)行軟件的硬件裝置,所述軟件特別是存儲(chǔ)在存儲(chǔ)裝置620(例如高速緩存存儲(chǔ)或存儲(chǔ)器610)中的軟件。處理器605可以是任何定制的或市場(chǎng)上可獲得的處理器、中央處理單元(CPU)、與計(jì)算機(jī)601相關(guān)的若干個(gè)處理器中的輔助處理器、基于半導(dǎo)體的微處理器(采用微芯片或芯片組的形式)、宏處理器、或一般的用于執(zhí)行指令的任何裝置。處理器605可以包括圖2的指令執(zhí)行組合件200的部分,例如分支預(yù)測(cè)單元206、指令獲取單元202以及分支預(yù)測(cè)阻止單元210。
[0064]存儲(chǔ)器610可以包括易失性存儲(chǔ)器元件(例如隨機(jī)存取存儲(chǔ)器(RAM,例如DRAM、SRAM、SDRAM等))和非易失性存儲(chǔ)器元件(例如ROM、可擦除可編程只讀存儲(chǔ)器(EPR0M)、電可擦除可編程只讀存儲(chǔ)器(EEPR0M)、可編程只讀存儲(chǔ)器(PR0M)、磁帶、光盤只讀存儲(chǔ)器(⑶-ROM)、磁盤、軟磁盤、卡盤、盒式磁帶等)中的任何一個(gè)或組合。此外,存儲(chǔ)器610可以包含電子、磁、光以及/或其他類型的存儲(chǔ)介質(zhì)。注意到存儲(chǔ)器610可以具有分布式結(jié)構(gòu),其中,各個(gè)組件互相位于遠(yuǎn)端,但可被處理器605存取。
[0065]存儲(chǔ)器610中的指令可以包括一個(gè)或多個(gè)單獨(dú)的程序,其中每個(gè)包括用于實(shí)現(xiàn)邏輯功能的可執(zhí)行指令的有序列表。在圖6的例子中,存儲(chǔ)器610中的指令是合適的操作系統(tǒng)(OS) 611。操作系統(tǒng)611基本上控制其他計(jì)算機(jī)程序的執(zhí)行并提供調(diào)度、輸入-輸出控制、文件和數(shù)據(jù)管理、存儲(chǔ)器管理、以及通信控制和相關(guān)服務(wù)。
[0066]在不例性實(shí)施例中,傳統(tǒng)的鍵盤650和鼠標(biāo)655可被稱合到輸入/輸出控制器635。其他的輸出裝置例如I/O裝置640、645可以包括輸入裝置,例如但不限于打印機(jī)、掃描儀、麥克風(fēng)等。最后,I/O裝置640、645還可以包括傳送輸入和輸出兩者的裝置,例如但不限于網(wǎng)絡(luò)接口卡(NIC)或調(diào)制器/解調(diào)器(用于存取其他文件、裝置、系統(tǒng)或網(wǎng)絡(luò))、射頻(RF)或其他收發(fā)器、電話接口、網(wǎng)橋、路由器等。系統(tǒng)600還可以包括耦合到顯示器630的顯示控制器625。在示例性實(shí)施例中,系統(tǒng)600還可以包括用于耦合到網(wǎng)絡(luò)665的網(wǎng)絡(luò)接口 660。網(wǎng)絡(luò)665可以是基于IP的網(wǎng)絡(luò),用于計(jì)算機(jī)601和任何外部服務(wù)器、客戶機(jī)等經(jīng)寬帶連接的通信。網(wǎng)絡(luò)665在計(jì)算機(jī)601和外部系統(tǒng)之間發(fā)送和接收數(shù)據(jù)。在示例性實(shí)施例中,網(wǎng)絡(luò)665可以是服務(wù)提供商管理的受管理IP網(wǎng)絡(luò)。網(wǎng)絡(luò)665可以用無線的方式來實(shí)現(xiàn),例如使用諸如WiF1、WiMax等的無線協(xié)議和技術(shù)。網(wǎng)絡(luò)665還可以是包交換網(wǎng)絡(luò),例如局域網(wǎng)、廣域網(wǎng)、城域網(wǎng)、因特網(wǎng)或其他相似類型的網(wǎng)絡(luò)環(huán)境。網(wǎng)絡(luò)665可以是固定的有限網(wǎng)絡(luò)、無線局域網(wǎng)(LAN)、無線廣域網(wǎng)(WAN)、個(gè)域網(wǎng)(PAN)、虛擬專用網(wǎng)(VPN)、內(nèi)部網(wǎng)或其他合適的網(wǎng)絡(luò)系統(tǒng),并且包括用于接收和發(fā)送信號(hào)的設(shè)備。
[0067]如果計(jì)算機(jī)601是PC、工作站、智能設(shè)備等,存儲(chǔ)器610中的指令還可包括基本輸入輸出系統(tǒng)(BIOS)(為簡(jiǎn)單起見被省略)。BIOS是一組基本軟件例程,其在啟動(dòng)時(shí)初始化并測(cè)試硬件、啟動(dòng)0S611、支持硬件設(shè)備之間的數(shù)據(jù)傳輸。BIOS被存儲(chǔ)在ROM中,從而在激活計(jì)算機(jī)601時(shí)可以執(zhí)行BIOS。
[0068]當(dāng)計(jì)算機(jī)601在運(yùn)行中時(shí),處理器605被配置為執(zhí)行存儲(chǔ)器610中存儲(chǔ)的指令,以向/從存儲(chǔ)器601傳送數(shù)據(jù),并根據(jù)指令來一般地控制計(jì)算機(jī)601的運(yùn)行。
[0069]在示例性實(shí)施例中,這里描述的選擇性分支預(yù)測(cè)方法可以用下列技術(shù)(其中每個(gè)在本領(lǐng)域中都是熟知的)中的任一個(gè)或組合來實(shí)現(xiàn):用于針對(duì)數(shù)據(jù)信號(hào)實(shí)現(xiàn)邏輯功能的具有邏輯門的離散邏輯電路、具有合適的組合邏輯門的專用集成電路(ASIC)、可編程門陣列(PGA)、現(xiàn)場(chǎng)可編程門陣列(FPGA)等。
[0070]所屬【技術(shù)領(lǐng)域】的技術(shù)人員知道,本發(fā)明的一個(gè)或多個(gè)方面可以實(shí)現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明的一個(gè)或多個(gè)方面可以具體實(shí)現(xiàn)為以下形式,即:完全的硬件實(shí)施方式、完全的軟件實(shí)施方式(包括固件、駐留軟件、微代碼等),或硬件和軟件方面結(jié)合的實(shí)施方式,這里可以統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實(shí)施例中,本發(fā)明的一個(gè)或多個(gè)方面還可以實(shí)現(xiàn)為在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式,該計(jì)算機(jī)可讀介質(zhì)中包含計(jì)算機(jī)可讀的程序代碼。
[0071]可以采用一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)的任何組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是一但不限于一電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任何以上的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式緊湊盤只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者上述的任何合適的組合。在本文件中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何包含或存儲(chǔ)程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0072]現(xiàn)在參考圖7,在一個(gè)例子中,計(jì)算機(jī)程序產(chǎn)品710包括例如一個(gè)或多個(gè)存儲(chǔ)介質(zhì)712,其中,該介質(zhì)可以是有形的和/或非暫時(shí)的介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)可讀程序代碼裝置或邏輯714,以提供或促進(jìn)這里描述的實(shí)施例的一個(gè)或多個(gè)方面。
[0073]當(dāng)被創(chuàng)建和在有形介質(zhì)(包括但不限于電子存儲(chǔ)器模塊(RAM)、閃存、高密度磁盤(CD)、DVD、磁帶等)上存儲(chǔ)時(shí),程序代碼通常被稱為“計(jì)算機(jī)程序產(chǎn)品”。計(jì)算機(jī)程序產(chǎn)品介質(zhì)典型地可被優(yōu)選地在計(jì)算機(jī)系統(tǒng)中的處理電路讀取,以由該處理電路來執(zhí)行。這樣的程序代碼例如可以用匯編指令的編譯器或匯編器來創(chuàng)建,當(dāng)該指令被執(zhí)行時(shí),執(zhí)行實(shí)施例的方面。
[0074]實(shí)施例包括用于執(zhí)行選擇性分支預(yù)測(cè)的計(jì)算機(jī)系統(tǒng)、方法、計(jì)算機(jī)程序產(chǎn)品和任何其他裝置或設(shè)備。實(shí)施例包括檢測(cè)指令流中的分支預(yù)測(cè)阻止指令,以及基于對(duì)分支預(yù)測(cè)阻止指令的檢測(cè)來阻止預(yù)定數(shù)量的分支指令的分支預(yù)測(cè)。該檢測(cè)和阻止可以由處理器來執(zhí)行。
[0075]在一個(gè)實(shí)施例中,該預(yù)定數(shù)量在分支預(yù)測(cè)阻止指令中指定。另一實(shí)施例包括避免與預(yù)定數(shù)量的分支操作相關(guān)的信息被存儲(chǔ)以用于后續(xù)的分支預(yù)測(cè)操作。該避免可以由處理器來執(zhí)行。
[0076]另一實(shí)施例包括檢測(cè)基于指令流的預(yù)定條件,并基于對(duì)預(yù)定條件的檢測(cè)將分支預(yù)測(cè)阻止指令插入到指令流中。在一個(gè)實(shí)施例中,該指令流是處理器的處理流水線中的指令流,預(yù)定的條件包括確定所獲取的分支指令對(duì)應(yīng)于預(yù)定類型的分支指令,并且將分支預(yù)測(cè)阻止指令插入到指令流中包括在獲取的分支指令的上游插入分支預(yù)測(cè)阻止指令。
[0077]在一個(gè)實(shí)施例中,預(yù)定的條件是基于過去的分支預(yù)測(cè)來確定指令流中的分支指令難以被預(yù)測(cè)。在一個(gè)實(shí)施例中,預(yù)定的條件是指令流中的非分支指令的特征。另一實(shí)施例包括基于確定已阻止了預(yù)定數(shù)量的分支預(yù)測(cè)操作,允許分支指令的分支預(yù)測(cè)操作。
[0078]技術(shù)效果和好處包括通過阻止可能產(chǎn)生較低處理效率的分支指令(例如具有不可預(yù)測(cè)的歷史的分支指令)的分支預(yù)測(cè),來提升處理性能。此外,通過提供用于僅阻止預(yù)定數(shù)量的分支預(yù)測(cè)(包括僅阻止下一預(yù)測(cè)操作)的指令,分支預(yù)測(cè)可被選擇性地阻止。因此,在具有大量分支操作(或者其中只有較小數(shù)量的已知分支指令是不可預(yù)測(cè)的)的指令流中,可最大化執(zhí)行的分支預(yù)測(cè)的數(shù)量,而僅針對(duì)想要的分支指令來阻止分支預(yù)測(cè)的執(zhí)行。
[0079]盡管上面通過示例的方式針對(duì)分支指令的預(yù)測(cè)和阻止來描述本公開的實(shí)施例,可以理解,本公開的實(shí)施例包括檢測(cè)任何預(yù)定類型的指令以及將阻止指令插入到指令流中以阻止任何類型的預(yù)測(cè)方案被執(zhí)行。
[0080]此處使用的術(shù)語僅是為了描述特定實(shí)施例,且不旨在限制本發(fā)明。如在此使用的,單數(shù)形式“一”、“一個(gè)”和“該”也旨在包括多數(shù)形式,除非上下文另有清楚的規(guī)定。還將理解,當(dāng)在本說明中使用時(shí),術(shù)語“包括”和/或“包含”明確說明存在所陳述的特點(diǎn)、整體、步驟、操作、元件和/或組件,但不排除存在或添加一個(gè)或多個(gè)其他的特點(diǎn)、整體、步驟、操作、元件、組件和/或其組。
[0081]以下權(quán)利要求中的所有裝置或步驟加功能性元件相應(yīng)的結(jié)構(gòu)、材料、操作和等價(jià)物旨在包括用于結(jié)合在權(quán)利要求中特意闡明的其他元件而執(zhí)行該功能任何結(jié)構(gòu)、材料或操作。本發(fā)明的說明已出于解釋和描述的目的被展示,但不旨在是窮盡性的或?qū)⒈景l(fā)明限制在公開的形式。許多修改和變化對(duì)于本領(lǐng)域普通技術(shù)人員來說是明顯的,且不脫離本發(fā)明的精神和范圍。選擇并描述實(shí)施例是為了最好地解釋本發(fā)明的原理和實(shí)際應(yīng)用,且使得本領(lǐng)域普通技術(shù)人員能針對(duì)具有適用于所打算的特定用途的各種修改的各種實(shí)施例理解本發(fā)明。
[0082]可以以一種或多種程序設(shè)計(jì)語言的任何組合來編寫用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序代碼,所述程序設(shè)計(jì)語言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語言一諸如Java、Smalltalk、C++等,還包括常規(guī)的過程式程序設(shè)計(jì)語言一諸如“C”語言或類似的程序設(shè)計(jì)語言。程序代碼可以完全地在用戶計(jì)算機(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ī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任何種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。
[0083]參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述了本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得這些計(jì)算機(jī)程序指令在通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時(shí),產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的裝置。[0084]也可以把這些計(jì)算機(jī)程序指令存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中,這些指令使得計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其他設(shè)備以特定方式工作,從而,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令就產(chǎn)生出包括實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的指令的制造品(article of manufacture)0
[0085]也可以把計(jì)算機(jī)程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其他裝置上,使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其他裝置上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而在計(jì)算機(jī)、其它可編程裝置或其他裝置上執(zhí)行的指令就提供實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。
[0086]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動(dòng)作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。
【權(quán)利要求】
1.一種用于執(zhí)行選擇性分支預(yù)測(cè)的計(jì)算機(jī)系統(tǒng),該系統(tǒng)包括: 存儲(chǔ)器,其被配置為存儲(chǔ)指令;以及 處理器,其被配置為執(zhí)行指令,以控制計(jì)算機(jī)系統(tǒng)來執(zhí)行指令所指示的功能,該系統(tǒng)被配置為執(zhí)行方法,該方法包括: 通過處理器來檢測(cè)指令流中的分支預(yù)測(cè)阻止指令;以及 基于對(duì)分支預(yù)測(cè)阻止指令的檢測(cè),通過處理器來阻止分支預(yù)測(cè)阻止指令之后的預(yù)定數(shù)量的分支指令的分支預(yù)測(cè)。
2.如權(quán)利要求1所述的計(jì)算系統(tǒng),其中,所述預(yù)定數(shù)量在分支預(yù)測(cè)阻止指令中指定。
3.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),該方法還包括: 通過處理器來避免與預(yù)定數(shù)量的分支操作相關(guān)的信息被存儲(chǔ)以用于以后的分支預(yù)測(cè)操作。
4.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),所述方法還包括: 通過處理器來檢測(cè)基于指令流的預(yù)定條件; 基于對(duì)預(yù)定條件的檢測(cè),通過處理器將分支預(yù)測(cè)阻止指令插入到指令流中。
5.如權(quán)利要求4所述的計(jì)算機(jī)系統(tǒng),其中,所述指令流是處理器的處理流水線中的指令流, 所述預(yù)定條件包括確定獲取的分支指令對(duì)應(yīng)于預(yù)定類型的分支指令,并且 將分支預(yù)測(cè)阻止指令插入到指令流中包括在獲取的分支指令的上游插入分支預(yù)測(cè)阻止指令。
6.如權(quán)利要求4所述的計(jì)算機(jī)系統(tǒng),其中,所述預(yù)定條件是基于過去的分支預(yù)測(cè)確定指令流中的分支指令難以被預(yù)測(cè)。
7.如權(quán)利要求4所述的計(jì)算機(jī)系統(tǒng),其中,所述預(yù)定條件是指令流中的非分支指令的特征。
8.如權(quán)利要求1所述的計(jì)算機(jī)系統(tǒng),所述方法還包括: 基于確定已經(jīng)阻止了預(yù)定數(shù)量的分支預(yù)測(cè)操作,允許分支指令的分支預(yù)測(cè)操作。
9.一種計(jì)算機(jī)實(shí)現(xiàn)的用于執(zhí)行選擇性分支預(yù)測(cè)的方法,該方法包括: 通過處理器來檢測(cè)指令流中的分支預(yù)測(cè)阻止指令;以及 基于對(duì)分支預(yù)測(cè)阻止指令的檢測(cè),通過處理器來阻止分支預(yù)測(cè)阻止指令之后的預(yù)定數(shù)量的分支指令的分支預(yù)測(cè)。
10.如權(quán)利要求9所述的方法,還包括: 避免與預(yù)定數(shù)量的分支操作相關(guān)的信息被存儲(chǔ)以用于以后的分支預(yù)測(cè)操作。
11.如權(quán)利要求9所述的方法,還包括: 通過處理器來檢測(cè)基于指令流的預(yù)定條件; 基于對(duì)預(yù)測(cè)條件的檢測(cè)、通過處理器將分支預(yù)測(cè)阻止指令插入到指令流中。
12.如權(quán)利要求11所述的方法,其中,所述預(yù)定條件包括確定獲取的分支指令對(duì)應(yīng)于預(yù)定類型的分支指令。
13.如權(quán)利要求12所述的方法,其中,將分支預(yù)測(cè)阻止指令插入到指令流中包括在獲取的分支指令的上游插入分支預(yù)測(cè)阻止指令。
14.如權(quán)利要求11所述的方法,其中,所述預(yù)定條件是基于分支預(yù)測(cè)歷史確定獲取的分支指令難以被預(yù)測(cè)。
15.如權(quán)利要求9所述的方法,還包括: 基于確定已阻止了預(yù)定數(shù)量的分支預(yù)測(cè)操作,允許用于分支指令的分支預(yù)測(cè)操作。
【文檔編號(hào)】G06F9/38GK103513963SQ201310235141
【公開日】2014年1月15日 申請(qǐng)日期:2013年6月14日 優(yōu)先權(quán)日:2012年6月15日
【發(fā)明者】J·J·博南諾, U·邁爾, A·薩珀里托, 岑中龍, T·J·斯利格爾 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司