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