TW202113592A - 用以在臆測執行期間認為安全時省略安全性檢查的硬體 - Google Patents
用以在臆測執行期間認為安全時省略安全性檢查的硬體 Download PDFInfo
- Publication number
- TW202113592A TW202113592A TW109120970A TW109120970A TW202113592A TW 202113592 A TW202113592 A TW 202113592A TW 109120970 A TW109120970 A TW 109120970A TW 109120970 A TW109120970 A TW 109120970A TW 202113592 A TW202113592 A TW 202113592A
- Authority
- TW
- Taiwan
- Prior art keywords
- instruction
- security check
- field
- processor
- memory
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 33
- 230000015654 memory Effects 0.000 claims description 209
- 238000007689 inspection Methods 0.000 claims description 12
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 75
- 238000010586 diagram Methods 0.000 description 36
- 239000000872 buffer Substances 0.000 description 25
- 230000006870 function Effects 0.000 description 19
- 238000003860 storage Methods 0.000 description 16
- 238000000605 extraction Methods 0.000 description 14
- 238000007667 floating Methods 0.000 description 14
- 230000000873 masking effect Effects 0.000 description 13
- 238000006243 chemical reaction Methods 0.000 description 12
- 238000012545 processing Methods 0.000 description 12
- 238000004891 communication Methods 0.000 description 10
- 230000036961 partial effect Effects 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 9
- 239000003795 chemical substances by application Substances 0.000 description 8
- 238000013501 data transformation Methods 0.000 description 8
- 230000003068 static effect Effects 0.000 description 8
- 230000008901 benefit Effects 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 6
- 230000006835 compression Effects 0.000 description 6
- 238000007906 compression Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 239000003607 modifier Substances 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 230000003321 amplification Effects 0.000 description 3
- 230000003416 augmentation Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000004907 flux Effects 0.000 description 3
- 238000003199 nucleic acid amplification method Methods 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000001629 suppression Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 239000012536 storage buffer Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/556—Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- 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/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
-
- 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/3818—Decoding for concurrent 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/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
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
描述有關用於臆測性執行中之安全性檢查省略的硬體之系統、方法、及設備。在一實施例中,硬體處理器包括一解碼器,用以將一指令解碼為一已解碼指令;一臆測管理器電路,用以:檢測該指令中之一安全性檢查欄位,基於該安全性檢查欄位以從複數安全性檢查策略判定將針對潛在錯誤臆測執行來實施的一安全性檢查策略,對該指令履行該安全性檢查策略之一或更多相關檢查以判定該指令是否被潛在地錯誤臆測,當該指令依據該等一或更多相關檢查而不被視為安全時,排程該指令以供執行,及當該指令依據該等一或更多相關檢查而被視為安全時,省略該指令;及一執行單元,用以執行其被排程以供執行的該指令。
Description
本發明係有關用以在臆測執行期間認為安全時省略安全性檢查的硬體。
處理器(或處理器之集合)係執行來自指令集(例如,指令集架構(ISA))之指令。指令集為關於編程之電腦架構的部分,且通常包括本機資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷和例外處置、及外部輸入和輸出(I/O)。應注意:術語「指令」於此可指稱巨集指令,例如,其為提供給處理器以供執行之指令;或者微指令,例如,其得自處理器之解碼器解碼巨集指令的結果之指令。
及
於以下描述中,提出了數個特定細節。然而,應理解:本發明之實施例可被實行而無這些特定細節。於其他例子中,眾所周知的電路、結構及技術未被詳細地顯示以免模糊了對本說明書之瞭解。
說明書中對於「一個實施例」、「一實施例」、「一範例實施例」等等之參照係指示所述之實施例可包括特定的特徵、結構、或特性,但每一實施例可能不一定包括該特定的特徵、結構、或特性。此外,此等用詞不一定指稱相同的實施例。再者,當特定的特徵、結構、或特性配合實施例而描述時,係認為其落入熟悉此項技術人士之知識範圍內,以致能配合其他實施例(無論是否明確地描述)之此等特徵、結構、或特性。
一種(例如,硬體)處理器(例如,具有一或更多核心)可執行指令(例如,指令之執行緒)以操作於資料上(例如)來履行算術、邏輯、或其他功能。例如,軟體可請求一操作而硬體處理器(例如,其一核心或多數核心)可回應於該請求而履行該操作。軟體可包括一或更多分支(例如,分支指令),其導致不同指令順序而非依程式順序的執行。分支指令可為無條件分支,其總是導致分支;或條件式分支,其係根據某(些)條件而可或可不導致分支。某些處理器被管線流通(pipelined)以容許更多指令更快速地完成。此一般表示:指令不會等待先前指令完成,在其(例如,臆測性)執行開始之前。然而,此方法之一問題係由於條件式分支而發生。特別地,當處理器遭遇條件式分支且該條件之結果尚未被計算時,其不知道是否進行分支。分支預測是某些處理器用來決定是否進行條件式分支。盡可能準確地獲得此資訊是重要的,因為不正確的預測(例如,錯誤預測)將造成某些處理器丟棄其無須被執行的所有指令並以正確組的指令重新開始,例如,此程序對於深度管線流通處理器是特別昂貴的。於一實施例中,處理器之分支預測器積極地臆測並獲得顯著的性能,例如,以一種漸增的失序深度及寬度。
在某些實施例中,將由支援臆測性執行(例如,包括分支預測)之硬體處理器所執行的碼包括一或更多安全性檢查(例如,安全性檢查指令)。某些安全性檢查(例如,用以實施記憶體安全檢查或類型安全檢查)可使用靜態分析而被省略(例如,藉由編譯器),但該分析應被延伸以考量臆測性執行。為了在執行之所有可能路徑上實施所欲的安全性策略,包括錯誤臆測者,可能需要額外的安全性檢查。然而,錯誤臆測在某些實施例中極少發生,所以那些安全性檢查將加諸額外的負擔,其在那些實施例中通常是不需要的。
在某些實施例中,記憶體安全檢查係用以檢查記憶體存取錯誤,例如,針對緩衝器溢流及搖擺指標。於一實施例中,記憶體安全檢查係用以檢查陣列邊界及指標解參考。
在某些實施例中,類型安全檢查係用以檢查(例如,針對記憶體存取請求)介於程式之常數、變數、及方法(例如,函數)的不同資料類型之間的差異,例如,將其係整數(int)之資料處置為浮點數(float)的錯誤。
文中之某些實施例延伸處理器的架構以讀取其僅當所檢查的操作可能潛在地為錯誤臆測時所需的特別安全性檢查之暗示(例如,由編譯器發出)。當處理器判定該等操作不被認為安全的時,則檢查可被履行且臆測可持續,其係增加最佳化機會。另一方面,當處理器在其準備好要執行之前判定此一操作是安全的時,則相關安全性檢查可被跳過以減少這些實施例中之負擔。文中之某些實施例提供一種方式以指明其安全性檢查應僅被履行在一指令可能被錯誤臆測時。未來編譯器將極可能增加其所發出之安全性檢查指令的量,使得檢查係實施對於潛在臆測性控制流之(例如,類型)安全。文中之某些實施例在該情況下藉由將資訊(例如,從編譯器)傳遞至微架構而提供效率優點,該資訊係有關在其已知為正確預測的/架構的控制流上哪些安全性檢查可被跳過。
籬(fences)可被用以限制由一先前安全性檢查所限制(直到該檢查已完成)之操作的臆測性執行。不像用於臆測性執行中之安全性檢查省略的文中所述實施例,籬亦可能限制其並非依賴安全性檢查之操作的臆測性執行,而因此限制了處理器用以最佳化性能的能力。
在某些實施例中,用以防禦硬體處理器中之硬體臆測攻擊的策略是藉由使得臆測在資料快取階層中隱形(例如)來更精確地判定何時可安全地進行載入而不會以一種可能洩漏資訊的方式影響微架構狀態,並藉由在允許臆測性執行繼續的時點前緩衝狀態改變。於一實施例中,該策略阻擋了通過多處理器資料快取階層之微架構反轉及側通道(由於臆測性載入),例如,使得不安全的臆測性載入將資料讀入一臆測性緩衝器中,而不會修改快取階層。當載入變為安全時,此策略使其成為系統之剩餘者所可見的。此策略識別其可能已違反記憶體一致性的載入,且(在此刻)迫使其履行確認(validation)步驟。不像用於臆測性執行中之安全性檢查省略的文中所述實施例,上述策略在判定何時可安全地進行載入是過度悲觀的,假如開發商僅在意實施較鬆散的安全性手段(諸如記憶體安全或類型安全)而非針對該策略所實施之快取存取可見性的架構上規格之更嚴謹的完全符合檢查。此策略亦增加對於緩衝器空間之要求。緩衝邏輯亦引入額外的負擔及複雜度,特別因為該策略在當其最終被允許進行時重新發送已緩衝載入。用於臆測性執行中之安全性檢查省略的文中所述實施例致能使用安全性檢查(例如,如由編譯器所插入者)以實施開發商所欲的特別安全性策略,且那些檢查本身可被臆測性地執行以比若無那些檢查的情況下更早地宣布操作(例如,載入)安全。注意:緩衝可配合用於臆測性執行中之安全性檢查省略的文中所述實施例來使用。
用於臆測性執行中之安全性檢查省略的文中所述實施例係定義新類型的指令(及對於先前定義的指令之修飾符),其包括實施開發商所欲的安全性策略而同時仍致能顯著的動態最佳化之安全性設備(instrumentation)。例如,其致能邊界檢查指令(例如,針對指標指令或記憶體保護延伸(MPX)邊界檢查指令的能力(例如,用以檢查低或高邊界))或一組暗示邊界及類型檢查被標示如所需,僅假如來自所被檢查的位址的載入將被認為不安全的話。當處理器到達該指令時,假如已滿足安全準則(例如,已判定先前分支之正確方向)則該處理器可跳過該指令。在某些實施例中,此背景下的能力指的是具有嵌入指標儲存內之相關安全性元資料的指標。
類型安全語言可由開發商所使用以避免在可能導致資料洩漏之其程式中的共同安全性問題。在某些實施例中,記憶體安全並非如此嚴格(例如,其不會防止類型混淆),但其可加諸較少的應實施負擔。用於臆測性執行中之安全性檢查省略的文中所述實施例提供一種方式以更有效率地實施全性策略(例如,記憶體安全及/或類型安全)之適當子集,沿著執行之架構式及錯誤臆測路徑,藉由使用一暗示(例如,由編譯器所提供)以通知處理器有關對於其可能被錯誤臆測之控制流僅需要哪些安全性檢查。在某些實施例中,暗示在一程式之碼中為可見,用以指示僅針對潛在地錯誤臆測指令所需的檢查。
強調用於臆測性執行中之安全性檢查省略的文中所述實施例之基礎觀念在於其一些程式僅需實施策略之一適當子集(例如,少於全部)(例如,記憶體安全及/或類型安全策略)而非完全符合運行該程式之處理器的架構上規格,以及在於其比針對處理器資源之既定集合所將可能者(假如執行更嚴厲策略的話)提供更大程度臆測性實施的機會。
因此,用於臆測性執行中之安全性檢查省略的文中所述實施例之一態樣係使用某些窄類型的安全性檢查(諸如邊界檢查及類型檢查)而不需要完全架構上符合以限制(gate)臆測性執行。此可藉由以下方式來實現:在相關檢查完成(例如,針對指標檢查、MPX檢查、或其他已定義檢查的能力)之前防止由安全性敏感操作(例如,記憶體載入)所引發的對手可見微架構狀態改變。例如,此可具有以下形式:阻擋進一步臆測性執行直到檢查完成或者緩衝所得的狀態改變並將其轉返(假如檢查失敗的話)。
其次,此暗示:可能需要更多的安全性檢查以涵蓋可能的錯誤臆測控制流,而先前一編譯器可能已靜態地省略對於其為架構上不可能的流程之檢查。此需要編譯器之某些實施例具有臆測性執行之模型,使得其可識別所有可能的臆測性控制流。
第三,為了效率的原因,編譯器之某些實施例能夠通知該處理器有關哪些安全性檢查已被加入(其將否則將已被省略),使得在當已被檢查的值符合其架構上定義時處理器可跳過那些檢查。跳過那些檢查(例如,跳過將那些檢查調度至一執行單元)係節省能量、頻寬、及處理器之其他資源,而因此係對於處理器(例如,包括處理器之電腦)的改良。
以下詳細說明此第三態樣。用於臆測性執行中之安全性檢查省略的文中所述實施例致能由處理器使用暗示(例如,由編譯器所提供),該等暗示係有關哪些安全性檢查僅在當受到該檢查所限制的操作以某其他方式尚未被視為安全時需要。例如,考量以下樣本虛擬碼:
在某些實施例中,用於以下存取的邊界檢查應被無條件地履行,因為“id”之任何值可被提供給此功能(排除針對此範例之直接插入(inlining)的可能性)。類型檢查可能不需要,因為編譯器可靜態地驗證此存取之類型安全,假設其插口之位址不曾由處理器所臆測。否則,假如臆測之位準是可能的,則動態類型安全檢查可致能臆測進一步進行,而同時仍確保其類型安全被實施。
然而,注意:即使位址臆測是可能的,編譯器仍可靜態地判定其類型安全檢查是不需要的(假如插口之位址匹配其架構定義的話),在某些實施例中。此後者條件被滿足,假如處理器(例如,中央處理單元(CPU))已解決任何條件或撤回其可能已潛在地造成插口之位址自其架構定義偏離(例如,被錯誤臆測)的任何指令,諸如其可混疊至記憶體位置(插口之位址被載入自該記憶體位置)之先前分支或先前儲存,假如可得的話。
用於臆測性執行中之安全性檢查省略的文中所述實施例致能編譯器將一暗示傳遞至處理器,該暗示係指示該類型安全檢查可被省略,假如被輸入至後續存取之位址已被處理器(例如,CPU)判定為架構式(在準備好執行該存取的時點)。
於一實施例中,上述虛擬碼中之dynamic_cast常式接受一模板參數,其係指明該參數所被投入之指標的類型。其履行動態檢查以判定該輸入參數之類型是否為模板參數之子類別或者其是否完全地匹配。假如為是,則該常式之結果係針對具有如該輸入指標之相同位址的新類型之物件的指標。否則,dynamic_cast返回空(null)。
當作一範例,此「假如」敘述造成編譯器產生分支指令以實施條件式控制流。假如先前分支在該假如敘述之此分支中的該等指令執行之時刻前已解決,則該類型檢查已通過。其暗示針對ts->port之後續存取亦將在ts之邊界內。因此,一暗示可被供應至此ts->port存取,指示其類型及邊界檢查(例如,邊界檢查指令)可被省略,假如所被存取之位址已知為匹配其架構定義且所有先前分支均已解決的話。注意:此係一更強烈的限制,相較於針對從lookupSocket中之最後敘述所產生的存取而指明者。多種類型的暗示可針對各類型的限制來定義(例如,不同的指令前綴或不同的指令變體)。
當作上述虛擬碼之另一範例,假如該分支被錯誤預測以使得LocalDomainSocket被存取如同其為TCPIPSocket的話,則在剛超過該LocalDomainSocket之末端而被儲存的資料之十六個位元將被用以編索引入tcpipServices陣列。假如其剛好是某敏感資料所儲存處,例如,針對伺服器之私密金鑰的部分,則該資訊可判定tcpipServices陣列中之哪個項目被拉入快取中,假設其整個陣列是初始未快取的。假如有一對手能夠測定針對tcpipServices陣列之後續存取的時間(例如,藉由嘗試連接至各服務並測定欲建立該連接所需的時間),則其可能洩漏敏感資料值。最快速連接的服務可能是具有其埠數目等於敏感資料的服務。密碼金鑰可大於範例十六位元,但洩漏私密金鑰之任一者是潛在地有問題的。可能也有比此範例中所描述之情境更複雜的情境,其可能導致更多金鑰洩漏。
假如該存取準備好執行,但其由於以上所定義的準則而尚未被視為安全的,則邊界及類型檢查可被履行。假如該分支被錯誤臆測則邊界及類型檢查兩者將於此情況下失敗,但於其他情況下僅一種檢查可能失敗。
於某些情況下可能有幫助的是分辨對於物件之開始的指標與對於物件內之其他偏移的指標,使得動態邊界檢查可使用後者子類型的指標而被履行在存取上,即使靜態檢查否則將已足夠(假如該指標係針對該物件之基礎的話)。其可提高用以在指標表示中指明該指標是否指向物件之開始的效率。例如,該指標中之一保留位元可被設定在當該指標(或fat指標)被初始化至物件基礎時,而後續指標更新可根據所得指標是否指向物件基礎以更新該位元。
圖1繪示依據本發明之實施例的包括處理器核心109之電腦系統100。處理器核心109 可包括臆測管理器110,用以管理文中所討論之臆測特徵的控制。排程器147可包括臆測管理器110,其包括如文中所討論之臆測性執行功能中的安全性檢查省略。在某些實施例中,臆測管理器110包括安全性檢查策略112,用以儲存將針對特定安全性檢查策略而履行之相關檢查的一或更多者。例如,第一安全性檢查策略可為記憶體安全檢查策略114而第二安全性檢查策略可為類型安全檢查策略116。在某些實施例中,臆測管理器110係用以存取碼(例如,添加有暗示的碼106)(例如,已添加暗示的指令、或該指令的已解碼指令,來自碼106),用以判定哪個策略適用,並接著判定其省略一或更多相關檢查是安全或是不安全。於一實施例中,臆測管理器110包括通至核心109之排程器147的路徑110A,例如,用以停止其將被省略之指令(例如,微碼)的排程(及因此停止執行)。路徑110A可容許單向通訊或雙向通訊。於一實施例中,排程器147係用以排程執行單元154之一或更多者上的指令(例如,微碼)之執行。
所描繪的電腦系統100包括分支預測器120及分支位址計算器142(BAC),在管線處理器核心109(1)-109(N)中,依據本發明之實施例。參考圖1,管線處理器核心(例如,109(1))包括指令指標產生(IP Gen)級111、提取級130、解碼級140、以及執行級150。在某些實施例中,撤回級(例如,包括重排序緩衝器(ROB))係追隨執行級150。在一實施例中,電腦系統(例如,處理器)100包括多數核心109(1-N),其中N是任何正整數。在另一實施例中,電腦系統(例如,處理器)100包括單一核心。在某些實施例中,各處理器核心109(1-N)實例支援多線程(例如,執行第一及第二邏輯核心上之二或更多平行組的操作或線緒),並可以多種方式執行,包括時間切割多線程、同時多線程(例如,其中單一實體核心提供邏輯核心給其實體核心正同時地多線程之每一線緒)、或者其組合(例如,時間切割提取和解碼以及之後的同時多線程)。在所描繪的實施例中,各單一處理器核心109(1)至109(N)包括分支預測器120之實例。分支預測器120可包括分支目標緩衝器(BTB) 124。
在某些實施例中,分支目標緩衝器124儲存(例如,在分支預測器陣列中)經預測目標指令,相應於複數分支指令之各者(例如,其已被執行多次之碼的區段之分支指令)。在所描繪的實施例中,分支位址計算器(BAC) 142被包括,其存取(例如,包括)返回堆疊緩衝器144 (RSB)。在某些實施例中,返回堆疊緩衝器144係用以儲存(例如,在最後資料入係第一資料出(LIFO)之堆疊資料結構中)任何CALL(呼叫)指令之返回位址(例如,其推送該堆疊上之其返回位址)。
分支位址計算器(BAC) 142 被用以計算某些類型的分支指令之位址及/或驗證由分支預測器(例如,BTB)所做出的分支預測。在某些實施例中,分支位址計算器履行分支目標及/或接下來的依序線性位址計算。在某些實施例中,分支位址計算器係基於位址計算以在分支上履行靜態預測。
在某些實施例中,分支位址計算器142含有返回堆疊緩衝器144,用以追蹤CALL指令之返回位址。在一實施例中,分支位址計算器嘗試校正由分支預測器120所做出的任何不當預測以減少分支錯誤預測懲罰。當作一範例,分支位址計算器針對其目標可僅從分支指令及指令指標判定之那些分支驗證分支預測。
在某些實施例中,分支位址計算器142維持返回堆疊緩衝器144,其被利用為用以判定返回指令之目標位址的分支預測機制,例如,其中返回堆疊緩衝器係藉由監督所有「呼叫子常式」及「返回自子常式」分支指令來操作。在一實施例中,當分支位址計算器檢測到「呼叫子常式」分支指令時,分支位址計算器便將下一指令之位址推至返回堆疊緩衝器上,例如,以堆疊指標之頂部標記返回堆疊緩衝器之頂部。藉由將緊接在各「呼叫子常式」指令後之位址推至返回堆疊緩衝器上,返回堆疊緩衝器含有返回位址之堆疊,在本實施例中。當分支位址計算器稍後檢測到「返回自子常式」分支指令時,分支位址計算器將頂部返回位址彈出返回堆疊緩衝器,例如,以驗證由分支預測器120所預測的返回位址。在一實施例中,針對直接分支類型,分支位址計算器係用以(例如,總是)針對條件式分支採取預測,例如,而假如分支預測器並未針對直接分支採取預測,則分支位址計算器便撤銷分支預測器的遺漏預測或不當預測。
圖1中之核心109包括電路,用以確認由分支預測器120所做出的分支預測。各分支預測器120項目(例如,在BTB 124中)可進一步包括有效欄位及束位址(BA)欄位,其被用以增加準確度並確認由分支預測器120所履行的分支預測,如以下更詳細地討論者。在一實施例中,有效欄位及BA欄位各由一個位元欄位所組成。然而,在其他實施例中,有效及BA欄位之大小可改變。在一實施例中,提取指令被傳送(例如,由BAC 142自線137)至解碼器146以利解碼,而已解碼指令被傳送至排程器147,以排程執行單元154之一或更多者上的執行。
所描繪的電腦系統100包括網路裝置101、輸入/輸出(I/O)電路103(例如,鍵盤)、顯示105、及系統匯流排(例如,互連)107。
在一實施例中,分支預測器120中所儲存的分支指令係由編譯器所預選擇為其將被取用的分支指令。在某些實施例中,編譯器碼104,如圖所示儲存在圖1之記憶體102中,包括碼之序列,當被執行時該碼之序列係將以高階語言所寫的程式之來源碼轉譯為可執行機器碼。在一實施例中,編譯器碼104進一步包括暗示,用以形成添加有暗示的碼106。編譯器碼可進一步預測分支指令之目標指令(例如,其很可能被取用的分支指令(例如,預選擇分支指令))。分支預測器120(例如,其BTB 124)之後被更新以分支指令之目標指令。在一實施例中,軟體係管理硬體BTB,例如,以該軟體指明該預測模式或者以其由寫入BTB之指令的模式所暗示地定義的該預測模式亦設定該項目中之模式位元。
如以下所討論,所描繪的核心(例如,其分支預測器120)包括針對一或更多暫存器的存取。在某些實施例中,核心包括一或更多通用暫存器108。
在某些實施例中,分支預測器120之各項目(例如,在其BTB 124中)包括標籤欄位及目標欄位。在一實施例中,BTB中之各項目的標籤欄位儲存其識別分支指令之指令指標(例如,記憶體位址)的至少一部分。在一實施例中,BTB中之各項目的標籤欄位儲存其識別分支指令(以碼表示)之指令指標(例如,記憶體位址)。在一實施例中,目標欄位儲存其在相同項目之標籤欄位中所識別的分支指令之目標的指令指標之至少一部分。再者,在其他實施例中,分支預測器120之項目(例如,在其BTB 124中)包括一或更多其他欄位。在某些實施例中,項目不包括用以協助該分支指令是否被取用之預測的不同欄位,例如,假如分支指令存在(例如,在BTB中),則其視為被取用。
如圖1中所示,IP產生級111之IP Gen mux(產生多工器)113接收來自線114A之指令指標。經由線115A所提供的指令指標係由增量器電路115所產生,該增量器電路係接收來自路徑113A之最近指令指標的副本。增量器電路115可以預定量增加目前的指令指標,來獲得來自目前正由核心所執行之程式序列的下個依序指令。
在一實施例中,於接收到來自IP Gen mux 113之IP時,分支預測器120將該IP之一部分與分支預測器120中的各項目(例如,BTB 124)之標籤欄位進行比較。假如在該IP與分支預測器120的標籤欄位之間未發現匹配,則IP Gen mux將繼續以選擇下個依序IP為本實施例中待提取的下個指令。反之,假如檢測到匹配,則分支預測器120便讀取其與該IP匹配的分支預測器項目之有效欄位。假如有效欄位未被設定(例如,具有0之邏輯值),則分支預測器120便將各別項目視為「無效」且將忽視介於該IP與本實施例中之各別項目的標籤之間的匹配,例如,且各別項目之分支目標將不被傳遞至IP Gen Mux。另一方面,假如匹配項目之有效欄位被設定(例如,具有1之邏輯值),則分支預測器120便繼續以在指令指標(IP)的預定部分與本實施例中之匹配分支預測器的分支位址(BA)欄位之間履行邏輯比較。假如「可容許狀況」存在,則匹配項目之分支目標將被傳遞至IP Gen mux;而否則,分支預測器120忽視介於該IP與分支預測器項目的標籤之間的匹配。於一些實施例中,項目指示符被形成非僅自目前分支IP、同時自整體歷史之至少一部分。
更明確地,在一實施例中,BA欄位係指示各別分支指令被儲存在快取記憶體132之線內的何處。在某些實施例中,處理器能夠起始每時脈循環之多數指令的執行,其中該等指令並非相依且不使用相同的執行資源。
例如,圖1中所示之指令快取132的各線包括多數指令(例如,六個指令)。此外,回應於藉由提取單元134之提取操作,指令快取132係藉由提供全線的快取至提取單元134來回應(例如,在「命中」之情況下),在此實施例中。快取之一線內的指令可被群集為分離的「束」。例如,如圖1中所示,快取線133中之前三個指令可被定址為束0,而次三個指令可被定址為束1。一束內之指令的各者係彼此獨立(例如,可被同時地發送以供執行)。分支預測器120項目中所提供的BA欄位被用以識別其相應於各別項目之分支指令的束位址,在某些實施例中。例如,在一實施例中,BA係識別分支指令是被儲存在特定快取線之第一或是第二束中。
在一實施例中,分支預測器120履行匹配項目的BA欄位與IP的預定部分之間的邏輯比較,以判定是否有「可容許狀況」存在。例如,在一實施例中,IP(例如,IP[4])之第五位元位置係與匹配(例如,BTB)項目之BA欄位進行比較。在一實施例中,可容許狀況係存在當IP [4]不大於BA時。此一可容許狀況協助防止分支指令之明顯不需要的預測,其可能不被執行。亦即,當執行與分支預測器120之標籤的比較時考量少於所有IP時,可能具有與標籤之匹配,其可能不是真實匹配。然而,介於IP與分支預測器的標籤之間的匹配係指示快取之一特定線,其包括相應於各別分支預測器項目之分支指令可能即將被執行。明確地,假如IP之束位址不大於匹配分支預測器項目之BA欄位,則各別快取線中之分支指令不久將被執行。因此,性能利益可藉由繼續提取分支指令之目標來達成,在某些實施例中。
如以上所討論,假如「可容許狀況」存在,則匹配項目之分支目標將被傳遞至IP Gen mux,在此範例中。否則,分支預測器將忽視介於IP與標籤之間的匹配。在一實施例中,從分支預測器所傳遞的分支目標被初始地傳送至分支預測(BP) resteer mux 128,在其被傳送至IP Gen mux以前。BP resteer mux 128,如圖1中所示,亦可接收來自其他分支預測裝置之指令指標。在一實施例中,由BP resteer mux所接收的輸入線將被優先化以判定哪個輸入線將被容許通過BP resteer mux而至IP Gen mux上。
除了傳遞分支目標至BP resteer mux之外,在檢測到介於IP與分支預測器的標籤之間的匹配時,匹配分支預測器項目之BA被傳遞至分支位址計算器(BAC) 142。BAC 142被顯示在圖1係位於解碼級140中,但亦可位於其他級中。BAC亦可接收經由線137而來自提取單元134的快取線。
由IP Gen mux所選擇的IP亦被傳遞至提取單元134,經由資料線135,在此範例中。一旦IP由提取單元134所接收,則相應於IP之快取線被提取自指令快取132。從指令快取所接收的快取線被傳遞至BAC,經由資料線137。
在BA之接收時,於此範例中,BAC將讀取BA以判定預選擇分支指令(例如,在匹配分支預測器項目中所識別)係位於下一快取線之何處以利由BAC(例如,快取線之第一或第二束)所接收。在一實施例中,判定分支指令係位於快取線之一束(例如,於三個指令之束中,分支指令將被儲存為第二指令)內的何處。
在替代實施例中,BA包括額外位元以更明確地識別快取線內之分支指令的位址。因此,分支指令將不限於一束內之特定指令位置。
在BAC判定快取線內之預選擇分支指令的位址、並已接收來自提取單元134之各別快取線以後,BAC將解碼各別指令以驗證該IP係真實地相應於分支指令。假如由已接收快取線中之BA所定址的指令是分支指令,則不需要針對分支預測之校正。反之,假如快取線中之各別指令不是分支指令(亦即,該IP不相應於分支指令),則BAC將傳送訊息至分支預測器以無效化各別分支預測器項目,以防止對於相同分支預測器項目之類似錯誤預測。之後,經無效化的分支預測器項目將由新的分支預測器項目所覆寫。
此外,在一實施例中,BAC將以預定量增加該IP並將已增加的IP傳遞至BP resteer mux 128,經由資料線145,例如,來自BAC之資料線145將具有超越來自分支預測器之資料線的優先權。因此,已增加的IP將被傳遞至IP Gen mux並遞送至提取單元,以藉由提取其後續地跟隨該IP的指令來校正分支錯誤預測。
用於臆測性執行中之安全性檢查省略的文中所述實施例可被例示以用於實施特定安全性策略(例如,記憶體安全策略及/或類型安全策略)的多種架構。此之一個示例是Intel® Memory Protection Extensions (MPX),其係定義針對由一對(例如,64位元)暫存器所指示之記憶體範圍檢查一指標的指令(例如,BNDCL/N/U)。因此,這些指令可被用以實施記憶體安全。用於臆測性執行中之安全性檢查省略的文中所述實施例可重新定義一指令前綴,其否則在指令(例如,MPX指令)之背景下是無意義的(例如,分段撤銷前綴),用以對處理器暗示其該檢查僅在當檢查其尚未被視為安全的存取之指標時需要。處理器可藉由列舉哪些指令使用含有該指標之暫存器來識別相關的存取。然而,亦可能考量該指令本身,如同其為該存取指令且用於以該基礎判定安全,例如,因為實際的存取將依循關聯的MPX指令。
此虛擬碼範例係使用ES分段撤銷前綴以指示其記憶體安全檢查是不需要的(例如,可被省略),假如關聯的存取已知未被錯誤臆測的話,例如,並假定ES前綴之原始目的在此背景下是不重要的,而因此可用於此處之暗示用途的指令前綴是不重要的。
在某些實施例中,具有該暗示之指令被視為無操作(nop),假如其已被視為安全的話。此之一實施例被繪示於圖2中。
圖2繪示依據本發明之實施例以省略安全性檢查指令的流程圖200。所描繪的流程圖200包括:接收欲執行具有暗示(例如,安全性檢查欄位)之安全性檢查指令的請求202;判定針對安全性檢查指令之所有關聯存取是否已被視為安全204;及(假如為是的話)跳過(例如,省略)安全性檢查指令之執行206;及(假如為否的話)執行安全性檢查指令208。
在某些實施例中,該省略移除了指令之功能(例如,安全性檢查)的適當子集,但並未移除所有功能(例如,未移除將被部分地省略之指令的非安全性檢查功能)。此之範例是針對虛擬碼而被討論於下。
處理器可具有已編碼線內能力(EIC)為其利用不同安全性檢查指令之另一安全性架構,且那些可被處置多少類似於MPX指令,在文中為了安全性檢查省略之實施例的背景下。在某些實施例中,介於MPX與EIC之間的差異在於:EIC邊界檢查指令不僅履行如MPX指令之邊界檢查,其亦解碼輸入指標值以使得其可由後續記憶體存取所使用。鑑於MPX之實施例與指標分離地儲存邊界,EIC之實施例將邊界資訊直接地嵌入已編碼(例如,64位元)指標中。此表示:在某些實施例中,該指標將被解碼以在嘗試透過該指標來存取記憶體前移除該額外資訊。因此,即使存取被已知為安全且其被標示為僅若其可能潛在地被錯誤臆測的話才需要安全性檢查,EIC安全性檢查指令之某些實施例仍將解碼該指標以使得後續記憶體存取可繼續。
EIC安全性檢查指令之一範例(例如,稱為檢查能力(CheckCap))採用輸入運算元,其指明已編碼指標以及待履行存取之大小,例如,使得解碼並執行該指令係履行邊界檢查且接著以該已解碼指標覆寫該已編碼指標(假如邊界檢查成功的話)。
如在MPX為基的範例中,EIC範例重新定義分段撤銷前綴ES,用以對處理器指示其邊界檢查僅若該指令被潛在地錯誤臆測的話需被履行,在某些實施例中。
亦可定義其他指令,其係使用應用程式或語言運行時間以管理邊界及類型資訊之儲存並履行實際的安全性檢查(當需要時)。例如,RBNDCL/N/U指令可在通用暫存器(GPR)而非MPX邊界暫存器中所儲存的邊界上操作,且其可在本發明之背景下被類似地修改。再者,類型檢查(TYPECHK)指令可被定義以比較兩類型識別值(ID)之相等與否並產生一例外(假如其不匹配的話)。這些指令亦可被修改以一暗示(諸如ES前綴)來跳過安全性檢查(假如該指令是安全的話)。
一些架構可不依賴不同的指令來履行安全性檢查,而是在存取記憶體前自動地履行安全性檢查。例如,記憶體標籤可被自動地檢查,在當含有標籤值之指標被用於記憶體存取時。所有已存取記憶體位置之標籤值可被載入自標籤儲存並與該指標中之標籤進行比較。假如那些比較之任一者顯露失配,則可產生一例外。正如暗示可被供應給安全性檢查指令,暗示可被供應給記憶體存取以指示其自動安全性檢查應被跳過。以下係一範例虛擬碼,基於以上範例:
然而,使用某些分段撤銷前綴為暗示可能以不想要的方式影響記憶體存取。例如,依據本發明使用FS及GS前綴以提供暗示可能造成分段基礎位址以被加至記憶體存取中所指明的位址,其可造成錯誤的記憶體位置被存取。例如,當那些前綴已被定義在處理器架構中以造成此類位址計算時。在其他模式(例如,具有32位元線性位址)下,甚至更多分段撤銷前綴可造成位址被加至不欲的分段基礎。因此,可能必須選擇不會造成任何不欲的效果之其他前綴,或者定義針對暗示之新前綴或其他編碼,在某些實施例中。
一些指令係結合相同指令中之多類型的檢查。在一實施例中,一指令係檢查邊界及類型資訊兩者。為了闡明此情況,考量其MPX邊界暫存器及相應邊界表項目可被延伸以包括類型資訊,以及其MPX指令可被增強以檢查該類型資訊。例如,邊界檢查(例如,下邊界檢查)指令之變體係接受該位址以在單一暫存器運算元中被檢查,且因此可被延伸以接受一指明類型ID之即刻運算元。此經增強(例如,BNDCL)指令(稱為TYPEBNDCL以當作範例)可將其即刻運算元中之類型ID與邊界暫存器中之類型ID進行比較並產生一例外(假如其不匹配的話)。編譯器可接著供應暗示以選擇性地取消邊界及類型檢查之任一者或兩者,假如該指令已知為安全的話。例如,ES前綴可於此等情況下取消邊界檢查,而FS分段撤銷前綴可於此等情況下取消類型檢查。兩前綴可被供應以取消兩檢查;或者第三暗示(例如,GS前綴)可針對該目的而被定義。
並非用於實施安全性策略的所有架構均定義不同的安全性檢查指令,而是修改其產生具有指令前綴之存取的指令之方法仍可適用。例如,記憶體標記係隱含地檢查針對邊界元資料之存取,該邊界元資料係藉由其被存取之儲存位置的位址來檢索。因為某些架構是複雜指令集計算(CISC),所以大量指令可產生記憶體存取,例如,具有記憶體運算元之所有指令。其他安全性架構亦可履行隱含檢查,諸如能力機制,其係實施使用fat指標之記憶體及類型安全。如以上樣本碼中所闡明,有時候僅需要履行對於安全存取的邊界及類型檢查之一或另一者,因此針對那些類型的檢查之各者的分離修飾符可針對其支援單指令中之兩者的架構而被定義。
以下係討論插入一暗示之範例(例如,安全性檢查欄位)。在某些實施例中,在其中編譯器發出記憶體存取及任何相關的安全性檢查指令或多數指令(假如可得的話)之各點處,編譯器係決定是否亦發出一或更多暗示(如文中所討論)。在某些這些實施例中,為了如此做,編譯器係考量安全性檢查是否可被省略,假如該存取被視為安全的話。一些範例情境已被提供於上,但那些並非窮舉的。
用以做出這些判定之範例流程係參考圖3而被闡明於下。此流程可針對各存取被履行多次以針對不同類型的策略做出不同的判定,例如,一者針對記憶體安全檢查策略而另一者針對類型安全檢查策略。在某些實施例中,那些決定最終地導致合併暗示如上所述,例如,用以指示其記憶體安全及類型安全檢查被省略(假如該存取被視為安全的話)。
圖3繪示依據本發明之實施例以將一暗示發入碼中的流程圖300。繪示的流程300包括:接收其包括記憶體存取及相關安全性檢查指令的碼(例如,藉由或來自編譯器)302,以及,假如該存取被視為安全的,則判定一可用安全性策略是否可能被違反304;而,假如為否,則將一暗示(例如,當作安全性檢查指令之安全性檢查欄位)發入碼306,及,假如為是,則不將一暗示(例如,當作安全性檢查指令之安全性檢查欄位)發入碼(例如,使得安全性檢查指令被執行)308。
以下包括潛在類型的臆測及相關檢查之範例。
在一實施例中,對有關其假如該指令可能潛在地被錯誤臆測則被(例如,僅)執行的安全性檢查之處理器的暗示係指明針對潛在地錯誤臆測執行應被實施之策略的類型,例如,且接著處理器檢查其取決於該處理器所支援之臆測的類型之狀況以判定該指令是否被潛在地錯誤臆測。
以下係描述其可由處理器所支援的臆測之潛在類型以及其可履行以判定一指令是否針對該特定類型的臆測而被潛在地錯誤臆測之處理器的相關檢查的範例之非窮舉列表。假如處理器支援多類型的臆測,則其可履行針對所有支援類型的臆測之檢查以判定一指令並未以一種可能違反某些安全性策略(例如,記憶體安全或類型安全)之方式被錯誤臆測。
注意:可能有並未違反可用安全性策略之其他類型的已支援臆測,而因此安全性檢查仍可被跳過,即使處理器尚未判定其相關於那些其他類型的臆測之指令的態樣已被正確地臆測。例如,可想到:資料值可被臆測。即使針對一儲存之資料值被錯誤臆測,其並未違反記憶體安全或類型安全策略之某些實施例,例如,因為待儲存資料值對於哪個位址被用於該儲存不具任何效果。
因此,某些實施例做出一指令(例如,針對安全性檢查指令之相關記憶體存取)為「安全」而非「正確地臆測」之區分,以參考指令,其中處理器已判定該指令之執行的某態樣之錯誤臆測將不會傷害可用的安全性策略。
分支預測
處理器可嘗試預測一分支將基於來自先前分支及其他因素之歷史所採取的方向。在某些實施例中,此係用以臆測性地執行經預測分支目標,在該分支已解決前(例如,正確的方向已被明確地判定)。為了判定指令是在正確臆測的路徑上,處理器必須首先解決程式中之先前分支,在某些實施例中。
儲存緩衝器旁通臆測
處理器可重新排序載入及儲存,且有時候可能發生載入,其係從將由比該載入更舊的儲存(例如,其係在程式中之該載入前)所覆寫的位置擷取資料。該資料可被其取決於該載入之操作所臆測性地使用。例如,該資料可被解讀為指標位址或者整數或浮點值,等等。針對用以判定其正確值已被載入之處理器,其可使用記憶體歧義消除電路以驗證該載入係參考亦未被任何較舊(例如,依程式順序)儲存操作(其仍被緩衝)所參考的位置。
其他可能類型的安全性硬化
有用於安全性硬化之其他可能的方法,諸如等待直到所有先前分支均已解決,在允許記憶體存取對其為對手可見的快取狀態做出改變以前。那些可實施比以上所列出之範例更嚴格的策略,其可另允許對其為對手可見的快取狀態之改變,在記憶體安全或類型安全檢查完成但同時錯誤臆測之形式未檢查(因為實施那些策略之部分仍為可能的)以後。例如,考量以下範例虛擬碼:
考量其來自記憶體(由priv所指向)的讀取可能被延遲,所以處理器可能錯誤臆測是否執行該假如中的碼或是其他區塊。記憶體及/或類型安全檢查仍可應用於針對透過arr變數所參考之陣列的存取。然而,那些檢查將不一定防止針對priv_array之存取(當foo被調用自非特權呼叫者時),無論本發明中所描述之某些暗示是否被應用於那些檢查。考量:惡意呼叫者可能接著潛在地使用來自該函數之返回值以影響快取狀態,使得其可能係對手可見的。
針對諸如此類的情況,另一類型的暗示被定義在文中,其選擇性地實施更嚴格的策略,諸如以上之虛擬碼中所述者。例如,由樣本碼中之返回聲明所產生的記憶體存取可被修改以另一分段撤銷前綴(例如,GS)以指示其應依據更嚴格策略來管理。然而,記憶體及類型安全針對一些應用或應用之部分可能是足夠的,且該碼之使用者可受益自額外的最佳化,其假如僅實施那些較寬鬆策略的話是可能的。致能如上所述之更嚴格策略的選擇性實施可能是有用的,因為其預設地實施較寬鬆策略以提供針對最佳化之額外機會,而同時在程式中之關鍵點處實施更嚴格策略。
使得臆測在資料快取階層中為不可見的策略係用以實施更嚴格類型的策略(其可由如上所述之此暗示所選擇)之機制的範例。
圖4闡明依據本發明之實施例的流程圖400。所描繪的流程400包括:以硬體處理器之解碼器將一指令解碼為一已解碼指令402;由該硬體處理器檢測該指令中之安全性檢查欄位404;由該硬體處理器基於安全性檢查欄位以從複數安全性檢查策略判定將針對潛在錯誤臆測執行來實施的一安全性檢查策略406;由該硬體處理器對該指令履行該安全性檢查策略之一或更多相關檢查以判定該指令是否被潛在地錯誤臆測408;當該指令依據一或更多相關檢查而不被該硬體處理器視為安全時,排程該指令以供執行410;當該指令依據一或更多相關檢查而被該硬體處理器視為安全時,省略該指令412;及以該硬體處理器之一執行單元執行其被排程以供執行的該指令414。
其上述可被使用之範例架構、系統等等被詳述於下。
本技術之至少一些實施例可有鑑於以下範例來描述:
範例1. 一種設備,包含:
一解碼器,用以將一指令解碼為一已解碼指令;
一臆測管理器電路,用以:
檢測該指令中之一暗示(例如,一安全性檢查欄位),
基於該暗示(例如,該安全性檢查欄位)以從複數安全性檢查策略判定將針對潛在錯誤臆測執行來實施的一安全性檢查策略,
對該指令履行該安全性檢查策略之一或更多相關檢查以判定該指令是否被潛在地錯誤臆測,
當該指令依據該等一或更多相關檢查而不被視為安全時,排程該指令以供執行,及
當該指令依據該等一或更多相關檢查而被視為安全時,省略該指令;及
一執行單元,用以執行其被排程以供執行的該指令。
2. 範例1之設備,其中該暗示(例如,該安全性檢查欄位)係一編譯器提供的暗示。
3. 範例1之設備,其中該臆測管理器電路係用以對該指令之一組相關記憶體存取履行該安全性檢查策略之該等一或更多相關檢查。
4. 範例1之設備,其中該安全性檢查策略係一記憶體安全檢查策略。
5. 範例1之設備,其中該安全性檢查策略係一類型安全檢查策略。
6. 範例1之設備,其中該安全性檢查策略之該等一或更多相關檢查包含一記憶體安全檢查及一類型安全檢查。
7. 範例1之設備,其中該等一或更多相關檢查少於針對該設備之一架構上規格的一完全符合檢查。
8. 範例1之設備,其中該指令係與依程式順序之一後續記憶體存取指令相關的一安全性檢查指令。
範例9. 一種方法,包含:
以一硬體處理器之一解碼器將一指令解碼為一已解碼指令;
由該硬體處理器檢測該指令中之一安全性檢查欄位;
由該硬體處理器基於該安全性檢查欄位以從複數安全性檢查策略判定將針對潛在錯誤臆測執行來實施的一安全性檢查策略;
由該硬體處理器對該指令履行該安全性檢查策略之一或更多相關檢查以判定該指令是否被潛在地錯誤臆測;
當該指令依據該等一或更多相關檢查而不被該硬體處理器視為安全時,排程該指令以供執行;
當該指令依據該等一或更多相關檢查而被該硬體處理器視為安全時,省略該指令;及
以該硬體處理器之一執行單元執行其被排程以供執行的該指令。
10. 範例9之方法,其中該安全性檢查欄位係一編譯器提供的暗示。
11. 範例9之方法,其中該履行包含對該指令之一組相關記憶體存取履行該安全性檢查策略之該等一或更多相關檢查。
12. 範例9之方法,其中該安全性檢查策略係一記憶體安全檢查策略。
13. 範例9之方法,其中該安全性檢查策略係一類型安全檢查策略。
14. 範例9之方法,其中該安全性檢查策略之該等一或更多相關檢查包含一記憶體安全檢查及一類型安全檢查。
15. 範例9之方法,其中該等一或更多相關檢查少於針對該硬體處理器之一架構上規格的一完全符合檢查。
16. 範例9之方法,其中該指令係與依程式順序之一後續記憶體存取指令相關的一安全性檢查指令。
範例17. 一種儲存碼之非暫態機器可讀取媒體,當由機器所執行時該碼係造成該機器履行一方法,包含:
以一硬體處理器之一解碼器將一指令解碼為一已解碼指令;
由該硬體處理器檢測該指令中之一安全性檢查欄位;
由該硬體處理器基於該安全性檢查欄位以從複數安全性檢查策略判定將針對潛在錯誤臆測執行來實施的一安全性檢查策略;
由該硬體處理器對該指令履行該安全性檢查策略之一或更多相關檢查以判定該指令是否被潛在地錯誤臆測;
當該指令依據該等一或更多相關檢查而不被該硬體處理器視為安全時,排程該指令以供執行;
當該指令依據該等一或更多相關檢查而被該硬體處理器視為安全時,省略該指令;及
以該硬體處理器之一執行單元執行其被排程以供執行的該指令。
18. 範例17之非暫態機器可讀取媒體,其中該安全性檢查欄位係一編譯器提供的暗示。
19. 範例17之非暫態機器可讀取媒體,其中該履行包含對該指令之一組相關記憶體存取履行該安全性檢查策略之該等一或更多相關檢查。
20. 範例17之非暫態機器可讀取媒體,其中該安全性檢查策略係一記憶體安全檢查策略。
21. 範例17之非暫態機器可讀取媒體,其中該安全性檢查策略係一類型安全檢查策略。
22. 範例17之非暫態機器可讀取媒體,其中該安全性檢查策略之該等一或更多相關檢查包含一記憶體安全檢查及一類型安全檢查。
23. 範例17之非暫態機器可讀取媒體,其中該等一或更多相關檢查少於針對該硬體處理器之一架構上規格的一完全符合檢查。
24. 範例17之非暫態機器可讀取媒體,其中該指令係與依程式順序之一後續記憶體存取指令相關的一安全性檢查指令。
於又另一實施例中,一種設備包含一儲存碼之資料儲存裝置,當由硬體處理器所執行時該碼係造成該硬體處理器履行文中所揭露之任何方法。一種設備可為如詳細說明中所描述者。一種方法可為如詳細說明中所描述者。
指令集可包括一或更多指令格式。既定指令格式可界定各種欄位(例如,位元之數目、位元之位置)以指明(除了別的以外)待履行操作(例如,運算碼)以及將於其上履行操作之運算元及/或其他資料欄位(例如,遮罩)。一些指令格式係透過指令模板(或子格式)之定義而被進一步分解。例如,既定指令格式之指令模板可被定義以具有指令格式之欄位的不同子集(所包括的欄位通常係以相同順序,但至少某些具有不同的位元位置,因為包括了較少的欄位)及/或被定義以具有不同地解讀之既定欄位。因此,ISA之各指令係使用既定指令格式(以及,假如被定義的話,以該指令格式之指令模板的既定一者)而被表達,並包括用以指明操作及運算元之欄位。例如,範例ADD指令具有特定運算碼及一指令格式,其包括用以指明該運算碼之運算碼欄位及用以選擇運算元(來源1/目的地及來源2)之運算元欄位;而於一指令串中之此ADD指令的發生將具有特定內容於其選擇特定運算元之運算元欄位中。被稱為先進向量延伸(AVX)(AVX1及AVX2)並使用向量延伸(VEX)編碼技術之一組SIMD延伸已被釋出及/或出版(例如,參見Intel® 64及IA-32架構軟體開發商手冊,2018年十一月;及參見Intel®架構指令集延伸編程參考,2018年十月)。範例指令格式
文中所述之指令的實施例可被實施以不同的格式。此外,範例系統、架構、及管線被詳述於下。指令之實施例可被執行於此等系統、架構、及管線上,但不限定於那些細節。一般性向量友善指令格式
向量友善指令格式是一種適於向量指令之指令格式(例如,有向量操作特定的某些欄位)。雖然實施例係描述其中向量和純量操作兩者均透過向量友善指令格式而被支援,但替代實施例僅使用具有向量友善指令格式之向量操作。
圖5A-5B為闡明一般性向量友善指令格式及其指令模板的方塊圖,依據本發明之實施例。圖5A為闡明一般性向量友善指令格式及其類別A指令模板的方塊圖,依據本發明之實施例;而圖5B為闡明一般性向量友善指令格式及其類別B指令模板的方塊圖,依據本發明之實施例。明確地,針對一般性向量友善指令格式500係定義類別A及類別B指令模板,其兩者均包括無記憶體存取505指令模板及記憶體存取520指令模板。於向量友善指令格式之背景下術語「一般性」指的是不與任何特定指令集連結的指令格式。
雖然本發明之實施例將描述其中向量友善指令格式支援以下:具有32位元(4位元組)或64位元(8位元組)資料元件寬度(或大小)之64位元組向量運算元長度(或大小)(而因此,64位元組向量係由16雙字元大小的元件、或替代地8四字元大小的元件所組成);具有16位元(2位元組)或8位元(1位元組)資料元件寬度(或大小)之64位元組向量運算元長度(或大小);具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)、或8位元(1位元組)資料元件寬度(或大小)之32位元組向量運算元長度(或大小);及具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)、或8位元(1位元組)資料元件寬度(或大小)之16位元組向量運算元長度(或大小);但是替代實施例可支援具有更大、更小、或不同資料元件寬度(例如,128位元(16位元組)資料元件寬度)之更大、更小及/或不同的向量運算元大小(例如,256位元組向量運算元)。
圖5A中之類別A指令模板包括:1)於無記憶體存取505指令模板內,顯示有無記憶體存取、全捨入控制類型操作510指令模板及無記憶體存取、資料變換類型操作515指令模板;以及2)於記憶體存取520指令模板內,顯示有記憶體存取、暫時525指令模板及記憶體存取、非暫時530指令模板。圖5B中之類別B指令模板包括:1)於無記憶體存取505指令模板內,顯示有無記憶體存取、寫入遮蔽控制、部分捨入控制類型操作512指令模板及無記憶體存取、寫入遮蔽控制、v大小類型操作517指令模板;以及2)於記憶體存取520指令模板內,顯示有記憶體存取、寫入遮蔽控制527指令模板。
一般性向量友善指令格式500包括以下欄位,依圖5A-5B中所示之順序列出如下。
格式欄位540 - 此欄位中之一特定值(指令格式識別符值)係獨特地識別向量友善指令格式、以及因此在指令串中之向量友善指令格式的指令之發生。如此一來,此欄位是選擇性的,因為針對一僅具有一般性向量友善指令格式之指令集而言此欄位是不需要的。
基礎操作欄位542 - 其內容係分辨不同的基礎操作。
暫存器指標欄位544 - 其內容(直接地或透過位址產生)係指明來源及目的地運算元之位置,假設其係於暫存器中或記憶體中。這些包括足夠數目的位元以從PxQ(例如,32x512, 16x128, 32x1024, 64x1024)暫存器檔選擇N暫存器。雖然於一實施例中N可高達三個來源及一個目的地暫存器,但是替代實施例可支援更多或更少的來源及目的地暫存器(例如,可支援高達兩個來源,其中這些來源之一亦作用為目的地;可支援高達三個來源,其中這些來源之一亦作用為目的地;可支援高達兩個來源及一個目的地)。
修飾符欄位546 - 其內容係從不指明記憶體存取之那些指令分辨出其指明記憶體存取之一般性向量指令格式的指令之發生,亦即,介於無記憶體存取505指令模板與記憶體存取520指令模板之間。記憶體存取操作係讀取及/或寫入至記憶體階層(於使用暫存器中之值以指明來源及/或目的地位址之某些情況下),而非記憶體存取操作則不會(例如,來源及目的地為暫存器)。雖然於一實施例中此欄位亦於三個不同方式之間選擇以履行記憶體位址計算,但是替代實施例可支援更多、更少、或不同方式以履行記憶體位址計算。
擴增操作欄位550 - 其內容係分辨多種不同操作之哪一個將被履行,除了基礎操作之外。此欄位是背景特定的。於本發明之一實施例中,此欄位被劃分為類別欄位568、α欄位552、及β欄位554。擴增操作欄位550容許操作之共同群組將被履行以單指令而非2、3、或4指令。
比例欄位560 - 其內容容許指標欄位之內容的定標,以供記憶體位址產生(例如,以供其使用2比例
*指標+基礎之位址產生)。
置換欄位562A - 其內容被使用為記憶體位址產生之部分(例如,以供其使用2比例
*指標+基礎+置換之位址產生)。
置換因數欄位562B(注意:直接在置換因數欄位562B上方之置換欄位562A的並列指示一者或另一者被使用)-其內容被使用為位址產生之部分;其指明將被記憶體存取之大小(N)所定標的置換因數 - 其中N為記憶體存取中之位元組數目(例如,以供其使用2比例
*指標+基礎+定標置換之位址產生)。冗餘低階位元被忽略而因此,置換因數欄位之內容被乘以記憶體運算元總大小(N)來產生最終置換以供使用於計算有效位址。N之值係在運作時間由處理器硬體所判定,根據全運算碼欄位574(稍後描述於文中)及資料調處欄位554C。置換欄位562A及置換因數欄位562B是選擇性的,因為其未被使用於無記憶體存取505指令模板及/或不同的實施例可實施該兩欄位之僅一者或者無任何。
資料元件寬度欄位564 - 其內容係分辨數個資料元件寬度之哪一個將被使用(於針對所有指令之某些實施例中;於針對僅某些指令之其他實施例中)。此欄位是選擇性的,在於其假如僅有一資料元件寬度被支援及/或資料元件寬度係使用運算碼之某形態而被支援則此欄位是不需要的。
寫入遮蔽欄位570 - 其內容係根據每資料元件位置以控制其目的地向量運算元中之資料元件位置是否反映基礎操作及擴增操作之結果。類別A指令模板支援合併-寫入遮蔽,而類別B指令模板支援合併-及歸零-寫入遮蔽兩者。當合併時,向量遮蔽容許目的地中之任何組的元件被保護自任何操作之執行期間(由基礎操作及擴增操作所指明)的更新;於另一實施例中,保留其中相應遮蔽位元具有0之目的地的各元件之舊值。反之,當歸零時,向量遮蔽容許目的地中之任何組的元件被歸零於任何操作之執行期間(由基礎操作及擴增操作所指明);於一實施例中,當相應遮蔽位元具有0值時則目的地之一元件被設為0。此功能之子集是其控制被履行之操作的向量長度(亦即,被修飾之元件的範圍,從第一者至最後者)的能力;然而,其被修飾之元件不需要是連續的。因此,寫入遮蔽欄位570容許部分向量操作,包括載入、儲存、運算、邏輯,等等。雖然本發明之實施例係描述其中寫入遮蔽欄位570之內容選擇其含有待使用之寫入遮蔽的數個寫入遮蔽暫存器之一(而因此寫入遮蔽欄位570之內容間接地識別其遮蔽將被履行),但是替代實施例取代地或者額外地容許寫入遮蔽欄位570之內容直接地指明其遮蔽將被履行。
即刻欄位572 - 其內容容許即刻之指明。此欄位是選擇性的,由於此欄位存在於其不支援即刻之一般性向量友善格式的實施方式中且此欄位不存在於其不使用即刻之指令中。
類別欄位568 - 其內容分辨不同類別的指令。參考圖5A-B,此欄位之內容選擇於類別A與類別B指令之間。於圖5A-B中,圓化角落的方形被用以指示一特定值存在於一欄位中(例如,針對類別欄位568之類別A 568A及類別B 568B,個別地於圖5A-B中)。類別 A 之指令模板
於類別A之非記憶體存取505指令模板的情況下,α欄位552被解讀為RS欄位552A,其內容係分辨不同擴增操作類型之哪一個將被履行(例如,捨入552A.1及資料變換552A.2被個別地指明給無記憶體存取、捨入類型操作510及無記憶體存取、資料變換類型操作515指令模板),而β欄位554係分辨該些指明類型的操作之哪個將被履行。於無記憶體存取505指令模板中,比例欄位560、置換欄位562A、及置換比例欄位562B不存在。
無記憶體存取指令模板 - 全捨入控制類型操作
於無記憶體存取全捨入類型操作510指令模板中,β欄位554被解讀為捨入控制欄位554A,其內容係提供靜態捨入。雖然於本發明之所述實施例中,捨入控制欄位554A包括抑制所有浮點例外(SAE)欄位556及捨入操作控制欄位558,但替代實施例可支援可將這兩個觀念均編碼入相同欄位或僅具有這些觀念/欄位之一者或另一者(例如,可僅具有捨入操作控制欄位558)。
SAE欄位556 - 其內容係分辨是否除能例外事件報告;當SAE欄位556之內容指示抑制被致能時,則一既定指令不報告任何種類的浮點例外旗標且不引發任何浮點例外處置器。
捨入操作控制欄位558 - 其內容係分辨一群捨入操作之哪一個將被履行(例如向上捨入、向下捨入、朝零捨入及捨入至最接近)。因此,捨入操作控制欄位558容許以每指令為基之捨入模式的改變。於本發明之一實施例中,其中處理器包括一用以指明捨入模式之控制暫存器,捨入操作控制欄位550之內容係撤銷該暫存器值。
無記憶體存取指令模板 - 資料變換類型操作
於無記憶體存取資料變換類型操作515指令模板中,β欄位554被解讀為資料變換欄位554B,其內容係分辨數個資料變換之哪一個將被履行(例如,無資料變換、拌合、廣播)。
於類別A之記憶體存取520指令模板的情況下,α欄位552被解讀為逐出暗示欄位552B,其內容係分辨逐出暗示之哪一個將被使用(於圖5A中,暫時552B.1及非暫時552B.2被個別地指明給記憶體存取、暫時525指令模板及記憶體存取、非暫時530指令模板),而β欄位554被解讀為資料調處欄位554C,其內容係分辨數個資料調處操作(亦已知為基元)之哪一個將被履行(例如,無調處;廣播;來源之向上轉換;及目的地之向下轉換)。記憶體存取520指令模板包括比例欄位560、及選擇性地置換欄位562A或置換比例欄位562B。
向量記憶體指令係履行向量載入自及向量儲存至記憶體,具有轉換支援。至於一般向量指令,向量記憶體指令係以資料元件式方式轉移資料自/至記憶體,以其被實際地轉移之元件由其被選為寫入遮蔽的向量遮蔽之內容所主宰。
記憶體存取指令模板-暫時
暫時資料為可能會夠早地被再使用以受惠自快取的資料。然而,此為一暗示,且不同的處理器可以不同的方式來實施,包括完全地忽略該暗示。
記憶體存取指令模板-非暫時
非暫時資料為不太可能會夠早地被再使用以受惠自第一階快取中之快取且應被給予逐出之既定優先權的資料。然而,此為一暗示,且不同的處理器可以不同的方式來實施,包括完全地忽略該暗示。類別 B 之指令模板
於類別B之指令模板的情況下,α欄位552被解讀為寫入遮蔽控制(Z)欄位552C,其內容係分辨由寫入遮蔽欄位570所控制的寫入遮蔽是否應為合併或歸零。
於類別B之非記憶體存取505指令模板的情況下,β欄位554之部分被解讀為RL欄位557A,其內容係分辨不同擴增操作類型之哪一個將被履行(例如,捨入557A.1及向量長度(VSIZE)557A.2被個別地指明給無記憶體存取、寫入遮蔽控制、部分捨入控制類型操作512指令模板及無記憶體存取、寫入遮蔽控制、VSIZE類型操作517指令模板),而剩餘的β欄位554係分辨該些指明類型的操作之哪個將被履行。於無記憶體存取505指令模板中,比例欄位560、置換欄位562A、及置換比例欄位562B不存在。
於無記憶體存取中,寫入遮蔽控制、部分捨入控制類型操作510指令模板、及剩餘的β欄位554被解讀為捨入操作欄位559A且例外事件報告被除能(既定指令則不報告任何種類的浮點例外旗標且不引發任何浮點例外處置器)。
捨入操作控制欄位559A - 正如捨入操作控制欄位558,其內容係分辨一群捨入操作之哪一個將被履行(例如向上捨入、向下捨入、朝零捨入及捨入至最接近)。因此,捨入操作控制欄位559A容許以每指令為基之捨入模式的改變。於本發明之一實施例中,其中處理器包括一用以指明捨入模式之控制暫存器,捨入操作控制欄位550之內容係撤銷該暫存器值。
於無記憶體存取、寫入遮蔽控制、VSIZE類型操作517指令模板中,剩餘的β欄位554被解讀為向量長度欄位559B,其內容係分辨數個資料向量長度之哪一個將被履行(例如,128、256、或512位元組)。
於類別B之記憶體存取520指令模板的情況下,β欄位554之部分被解讀為廣播欄位557B,其內容係分辨廣播類型資料調處操作是否將被履行,而剩餘的β欄位554被解讀為向量長度欄位559B。記憶體存取520指令模板包括比例欄位560、及選擇性地置換欄位562A或置換比例欄位562B。
關於一般性向量友善指令格式500,全運算碼欄位574被顯示為包括格式欄位540、基礎操作欄位542、及資料元件寬度欄位564。雖然一實施例被顯示為其中全運算碼欄位574包括所有這些欄位,全運算碼欄位574包括少於所有這些欄位在不支援其所有的實施例中。全運算碼欄位574提供操作碼(運算碼)。
擴增操作欄位550、資料元件寬度欄位564、及寫入遮蔽欄位570容許這些特徵以每指令為基被指明以一般性向量友善指令格式。
寫入遮蔽欄位與資料元件寬度欄位之組合產生類型化的指令,在於其容許遮蔽根據不同資料元件寬度而被施加。
類別A及類別B中所發現之各種指令模板在不同情況下是有利的。於本發明之某些實施例中,不同處理器或一處理器中之不同核心可支援僅類別A、僅類別B、或兩類別。例如,用於通用計算之高性能通用失序核心可支援僅類別B;主要用於圖形及/或科學(通量)計算之核心可支援僅類別A;及用於兩者之核心可支援兩者(當然,一種具有來自兩類別之模板和指令的某混合但非來自兩類別之所有模板和指令的核心是落入本發明之範圍內)。同時,單一處理器可包括多核心,其所有均支援相同的類別或者其中不同的核心支援不同的類別。例如,於一具有分離的圖形和通用核心之處理器中,主要用於圖形及/或科學計算的圖形核心之一可支援僅類別A;而通用核心之一或更多者可為高性能通用核心,其具有用於支援僅類別B之通用計算的失序執行和暫存器重新命名。不具有分離的圖形核心之另一處理器可包括支援類別A和類別B兩者之一或更多通用依序或失序核心。當然,來自一類別之特徵亦可被實施於另一類別中,在本發明之不同實施例中。以高階語言寫入之程式將被置入(例如,僅以時間編譯或靜態地編譯)多種不同的可執行形式,包括:1)僅具有由用於執行之目標處理器所支援的類別之指令的形式;或2)具有其使用所有類別之指令的不同組合所寫入之替代常式並具有控制流碼的形式,該控制流碼係根據由目前正執行該碼之處理器所支援的指令以選擇用來執行之常式。範例特定向量友善指令格式
圖6為闡明範例特定向量友善指令格式的方塊圖,依據本發明之實施例。圖6顯示特定向量友善指令格式600,其之特定在於其指明欄位之位置、大小、解讀及順序,以及那些欄位之部分的值。特定向量友善指令格式600可被用以延伸x86指令集,而因此某些欄位係類似於或相同於現存x86指令集及其延伸(例如,AVX)中所使用的那些。此格式保持與下列各者一致:具有延伸之現存x86指令集的前綴編碼欄位、真實運算碼位元組欄位、MOD R/M欄位、SIB欄位、置換欄位、及即刻欄位。闡明來自圖5之欄位投映入來自圖6之欄位。
應理解:雖然本發明之實施例係參考為說明性目的之一般性向量友善指令格式500的背景下之特定向量友善指令格式600而描述,但除非其中有聲明否則本發明不限於特定向量友善指令格式600。例如,一般性向量友善指令格式500係考量各個欄位之多種可能大小,而特定向量友善指令格式600被顯示為具有特定大小之欄位。舉特定例而言,雖然資料元件寬度欄位564被闡明為特定向量友善指令格式600之一位元欄位,但本發明未如此限制(亦即,一般性向量友善指令格式500係考量資料元件寬度欄位564之其他大小)。
一般性向量友善指令格式500包括以下欄位,依圖6A中所示之順序列出如下。
EVEX前綴(位元組0-3)602被編碼以四位元組形式。
格式欄位540(EVEX位元組0,位元[7:0]) - 第一位元組(EVEX位元組0)為格式欄位540且其含有0x62(用於分辨本發明之一實施例中的向量友善指令格式之獨特值)。
第二-第四位元組(EVEX位元組1-3)包括數個提供特定能力之位元欄位。
REX欄位605 (EVEX位元組1,位元[7-5]) - 由EVEX.R位元欄位(EVEX位元組1,位元[7] - R)、EVEX.X位元欄位(EVEX位元組1,位元[6] - X)、及557BEX位元組1,位元[5] - B)所組成。EVEX.R、EVEX.X、及EVEX.B位元欄位提供如相應VEX位元欄位之相同功能,且係使用1互補形式而被編碼,亦即,ZMM0被編碼為1111B,ZMM15被編碼為0000B。指令之其他欄位編碼該些暫存器指標之較低三位元如本技術中所已知者(rrr、xxx、及bbb),以致Rrrr、Xxxx、及Bbbb可藉由加入EVEX.R、EVEX.X、及EVEX.B而被形成。
REX’欄位510 - 此為REX’欄位510之第一部分且為EVER.R’位元欄位(EVEX位元組1,位元[4] - R’),其被用以編碼延伸的32暫存器集之上16個或下16個。於本發明之一實施例中,此位元(連同如以下所指示之其他者)被儲存以位元反轉格式來分辨(於眾所周知的x86 32 - 位元模式)自BOUND指令,其真實運算碼位元組為62,但於MOD R/M欄位(描述於下)中不接受MOD欄位中之11的值;本發明之替代實施例不以反轉格式儲存此及如下其他指示的位元。1之值被用以編碼下16暫存器。換言之,R’Rrrr係藉由結合EVEX.R’、EVEX.R、及來自其他欄位之其他RRR而被形成。
運算碼映圖欄位615(EVEX位元組1,位元[3:0] - mmmm) - 其內容係編碼一暗示的領先運算碼位元組(0F、0F 38、或0F 3)。
資料元件寬度欄位564(EVEX位元組2,位元[7] - W)係由記號EVEX.W所表示。EVEX.W被用以界定資料類型(32位元資料元件或64位元資料元件)之粒度(大小)。
EVEX.vvvv 620(EVEX位元組2,位元[6:3] - vvvv) - EVEX.vvvv之角色可包括以下:1)EVEX.vvvv編碼其以反轉(1之補數)形式所指明的第一來源暫存器運算元且針對具有2或更多來源運算元為有效的;2)EVEX.vvvv針對某些向量位移編碼其以1之補數形式所指明的目的地暫存器運算元;或3)EVEX.vvvv未編碼任何運算元,該欄位被保留且應含有1111b。因此,EVEX.vvvv欄位620係編碼其以反轉(1之補數)形式所儲存的第一來源暫存器指明符之4個低階位元。根據該指令,一額外的不同EVEX位元欄位被用以延伸指明符大小至32暫存器。
EVEX.U 568類別欄位(EVEX位元組2,位元[2]-U) - 假如EVEX.U = 0,則其指示類別A或EVEX.U0;假如EVEX.U = 1,則其指示類別B或EVEX.U1。
前綴編碼欄位625(EVEX位元組2,位元[1:0] - pp)提供額外位元給基礎操作欄位。除了提供針對EVEX前綴格式之舊有SSE指令的支援,此亦具有壓縮SIMD前綴之優點(不需要一位元組來表達SIMD前綴,EVEX前綴僅需要2位元)。於一實施例中,為了支援其使用以舊有格式及以EVEX前綴格式兩者之SIMD前綴(66H、F2H、F3H)的舊有SSE指令,這些舊有SIMD前綴被編碼為SIMD前綴編碼欄位;且在運作時間被延伸入舊有SIMD前綴,在其被提供至解碼電路的PLA以前(以致PLA可執行這些舊有指令之舊有和EVEX格式兩者而無須修改)。雖然較新的指令可將EVEX前綴編碼欄位之內容直接地使用為運算碼延伸,但某些實施例係以類似方式延伸以符合一致性而容許不同的意義由這些舊有SIMD前綴來指明。替代實施例可重新設計PLA以支援2位元SIMD前綴編碼,而因此不需要延伸。
α欄位552(EVEX位元組3,位元[7] - EH;亦已知為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮蔽控制、及EVEX.N;亦闡明以α) - 如先前所描述,此欄位是背景特定的。
β欄位554(EVEX位元組3,位元[6:4]-SSS,亦已知為EVEX.s2-0
、EVEX.r2-0
、EVEX.rr1、EVEX.LL0、EVEX.LLB;亦闡明以βββ) - 如先前所描述,此欄位是背景特定的。
REX’欄位510 - 此為REX’欄位之剩餘部分且為EVER.V’位元欄位(EVEX位元組3,位元[3] - V’),其被用以編碼延伸的32暫存器集之上16個或下16個。此位元被儲存以位元反轉格式。1之值被用以編碼下16暫存器。換言之,V’VVVV係藉由結合EVEX.V’、EVEX.vvvv所形成。
寫入遮蔽欄位570(EVEX位元組3,位元[2:0]-kkk) - 其內容係指明在如先前所述之寫入遮蔽暫存器中的暫存器之指數。於本發明之一實施例中,特定值EVEX.kkk=000具有一特殊行為,其係暗示無寫入遮蔽被用於特別指令(此可被實施以多種方式,包括使用其固線至所有各者之寫入遮蔽或者其旁路遮蔽硬體之硬體)。
真實運算碼欄位630(位元組4)亦已知為運算碼位元組。運算碼之部分被指明於此欄位。
MOD R/M欄位640(位元組5)包括MOD欄位642、Reg欄位644、及R/M欄位646。如先前所述MOD欄位642之內容係分辨於記憶體存取與非記憶體存取操作之間。Reg欄位644之角色可被概述為兩情況:編碼目的地暫存器運算元或來源暫存器運算元、或者被視為運算碼延伸而不被用以編碼任何指令運算元。R/M欄位646之角色可包括以下:編碼其參考記憶體位址之指令運算元;或者編碼目的地暫存器運算元或來源暫存器運算元。
比例、指標、基礎(SIB)位元組(位元組6) - 如先前所述,比例欄位550之內容被用於記憶體位址產生。SIB.xxx 654及SIB.bbb 656 - 這些欄位之內容先前已被參考針對暫存器指標Xxxx及Bbbb。
置換欄位562A(位元組7-10) - 當MOD欄位642含有10時,位元組7-10為置換欄位562A,且其工作如舊有32位元置換(disp32)之相同方式且工作以位元組粒度。
置換因數欄位562B(位元組7) - 當MOD欄位642含有01時,位元組7為置換因數欄位562B。此欄位之位置係相同於舊有x86指令集8位元置換(disp8)之位置,其工作以位元組粒度。因為disp8是符號延伸的,所以其可僅定址於-128與127位元組偏移之間;關於64位元組快取線,disp8係使用其可被設為僅四個真實可用值-128、-64、0及64之8位元;因為較大範圍經常是需要的,所以disp32被使用;然而,disp32需要4位元組。相對於disp8及disp32,置換因數欄位562B為disp8之再解讀;當使用置換因數欄位562B時,實際置換係由置換因數欄位之內容乘以記憶體運算元存取之大小(N)所判定。置換欄位之類型被稱為disp8*N。此係減少平均指令長度(用於置換欄位之單一位元組但具有更大的範圍)。此壓縮置換是基於假設其有效置換為記憶體存取之粒度的數倍,而因此,位址偏移之冗餘低階位元無須被編碼。換言之,置換因數欄位562B取代舊有x86指令集8位元置換。因此,置換因數欄位562B被編碼以如x86指令集8位元置換之相同方式(以致ModRM/SIB編碼規則並無改變),唯一例外是其disp8被超載至disp8*N。換言之,編碼規則或編碼長度沒有改變,但僅於藉由硬體之置換值的解讀(其需由記憶體運算元之大小來定標置換以獲得位元組式的位址偏移)。即刻欄位572係操作如先前所述。全運算碼欄位
圖6B為闡明其組成全運算碼欄位574之特定向量友善指令格式600的欄位之方塊圖,依據本發明之一實施例。明確地,全運算碼欄位574包括格式欄位540、基礎操作欄位542、及資料元件寬度(W)欄位564。基礎操作欄位542包括前綴編碼欄位625、運算碼映圖欄位615、及真實運算碼欄位630。暫存器指標欄位
圖6C為闡明其組成暫存器指標欄位544之特定向量友善指令格式600的欄位之方塊圖,依據本發明之一實施例。明確地,暫存器指標欄位544包括REX欄位605、REX’欄位610、MODR/M.reg欄位644、MODR/M.r/m欄位646、VVVV欄位620、xxx欄位654、及bbb欄位656。擴增操作欄位
圖6D為闡明其組成擴增操作欄位550之特定向量友善指令格式600的欄位之方塊圖,依據本發明之一實施例。當類別(U)欄位568含有0時,則其表示EVEX.U0(類別A 568A);當其含有1時,則其表示EVEX.U1(類別B 568B)。當U=0且MOD欄位642含有11(表示無記憶體存取操作)時,則α欄位552(EVEX位元組3,位元[7] - EH)被解讀為rs欄位552A。當rs欄位552A含有1(捨入552A.1)時,則β欄位554(EVEX位元組3,位元[6:4] - SSS)被解讀為捨入控制欄位554A。捨入控制欄位554A包括一位元SAE欄位556及二位元捨入操作欄位558。當rs欄位552A含有0(資料變換552A.2)時,則β欄位554(EVEX位元組3,位元[6:4] - SSS)被解讀為三位元資料變換欄位554B。當U=0且MOD欄位642含有00、01、或10(表示記憶體存取操作)時,則α欄位552(EVEX位元組3,位元[7] - EH)被解讀為逐出暗示(EH)欄位552B且β欄位554(EVEX位元組3,位元[6:4] - SSS)被解讀為三位元資料調處欄位554C。
當U=1時,則α欄位552(EVEX位元組3,位元[7] - EH)被解讀為寫入遮蔽控制(Z)欄位552C。當U=1且MOD欄位642含有11(表示無記憶體存取操作)時,則β欄位554之部分(EVEX位元組3,位元[4] - S0
)被解讀為RL欄位557A;當其含有1(捨入557A.1)時,則β欄位554之剩餘部分(EVEX位元組3,位元[6-5] - S2-1
)被解讀為捨入操作欄位559A;而當RL欄位557A含有0(VSIZE 557.A2)時,則β欄位554之剩餘部分(EVEX位元組3,位元[6-5] - S2-1
)被解讀為向量長度欄位559B(EVEX位元組3,位元[6-5] - L1-0
)。當U=1且MOD欄位642含有00、01、或10(表示記憶體存取操作)時,則β欄位554(EVEX位元組3,位元[6:4] - SSS)被解讀為向量長度欄位559B(EVEX位元組3,位元[6-5] - L1-0
)及廣播欄位557B(EVEX位元組3,位元[4] - B)。範例暫存器架構
圖7為一暫存器架構700之方塊圖,依據本發明之一實施例。於所示之實施例中,有32個向量暫存器710,其為512位元寬;這些暫存器被稱為zmm0至zmm31。較低的16個zmm暫存器之較低階256位元被重疊於暫存器ymm0-16上。較低的16個zmm暫存器之較低階128位元(ymm暫存器之較低階128位元)被重疊於暫存器xmm0-15上。特定向量友善指令格式600係操作於這些重疊的暫存器檔上,如以下表中所闡明。
可調整向量長度 | 類別 | 操作 | 暫存器 |
不包括向量長度欄位559B之指令模板 | A(圖5A;U=0) | 510, 515, 525, 530 | zmm暫存器(向量長度為64位元組) |
B(圖5B;U=1) | 512 | zmm暫存器(向量長度為64位元組) | |
包括向量長度欄位559B之指令模板 | B(圖5B;U=1) | 517, 527 | zmm、ymm、或xmm暫存器(向量長度為64位元組、32位元組、或16位元組)根據向量長度欄位559B |
換言之,向量長度欄位559B於最大長度與一或更多其他較短長度之間選擇,其中每一此較短長度為前一長度之長度的一半;而無向量長度欄位559B之指令模板係操作於最大向量長度上。此外,於一實施例中,特定向量友善指令格式600之類別B指令模板係操作於緊縮或純量單/雙精確度浮點資料及緊縮或純量整數資料上。純量操作為履行於zmm/ymm/xmm暫存器中之最低階資料元件上的操作;較高階資料元件位置係根據實施例而被保留如其在該指令前之相同者或者被歸零。
寫入遮蔽暫存器715 - 於所示之實施例中,有8個寫入遮蔽暫存器(k0至k7),大小各為64位元。於替代實施例中,寫入遮蔽暫存器715之大小為16位元。如先前所述,於本發明之一實施例中,向量遮蔽暫存器k0無法被使用為寫入遮蔽;當其通常將指示k0之編碼被用於寫入遮蔽時,其係選擇0xFFFF之固線寫入遮蔽,有效地除能該指令之寫入遮蔽。
通用暫存器725 - 於所示之實施例中,有十六個64位元通用暫存器,其係連同現存的x86定址模式來用以定址記憶體運算元。這些暫存器被參照以RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15。
純量浮點堆疊暫存器檔(x87堆疊)745,MMX緊縮整數平坦暫存器檔750係混疊於其上 - 於所示之實施例中,x87堆疊為用以使用x87指令集延伸而在32/64/80位元浮點資料上履行純量浮點操作之八元件堆疊;而MMX暫存器被用以履行操作在64位元緊縮整數資料上、及用以保持運算元以供介於MMX與XMM暫存器間所履行的某些操作。
本發明之替代實施例可使用較寬或較窄的暫存器。此外,本發明之替代實施例可使用更多、更少、或不同的暫存器檔及暫存器。範例核心架構,處理器,及電腦架構
處理器核心可被實施以不同方式、用於不同目的、以及於不同處理器中。例如,此類核心之實施方式可包括:1)用於通用計算之通用依序核心;2)用於通用計算之高性能通用失序核心;3)主要用於圖形及/或科學(通量)計算之特殊用途核心。不同處理器之實施方式可包括:1)CPU,其包括用於通用計算之一或更多通用依序核心及/或用於通用計算之一或更多通用失序核心;及2)共處理器,其包括主要用於圖形及/或科學(通量)之一或更多特殊用途核心。此等不同處理器導致不同的電腦系統架構,其可包括:1)在來自該CPU之分離晶片上的共處理器;2)在與CPU相同的封裝中之分離晶粒上的共處理器;3)在與CPU相同的晶粒上的共處理器(於該情況下,此一處理器有時被稱為特殊用途邏輯,諸如集成圖形及/或科學(通量)邏輯、或稱為特殊用途核心);及4)在一可包括於相同晶粒上之所述CPU(有時稱為應用程式核心或應用程式處理器)、上述共處理器、及額外功能的晶片上之系統。範例核心架構被描述於下,接續著範例處理器及電腦架構之描述。範例核心架構 依序或失序核心方塊圖
圖8A為繪示範例依序管線及範例暫存器重新命名、失序發送/執行管線兩者之方塊圖,依據本發明之實施例。圖8B為一方塊圖,其闡明將包括於依據本發明之實施例的處理器中之依序架構核心之範例實施例及範例暫存器重新命名、失序發送/執行架構核心兩者。圖8A-B中之實線方盒係闡明依序管線及依序核心,而虛線方盒之選擇性加入係闡明暫存器重新命名、失序問題/執行管線及核心。假設其依序形態為失序形態之子集,將描述失序形態。
於圖8A中,處理器管線800包括提取級802、長度解碼級804、解碼級806、配置級808、重新命名級810、排程(亦已知為分派或發送)級812、暫存器讀取/記憶體讀取級814、執行級816、寫入回/記憶體寫入級818、例外處置級822、及確定級824。
圖8B顯示處理器核心890,其包括一耦合至執行引擎單元850之前端單元830,且兩者均耦合至記憶體單元870。核心890可為減少指令集計算(RISC)核心、複雜指令集計算(CISC)核心、極長指令字元(VLIW)核心、或者併合或替代核心類型。當作又另一種選擇,核心890可為特殊用途核心,諸如(例如)網路或通訊核心、壓縮引擎、共處理器核心、通用計算圖形處理單元(GPGPU)核心、圖形核心,等等。
前端單元830包括一分支預測單元832,其係耦合至指令快取單元834,其係耦合至指令變換後備緩衝(TLB)836,其係耦合至指令提取單元838,其係耦合至解碼單元840。解碼單元840(例如,解碼電路)可解碼指令(例如,巨指令);並可將以下產生為輸出:一或更多微操作、微碼進入點、微指令、其他指令、或其他控制信號,其被解碼自(或者反應)、或被衍生自原始指令。解碼單元840可使用各種不同的機制來實施。適當機制之範例包括(但不限定於)查找表、硬體實施方式、可編程邏輯陣列(PLA)、微碼唯讀記憶體(ROM),等等。於一實施例中,核心890包括微碼ROM或者儲存用於某些巨指令之微碼的其他媒體(例如,於解碼單元840中或者於前端單元830內)。解碼單元840被耦合至執行引擎單元850中之重新命名/配置器單元852。
執行引擎單元850包括重新命名/配置器單元852,其係耦合至撤回單元854及一組一或更多排程器單元856。排程器單元856代表任何數目的不同排程器,包括保留站、中央指令窗,等等。排程器單元856被耦合至實體暫存器檔單元858。實體暫存器檔單元858之各者代表一或更多實體暫存器檔,其不同者係儲存一或更多不同的資料類型,諸如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,其為下一待執行指令之位址的指令指標),等等。於一實施例中,實體暫存器檔單元858包含向量暫存器單元、寫入遮蔽暫存器單元、及純量暫存器單元。這些暫存器單元可提供架構向量暫存器、向量遮蔽暫存器、及通用暫存器。實體暫存器檔單元858係由撤回單元854所重疊以闡明其中暫存器重新命名及失序執行可被實施之各種方式(例如,使用記錄器緩衝器和撤回暫存器檔;使用未來檔、歷史緩衝器、和撤回暫存器檔;使用暫存器映圖和暫存器池,等等)。撤回單元854及實體暫存器檔單元858被耦合至執行叢集860。執行叢集860包括一組一或更多執行單元862(例如,執行電路)及一組一或更多記憶體存取單元864。執行單元862可履行各種操作(例如,偏移、相加、相減、相乘)以及於各種類型的資料上(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。雖然某些實施例可包括數個專屬於特定功能或功能集之執行單元,但其他實施例可包括僅一個執行單元或者全部履行所有功能之多數執行單元。排程器單元856、實體暫存器檔單元858、及執行叢集860被顯示為可能複數的,因為某些實施例係針對某些類型的資料/操作產生分離的管線(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或記憶體存取管線,其各具有本身的排程器單元、實體暫存器檔單元、及/或執行叢集-且於分離記憶體存取管線之情況下,某些實施例被實施於其中僅有此管線之執行叢集具有記憶體存取單元864)。亦應理解:當使用分離管線時,這些管線之一或更多者可為失序發送/執行而其他者為依序。
該組記憶體存取單元864被耦合至記憶體單元870,其包括資料TLB單元872,其耦合至資料快取單元874,其耦合至第二階(L2)快取單元876。於一範例實施例中,記憶體存取單元864可包括載入單元、儲存位址單元、及儲存資料單元,其各者係耦合至記憶體單元870中之資料TLB單元872。指令快取單元834被進一步耦合至記憶體單元870中之第二階(L2)快取單元876。L2快取單元876被耦合至一或更多其他階的快取且最終至主記憶體。
舉例而言,範例暫存器重新命名、失序發送/執行核心架構可實施管線800如下:1)指令提取838履行提取和長度解碼級802和804;2)解碼單元840履行解碼級806;3)重新命名/配置器單元852履行配置級808和重新命名級810;4)排程器單元856履行排程級812;5)實體暫存器檔單元858和記憶體單元870履行暫存器讀取/記憶體讀取級814;執行叢集860履行執行級816;6)記憶體單元870和實體暫存器檔單元858履行寫入回/記憶體寫入級818;7)各個單元可參與例外處置級822;及8)撤回單元854和實體暫存器檔單元858履行確定級824。
核心890可支援一或更多指令集(例如,x86指令集,具有其已被加入以較新版本之某些延伸);MIPS Technologies of Sunnyvale, CA之MIPS指令集;ARM Holdings of Sunnyvale, CA之ARM指令集(具有諸如NEON之選擇性額外延伸),包括文中所述之指令。於一實施例中,核心890包括支援緊縮資料指令集延伸(例如,AVX1、AVX2)之邏輯,藉此容許由許多多媒體應用程式所使用的操作使用緊縮資料來履行。
應理解:核心可支援多線程(執行二或更多平行組的操作或線緒),並可以多種方式執行,包括時間切割多線程、同時多線程(其中單一實體核心提供邏輯核心給其實體核心正同時地多線程之每一線緒)、或者其組合(例如,時間切割提取和解碼以及之後的同時多線程,諸如Intel® Hyper-Threading technology)。
雖然暫存器重新命名被描述於失序執行之背景,但應理解其暫存器重新命名可被使用於依序架構。雖然處理器之所述的實施例亦包括分離的指令和資料快取單元834/874以及共用L2快取單元876,但替代實施例可具有針對指令和資料兩者之單一內部快取,諸如(例如)第一階(L1)內部快取、或多階內部快取。於某些實施例中,該系統可包括內部快取與外部快取之組合,該外部快取是位於核心及/或處理器之外部。替代地,所有快取可於核心及/或處理器之外部。特定範例依序核心架構
圖9A-B闡明更特定的範例依序核心架構之方塊圖,該核心將為晶片中之數個邏輯區塊之一(包括相同類型及/或不同類型之其他核心)。邏輯區塊係透過高頻寬互連網路(例如,環狀網路)來通訊,利用某些固定功能邏輯、記憶體I/O介面、及其他必要I/O邏輯,根據其應用而定。
圖9A為單處理器核心之方塊圖,連同與晶粒上互連網路902 之其連接、以及第2階(L2)快取904之其局部子集,依據本發明之實施例。於一實施例中,指令解碼單元900支援具有緊縮資料指令集延伸之x86指令集。L1快取906容許針對快取記憶體之低潛時存取入純量及向量單元。雖然於一實施例中(為了簡化設計),純量單元908及向量單元910使用分離的暫存器組(個別地,純量暫存器912及向量暫存器914),且於其間轉移的資料被寫入至記憶體並接著從第一階(L1)快取906被讀取回;但本發明之替代實施例可使用不同的方式(例如,使用單一暫存器組或者包括一通訊路徑,其容許資料被轉移於兩暫存器檔之間而不被寫入及讀取回)。
L2快取904之局部子集為其被劃分為分離局部子集(每一處理器核心有一個)之總體L2快取的部分。各處理器核心具有一直接存取路徑通至L2快取904之其本身的局部子集。由處理器核心所讀取的資料被儲存於其L2快取子集904中且可被快速地存取,平行於存取其本身本地L2快取子集之其他處理器核心。由處理器核心所寫入之資料被儲存於其本身的L2快取子集904中且被清除自其他子集,假如需要的話。環狀網路確保共用資料之一致性。環狀網路為雙向的,以容許諸如處理器核心、L2快取及其他邏輯區塊等代理於晶片內部彼此通訊。各環狀資料路徑於每方向為1012位元寬。
圖9B為圖9A中之處理器核心的部分之延伸視圖,依據本發明之實施例。圖9B包括L1快取904之L1資料快取906A部分、以及有關向量單元910和向量暫存器914之更多細節。明確地,向量單元910為16寬的向量處理單元(VPU)(參見16寬的ALU 928),其係執行整數、單精確度浮點、及雙精確度浮點指令之一或更多者。VPU支援以拌合單元920拌合暫存器輸入、以數字轉換單元922A-B之數字轉換、及於記憶體輸入上以複製單元924之複製。寫入遮蔽暫存器926容許斷定結果向量寫入。
圖10為一種處理器1000之方塊圖,該處理器可具有多於一個核心、可具有集成記憶體控制器、且可具有集成圖形,依據本發明之實施例。圖10中之實線方塊闡明處理器1000,其具有單核心1002A、系統代理1010、一組一或更多匯流排控制器單元1016;而虛線方塊之選擇性加入闡明一替代處理器1000,其具有多核心1002A-N、系統代理單元1010中之一組一或更多集成記憶體控制器單元1014、及特殊用途邏輯1008。
因此,處理器1000之不同實施方式可包括:1)CPU,具有其為集成圖形及/或科學(通量)邏輯(其可包括一或更多核心)之特殊用途邏輯1008、及其為一或更多通用核心(例如,通用依序核心、通用失序核心、兩者之組合)之核心1002A-N;2)共處理器,具有其為主要用於圖形及/或科學(通量)之大量特殊用途核心的核心1002A-N;及3)共處理器,具有其為大量通用依序核心的核心1002A-N。因此,處理器1000可為通用處理器、共處理器或特殊用途處理器,諸如(例如)網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高通量多數集成核心(MIC)共處理器(包括30或更多核心)、嵌入式處理器,等等。該處理器可被實施於一或更多晶片上。處理器1000可為一或更多基底之部分及/或可被實施於其上,使用數個製程技術之任一者,諸如(例如)BiCMOS、CMOS、或NMOS。
記憶體階層包括該些核心內之一或更多階快取、一組或者一或更多共用快取單元1006、及耦合至該組集成記憶體控制器單元1014之額外記憶體(未顯示)。該組共用快取單元1006可包括一或更多中階快取,諸如第二階(L2)、第三階(L3)、第四階(L4)、或其他階快取、最後階快取(LLC)、及/或其組合。雖然於一實施例中環狀為基的互連單元1012將以下裝置互連:集成圖形邏輯1008、該組共用快取單元1006、及系統代理單元1010/集成記憶體控制器單元1014,但替代實施例可使用任何數目之眾所周知的技術以互連此等單元。於一實施例中,一致性被維持於一或更多快取單元1006與核心1002-A-N之間。
於某些實施例中,一或更多核心1002A-N能夠進行多線程。系統代理1010包括協調並操作核心1002A-N之那些組件。系統代理單元1010可包括(例如)電力控制單元(PCU)及顯示單元。PCU可為或者包括用以調節核心1002A-N及集成圖形邏輯1008之電力狀態所需的邏輯和組件。顯示單元係用以驅動一或更多外部連接的顯示。
核心1002A-N可針對架構指令集為同質的或異質的;亦即,二或更多核心1002A-N可執行相同的指令集,而其他者可執行該指令集或不同指令集之僅一子集。範例電腦架構
圖11-14為範例電腦架構之方塊圖。用於膝上型電腦、桌上型電腦、手持式PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、開關、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、視頻遊戲裝置、機上盒、微控制器、行動電話、可攜式媒體播放器、手持式裝置、及各種其他電子裝置之技術中已知的其他系統設計和組態亦為適當的。通常,能夠結合處理器及/或其他執行邏輯(如文中所揭露者)之多種系統或電子裝置為一般性適當的。
現在參考圖11,其顯示依據本發明之一實施例的系統1100之方塊圖。系統1100可包括一或更多處理器1110、1115,其被耦合至控制器集線器1120。於一實施例中,控制器集線器1120包括圖形記憶體控制器集線器(GMCH)1190及輸入/輸出集線器(IOH)1150(其可於分離的晶片上);GMCH 1190包括記憶體及圖形控制器(耦合至記憶體1140及共處理器1145);IOH 1150為通至GMCH 1190之耦合輸入/輸出(I/O)裝置1160。另一方面,記憶體與圖形控制器之一或兩者被集成於處理器內(如文中所述者),記憶體1140及共處理器1145被直接地耦合至處理器1110、及具有IOH 1150之單一晶片中的控制器集線器1120。記憶體1140可包括臆測管理器碼1140A,例如,用以儲存碼,當被執行時該碼係造成處理器履行本發明之任何方法。
額外處理器1115之選擇性本質於圖11中被標示以斷線。各處理器1110、1115可包括文中所述的處理核心之一或更多者並可為處理器1000之某版本。
記憶體1140可為(例如)動態隨機存取記憶體(DRAM)、相位改變記憶體(PCM)、或兩者之組合。針對至少一實施例,控制器集線器1120經由諸如前側匯流排(FSB)等多點分支匯流排、諸如QuickPath互連(QPI)等點對點介面、或類似連接1195而與處理器1110、1115通訊。
於一實施例中,共處理器1145為特殊用途處理器,諸如(例如)高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器,等等。於一實施例中,控制器集線器1120可包括集成圖形加速器。
於實體資源1110、1115間可有多樣差異,針對價值矩陣之譜,包括架構、微架構、熱、功率消耗特性,等等。
於一實施例中,處理器1110執行其控制一般類型之資料處理操作的指令。指令內所嵌入者可為共處理器指令。處理器1110辨識這些共處理器指令為其應由裝附之共處理器1145所執行的類型。因此,處理器1110將共處理器匯流排或其他互連上之這些共處理器指令(或代表共處理器指令之控制信號)發送至共處理器1145。共處理器1145接受並執行該些接收的共處理器指令。
現在參考圖12,其顯示依據本發明之實施例的第一更特定範例系統1200之方塊圖。如圖12中所示,多處理器系統1200為點對點互連系統,並包括經由點對點互連1250而耦合之第一處理器1270及第二處理器1280。處理器1270及1280之每一者可為處理器1000之某版本。於本發明之一實施例中,處理器1270及1280個別為處理器1110及1115,而共處理器1238為共處理器1145。於另一實施例中,處理器1270及1280個別為處理器1110及共處理器1145。
處理器1270及1280被顯示為個別地包括集成記憶體控制器(IMC)單元1272及1282。處理器1270亦包括其匯流排控制器單元點對點(P-P)介面1276及1278之部分;類似地,第二處理器1280包括P-P介面1286及1288。處理器1270、1280可使用P-P介面電路1278、1288而經由點對點(P-P)介面1250來交換資訊。如圖12中所示,IMC 1272及1282將處理器耦合至個別記憶體,亦即記憶體1232及記憶體1234,其可為本地地裝附至個別處理器之主記憶體的部分。
處理器1270、1280可各經由個別的P-P介面1252、1254而與晶片組1290交換資訊,使用點對點介面電路1276、1294、1286、1298。晶片組1290可經由高性能介面1239而選擇性地與共處理器1238交換資訊。於一實施例中,共處理器1238為特殊用途處理器,諸如(例如)高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器,等等。
共用快取(未顯示)可被包括於任一處理器中或者於兩處理器外部,而經由P-P互連與處理器連接,以致處理器之任一者或兩者的局部快取資訊可被儲存於共用快取中,假如處理器被置於低功率模式時。
晶片組1290可經由一介面1296而被耦合至第一匯流排1216。於一實施例中,第一匯流排1216可為周邊組件互連(PCI)匯流排、或者諸如PCI快速匯流排或其他第三代I/O互連匯流排等匯流排,雖然本發明之範圍未如此限制。
如圖12中所示,各種I/O裝置1214可被耦合至第一匯流排1216,連同匯流排橋1218,其係將第一匯流排1216耦合至第二匯流排1220。於一實施例中,一或更多額外處理器1215(諸如共處理器、高通量MIC處理器、GPGPU加速器(諸如,例如,圖形加速器或數位信號處理(DSP)單元)、場可編程閘極陣列、或任何其他處理器)被耦合至第一匯流排1216。於一實施例中,第二匯流排1220可為低管腳數(LPC)匯流排。各個裝置可被耦合至第二匯流排1220,其包括(例如)鍵盤及/或滑鼠1222、通訊裝置1227、及儲存單元1228,諸如磁碟機或其他大量儲存裝置(其可包括指令/碼及資料1230),於一實施例中。此外,音頻I/O 1224可被耦合至第二匯流排1220。注意:其他架構是可能的。例如,取代圖12之點對點架構,系統可實施多點分支匯流排其他此類架構。
現在參考圖13,其顯示依據本發明之實施例的第二更特定範例系統1300之方塊圖。圖12與13中之類似元件具有類似的參考數字,且圖12之某些形態已從圖13省略以免混淆圖13之其他形態。
圖13闡明其處理器1270、1280可包括集成記憶體及I/O控制邏輯(「CL」)1272和1282,個別地。因此,CL 1272、1282包括集成記憶體控制器單元並包括I/O控制邏輯。圖13闡明其不僅記憶體1232、1234被耦合至CL 1272、1282,同時其I/O裝置1314亦被耦合至控制邏輯1272、1282。舊有I/O裝置1315被耦合至晶片組1290。
現在參考圖14,其顯示依據本發明之一實施例的SoC 1400之方塊圖。圖10中之類似元件具有類似的參考數字。同時,虛線方塊為更多先進SoC上之選擇性特徵。於圖14中,互連單元1402被耦合至:應用程式處理器1410,其包括一組一或更多核心202A-N及共用快取單元1006;系統代理單元1010;匯流排控制器單元1016;集成記憶體控制器單元1014;一組一或更多共處理器1420,其可包括集成圖形邏輯、影像處理器、音頻處理器、及視頻處理器;靜態隨機存取記憶體(SRAM)單元1430;直接記憶體存取(DMA)單元1432;及顯示單元1440,用以耦合至一或更多外部顯示。於一實施例中,共處理器1420包括特殊用途處理器,諸如(例如)網路或通訊處理器、壓縮引擎、GPGPU、高通量MIC處理器、嵌入式處理器,等等。
文中所揭露之(例如,機制的)實施例可被實施以硬體、軟體、韌體、或此等實施方式之組合。本發明之實施例可被實施為電腦程式或程式碼,其被執行於可編程系統上,該可編程系統包含至少一處理器、儲存系統(包括揮發性和非揮發性記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置。
程式碼(諸如圖12中所示之碼1230)可被應用於輸入指令以履行文中所述之功能並產生輸出資訊。輸出資訊可被應用於一或更多輸出裝置,以已知的方式。為了本申請案之目的,處理系統包括任何系統,其具有處理器,諸如(例如)數位信號處理器(DSP)、微控制器、特定應用積體電路(ASIC)、或微處理器。
程式碼可被實施以高階程序或目標導向的編程語言來與處理系統通訊。程式碼亦可被實施以組合或機器語言,假如想要的話。事實上,文中所述之機制在範圍上不限於任何特定編程語言。於任何情況下,該語言可為編譯或解讀語言。
至少一實施例之一或更多形態可由其儲存在機器可讀取媒體上之代表性指令所實施,該機器可讀取媒體代表處理器內之各個邏輯,當由機器讀取時造成該機器製造邏輯以履行文中所述之技術。此等表示(已知為「IP核心」)可被儲存在有形的、機器可讀取媒體上,且被供應至各個消費者或製造設施以載入其實際上製造該邏輯或處理器之製造機器。
此類機器可讀取儲存媒體可包括(無限制)由機器或裝置所製造或形成之物件的非暫態、有形配置,包括:儲存媒體,諸如硬碟、包括軟碟、光碟、微型碟唯讀記憶體(CD-ROM)、微型碟可再寫入(CD-RW)、及磁光碟等任何其他類型的碟片;半導體裝置,諸如唯讀記憶體(ROM)、諸如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可編程唯讀記憶體(EPROM)等隨機存取記憶體(RAM)、快閃記憶體、電可抹除可編程唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁或光學卡、或者適於儲存電子指令之任何其他類型的媒體。
因此,本發明之實施例亦可包括含有指令或含有諸如硬體描述語言(HDL)等設計資料之非暫態、有形的機器可讀取媒體,該硬體描述語言(HDL)係定義文中所述之結構、電路、設備、處理器及/或系統特徵。此類實施例亦可被稱為程式產品。仿真 ( 包括二元翻譯、碼變形,等等 )
於某些情況下,指令轉換器可被用以將來自來源指令集之指令轉換至目標指令集。例如,指令轉換器可將指令翻譯(例如,使用靜態二元翻譯、動態二元翻譯,包括動態編譯)、變形、仿真、或者轉換至一或更多其他指令以供由核心所處理。指令轉換器可被實施以軟體、硬體、韌體、或其組合。指令轉換器可位於處理器上、處理器外、或者部分於處理器上而部分於處理器外。
圖15為一種對照軟體指令轉換器之使用的方塊圖,該轉換器係用以將來源指令集中之二元指令轉換至目標指令集中之二元指令,依據本發明之實施例。於所述之實施例中,指令轉換器為一種軟體指令轉換器,雖然替代地該指令轉換器亦可被實施以軟體、韌體、硬體、或其各種組合。圖15顯示一種高階語言1502之程式可使用x86編譯器1504而被編譯以產生x86二元碼1506,其可由具有至少一x86指令集核心之處理器1516來本機地執行。具有至少一x86指令集核心之處理器1516代表任何處理器,其可藉由可相容地執行或者處理以下事項來履行實質上如一種具有至少一x86指令集核心之Intel®處理器的相同功能:(1)Intel® x86指令集核心之指令集的實質部分或者(2)針對運作於具有至少一x86指令集核心之Intel®處理器上的應用程式或其他軟體之物件碼版本,以獲得如具有至少一x86指令集核心之Intel®處理器的實質上相同結果。x86編譯器1504代表一種編譯器,其可操作以產生x86二元碼1506(例如,物件碼),其可(具有或沒有額外鏈結處理)被執行於具有至少一x86指令集核心之處理器1516上。類似地,圖15顯示高階語言1502之程式可使用替代的指令集編譯器1508而被編譯以產生替代的指令集二元碼1510,其可由沒有至少一x86指令集核心之處理器1514來本機地執行(例如,具有其執行MIPS Technologies of Sunnyvale, CA之MIPS指令集及/或其執行ARM Holdings of Sunnyvale, CA之ARM指令集的核心之處理器)。指令轉換器1512被用以將x86二元碼1506轉換為其可由沒有至少一x86指令集核心之處理器1514來本機地執行的碼。已轉換碼不太可能相同於替代的指令集二元碼1510,因為能夠執行此功能之指令很難製造;然而,已轉換碼將完成一般性操作並由來自替代指令集之指令所組成。因此,指令轉換器1512代表軟體、韌體、硬體、或其組合,其(透過仿真、模擬或任何其他程序)容許處理器或其他不具有x86指令集處理器或核心的電子裝置來執行x86二元碼1506。
100:電腦系統
101:網路裝置
102:記憶體
103:輸入/輸出(I/O)電路
104:編譯器碼
105:顯示
106:碼
107:系統匯流排
108:通用暫存器
109:處理器核心
110:臆測管理器
110A:路徑
111:指令指標產生(IP Gen)級
112:安全性檢查策略
113:IP Gen mux
113A:路徑
114:記憶體安全檢查策略
114A:線
115:增量器電路
115A:線
116:類型安全檢查策略
120:分支預測器
124:分支目標緩衝器(BTB)
128:分支預測(BP) resteer mux
130:提取級
132:快取記憶體
133:快取線
134:提取單元
135:資料線
137:線
140:解碼級
142:分支位址計算器
144:返回堆疊緩衝器
145:資料線
146:解碼器
147:排程器
150:執行級
154:執行單元
500:一般性向量友善指令格式
505:無記憶體存取
510:無記憶體存取、全捨入控制類型操作
512:無記憶體存取、寫入遮蔽控制、部分捨入控制類型操作
515:無記憶體存取、資料變換類型操作
517:無記憶體存取、寫入遮蔽控制、v大小類型操作
520:記憶體存取
527:記憶體存取、寫入遮蔽控制
540:格式欄位
542:基礎操作欄位
544:暫存器指標欄位
546:修飾符欄位
550:擴增操作欄位
552:α欄位
552A:RS欄位
552A.1:捨入
552A.2:資料變換
552B:逐出暗示欄位
552B.1:暫時
552B.2:非暫時
554:β欄位
554A:捨入控制欄位
554B:資料變換欄位
554C:資料調處欄位
556:SAE欄位
557A:RL欄位
557A.1:捨入
557A.2:向量長度(VSIZE)
557B:廣播欄位
558:捨入操作控制欄位
559A:捨入操作欄位
559B:向量長度欄位
560:比例欄位
562A:置換欄位
562B:置換因數欄位
564:資料元件寬度欄位
568:類別欄位
568A:類別A
568B:類別B
570:寫入遮蔽欄位
572:即刻欄位
574:全運算碼欄位
600:特定向量友善指令格式
602:EVEX前綴
605:REX欄位
610:REX’欄位
615:運算碼映圖欄位
620:VVVV欄位
625:前綴編碼欄位
630:真實運算碼欄位
640:Mod R/M位元組
642:MOD欄位
644:Reg欄位
646:R/M欄位
654:SIB.xxx
656:SIB.bbb
700:暫存器架構
710:向量暫存器
715:寫入遮蔽暫存器
725:通用暫存器
745:純量浮點堆疊暫存器檔
750:MMX緊縮整數平坦暫存器檔
800:處理器管線
802:提取級
804:長度解碼級
806:解碼級
808:配置級
810:重新命名級
812:排程級
814:暫存器讀取/記憶體讀取級
816:執行級
818:寫入回/記憶體寫入級
822:例外處置級
824:確定級
830:前端單元
832:分支預測單元
834:指令快取單元
836:指令變換後備緩衝(TLB)
838:指令提取單元
840:解碼單元
850:執行引擎單元
852:重新命名/配置器單元
854:撤回單元
856:排程器單元
858:實體暫存器檔單元
860:執行叢集
862:執行單元
864:記憶體存取單元
870:記憶體單元
872:資料TLB單元
874:資料快取單元
876:第二階(L2)快取單元
890:處理器核心
900:指令解碼器
902:晶粒上互連網路
904:第二階(L2)快取
906:L1快取
906A:L1資料快取
908:純量單元
910:向量單元
912:純量暫存器
914:向量暫存器
920:拌合單元
922A-B:數字轉換單元
924:複製單元
926:寫入遮蔽暫存器
928:16寬的ALU
1000:處理器
1002A-N:核心
1006:共用快取單元
1008:特殊用途邏輯
1010:系統代理
1012:環狀為基的互連單元
1014:集成記憶體控制器單元
1016:匯流排控制器單元
1100:系統
1110,1115:處理器
1120:控制器集線器
1140:記憶體
1140A:臆測管理器碼
1145:共處理器
1150:輸入/輸出集線器(IOH)
1160:輸入/輸出(I/O)裝置
1190:圖形記憶體控制器集線器(GMCH)
1195:連接
1200:多處理器系統
1214:I/O裝置
1215:額外處理器
1216:第一匯流排
1218:匯流排橋
1220:第二匯流排
1222:鍵盤及/或滑鼠
1224:音頻I/O
1227:通訊裝置
1228:儲存單元
1230:指令/碼及資料
1232:記憶體
1234:記憶體
1238:共處理器
1239:高性能介面
1250:點對點互連
1252,1254:P-P介面
1270:第一處理器
1272,1282:集成記憶體控制器(IMC)單元
1276,1278:點對點(P-P)介面
1280:第二處理器
1286,1288:P-P介面
1290:晶片組
1294,1298:點對點介面電路
1296:介面
1300:系統
1314:I/O裝置
1315:舊有I/O裝置
1400:SoC
1402:互連單元
1410:應用程式處理器
1420:共處理器
1430:靜態隨機存取記憶體(SRAM)單元
1432:直接記憶體存取(DMA)單元
1440:顯示單元
1502:高階語言
1504:x86編譯器
1506:x86二元碼
1508:指令集編譯器
1510:指令集二元碼
1512:指令轉換器
1514:沒有至少一x86指令集核心之處理器
1516:具有至少一x86指令集核心之處理器
依據本發明之各個實施例將參考附圖而被描述,其中:
[圖1]繪示依據本發明之實施例的包括處理器核心之電腦系統。
[圖2]繪示依據本發明之實施例以省略安全性檢查指令的流程圖。
[圖3]繪示依據本發明之實施例以將一暗示發入碼中的流程圖。
[圖4]繪示依據本發明之實施例的流程圖。
[圖5A]為繪示一般性向量友善指令格式及其類別A指令模板的方塊圖,依據本發明之實施例。
[圖5B]為繪示一般性向量友善指令格式及其類別B指令模板的方塊圖,依據本發明之實施例。
[圖6A]為繪示圖5A及5B中之一般性向量友善指令格式的欄位之方塊圖,依據本發明之實施例。
[圖6B]為繪示其組成全運算碼欄位的圖6A中之特定向量友善指令格式的欄位之方塊圖,依據本發明之一實施例。
[圖6C]為繪示其組成暫存器指標欄位的圖6A中之特定向量友善指令格式的欄位之方塊圖,依據本發明之一實施例。
[圖6D]為繪示其組成擴增操作欄位550的圖6A中之特定向量友善指令格式的欄位之方塊圖,依據本發明之一實施例。
[圖7]為一暫存器架構之方塊圖,依據本發明之一實施例。
[圖8A]為繪示範例依序管線及範例暫存器重新命名、失序發送/執行管線兩者之方塊圖,依據本發明之實施例。
[圖8B]為一方塊圖,其繪示將包括於依據本發明之實施例的處理器中之依序架構核心之範例實施例及範例暫存器重新命名、失序發送/執行架構核心兩者。
[圖9A]為單處理器核心之方塊圖,連同與晶粒上互連網路之其連接、以及第2階(L2)快取之其局部子集,依據本發明之實施例。
[圖9B]為圖9A中之處理器核心的部分之延伸視圖,依據本發明之實施例。
[圖10]為一種處理器之方塊圖,該處理器可具有多於一個核心、可具有集成記憶體控制器、且可具有集成圖形,依據本發明之實施例。
[圖11]為一系統之方塊圖,依據本發明之一實施例。
[圖12]為依據本發明之實施例的更特定範例系統之方塊圖。
[圖13]為依據本發明之實施例的第二更特定範例系統之方塊圖。
[圖14]顯示依據本發明之實施例的系統單晶片(SoC)的方塊圖。
[圖15]為一種對照軟體指令轉換器之使用的方塊圖,該轉換器係用以將來源指令集中之二元指令轉換至目標指令集中之二元指令,依據本發明之實施例。
100:電腦系統
101:網路裝置
102:記憶體
103:輸入/輸出(I/O)電路
104:編譯器碼
105:顯示
106:碼
107:系統匯流排
108:通用暫存器
109:處理器核心
110:臆測管理器
110A:路徑
111:指令指標產生(IP Gen)級
112:安全性檢查策略
113:IP Gen mux
113A:路徑
114:記憶體安全檢查策略
115:增量器電路
115A:線
116:類型安全檢查策略
120:分支預測器
124:分支目標緩衝器(BTB)
128:分支預測(BP)resteer mux
130:提取級
132:快取記憶體
133:快取線
134:提取單元
135:資料線
137:線
140:解碼級
142:分支位址計算器
144:返回堆疊緩衝器
145:資料線
146:解碼器
147:排程器
150:執行級
154:執行單元
Claims (24)
- 一種設備,包含: 一解碼器,用以將一指令解碼為一已解碼指令; 一臆測管理器電路,用以: 檢測該指令中之一安全性檢查欄位, 基於該安全性檢查欄位以從複數安全性檢查策略判定將針對潛在錯誤臆測執行來實施的一安全性檢查策略, 對該指令履行該安全性檢查策略之一或更多相關檢查以判定該指令是否被潛在地錯誤臆測, 當該指令依據該等一或更多相關檢查而不被視為安全時,排程該指令以供執行,及 當該指令依據該等一或更多相關檢查而被視為安全時,省略該指令;及 一執行單元,用以執行其被排程以供執行的該指令。
- 如請求項1之設備,其中該安全性檢查欄位係一編譯器提供的暗示。
- 如請求項1之設備,其中該臆測管理器電路係用以對該指令之一組相關記憶體存取履行該安全性檢查策略之該等一或更多相關檢查。
- 如請求項1之設備,其中該安全性檢查策略係一記憶體安全檢查策略。
- 如請求項1之設備,其中該安全性檢查策略係一類型安全檢查策略。
- 如請求項1之設備,其中該安全性檢查策略之該等一或更多相關檢查包含一記憶體安全檢查及一類型安全檢查。
- 如請求項1之設備,其中該等一或更多相關檢查少於針對該設備之一架構上規格的一完全符合檢查。
- 如請求項1至7的任一項之設備,其中該指令係與依程式順序之一後續記憶體存取指令相關的一安全性檢查指令。
- 一種方法,包含: 以一硬體處理器之一解碼器將一指令解碼為一已解碼指令; 由該硬體處理器檢測該指令中之一安全性檢查欄位; 由該硬體處理器基於該安全性檢查欄位以從複數安全性檢查策略判定將針對潛在錯誤臆測執行來實施的一安全性檢查策略; 由該硬體處理器對該指令履行該安全性檢查策略之一或更多相關檢查以判定該指令是否被潛在地錯誤臆測; 當該指令依據該等一或更多相關檢查而不被該硬體處理器視為安全時,排程該指令以供執行; 當該指令依據該等一或更多相關檢查而被該硬體處理器視為安全時,省略該指令;及 以該硬體處理器之一執行單元執行其被排程以供執行的該指令。
- 如請求項9之方法,其中該安全性檢查欄位係一編譯器提供的暗示。
- 如請求項9之方法,其中該履行包含對該指令之一組相關記憶體存取履行該安全性檢查策略之該等一或更多相關檢查。
- 如請求項9之方法,其中該安全性檢查策略係一記憶體安全檢查策略。
- 如請求項9之方法,其中該安全性檢查策略係一類型安全檢查策略。
- 如請求項9之方法,其中該安全性檢查策略之該等一或更多相關檢查包含一記憶體安全檢查及一類型安全檢查。
- 如請求項9之方法,其中該等一或更多相關檢查少於針對該硬體處理器之一架構上規格的一完全符合檢查。
- 如請求項9至15的任一項之方法,其中該指令係與依程式順序之一後續記憶體存取指令相關的一安全性檢查指令。
- 一種儲存碼之非暫態機器可讀取媒體,當由機器所執行時該碼係造成該機器履行一方法,包含: 以一硬體處理器之一解碼器將一指令解碼為一已解碼指令; 由該硬體處理器檢測該指令中之一安全性檢查欄位; 由該硬體處理器基於該安全性檢查欄位以從複數安全性檢查策略判定將針對潛在錯誤臆測執行來實施的一安全性檢查策略; 由該硬體處理器對該指令履行該安全性檢查策略之一或更多相關檢查以判定該指令是否被潛在地錯誤臆測; 當該指令依據該等一或更多相關檢查而不被該硬體處理器視為安全時,排程該指令以供執行; 當該指令依據該等一或更多相關檢查而被該硬體處理器視為安全時,省略該指令;及 以該硬體處理器之一執行單元執行其被排程以供執行的該指令。
- 如請求項17之非暫態機器可讀取媒體,其中該安全性檢查欄位係一編譯器提供的暗示。
- 如請求項17之非暫態機器可讀取媒體,其中該履行包含對該指令之一組相關記憶體存取履行該安全性檢查策略之該等一或更多相關檢查。
- 如請求項17之非暫態機器可讀取媒體,其中該安全性檢查策略係一記憶體安全檢查策略。
- 如請求項17之非暫態機器可讀取媒體,其中該安全性檢查策略係一類型安全檢查策略。
- 如請求項17之非暫態機器可讀取媒體,其中該安全性檢查策略之該等一或更多相關檢查包含一記憶體安全檢查及一類型安全檢查。
- 如請求項17之非暫態機器可讀取媒體,其中該等一或更多相關檢查少於針對該硬體處理器之一架構上規格的一完全符合檢查。
- 如請求項17至23的任一項之非暫態機器可讀取媒體,其中該指令係與依程式順序之一後續記憶體存取指令相關的一安全性檢查指令。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/585,964 | 2019-09-27 | ||
US16/585,964 US20210096872A1 (en) | 2019-09-27 | 2019-09-27 | Hardware for eliding security checks when deemed safe during speculative execution |
Publications (1)
Publication Number | Publication Date |
---|---|
TW202113592A true TW202113592A (zh) | 2021-04-01 |
Family
ID=71105316
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW109120970A TW202113592A (zh) | 2019-09-27 | 2020-06-20 | 用以在臆測執行期間認為安全時省略安全性檢查的硬體 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20210096872A1 (zh) |
EP (1) | EP3798881A1 (zh) |
JP (1) | JP2021057006A (zh) |
CN (1) | CN112579171A (zh) |
TW (1) | TW202113592A (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11307857B2 (en) * | 2019-12-05 | 2022-04-19 | Marvell Asia Pte, Ltd. | Dynamic designation of instructions as sensitive for constraining multithreaded execution |
US11263015B1 (en) | 2019-12-05 | 2022-03-01 | Marvell Asia Pte, Ltd. | Microarchitectural sensitive tag flow |
US11372647B2 (en) | 2019-12-05 | 2022-06-28 | Marvell Asia Pte, Ltd. | Pipelines for secure multithread execution |
US20230098640A1 (en) * | 2021-09-26 | 2023-03-30 | Ceremorphic, Inc. | Core Processor and Redundant Branch Processor with Control Flow Attack Detection |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040268095A1 (en) * | 2003-06-30 | 2004-12-30 | Tatiana Shpeisman | Efficient implementation of null reference check |
US7810086B2 (en) * | 2005-06-30 | 2010-10-05 | Intel Corporation | Safe code-motion of dangerous instructions during compiler optimization |
US20140059333A1 (en) * | 2012-02-02 | 2014-02-27 | Martin G. Dixon | Method, apparatus, and system for speculative abort control mechanisms |
US10761970B2 (en) * | 2017-10-20 | 2020-09-01 | International Business Machines Corporation | Computerized method and systems for performing deferred safety check operations |
US10866805B2 (en) * | 2018-01-03 | 2020-12-15 | Arm Limited | Speculation barrier instruction |
DK3738058T3 (da) * | 2018-01-12 | 2023-02-20 | Virsec Systems Inc | Forsvar mod spekulativ eksekveringsudnyttelse |
GB2572578B (en) * | 2018-04-04 | 2020-09-16 | Advanced Risc Mach Ltd | Cache annotations to indicate specultative side-channel condition |
GB2572579B (en) * | 2018-04-04 | 2020-09-16 | Advanced Risc Mach Ltd | Speculative side-channel hint instruction |
-
2019
- 2019-09-27 US US16/585,964 patent/US20210096872A1/en not_active Abandoned
-
2020
- 2020-06-16 JP JP2020104078A patent/JP2021057006A/ja active Pending
- 2020-06-17 EP EP20180412.7A patent/EP3798881A1/en active Pending
- 2020-06-20 TW TW109120970A patent/TW202113592A/zh unknown
- 2020-06-23 CN CN202010578891.4A patent/CN112579171A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
CN112579171A (zh) | 2021-03-30 |
EP3798881A1 (en) | 2021-03-31 |
JP2021057006A (ja) | 2021-04-08 |
US20210096872A1 (en) | 2021-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230342156A1 (en) | Apparatuses and methods for speculative execution side channel mitigation | |
TW202113592A (zh) | 用以在臆測執行期間認為安全時省略安全性檢查的硬體 | |
KR102478874B1 (ko) | 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치 | |
US20240078111A1 (en) | Hardware apparatuses and methods to switch shadow stack pointers | |
US20180018177A1 (en) | Method and apparatus for speculative vectorization | |
US9785442B2 (en) | Systems, apparatuses, and methods for data speculation execution | |
KR102453594B1 (ko) | 데이터 추론 실행을 위한 시스템, 장치 및 방법 | |
KR102453086B1 (ko) | 데이터 추론 실행을 위한 시스템, 장치 및 방법 | |
US20160357556A1 (en) | Systems, apparatuses, and methods for data speculation execution | |
WO2016105789A1 (en) | Systems, apparatuses, and methods for data speculation execution | |
US11321089B2 (en) | Instruction set architecture based and automatic load tracking for opportunistic re-steer of data-dependent flaky branches | |
US10061589B2 (en) | Systems, apparatuses, and methods for data speculation execution | |
US10387158B2 (en) | Systems, apparatuses, and methods for data speculation execution | |
CN112241288A (zh) | 在硬件中检测条件分支的动态控制流重汇聚点 | |
US11934830B2 (en) | Method and apparatus for data-ready memory operations | |
CN108241506B (zh) | 对基于高性能串的循环加速器中的加载做控制推测的方法 | |
US10942744B2 (en) | Systems, apparatuses, and methods for data speculation execution |