TWI836108B - 資料結構放棄 - Google Patents
資料結構放棄 Download PDFInfo
- Publication number
- TWI836108B TWI836108B TW109121764A TW109121764A TWI836108B TW I836108 B TWI836108 B TW I836108B TW 109121764 A TW109121764 A TW 109121764A TW 109121764 A TW109121764 A TW 109121764A TW I836108 B TWI836108 B TW I836108B
- Authority
- TW
- Taiwan
- Prior art keywords
- instruction
- storage
- unused
- circuit
- storage circuits
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
提供一種資料處理裝置,其包括:用以儲存資料之複數個儲存電路。執行電路系統回應於指令使用儲存電路來執行一或更多個操作。該等指令包括放棄指令。執行電路系統藉由指示該複數個儲存電路中之至少一者為未用儲存電路來回應該放棄指令,且執行電路系統在執行該放棄指令之後基於該未用儲存電路來影響未來指令的執行。
Description
本揭示案係關於資料處理。本揭示案可(例如)與使用儲存電路(諸如,暫存器)來儲存資料之資料處理設備有關。
資料處理裝置可包括一或更多個儲存電路,諸如,用於在處理期間儲存資料值之暫存器。可藉由指令來操作此些資料值。然而,在給定時間週期內,將不再使用一些資料值。然而,此些資料值的存在會影響未來指令的執行。舉例而言,若推測性地採用分支且一條指令試圖將暫存器用作目的地暫存器,則可能發生停頓,直至可決定是否正確地推測採用該分支為止。此係因為未採用分支上之指令可能將暫存器用作源,且一旦該暫存器中之值被覆寫便不可能「倒回」該推測採用之分支。同時,上下文切換導致保存暫存器之狀態,使得彼些暫存器可由不同進程使用。然而,因為可能必須保存每一暫存器,所以每一暫存器的存在會增加發生上下文切換所耗費之時間。需要改良此種資料處理裝置之效率。
自第一實例配置來看,提供一種資料處理裝置,其包括:複數個儲存電路,用以儲存資料;以及執行電路系統,用以回應於指令使用該等儲存電路來執行一或更多個操作,其中該等指令包括放棄指令;該執行電路系統經調適以藉由指示該複數個儲存電路中之至少一者為未用儲存電路來回應該放棄指令;以及該執行電路系統經調適以在執行該放棄指令之後基於該未用儲存電路來影響未來指令的執行。
自第二實例配置來看,提供一種資料處理的方法,其包括:將資料儲存在複數個儲存電路中;回應於指令包括放棄指令而使用該等儲存電路執行一或更多個操作;回應於該放棄指令,指示該複數個儲存電路中之至少一者為未用儲存電路;以及在執行該放棄指令之後基於該未用儲存電路來影響未來指令的執行。
自第三實例配置來看,提供一種資料處理裝置,其包括:用於將資料儲存在複數個儲存電路中之構件;用於回應於指令包括一放棄指令而使用該等儲存電路執行一或更多個操作之構件;用於回應於該放棄指令而指示該複數個儲存電路中之至少一者為一未用儲存電路之構件;以及用於在執行該放棄指令之後基於該未用儲存電路來影響未來指令的執行之構件。
在參考隨附諸圖論述實施例之前,提供對實施例之以下描述。
根據一些實例配置,提供一種資料處理裝置,其包括:複數個儲存電路,用以儲存資料;以及執行電路系統,用以回應於指令使用該等儲存電路來執行一或更多個操作,其中該等指令包括一放棄指令;該執行電路系統經調適以藉由指示該複數個儲存電路中之至少一者為未用儲存電路來回應該放棄指令;以及該執行電路系統經調適以在執行該放棄指令之後基於該未用儲存電路來影響未來指令的執行。
在以上實例配置中,放棄指令用以指示儲存在特定儲存電路中之值(例如,儲存在彼儲存電路中之資料值)不再被使用。此「不被使用」狀態一直持續至儲存電路下一次被存取(例如,寫入)為止,此時值改變,且因此儲存電路的狀態再次變成「使用」。在一些實施例中,可能會提供顯式指令來指示儲存電路現「在使用中」。無論如何,基於具有此狀態之儲存電路影響(例如,修改)了至少一些未來指令的執行。應注意,未來指令實際上可能會由於(例如)分支或其他控制流指令而在程式中更早出現。放棄指令不必為專用指令,而是可係執行放棄存儲電路的功能之常規指令。以此方式,可如此指示不再使用之儲存電路,且因此藉由慮及此些儲存電路可使得未來指令的執行更高效。可藉由編譯器及/或藉由程式員來執行決定給定儲存電路是否不再使用之進程。假定在編譯/程式化時,可分析整個程式以決定是否不再使用給定值,則有可能將此資訊作為資料處理裝置之程式的一部分來提供。
根據一些實例配置,資料處理裝置包括上下文保存電路系統,以回應於上下文切換來保存儲存電路之集合,其中未來指令包括一或更多個上下文切換指令以執行上下文切換。可在上下文切換期間使用上下文保存電路系統,其中(例如)資料處理裝置自一個應用程式的執行切換至另一應用程式。在上下文切換期間,有必要保存(例如,保存至主記憶體)與儲存電路之集合相關聯的內容,以使得後續應用程式可利用彼些儲存電路,而不會使當前儲存在彼些儲存電路中之資料丟失。
在一些實例中,上下文保存電路系統經調適以抑制保存該未用儲存電路。藉由抑制保存該未用儲存電路,執行上下文保存之進程由可於要儲存較少資料而加快。因此,提高了上下文保存的效率,以及減少了為儲存當前上下文所必要的儲存量。
在一些實例中,上下文保存電路系統經調適以保存除了未用儲存電路以外的該複數個儲存電路。在此些實施例中,保存排除未用儲存電路以外的儲存電路之集合。
在一些實例中,上下文保存電路系統經調適以保存未用儲存電路或該等儲存電路中除了未用的以外的彼些之標識符。因此,保存了未用儲存電路之標識符,或保存了使用的儲存電路之標識符。在任一情形下,有可能決定在恢復應用程式時如何以及在何處將保存的值插入回儲存電路中。在存在諸多未用儲存電路的情況下,可儲存未用儲存電路中之每一者的標識符,以使得保存的值中之每一者可恢復至其正確位置。作為恢復進程之初始步驟,可重設儲存電路之集合的當前值,以使得將抹除未恢復之彼些儲存電路。因此,即使被切換掉之應用程式所使用的資料表現出異常,亦無法被切換到之應用程式讀取。
在一些實例中,資料處理裝置包括發佈電路系統,用以以串流順序接收指令,且以不同於該流順序之修訂順序將該等指令發佈給執行電路系統。發佈電路系統可用以無序地執行指令。特定而言,發布電路系統可以串流順序接收指令,且接著將指令(或對應於彼些指令之操作/控制信號)提供給佇列,在該佇列中,該等指令可按指令之間的資料依賴性以任何順序執行。以此方式,倘若存在多個執行電路,則可並行地執行指令。另外,藉由無序地執行指令,有可能限制指令之間資料依賴性的影響,以使得指令不需要由於其他指令之間的資料依賴性而停止執行。
在一些實例中,串流順序包括放棄指令,其後為分支指令,再後為生產者指令;預測分支指令為被採用的;生產者指令將第二資料值存儲在未用儲存電路中;且修訂順序導致生產者指令在分支完成之前發布。在此些實例中,使用放棄指令來指示保持第一資料值之儲存電路不再被使用。由此,有可能當分支仍為推測性(例如,尚未完成)時生產者指令(在分支目標處)開始執行。此係因為放棄指令已指示儲存有第一資料值之儲存電路將不再被使用。因此,保持彼資料之儲存電路可由生產者指令用以儲存第二資料值。通常,如果控制流不確定(例如,由於有條件的分支),則處理器將無法推測性地執行生產者指令,因為若分支的預測不正確,則在讀取舊值之正確程式流上可能仍存在消費者指令。放棄機制使得有可能說明情況並非如此,且因此使得能夠進行推測。在一些實例中,自未用儲存電路讀取第一資料值之消費者指令在放棄指令之前。消費者指令可被視為利用特定資料值之指令(與生產者指令相反,生產者指令可被視為提供供消費者指令使用的資料值之指令)。因而,在消費者指令在放棄指令之前的情況下,生產者指令在消費者指令完成讀取作為放棄指令的對象之暫存器之後執行。
在一些實例中,消費者指令在複數個處理器週期內執行。在消費者指令在複數個處理器週期內執行的情況下,在消費者指令完成之前執行其他指令(諸如,生產者指令)之能力使得執行其他操作成為可能,而非進行停頓直至消費者指令完成為止。
在一些實例中,消費者指令為矩陣運算指令。在諸多處理器週期內執行之指令的其他實例可包括除法指令及記憶體存取指令。
在一些實例中,複數個儲存電路中之每一者為可同時定址的。由於複數個儲存電路為可同時定址的,因此有可能在任何一個時間存取彼些儲存電路中之任一者。此對於一些演算法(諸如,矩陣乘法)有用,其效率可藉由添加可定址儲存電路系統來提高。此並非在所有架構中總是有可能的。特定而言,特定架構可能具有大量可用的儲存電路,在任一時刻只可定址其中的一個子集。此導致資料處理裝置產生增大的儲存電路可用性的錯覺。舉例而言,若多個指令將資料儲存在暫存器(儲存電路)R3中,則會提供暫存器R3之多個複本,使得對於每一推測流,可分配新的R3暫存器。若推測證實不正確,則可「恢復」R3的先前複本。此技術稱為重命名。重命名需要使大量資源可用,且由於所需電路系統的量,對於特別大之暫存而言,重命名可能被視為不切實際的。藉由提供更多可定址的儲存器而非使用相同的儲存空間來提供重命名暫存器,可提高諸如矩陣乘法之演算法的效率。繼而藉由能夠「放棄」未用之暫存器,可減少上下文切換期間需要保存之暫存器的數目。
在一些實例中,複數個儲存電路中之每一者經調適以儲存複數個資料值,複數個儲存電路中之每一者經調適以儲存複數個資料值。藉由提供經調適以儲存複數個資料值之儲存電路,可滿足複雜的資料結構。舉例而言,此些儲存電路可經配置以儲存與矩陣有關之所有資料值,以使得可一次對整個矩陣執行運算。
在一些實例中,複數個儲存電路中之每一者具有至少1 KiB的容量。換言之,複數個儲存電路中之每一者可具有1024個位元組的容量。可使用此些儲存電路,以便儲存複數個資料值。特定而言,個別資料值的大小可變化。舉例而言,可儲存1024個8位元之值,或可儲存256個32位元之值。
在一些實例中,執行電路系統經調適以藉由執行一或更多個操作中之至少一些來回應放棄指令,並指示複數個儲存電路中之該者作為未用儲存電路。因此,放棄指令可執行諸多不同目的。舉例而言,放棄指令可為常規指令,其利用儲存在儲存電路中之一或更多個資料值,以及指示不再使用彼些儲存電路中之一或更多者。以此方式,不需要將專用放棄指令作為指令集合的一部分來提供。另外,藉由使儲存電路的放棄作為另一指令的一部分,可使程式更高效。
存在諸多種方式來指示將特定指令用以執行放棄操作。然而,在一些實例中,該等指令中之至少一些包括欄位以指示彼指令是否為放棄指令。可將指令編譯成由標識要執行之指令的作業碼以及一或更多個參數構成之機器語言指令。在此些實例中,參數中之一或更多者為與儲存電路(例如,暫存器)引用相關聯之單一位元,其指示該儲存電路是否將被標記為未用。由於設定了機器語言指令中之此些欄位中的一或更多者,將該指令識別為放棄指令,且放棄該特定儲存電路。
在一些實例中,資料處理裝置包括追蹤電路系統,以標識包括該未用儲存電路之一或更多個未用儲存電路。追蹤電路系統可因此用以指示未用的(若干)儲存電路之標識符。在僅單個儲存電路可被標記為未用的情況下,遮罩電路系統可簡單地編碼彼儲存電路之標識符。在其他實例中(其中未用儲存電路之數目可大於一),可提供遮罩以編碼(例如,使用按位元編碼)所使用之彼些儲存電路。在任一情形下,可使用放棄指令,以便更新儲存在追蹤電路系統中之值。類似地,亦可更新儲存在追蹤電路系統中之值,以指示特定暫存器由於彼儲存電路中之彼值被改變而被使用。
在一些實例中,儲存電路為暫存器;以及未用儲存電路為該等暫存器中之未用暫存器。
現將參考諸圖來描述特定實施例。
第1圖根據一些實施例示意性地繪示資料處理裝置100。裝置100包括提取器110,該提取器110負責自(例如)主記憶體或指令快取記憶體提取指令。所提取之指令由解碼器120存取,該解碼器120將所提取之指令解碼成表示個別操作之一或更多個控制信號。操作被傳遞至發佈邏輯130,該發佈邏輯130負責發佈並排程構成指令之操作。自此,指令被發佈至一或更多個執行電路170。在此實例中,執行單元170包括算術邏輯單元(arithmetic logic unit; ALU)170a、第二算術單元(ALU)170b、浮點單元(floating point unit; FPU)170c、加載/儲存單元170d、分支單元170e、上下文保存單元170f,及矩陣運算單元170g。裝置100包括暫存器檔案140a、140b。暫存器檔案由兩部分構成-第一部分140a含有通用暫存器150a且第二部分140b含有特定暫存器150b,在此情形下特定暫存器150b保留用於矩陣運算。此處,暫存器150b為所主張儲存電路之實例。在指令執行期間,來自暫存器檔案140a中之通用暫存器150a的資料可傳遞至執行單元170中之任一者。然而,來自特定暫存器150b之資料僅可由加載/儲存單元170d及矩陣運算單元170g存取。
執行單元170中之一或更多者(諸如,矩陣運算單元170g)執行與提取器110所提取之指令中的放棄指令相對應之操作。放棄指令用以指示不再需要暫存器檔案140b中之一或更多個特定暫存器150b。此種需求缺乏一直持續至新資料值被儲存在彼暫存器中之時為止。由執行電路170中之一者執行的放棄指令導致保持在暫存器檔案140b內之用法遮罩160被更新。用法遮罩160指示當前使用(亦即,未被放棄)之特定暫存器150b的集合。當然,在其他實施例中,用法遮罩160可用以指示特定暫存器150b中之已被放棄的彼些。在此實施例中,如稍後將指示,出於推測目的,用法遮罩160亦可用於發佈邏輯130。
第2A圖示出放棄指令280之實例。在此情形下,放棄指令採取矩陣乘法指令之形式。亦即,矩陣乘法指令具有放棄能力,且因此為放棄指令之實例,即使指令實際上執行了矩陣乘法的進一步運算。在此實例中,指令280包括三個參數-對暫存器MC1之第一引用、對暫存器MAP
之第二引,及對暫存器MBQ
之第三引用。在此指令280中,最後兩個引用可用特定符號(^)作為後綴。此指示,在利用了儲存在彼些暫存器內之值後,彼些暫存器將被放棄。亦在第2A圖中繪示出此指令280之機器語言形式200。特定而言,該指令由作業碼210構成,該作業碼210唯一地標識特定指令(三個暫存器引用230、250、270),其中每一者可以二進位標識暫存器(暫存器230中之一者為運算結果之目的地,且另兩個250、270為運算之輸入的源)。指令200亦包括兩個放棄位元240、260,其中每一者均與源暫存器引用250、270中之一者相關聯。關於此些位元中之一者之為「1」的值意謂一旦已發布了指令並已自相關暫存器中提取了資料,便將放棄對應的暫存器。同時,為「0」的值指示將使用資料值且暫存器不會被放棄。在當前實例中,與第一暫存器引用MAP
250相關聯之放棄位元240的設置而非與第二暫存器引用MBQ
270相關聯之第二放棄位元260的設置與以下指令相對應:
MATMUL MC1, MAP
^, MBQ
第2B圖繪示放棄指令之另一實例。在此實例中,放棄指令290採用不具有進一步操作目的之顯式放棄指令的形式。在此,指令290包括顯式暫存器引用MA0。因此,當執行此指令時,暫存器MA0將被放棄。
第2C圖示出放棄指令之第三實例。在此實例中,指令295包括可用以標識諸多不同暫存器之遮罩。在此實例中,遮罩為00110111。此遮罩可解釋為意謂立即放棄暫存器編號0、1、2、4及5,而將不放棄暫存器3、6及7。
將瞭解,亦可在不偏離本發明技術的情況下使用放棄指令的其他形式。另外,使用特定位元值(諸如1)來指示要放棄之特定暫存器亦可反轉,以相反表示不應放棄該暫存器的事實。
第3圖根據一些實施例繪示流程圖300,其示出結合已放棄暫存器之集合來使用推測執行的方法。進程以步驟310開始,此處提取(可能的)推測執行。在步驟320處,決定指令之目的地暫存器(例如,結果將被寫入之暫存器)是否為發生重命名之暫存器。舉例而言,此可與通用暫存器150a相對應。若目的地暫存器為重命名的暫存器,則在步驟330處,指派新的實體暫存器以充當指令之目的地暫存器,且在步驟340處,基於該指令使用指派的實體暫存器來執行推測操作。
然而,本發明技術亦使得有可能在目的地暫存器並非重命名的暫存器時(亦即,在該暫存器為特定暫存器150b中之一者的情況下)執行推測。特定而言,若在步驟320處決定目的地暫存器並非重命名的暫存器,則在步驟350處,決定該目的地暫存器是否為已放棄暫存器。若非如此,則在步驟360處,無法推測地執行指令,且因而必須以非推測方式執行。或者,若在步驟350處,決定暫存器為已放棄暫存器,則進程進行至步驟340,此處可執行與彼指令相對應之推測操作。有可能使用已放棄暫存器來執行推測操作,因為已放棄暫存器不再被應用程式使用。因此,應用程式當前對該暫存器無興趣,且因而在錯誤推測的情況下,暫存器可安全地返回至被放棄狀態,而不會丟失資料。
第4圖根據一些實施例繪示暫存器放棄可如何輔助推測之實例。特定而言,第4圖繪示其中執行一連串矩陣乘法之程式的實例。在第一行及第二行處,資料值(例如,矩陣)被加載至暫存器MA0及MB0中。接著在指令三至十二之間開始循環。在此循環內,在指令三處,將另一資料值(例如,矩陣)加載至暫存器MB1中。在指令四處,藉由將儲存在MA0中之矩陣乘以儲存在MB0中之矩陣來進行矩陣乘法,其中結果儲存在暫存器MC0中。在指令五處,將新矩陣加載至暫存器MA0中,且在指令六處,執行矩陣乘法MA0 x MB1 = MC1。在指令七處發生至MA0中之另一加載。在指令八處,發生另一矩陣乘法MA1 x MB0 = MC2。在指令九處,將矩陣加載至暫存器MB0中。在指令十處,發生另一矩陣乘法MA1 x MB1 = MC3。在指令十一處,變量「count」的值減小一。在第十二行處,測試以查看在指令十一處發生之遞減的結果是否導致「count」的值達到零。若非如此,則流程返回至指令二至三之間的標籤標記之循環。否則,其餘程式(未繪示)將繼續。
預期矩陣乘法指令耗費諸多處理器週期來執行。為了防止停頓,在指令十的執行期間,可執行其餘指令,預測分支指令十二的結果。然而,此在指令三執行時會造成潛在的問題。特定而言,指令三將導致儲存在暫存器MB1中之值被覆寫。因而,若預測不正確,則儲存在暫存器MB1中之值將丟失。顯然此係不可接受的,因為在循環之後某一指令可能會讀取MB1。在一定程度上,此可使用暫存器重命名(先前所提及)得到解決。此會將不同暫存器指派給有衝突之指令,諸如,指令三。因而,若不正確地預測了分支,則僅有必要丟棄供應給循環中指令三之彼特定調用的實體暫存器的內容。然而,暫存器重命名需要提供暫存器之多個複本。在提供大暫存器的情況下(諸如,此種情況),暫存器重命名之成本變得過高。因此,通常必須在提供大量大暫存器或在分支指令上停頓之間做出選擇。
放棄指令的使用可用以抑制此種停頓,而無需增大暫存器的數目。特定而言,藉由在指令十一及十二之間插入放棄指令以明確指示不再需要暫存器MB1,指令三可不受懲罰地執行。特定而言,若決定該分支不應被採用,且暫存器MB1之內容已被指令三覆寫,則可簡單地擦除暫存器MB1之內容。此係因為MB1之內容不再被程式所需要,且因而可被設定為任何值。實務上,此資訊通常可供編譯器及/或程式員或程式使用。此係因為編譯器/程式員具有對程式之全面瞭解,且可決定哪些指令將在稍後執行。當然,重要的在於,在已指示不再需要暫存器MB1的情況下,程式不會再試圖自該暫存器進行讀取,直至對彼暫存器進行了另外寫入為止(藉此指示對該暫存器的放棄已結束)。
第5圖根據一些實施例示出流程圖500,其繪示了自不正確地發生之推測執行中恢復的方法。特定而言,在第5圖中,假設推測係由於(例如)不正確的分支預測而發生的。在步驟510處,決定推測已不正確地發生。在步驟520處,決定已不正確地執行之指令中所引用的暫存器是否為重命名的暫存器。若如此,則在步驟540處,恢復邏輯暫存器至實體暫存器之舊映射。亦即,暫存器的舊值重新映射為暫存器的當前值。在步驟550處,接著釋放用以儲存該值之推測暫存器(例如,將其重新添加至可用實體暫存器池中)。在步驟520處,若暫存器並非重命名的暫存器,則在步驟530處,恢復放棄位元。亦即,若暫存器被寫入藉此導致放棄位元被擦除,則恢復放棄位元以指示暫存器仍被放棄。舉例而言,在第4圖之實例中,在指令十一及十二之間設定暫存器MB1之放棄位元。若錯誤推測發生且循環重新不正確地執行,則在指令三處,暫存器MB1中之值的設置將導致放棄位元被擦除。接著,一旦偵測到推測已不正確地發生,則必須恢復放棄位元,因為彼暫存器仍被放棄且自被放棄以來尚未被寫入。
放棄指令亦可用以輔助上下文切換。當切換系統上運行之活動執行緒或應用程式時,會發生上下文切換。此要求儲存暫存器之當前值,並將與切換到之執行緒或應用程式相關聯之暫存器的已儲存值儲存回暫存器中,以使得自掛起的執行緒(現已切換到)離開時起,執行可繼續。
第6圖根據一些實施例示出當暫存器已被放棄時可如何在上下文切換期間保存上下文之實例。特定而言,在指令一處,將指示已被放棄之暫存器集合之用法遮罩160的值儲存在暫存器x0中。在指令二處,接著將暫存器x0的值儲存在context_ptr中,該context_ptr為記憶體中正在儲存暫存器的當前值之位置。感歎號「!」指示context_ptr的值接著遞增。指令三決定用法遮罩160中是否表示值一。換言之,指令三決定是否放棄暫存器一。若暫存器一(MA0)被放棄,則執行跳轉至標記not_ma0。否則,指令四會導致暫存器MA0中所儲存之資料被儲存在context_ptr中,該context_ptr接著遞增。無論如何,在指令五處,決定用法遮罩160是否指示第二暫存器(MA1)。若如此,則程式跳轉至not_ma1。否則,在指令六處,將暫存器MA1的值儲存在context_ptr處,且context_ptr遞增。無論如何,在指令七處,決定用法遮罩160是否指示第三暫存器(MB0)。若如此,則進程跳轉至not_mb0。否則,在指令八處,將暫存器MB0的值儲存在context_ptr處,且context_ptr接著遞增。針對可由用法遮罩160指示之每一暫存器重複此進程。實際上,每一暫存器皆在用法遮罩160中進行了測試。若列出了該暫存器(表明該暫存器已被放棄,且因此未用),則將跳過該暫存器的保存。否則,在context_ptr處執行彼暫存器的保存。除此以外,保存用法遮罩160自身,以使得所保存值之標識符在未來係已知的。
第7圖提供將暫存器保存為記憶體中之資料的實例。儲存的第一項為包括四個位元組之遮罩160。在此實例中,遮罩為值00011010,其表示暫存器MA0、MB0、MC1、MC2及MC3已被放棄,且因此不保存。佇列上之下一項為第一已保存暫存器-MA1。此後為第二已保存暫存器-MB1。此後為第三已保存暫存器-MC0。總言之,總共保存3076個位元組(暫存器MA1、MB1、MC1中之每一者佔用1024個位元組)。因此,此在時間及空間兩方面產生了顯著的節省。特定而言,節省了空間,因為並不保存所有暫存器(其中許多被放棄且因此不使用)。另外,因為並不保存所有暫存器,所以保存及加載暫存器之進程加快。藉由以此方式保存暫存器,有可能讀取資料並恢復正確的暫存器。
第8圖示出當暫存器已被放棄時在上下文切換期間加載上下文之實例。特定而言,第一指令kill_all導致所有暫存器被擦除。如此執行係為了防止由於傳入執行緒已放棄暫存器而將資料自一個執行緒(或應用程式)無意間攜載至另一執行緒(或應用程式)。第二指令接著將context_ptr處之資料加載至暫存器x0中,並使上下文指標遞增。如藉由第7圖所繪示,此內容將為遮罩160之已保存的先前值。在此實例中,不直接恢復遮罩160的先前值,反而恢復為「kill_all」指令之結果,其後恢復活動暫存器。在指令三處,測試遮罩以查看是否放棄了第一暫存器。若該暫存器已被放棄,則進程跳轉至not_ma0。否則,指令四導致context_ptr處之資料被加載至暫存器MA0中且context_ptr遞增。無論如何,在指令五處,測試遮罩以查看是否放棄了第二暫存器(MA1)。若如此,則進程跳轉至標記not_ma1。否則,在指令六處,將儲存在context_ptr處之資料加載至暫存器MA1中。context_ptr接著遞增。針對暫存器中之每一者持續此進程,其中測試是否應加載彼特定暫存器,並在適當的情況下執行加載(例如,若根據遮罩,則未放棄該暫存器)。如先前所述,因為已放棄的暫存器意謂較少資料被傳送,所以用以執行傳送之時間可減少。
第9圖根據一些實施例示出繪示資料處理的方法之流程圖。流程圖900以步驟910開始,此處將資料儲存在一或更多個暫存器中。在步驟920處,使用彼些暫存器中之一或更多者來執行操作。在步驟930處,使用放棄指令來指示彼些暫存器中之一或更多者現未用。在步驟940處,未來指令的執行受到彼些暫存器中的一些未用之指示影響。舉例而言,此可採取上下文切換的形式,由於暫存器被放棄,因此可更高效地執行上下文切換或使用更少的空間。此情形的另一實例係由於放棄了彼些暫存器中之一些而推測地執行指令(即使在無重命名電路系統的情況下亦如此)的能力。
在本申請案中,詞語「經配置以……」用以意謂裝置之元件具有能夠執行所定義操作的配置。在此上下文中,「配置」意謂硬體或軟體之互連的佈置或方式。舉例而言,裝置可具有提供已定義操作之專用硬體,或處理器或其他處理元件可經程式化以執行該功能。「經配置以……」並不暗示裝置元件需要以任何方式改變以提供已定義操作。
儘管本文中已參考隨附圖式詳細描述了本發明之說明性實施例,但應理解,本發明並不限於彼些精確實施例,且熟習此項技術者可在不脫離如由附加申請專利範圍所限定的本發明之範疇及精神的情況下在其中進行各種改變、添加及修改。舉例而言,在不脫離本發明之範疇的情況下可進行從屬項之特徵與獨立項之特徵的各種組合。
100:資料處理裝置
110:提取器
120:解碼器
130:發佈邏輯
140a:暫存器檔案
140b:暫存器檔案
150a:通用暫存器
150b:特定暫存器
160:用法遮罩
170:執行電路
170a:算術邏輯單元(ALU)
170b:第二算術單元(ALU)
170c:浮點單元(FPU)
170d:加載/儲存單元
170e:分支單元
170f:上下文保存單元
170g:矩陣運算單元
200:機器語言形式
210:作業碼
240:放棄位元
250:暫存器引用
260:放棄位元
270:暫存器引用
280:放棄指令
290:指令
295:指令
300:流程圖
310:步驟
320:步驟
330:步驟
340:步驟
350:步驟
360:步驟
500:流程圖
510:步驟
520:步驟
530:步驟
540:步驟
550:步驟
900:流程圖
910:步驟
920:步驟
930:步驟
940:步驟
僅藉助於實例,將參考在隨附圖式中所繪示之本發明的實施例來進一步描述本發明。
第1圖根據一些實施例示意性地繪示資料處理裝置。
第2A圖、第2B圖及第2C圖根據一些實施例示出放棄指令之三個不同實例。
第3圖根據一些實施例示出繪示推測執行的方法之流程圖。
第4圖根據一些實施例繪示儲存電路放棄可如何輔助推測之實例。
第5圖根據一些實施例示出繪示自錯誤的推測執行恢復之方法的流程圖。
第6圖根據一些實施例示出當儲存電路(諸如,暫存器)已被放棄時在上下文切換期間保存上下文之實例。
第7圖根據一些實施例提供作為上下文切換的一部分保存暫存器(其中一些暫存器已被放棄)之實例。
第8圖根據一些實施例示出當暫存器已被放棄時在上下文切換期間加載上下文之實例。
第9圖根據一些實施例示出繪示資料處理的方法之流程圖。
國內寄存資訊(請依寄存機構、日期、號碼順序註記)
無
國外寄存資訊(請依寄存國家、機構、日期、號碼順序註記)
無
100:資料處理裝置
110:提取器
120:解碼器
130:發佈邏輯
140a:暫存器檔案
140b:暫存器檔案
150a:通用暫存器
150b:特定暫存器
160:用法遮罩
170:執行電路
170a:算術邏輯單元(ALU)
170b:第二算術單元(ALU)
170c:浮點單元(FPU)
170d:加載/儲存單元
170e:分支單元
170f:上下文保存單元
170g:矩陣運算單元
Claims (15)
- 一種資料處理裝置,包括:複數個儲存電路,用以儲存資料;以及執行電路系統,用以回應於指令使用該等儲存電路來執行一或更多個操作,其中該等指令包括一放棄指令;該執行電路系統經調適以藉由存儲該複數個儲存電路中之至少一者為一未用儲存電路的一存儲指示來回應該放棄指令;及該執行電路系統經調適以在執行該放棄指令之後,基於該複數個儲存電路中之至少一者為該未用儲存電路的該存儲指示,來影響未來指令的執行;及上下文保存電路系統,其經調適以:抑制保存該未用儲存電路;或保存除了該未用儲存電路以外的該複數個儲存電路。
- 如請求項1所述之資料處理裝置,其中該上下文保存電路系統經調適以回應於一上下文切換來保存該等儲存電路之一集合,其中該等未來指令包括一或更多個上下文切換指令以執行該上下文切換。
- 如請求項1所述之資料處理裝置,其中該上下文保存電路系統經調適以保存該未用儲存電路或該等儲存電路中除了未用的以外的彼些之一標識符。
- 如請求項1所述之資料處理裝置,其中該複數個儲存電路中之每一者為可同時定址的。
- 如請求項1所述之資料處理裝置,其中該複數個儲存電路中之每一者經調適以儲存複數個資料值。
- 如請求項1所述之資料處理裝置,其中該複數個儲存電路中之每一者具有至少1024個位元組的容量。
- 如請求項1所述之資料處理裝置,其中該執行電路系統經調適以藉由執行該一或更多個操作中之至少一些來回應該放棄指令,並指示該複數個儲存電路中之該者作為該未用儲存電路。
- 如請求項1所述之資料處理裝置,其中該等指令中之至少一些包括一欄位以指示彼指令是否為該放棄指令。
- 如請求項1所述之資料處理裝置,包括:追蹤電路系統,用以標識包括該未用儲存電路之一或更多個未用儲存電路。
- 如請求項1所述之資料處理裝置,其中該儲存電路為暫存器;以及該未用儲存電路為該等暫存器中之一未用暫存器。
- 一種資料處理的方法,包括以下步驟:將資料儲存在複數個儲存電路中;回應於指令包括一放棄指令而使用該等儲存電路執行 一或更多個操作;回應於該放棄指令,存儲該複數個儲存電路中之至少一者為一未用儲存電路的一存儲指示;及在執行該放棄指令之後,基於該複數個儲存電路中之至少一者為該未用儲存電路的該存儲指示,來影響未來指令的執行;及抑制保存該未用儲存電路,或保存除了該未用儲存電路以外的該複數個儲存電路。
- 一種資料處理裝置,包括:用於將資料儲存在複數個儲存電路中之構件;用於回應於指令包括一放棄指令而使用該等儲存電路執行一或更多個操作之構件;用於回應於該放棄指令而存儲該複數個儲存電路中之至少一者為一未用儲存電路的一存儲指示之構件;及用於在執行該放棄指令之後基於該複數個儲存電路中之至少一者為該未用儲存電路的該存儲指示來影響未來指令的執行之構件;及用於抑制保存該未用儲存電路或保存除了該未用儲存電路以外的該複數個儲存電路之構件。
- 一種資料處理裝置,包括:複數個存儲電路,用以存儲資料;執行電路系統,用以回應於指令使用該等儲存電路來執行一個或更多個操作;及發佈電路系統,用以以串流順序接收該等指令,且以 不同於該串流順序的一修訂順序將該等指令發佈給該執行電路系統,其中該等指令包括一放棄指令;該執行電路系統經調適以藉由存儲該複數個儲存電路中之至少一者為一未用儲存電路的一存儲指示來回應該放棄指令;該執行電路系統經調適以在執行該放棄指令之後,基於該複數個儲存電路中之至少一者為該未用儲存電路的該存儲指示,來影響未來指令的執行;該串流順序包括該放棄指令,其後為一分支指令,再後為一生產者指令;該分支指令經預測為被採用;該生產者指令將一第二資料值儲存在該未用儲存電路中;及該修訂順序導致該生產者指令在該分支指令完成之前被發佈。
- 如請求項13所述之資料處理裝置,其中該等指令包括一消費者指令,該消費者指令經調適以從該未用儲存電路中讀取,且該消費者指令在複數個處理器週期內執行。
- 如請求項13所述之資料處理裝置,其中該等指令包括一消費者指令,該消費者指令經調適以從該未用儲存電路中讀取,且該消費者指令為一矩陣運算指令。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/531,206 | 2019-08-05 | ||
US16/531,206 US11269634B2 (en) | 2019-08-05 | 2019-08-05 | Data structure relinquishing |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202107278A TW202107278A (zh) | 2021-02-16 |
TWI836108B true TWI836108B (zh) | 2024-03-21 |
Family
ID=70166059
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW109121764A TWI836108B (zh) | 2019-08-05 | 2020-06-29 | 資料結構放棄 |
Country Status (8)
Country | Link |
---|---|
US (1) | US11269634B2 (zh) |
EP (1) | EP3912028A1 (zh) |
JP (1) | JP7590336B2 (zh) |
KR (1) | KR20220057482A (zh) |
CN (1) | CN113544639A (zh) |
IL (1) | IL285926B2 (zh) |
TW (1) | TWI836108B (zh) |
WO (1) | WO2021023956A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11868275B2 (en) | 2021-06-24 | 2024-01-09 | International Business Machines Corporation | Encrypted data processing design including local buffers |
US12008150B2 (en) * | 2021-06-24 | 2024-06-11 | International Business Machines Corporation | Encrypted data processing design including cleartext register files |
WO2024195694A1 (ja) * | 2024-03-14 | 2024-09-26 | 日本電気株式会社 | プロセッサ装置および演算方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6101597A (en) * | 1993-12-30 | 2000-08-08 | Intel Corporation | Method and apparatus for maximum throughput scheduling of dependent operations in a pipelined processor |
US20010004755A1 (en) * | 1997-04-03 | 2001-06-21 | Henry M Levy | Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers |
US10061588B2 (en) * | 2011-10-03 | 2018-08-28 | International Business Machines Corporation | Tracking operand liveness information in a computer system and performing function based on the liveness information |
US20190220417A1 (en) * | 2018-01-18 | 2019-07-18 | Apple Inc. | Context Switch Optimization |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5553256A (en) * | 1994-02-28 | 1996-09-03 | Intel Corporation | Apparatus for pipeline streamlining where resources are immediate or certainly retired |
JP4830164B2 (ja) * | 2009-07-07 | 2011-12-07 | エヌイーシーコンピュータテクノ株式会社 | 情報処理装置及びベクトル型情報処理装置 |
US9182986B2 (en) * | 2012-12-29 | 2015-11-10 | Intel Corporation | Copy-on-write buffer for restoring program code from a speculative region to a non-speculative region |
-
2019
- 2019-08-05 US US16/531,206 patent/US11269634B2/en active Active
-
2020
- 2020-03-25 EP EP20716892.3A patent/EP3912028A1/en active Pending
- 2020-03-25 WO PCT/GB2020/050800 patent/WO2021023956A1/en active Application Filing
- 2020-03-25 KR KR1020217029390A patent/KR20220057482A/ko active Pending
- 2020-03-25 IL IL285926A patent/IL285926B2/en unknown
- 2020-03-25 CN CN202080019767.2A patent/CN113544639A/zh active Pending
- 2020-03-25 JP JP2021555375A patent/JP7590336B2/ja active Active
- 2020-06-29 TW TW109121764A patent/TWI836108B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6101597A (en) * | 1993-12-30 | 2000-08-08 | Intel Corporation | Method and apparatus for maximum throughput scheduling of dependent operations in a pipelined processor |
US20010004755A1 (en) * | 1997-04-03 | 2001-06-21 | Henry M Levy | Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers |
US10061588B2 (en) * | 2011-10-03 | 2018-08-28 | International Business Machines Corporation | Tracking operand liveness information in a computer system and performing function based on the liveness information |
US20190220417A1 (en) * | 2018-01-18 | 2019-07-18 | Apple Inc. | Context Switch Optimization |
Also Published As
Publication number | Publication date |
---|---|
TW202107278A (zh) | 2021-02-16 |
WO2021023956A1 (en) | 2021-02-11 |
IL285926B2 (en) | 2024-07-01 |
IL285926A (en) | 2021-10-31 |
CN113544639A (zh) | 2021-10-22 |
JP2022542630A (ja) | 2022-10-06 |
EP3912028A1 (en) | 2021-11-24 |
US11269634B2 (en) | 2022-03-08 |
IL285926B1 (en) | 2024-03-01 |
KR20220057482A (ko) | 2022-05-09 |
JP7590336B2 (ja) | 2024-11-26 |
US20210042114A1 (en) | 2021-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6660991B2 (ja) | マルチスレッドプロセッサでのタスクのスケジューリング | |
JP3547482B2 (ja) | 情報処理装置 | |
US7185338B2 (en) | Processor with speculative multithreading and hardware to support multithreading software | |
US5136697A (en) | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache | |
US7711929B2 (en) | Method and system for tracking instruction dependency in an out-of-order processor | |
US5949995A (en) | Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code | |
EP1145110B1 (en) | Circuit and method for tagging and invalidating speculatively executed instructions | |
TWI836108B (zh) | 資料結構放棄 | |
US20160350115A1 (en) | Register renaming | |
JP2008047145A (ja) | デュアルスレッドプロセッサ | |
CN106155636B (zh) | 用于寄存器重命名的可用寄存器控制 | |
KR19980069764A (ko) | 단일 사이클 마이크로 명령을 이용한 명령 스케쥴링 방법 및 프로세서 | |
JPH09152973A (ja) | カウント/リンク・レジスタ変更命令の投機実行をサポートする方法及び装置 | |
JP7510253B2 (ja) | 分岐予測器 | |
KR102379886B1 (ko) | 벡터 명령 처리 | |
US7890740B2 (en) | Processor comprising a first and a second mode of operation and method of operating the same | |
US11663014B2 (en) | Speculatively executing instructions that follow a status updating instruction | |
US11775297B2 (en) | Transaction nesting depth testing instruction | |
JP3015565B2 (ja) | 複数命令の並列実行機能を持つ情報処理装置 | |
US20060259752A1 (en) | Stateless Branch Prediction Scheme for VLIW Processor |