TWI630550B - 用於資料推測執行之系統設備及方法 - Google Patents

用於資料推測執行之系統設備及方法 Download PDF

Info

Publication number
TWI630550B
TWI630550B TW104138799A TW104138799A TWI630550B TW I630550 B TWI630550 B TW I630550B TW 104138799 A TW104138799 A TW 104138799A TW 104138799 A TW104138799 A TW 104138799A TW I630550 B TWI630550 B TW I630550B
Authority
TW
Taiwan
Prior art keywords
dsx
instruction
speculative
instructions
register
Prior art date
Application number
TW104138799A
Other languages
English (en)
Other versions
TW201631470A (zh
Inventor
艾蒙斯特阿法 歐德亞麥德維爾
克里斯多夫 休斯
羅柏 瓦倫泰
密林德 吉卡
Original Assignee
英特爾股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 英特爾股份有限公司 filed Critical 英特爾股份有限公司
Publication of TW201631470A publication Critical patent/TW201631470A/zh
Application granted granted Critical
Publication of TWI630550B publication Critical patent/TWI630550B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory

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)

Abstract

描述用於資料推測執行(DSX)之系統、方法、及設備。於某些實施例中,用於DSX之硬體設備包含解碼器硬體,用以解碼用以支援資料推測執行(DSX)之指令類別,包括用以開始DSX、結束DSX之指令、及用以於DSX期間執行之推測指令;及執行硬體,用以推測地執行包括該些推測指令之支援DSX的已解碼指令並更新推測指令追蹤硬體。

Description

用於資料推測執行之系統設備及方法
本發明之領域一般係有關電腦處理器架構,而更明確地,係有關推測執行。
含有可能交叉疊代依存性之向量化迴路是聲名狼籍地困難的。此類型之範例迴路為:for(i=0;i<N;i++){ A[i]=B[C[i]]; }
此迴路之自然(且非正確)向量化將是:for(i=0;i<N;i+=SIMD_WIDTH){ zmm0=vmovdqu32 &C[i] k1=kxnor k1,k1 zmm1=vgatherdd B,zmm0,k1 vmovdqu &A[i],zmm1 }
然而,假如產生迴路之向量化版本的編譯器不具有關於A、B、及C之位址或對準的先驗知識,則上述向量化是不安全的。
102‧‧‧提取單元
104‧‧‧解碼單元
106‧‧‧核心
107‧‧‧排程單元
108‧‧‧執行單元
110‧‧‧撤回單元
116‧‧‧快取
118‧‧‧記憶體順序緩衝器(MOB)
124‧‧‧快取線
126‧‧‧DSX讀取位元
128‧‧‧DSX寫入位元
130‧‧‧DSX巢套計數器
132‧‧‧DSX巢套計數器電路
134‧‧‧DSX檢查點電路
136‧‧‧DSX復原電路
139‧‧‧快取電路
140‧‧‧暫存器
150‧‧‧MSR
152‧‧‧追蹤硬體
301‧‧‧移位電路
303‧‧‧雜湊函數單元電路
305‧‧‧雜湊表
307‧‧‧桶
309‧‧‧項目
311‧‧‧衝突檢查電路
313‧‧‧OR閘
315‧‧‧測試中元件
2800‧‧‧一般性向量友善指令格式
2805‧‧‧無記憶體存取
2810‧‧‧無記憶體存取、全捨入控制類型操作
2812‧‧‧無記憶體存取、寫入遮蔽控制、部分捨入控制類型操作
2815‧‧‧無記憶體存取、資料變換類型操作
2817‧‧‧無記憶體存取、寫入遮蔽控制、v大小類型操作
2820‧‧‧記憶體存取
2827‧‧‧記憶體存取、寫入遮蔽控制
2840‧‧‧格式欄位
2842‧‧‧基礎操作欄位
2844‧‧‧暫存器指標欄位
2846‧‧‧修飾符欄位
2850‧‧‧擴增操作欄位
2852‧‧‧α欄位
2852A‧‧‧RS欄位
2852A.1‧‧‧捨入
2852A.2‧‧‧資料變換
2852B‧‧‧逐出暗示欄位
2852B.1‧‧‧暫時
2852B.2‧‧‧非暫時
2854‧‧‧β欄位
2854A‧‧‧捨入控制欄位
2854B‧‧‧資料變換欄位
2854C‧‧‧資料調處欄位
2856‧‧‧SAE欄位
2857A‧‧‧RL欄位
2857A.1‧‧‧捨入
2857A.2‧‧‧向量長度(VSIZE)
2857B‧‧‧廣播欄位
2858‧‧‧捨入操作控制欄位
2859A‧‧‧捨入操作欄位
2859B‧‧‧向量長度欄位
2860‧‧‧比例欄位
2862A‧‧‧置換欄位
2862B‧‧‧置換因數欄位
2864‧‧‧資料元件寬度欄位
2868‧‧‧類別欄位
2868A‧‧‧類別A
2868B‧‧‧類別B
2870‧‧‧寫入遮蔽欄位
2872‧‧‧即刻欄位
2874‧‧‧全運算碼欄位
2900‧‧‧特定向量友善指令格式
2902‧‧‧EVEX前綴
2905‧‧‧REX欄位
2910‧‧‧REX’欄位
2915‧‧‧運算碼映圖欄位
2920‧‧‧VVVV欄位
2925‧‧‧前綴編碼欄位
2930‧‧‧真實運算碼欄位
2940‧‧‧Mod R/M位元組
2942‧‧‧MOD欄位
2944‧‧‧Reg欄位
2946‧‧‧R/M欄位
2954‧‧‧SIB.xxx
2956‧‧‧SIB.bbb
3000‧‧‧暫存器架構
3010‧‧‧向量暫存器
3015‧‧‧寫入遮蔽暫存器
3025‧‧‧通用暫存器
3045‧‧‧純量浮點堆疊暫存器檔
3050‧‧‧MMX緊縮整數平坦暫存器檔
3100‧‧‧處理器管線
3102‧‧‧提取級
3104‧‧‧長度解碼級
3106‧‧‧解碼級
3108‧‧‧配置級
3110‧‧‧重新命名級
3112‧‧‧排程級
3114‧‧‧暫存器讀取/記憶體讀取級
3116‧‧‧執行級
3118‧‧‧寫入回/記憶體寫入級
3122‧‧‧例外處置級
3124‧‧‧確定級
3130‧‧‧前端單元
3132‧‧‧分支推測單元
3134‧‧‧指令快取單元
3136‧‧‧指令翻譯旁看緩衝器(TLB)
3138‧‧‧指令提取單元
3140‧‧‧解碼單元
3150‧‧‧執行引擎單元
3152‧‧‧重新命名/配置器單元
3154‧‧‧退役單元
3156‧‧‧排程器單元
3158‧‧‧實體暫存器檔單元
3160‧‧‧執行叢集
3162‧‧‧執行單元
3164‧‧‧記憶體存取單元
3170‧‧‧記憶體單元
3172‧‧‧資料TLB單元
3174‧‧‧資料快取單元
3176‧‧‧第二階(L2)快取單元
3190‧‧‧處理器核心
3200‧‧‧指令解碼器
3202‧‧‧晶粒上互連網路
3204‧‧‧第二階(L2)快取
3206‧‧‧L1快取
3206A‧‧‧L1資料快取
3208‧‧‧純量單元
3210‧‧‧向量單元
3212‧‧‧純量暫存器
3214‧‧‧向量暫存器
3220‧‧‧拌合單元
3222A-B‧‧‧數字轉換單元
3224‧‧‧複製單元
3226‧‧‧寫入遮蔽暫存器
3228‧‧‧16寬的ALU
3300‧‧‧處理器
3302A-N‧‧‧核心
3306‧‧‧共享快取單元
3308‧‧‧特殊用途邏輯
3310‧‧‧系統代理
3312‧‧‧環狀為基的互連單元
3314‧‧‧集成記憶體控制器單元
3316‧‧‧匯流排控制器單元
3400‧‧‧系統
3410、3415‧‧‧處理器
3420‧‧‧控制器集線器
3440‧‧‧記憶體
3445‧‧‧共處理器
3450‧‧‧輸入/輸出集線器(IOH)
3460‧‧‧輸入/輸出(I/O)裝置
3490‧‧‧圖形記憶體控制器集線器(GMCH)
3495‧‧‧連接
3500‧‧‧多處理器系統
3514‧‧‧I/O裝置
3515‧‧‧額外處理器
3516‧‧‧第一匯流排
3518‧‧‧匯流排橋
3520‧‧‧第二匯流排
3522‧‧‧鍵盤及/或滑鼠
3524‧‧‧音頻I/O
3527‧‧‧通訊裝置
3528‧‧‧儲存單元
3530‧‧‧指令/碼及資料
3532‧‧‧記憶體
3534‧‧‧記憶體
3538‧‧‧共處理器
3539‧‧‧高性能介面
3550‧‧‧點對點互連
3552、3554‧‧‧P-P介面
3570‧‧‧第一處理器
3572、3582‧‧‧集成記憶體控制器(IMC)單元
3576、3578‧‧‧點對點(P-P)介面
3580‧‧‧第二處理器
3586、3588‧‧‧P-P介面
3590‧‧‧晶片組
3594、3598‧‧‧點對點介面電路
3596‧‧‧介面
3600‧‧‧系統
3614‧‧‧I/O裝置
3615‧‧‧舊有I/O裝置
3700‧‧‧SoC
3702‧‧‧互連單元
3710‧‧‧應用程式處理器
3720‧‧‧共處理器
3730‧‧‧靜態隨機存取記憶體(SRAM)單元
3732‧‧‧直接記憶體存取(DMA)單元
3740‧‧‧顯示單元
3802‧‧‧高階語言
3804‧‧‧x86編譯器
3806‧‧‧x86二元碼
3808‧‧‧指令集編譯器
3810‧‧‧指令集二元碼
3812‧‧‧指令轉換器
3814‧‧‧沒有至少一x86指令集核心之處理器
3816‧‧‧具有至少一x86指令集核心之處理器
本發明係藉由後附圖形之圖中的範例(而非限制)來闡明,其中相似的參考符號係指示類似的元件且其中:圖1為一種處理器核心之範例方塊圖的實施例,該處理器核心能夠以硬體執行資料推測延伸(DSX);圖2闡明依據實施例之推測指令執行的範例;圖3闡明DSX追蹤硬體之詳細實施例;圖4闡明由DSX追蹤硬體所履行之DSX錯誤推測檢測的範例方法;圖5(A)-(B)闡明由DSX追蹤硬體所履行之DSX錯誤推測檢測的範例方法;圖6闡明用於開始DSX之指令的執行之實施例;圖7闡明YBEGIN指令格式之某些範例實施例;圖8闡明諸如YBEGIN指令之指令的執行之詳細實施例;圖9闡明其顯示諸如YBEGIN指令之指令的執行之虛擬碼的範例;圖10闡明用於開始DSX之指令的執行之實施例;圖11闡明YBEGIN WITH STRIDE指令格式之某些範例實施例;圖12闡明諸如YBEGIN WITH STRIDE指令之指令的執行之詳細實施例;圖13闡明用於持續DSX而不結束它之指令的執行之 實施例;圖14闡明YCONTINUE指令格式之某些範例實施例;圖15闡明諸如YCONTINUE指令之指令的執行之詳細實施例;圖16闡明其顯示諸如YCONTINUE指令之指令的執行之虛擬碼的範例;圖17闡明用於異常中止DSX之指令的執行之實施例;圖18闡明YABORT指令格式之某些範例實施例;圖19闡明諸如YABORT指令之指令的執行之詳細實施例;圖20闡明其顯示諸如YABORT指令之指令的執行之虛擬碼的範例;圖21闡明用於測試DSX之狀態之指令的執行之實施例;圖22闡明YTEST指令格式之某些範例實施例;圖23闡明其顯示諸如YTEST指令之指令的執行之虛擬碼的範例;圖24闡明用於結束DSX之指令的執行之實施例;圖25闡明YEND指令格式之某些範例實施例;圖26闡明諸如YEND指令之指令的執行之詳細實施例;圖27闡明其顯示諸如YEND指令之指令的執行之虛 擬碼的範例;圖28A-28B為闡明一般性向量友善指令格式及其指令模板的方塊圖,依據本發明之實施例;圖29A-29D顯示特定向量友善指令格式2900,其之特定在於其指明欄位之位置、大小、解讀及順序,以及那些欄位之部分的值;圖30為一暫存器架構之方塊圖,依據本發明之一實施例;圖31A為闡明範例依序管線及範例暫存器重新命名、失序問題/執行管線兩者之方塊圖,依據本發明之實施例;圖31B為一方塊圖,其闡明將包括於依據本發明之實施例的處理器中之依序架構核心之範例實施例及範例暫存器重新命名、失序問題/執行架構核心兩者。
圖32A-B闡明更特定的範例依序核心架構之方塊圖,該核心將為晶片中之數個邏輯區塊之一(包括相同類型及/或不同類型之其他核心);圖33為一種處理器之方塊圖,該處理器可具有多於一個核心、可具有集成記憶體控制器、且可具有集成圖形,依據本發明之實施例;圖34顯示一系統之方塊圖,依據本發明之實施例;圖35顯示依據本發明之實施例的第一更特定範例系統之方塊圖;圖36顯示依據本發明之實施例的第二更特定範例系 統之方塊圖;圖37顯示一SoC之方塊圖,依據本發明之實施例;圖38為一種對照軟體指令轉換器之使用的方塊圖,該轉換器係用以將來源指令集中之二元指令轉換至目標指令集中之二元指令,依據本發明之實施例。
【發明內容及實施方式】
於以下描述中,提出了數個特定細節。然而,應理解:本發明之實施例可被實行而無這些特定細節。於其他例子中,眾所周知的電路、結構及技術未被詳細地顯示以免模糊了對本說明書之瞭解。
說明書中對於「一個實施例」、「一實施例」、「一範例實施例」等等之參照係指示所述之實施例可包括特定的特徵、結構、或特性,但每一實施例可能不一定包括該特定的特徵、結構、或特性。此外,此等用詞不一定指稱相同的實施例。再者,當特定的特徵、結構、或特性配合實施例而描述時,係認為其落入熟悉此項技術人士之知識範圍內,以致能配合其他實施例(無論是否明確地描述)之此等特徵、結構、或特性。
貫穿本說明書,詳述了一種稱為資料推測延伸(DSX)之推測執行的技術。本說明書中所包括者為DSX硬體及支援DSX之新指令。
DSX本質上係類似於受限的異動記憶體(RTM)實施方式,但較簡單。例如,DSX區不需要隱含籬(implied fence)。反之,正常的載入/儲存排序規則被維持。此外,DSX區不會設定任何組態於處理器中而迫使基元行為以供載入;而於RTM中,異動之載入及儲存被基元地處置(於異動之完成時確認)。此外,載入於RTM下不會被緩衝。然而,一旦當推測不再需要,則儲存被緩衝並確認。這些儲存可被緩衝於專屬的推測執行儲存器或者於共用的暫存器或記憶體位置,根據實施例。於某些實施例中,推測向量化僅發生在單一執行緒,其表示不需要防範來自其他執行緒之干擾。
於先前詳述的向量化迴路中,將需要有動態檢查以策安全。例如,確認其在既定向量疊代中對A之寫入不會重疊其(於純量迴路中)在稍後疊代中被讀取之B或C中的元件。以下的實施例詳述了透過推測之使用的處置向量化情況。推測版本指示其各迴路疊代應被推測地執行(例如,使用以下詳述之指令),以及其硬體應有助於履行位址檢查。取代仰賴硬體為單獨地負責位址檢查(其需要極昂貴的硬體),所述之方式係使用軟體以提供資訊來協助該硬體,致能更便宜的硬體解決方案而不影響執行時間或者加諸太多負擔給編程器或編譯器。
不幸地,隨著向量化可能有排序違規。回頭看以上所述之純量迴路範例:for(i=0;i<N;i++){ A[i]=B[C[i]]; }
於此迴路之前四個疊代期間,下列記憶體操作將依下 列順序發生:讀取C[0]
讀取B[C[0]]
寫入A[0]
讀取C[1]
讀取B[C[1]]
寫入A[1]
讀取C[2]
讀取B[C[2]]
寫入A[2]
讀取C[3]
讀取B[C[3]]
寫入A[3]
介於針對相同陣列的存取之間的距離(以操作之數目)為三且其亦為迴路中之推測記憶體的數目,一旦其被向量化(使成為SIMD)。該距離被稱為「跨步」。其亦為迴路中之記憶體指令的數目,其將具有於其上所履行之位址檢查,一旦迴路被向量化。於某些實施例中,此跨步係經由在迴路之開始時的特殊指令而被傳遞至位址追蹤硬體(詳述於下)。於某些實施例中,該指令亦清除位址追蹤硬體。
文中所詳述者為DSX中所使用的新指令(DSX記憶體指令),於諸如向量化迴路執行的情況下。各DSX記憶體指令(諸如載入、儲存、收集、和散佈)包括將於 DSX期間所使用的運算元,其係指示DSX指令內之位置(例如,被執行的迴路中之位置)。於某些實施例中,運算元為即刻(例如,8位元即刻),具有已編碼順序之數值於該即刻中。於其他實施例中,運算元為儲存已編碼順序之數值的暫存器或記憶體位置。
此外,於某些實施例中,這些指令具有與其正常對應者不同的運算碼。這些指令可為純量或超純量(例如,SIMD或MIMD)。這些指令之部分的範例被發現於下,其中運算碼之記憶術包括「S」(其被劃底線於下),用以指示其為推測版本;而imm8為即刻運算元,其用以指示執行之位置(例如,被執行之迴路中的位置):VMOVSDQA32 zmm1{k1}{z},mV,imm8//推測SIMD載入
VMOVS xmm1,m32,imm8//推測純量載入
VSCATTERSDPS vm32z{k1},zmm1,imm8//推測散佈
當然,其他指令亦可利用詳細的運算元及運算碼記憶術(及下方運算碼)改變,諸如邏輯(AND、OR、XOR,等等)及資料調處(加、減,等等)指令。
於上述純量範例之向量化版本中(假設四個緊縮資料元件之SIMD寬度),記憶體操作之順序為:讀取C[0],C[1],C[2],C[3]
讀取B[C[0]],B[C[1]],B[C[2]],B[C[3]]
寫入A[0],A[1],A[2],A[3]
此順序可導致不正確的執行,假如(例如)B[C[1]]與A[0]重疊的話。於原始的純量順序中,B[C[1]]之讀取發生在A[0]的寫入之後,但是於向量化執行中則其發生在 之前。
使用推測記憶體指令於其可能導致不正確執行的迴路中之操作係協助處理此問題。如將詳述者,各推測記憶體指令係告知DSX追蹤硬體(詳述於下)其在迴路本體內之位置:for(i=0;i<N;i+=SIMD_WIDTH){ zmm0=vmovsdqu32 &C[i],0//告訴位址追蹤器此為指令0 k1=kxnor k1,k1 zmm1=vgathersddB,zmm0,k1,1//告訴位址追蹤器此為指令1 vmovsdqu &A[i],zmm1,2//告訴位址追蹤器此為指令2 }
由各推測記憶體操作所提供的迴路位置資訊可與跨步結合以重建純量記憶體操作。隨著推測記憶體指令執行,識別符(id)係由DSX硬體追蹤器計算給各元件(id=序號+跨步*SIMD內之元件號)。硬體追蹤器使用序號、計算出的id、及各緊縮資料元件之位址和大小以判定是否有排序違規(意即,該元件是否與另一者重疊且被失序地讀取或寫入)。
展開其包含各向量記憶體指令之個別記憶體操作、累積各展開之跨步、及指定所得數字為「ids」,導致:讀取C[0]//id=0
讀取C[1]//id=3
讀取C[2]//id=6
讀取C[3]//id=9
讀取B[C[0]]//id=1
讀取B[C[1]]//id=4
讀取B[C[2]]//id=7
讀取B[C[3]]//id=10
寫入A[0]//id=2
寫入A[1]//id=5
寫入A[2]//id=8
寫入A[3]//id=11
以id分類上述個別記憶體操作將重建原始的純量記憶體排序。
圖1為一種處理器核心之範例方塊圖的實施例,該處理器核心能夠以硬體執行資料推測延伸(DSX)。
處理器核心106可包括提取單元102,用以提取指令以供由核心106執行。例如,指令可被提取自L1快取或記憶體。核心106亦可包括解碼單元104,用以解碼包括那些以下詳述的已提取指令。例如,解碼單元104可將已提取指令解碼成為複數微操作(micro-ops)。
此外,核心106可包括排程單元107。排程單元107可履行與儲存已解碼指令(例如,接收自解碼單元104)相關的各種操作直到該些指令準備好供派送,例如,直到來自已解碼指令之運算元的所有來源值變為可用。於一實施例中,排程單元107可排程及/或發送(或派送)已解碼指令至一或更多執行單元108以供執行。執行單元108可包括記憶體執行單元、整數執行單元、浮點執行單元、或其他執行單元。撤回單元110可在確認後撤回已執行指令。於一實施例中,已執行指令之撤回可導致處理器狀態 被確認自指令之執行、由其被再配置之指令所使用的實體暫存器,等等。
記憶體順序緩衝器(MOD)118可包括載入緩衝器、儲存緩衝器及用以儲存其已被載入或寫回至主記憶體之待決記憶體操作的邏輯。於某些實施例中,MOB 118(或與其類似的電路)係儲存DSX區之推測儲存(寫入)。於各個實施例中,核心可包括本地快取,例如,私人快取,諸如快取116,其可包括一或更多快取線124(例如,快取線0至W)且其係由快取電路139所管理。於一實施例中,快取116之各線可包括針對核心106上所執行的各執行緒之DSX讀取位元126及/或DSX寫入位元128。位元126及128可被設定或清除以指示其由DSX記憶體存取請求對相應快取線的(載入及/或儲存)存取。注意:雖然於圖1之實施例中各快取線124被顯示為具有個別位元126及128,但其他組態是可能的。例如,DSX讀取位元126(或DSX寫入位元128)可相應於快取116之選擇部分,諸如快取116之快取區塊或其他部分。同時,位元126及/或128可被儲存於快取116以外的位置中。
為了協助執行DSX操作,核心106可包括DSX巢套計數器130,用以儲存一相應於其已被遭遇而無匹配的DSX結束之DSX開始的數目之值。計數器130可被實施為任何類型的儲存裝置(諸如硬體暫存器)或者儲存於記憶體(例如,系統記憶體或快取116)中之變數。核心106亦可包括DSX巢套計數器電路132,用以更新計數器 130中所儲存之值。核心106可包括:DSX檢查點電路134,用以檢查(或儲存)核心106之各個組件的狀態;及DSX復原電路136,用以使用後降位址來復原核心106之各個組件的狀態,例如,於既定DSX之異常中止,該後降位址係儲存或被儲存於諸如暫存器140之另一位置中。此外,核心106可包括一或更多額外暫存器140,其係相應於各個DSX記憶體存取請求,諸如DSX狀態及控制暫存器(DSXSR),用以儲存DSX是否為現用(active)之指示、DSX指令指針(DSXXIP)(例如,其可為指向相應DSX之開始處(或緊接在前)的指令之指令指針)、及/或DSX堆疊指針(DSXSP)(例如,其可為指向其儲存核心106之一或更多組件的各個狀態之堆疊的標頭之堆疊指針)。這些暫存器亦可為MSR 150。
DSX位址追蹤硬體152(有時僅稱為DSX追蹤硬體)係追蹤推測記憶體存取並檢測DSX中之排序違規。特別地,此追蹤硬體152包括位址追蹤器,其係接收用以重建之資訊並接著執行原始的純量記憶體順序。通常,輸入為其需被追蹤之迴路中的數個推測記憶體指令,而那些指令之各者的某些資訊係諸如:(1)序號、(2)指令存取之位址、及(3)指令係招致針對記憶體之讀取或者寫入。假如兩推測記憶體指令係存取記憶體之重疊部分,則硬體追蹤器152便使用此資訊以判定記憶體操作之原始純量順序是否已被改變。假如是的話,及假如任一操作是寫入的話,則硬體便觸發錯誤推測。雖然圖1顯示DSX追 蹤硬體152為獨立的,但是於某些實施例此硬體是其他核心組件的一部分。
圖2闡明依據實施例之推測指令執行的範例。於201,推測指令被提取。例如,推測記憶體指令(諸如那些以上詳述者)被提取。於某些實施例中,此指令包括一指示其推測本質之運算碼及一用以指示DSX中的排序之運算元。排序運算元可為即刻值或者暫存器/記憶體位置。
提取的推測指令被解碼於203。
已解碼的推測指令是否為DSX之一部分的判定被執行於205。例如,DSX是否被指示於上述DSX狀態及控制暫存器(DSXSR)中?當DSX非為現用時,則指令不是變為無操作(nop)就是被執行為正常的、非推測的指令於207,依據實施例。
當DSX為現用時,則推測指令被推測地執行(例如,未確認)且DSX追蹤硬體被更新於209。
圖3闡明DSX位址追蹤硬體之詳細實施例。此硬體係追蹤推測記憶體例。通常,由DSX追蹤硬體所分析的元件(例如,SIMD元件)被劃分成稱為塊之部分,其大小不大於「B」位元組。
移位電路301係移位塊之位址(諸如開始位址)。於大部分實施例中,移位電路301履行右移位。通常,右移位是以log2B。移位的位址係接受由雜湊函數單元電路303所履行的雜湊函數。
雜湊函數之輸出為針對雜湊表305之指標。如圖所示,雜湊表305包括複數桶307。於某些實施例中,雜湊表305為光暈過濾器(Bloom filter)。雜湊表305被用以檢測錯誤推測,並用以記錄推測地存取的資料之位址、存取類型、序號、及id號。雜湊表305含有N「組」,其各組含有M項目309。各項目309保持有效位元、序號、id號、及存取類型,針對先前執行的推測記憶體指令之元件。於某些實施例中,各項目309亦含有相應的位址(顯示為圖中之虛線方塊)。於DSX啟動指令時(例如,以下詳述之YBEGIN及變數),所有有效位元被清除,及「推測現用」旗標被設定;而於一結束DSX之指令上,推測現用旗標被清除。
衝突檢查電路311檢查每項目309相對於測試中元件(或其塊)315之衝突。於某些實施例中,當項目309為有效且至少以下之一者成立時則有衝突:i)項目309中之存取類型為寫入或ii)測試中之存取類型為寫入;連同以下之一者:i)項目309中之序號小於測試中元件315之序號、且項目309中之id號大於測試中元件315之id號,或ii)項目309中之序號大於測試中元件315之序號、且項目309中之id號小於測試中元件315之id號。
換言之,當以下狀況時則衝突存在:(Entry is valid)AND((access type in entry==write)OR(access type under test==write))AND(((Seq # in entry<Seq # under test)AND(id # in entry>id # under test))OR((Seq # in entry>Seq # under test)AND(id # in entry<id # under test)))
注意:於大部分實施例中,沒有針對位址重疊之測 試。此重疊被暗示自雜湊表中命中該項目。當沒有位址重疊時仍可能發生命中,由於來自雜湊函數及/或來自檢查太粗略(意即,B太大)之混淆。然而,當有位址重疊時將會有命中。因此正確性被保證,但可能有錯誤肯定(意即,硬體可能檢測到其中並沒有的錯誤推測)。於一實施例中,塊位址被儲存於各項目309中,且用以測試錯誤推測之額外條件被應用(意即,此被與上述條件邏輯地AND運算,其中項目309中之位址等於測試中元件315中之位址)。
OR閘313(或同等物)對衝突檢查之結果進行邏輯OR運算。當OR運算之結果為1時,則錯誤推測可能已發生且OR閘313以其輸出指示該情況。
此實施例之總儲存為M*N項目。這表示其可追蹤高達M*N個推測性存取的資料元件。然而,實行時,迴路極可能對該N組之某些具有較多的存取,相較於對該N組之其他者。假如任何組中的空間用完了,則(於某些實施例中)錯誤推測被觸發以確保正確性。增加M減輕了此問題,但是可能迫使衝突檢查硬體之更多副本存在。為了同時地履行所有M衝突檢查(如同於某些實施例中所進行者),有M個衝突檢查邏輯之副本。
以某種方式選擇B、N、M及雜湊函數容許該結構被組織以如同L1資料快取之極類似方式。特別地,令B為快取線尺寸、N為L1資料快取中之組數、M為L1資料快取之相關性,以及令雜湊函數為位址之最低有效位元(在 右移位後)。此結構將具有如L1資料快取之相同數目的項目及組織,此可簡化其實施方式。
最後,注意:替代實施例係使用分離的光暈過濾器於讀取及寫入,以避免必須儲存存取類型資訊,及避免必須於衝突檢查期間檢查存取類型。取代地,針對讀取,實施例僅對「寫入」過濾器履行衝突檢查,而假如沒有錯誤推測,則將該元件插入「讀取」過濾器。類似地,針對寫入,實施例對「讀取」及「寫入」過濾器兩者履行衝突檢查,而假如沒有錯誤推測,則將該元件插入「寫入」過濾器。
圖4闡明由DSX追蹤硬體所履行之DSX錯誤推測檢測的範例方法。於401,DSX被起始或者先前推測疊代被確認。例如,YBEGIN指令被執行。此指令之執行清除項目309中之有效位元且設定推測現用旗標(假如尚未設定)於狀態暫存器中(諸如先前詳述的DSX狀態暫存器)。推測記憶體指令被執行在DSX開始後,並提供測試中之資料元件。
於403,來自推測記憶體指令的測試中之資料元件被劃分為不大於B位元組的塊。雜湊表被存取以B位元組之粒度(意即,位址之低位元被拋棄)。假如元件夠大及/或未被對準,則其可能跨越B位元組邊界,而假如如此的話,則元件被劃分為數個塊。
透過塊,以下(405-421)被履行。塊之開始位址被右移位以log2B。已移位的位址被雜湊於407以產生指標 值。
使用該指標值,雜湊表之相應組的查找被執行於409,而該組之所有項目被讀出於411。
對於各讀出的項目,針對測試中元件之衝突檢查(諸如以上所述者)被履行於413。所有衝突檢查之OR運算被履行於415。假如任何檢查指示一衝突於417(以致該OR為1),則錯誤推測之指示被執行於419。DSX通常於此刻被異常中止。假如沒有錯誤推測,則於421,找出該組中之一無效項目並以測試中元件之資訊填入且標示為有效。假如沒有無效項目存在,則錯誤推測被觸發。
圖5(A)-(B)闡明由DSX追蹤硬體所履行之DSX錯誤推測檢測的範例方法。於501,DSX被起始或者先前推測疊代被確認。例如,YBEGIN指令被執行。
此指令之執行係藉由以下方式重設追蹤硬體:清除項目309中之有效位元且設定推測現用旗標(假如尚未設定)於狀態暫存器中(諸如先前詳述的DSX狀態暫存器)於503。
於505,推測記憶體指令被執行。這些指令之範例被詳述於上。一計數器(其為來自推測指令之測試中的元件號(e))被設為0於507,而id被計算(id=序號+跨步*e)於509。
是否有任何先前寫入與該計數器值e重疊之判定被執行於511。此係作用為針對先前儲存(寫入)之依存性檢查。對於任何重疊的寫入,衝突檢查被履行於513。於某 些實施例中,此衝突檢查係為了判斷是否:i)項目309中之序號小於測試中元件315之序號、且項目309中之id號大於測試中元件315之id號,或ii)項目309中之序號大於測試中元件315之序號、且項目309中之id號小於測試中元件315之id號。
假如有衝突,則錯誤推測被觸發於515。假如為否,或假如沒有重疊的先前寫入,則該推測記憶體指令是否為寫入之判定被執行於517。
假如為是,則任何先前讀取與該計數器值e重疊之判定被執行於519。此係作用為針對先前載入(讀取)之依存性檢查。對於任何重疊的讀取,衝突檢查被履行於521。於某些實施例中,此衝突檢查係為了判斷是否:i)項目309中之序號小於測試中元件315之序號、且項目309中之id號大於測試中元件315之id號,或ii)項目309中之序號大於測試中元件315之序號、且項目309中之id號小於測試中元件315之id號。
假如有衝突,則錯誤推測被觸發於523。假如為否,或假如沒有重疊的先前讀取,則該計數器e被遞增於525。
計數器e是否等於推測記憶體指令中之元件數目的判定被執行於526。換言之,是否所有元件已被評估?假如為否,則另一id被計算於509。假如為是,則硬體等待另一欲執行之指令於527。當下一指令為另一推測記憶體指令時,則計數器被重設於507。當下一指令為YBEGIN 時,則硬體被重設等等於503。當下一指令為YEND時,則DSX被除能於529。
YBEGIN指令
圖6闡明用於開始DSX之指令的執行之實施例。如文中所將詳述,此指令被稱為「YBEGIN」且被用以通知DSX區之開始。當然,該指令可被稱為其他名稱。於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單元(GPU)、加速處理單元(APU)、數位信號處理器(DSP),等等。於其他實施例中,該指令之執行為仿真。
於601,YBEGIN指令被接收/提取。例如,該指令從記憶體被提取入指令快取或者被提取自指令快取。該提取的指令可具有如下所述的數個形式之一。
圖7闡明YBEGIN指令格式之某些範例實施例。於一實施例中,YBEGIN指令包括運算碼(YBEGIN)及單一運算元,用以提供置換給後降位址,其為程式執行所應去以處置錯誤推測之處,如701中所示。在本質上,置換值為後降位址之一部分。於某些實施例中,此置換值被提供為即刻運算元。於其他實施例中,此置換值被儲存於暫存器或記憶體位置運算元中。根據YBEGIN實施方式,DSX狀態暫存器、巢套(nesting)計數暫存器、及/或RTM狀態暫存器之隱含運算元被使用。如先前所述,DSX狀態暫 存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器),等等。
於另一實施例中,YBEGIN指令不僅包括運算碼及置換運算元,而同時包括DSX狀態(諸如DSX狀態暫存器)之明確運算元,如703中所示。根據YBEGIN實施方式,巢套計數暫存器、及/或RTM狀態暫存器之隱含運算元被使用。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器),等等。
於另一實施例中,YBEGIN指令不僅包括運算碼及置換運算元,而同時包括DSX巢套計數(諸如DSX巢套計數暫存器)之明確運算元,如705中所示。如先前所述,DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器)。根據YBEGIN實施方式,DSX狀態暫存器、及/或RTM狀態暫存器之隱含運算元被使用。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器),等等。
於另一實施例中,YBEGIN指令不僅包括運算碼及置換運算元,而同時包括DSX狀態(諸如DSX狀態暫存器)及DSX巢套計數(諸如DSX巢套計數暫存器)之明確運算元,如707中所示。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等),而DSX 巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器)。根據YBEGIN實施方式,RTM狀態暫存器之隱含運算元被使用。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器),等等。
於另一實施例中,YBEGIN指令不僅包括運算碼及置換運算元,而同時包括DSX狀態(諸如DSX狀態暫存器)、DSX巢套計數(諸如DSX巢套計數暫存器)、及RTM狀態之明確運算元,如709中所示。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等),而DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器)。
當然,YBEGIN之其他變異是可能的。例如,取代提供置換值,該指令包括後降位址本身於即刻、暫存器、或記憶體位置中。
回到圖6,已提取/已接收YBEGIN指令被解碼於603。於某些實施例中,該指令係由硬體解碼器(諸如那些稍後詳述者)所解碼。於某些實施例中,該指令被解碼為微操作(micro-ops)。例如,一些CISC為基的機器通常係使用其被衍生自巨集指令之微操作。於其他實施例中,解碼為軟體常式之一部分,諸如及時編譯。
於605,與已解碼指令相關的任何運算元被擷取。例 如,來自DSX暫存器、DSX巢套計數暫存器、及/或RTM狀態暫存器之資料被擷取。
已解碼YBEGIN指令被執行於607。於其中指令被解碼成為微操作之實施例中,這些微操作被執行。已解碼指令之執行致使硬體執行以下待履行動作之一或更多者:1)判定其RTM異動為現用並持續該異動;2)使用加至YBEGIN指令之指令指針的置換值以計算後降位址;3)遞增DSX巢套計數;4)異常中止;5)設定DSX狀態為現用;及/或6)重設DSX追蹤硬體。
通常,針對YBEGIN指令之一例子,假如沒有現用RTM異動,則DSX狀態被設為現用;DSX巢套計數被遞增(假如該計數小於最大值);DSX追蹤硬體被重設(例如,如上所述);及後降位址係使用置換值來計算以開始DSX區。如先前所述,DSX之狀態通常被儲存於可存取位置,諸如暫存器,諸如以上針對圖1所討論的DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。DSX追蹤硬體之重設亦被描述如前。如先前所述,DSX之狀態通常被儲存於可存取位置,諸如暫存器,諸如以上針對圖1所討論的DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。此暫存器可由核心之硬體檢查以判定DSX是否確實發生。
假如有某原因其DSX無法開始,則其他潛在動作之一或更多者發生。例如,於其支援RTM之處理器的某些實施例中,假如RTM異動為現用則首先應已有一DSX現用且RTM被追求。假如首先DSX之設定有錯誤(巢套計數不正確),則異常中止將發生。此外,於某些實施例中,假如沒有DSX則故障被產生且無操作(NOP)被履行。無論履行哪個動作,在該動作後之大部分實施例中,DSX狀態被重設(假如其被設定)以指示沒有未決的DSX。
圖8闡明諸如YBEGIN指令之指令的執行之詳細實施例。例如,於某些實施例,此流程為圖6之方塊607。於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單元(GPU)、加速處理單元(APU)、數位信號處理器(DSP),等等。於其他實施例中,該指令之執行為仿真。
於某些實施例中,例如,於一支援RTM異動之處理器中,RTM異動是否發生之判定被執行於801。例如,於其支援RTM之處理器的某些實施例中,假如RTM異動為現用則首先不應已有一DSX現用。於此例中,RTM異動有某錯誤而其結束程序應被啟動。通常,RTM異動狀態被儲存於諸如RTM控制及狀態暫存器之暫存器中。處理器之硬體評估此暫存器之內容以判定是否有RTM異動發生。當有RTM異動發生時,則RTM異動持續處理於 803。
當沒有RTM異動發生、或者RTM不被支援時,則目前DSX巢套計數是否小於最大巢套計數之判定被執行於805。於某些實施例中,用以儲存目前巢套計數之巢套計數暫存器係由YBEGIN指令所提供為運算元。替代地,專屬巢套計數暫存器可存在於硬體中以被用來儲存目前巢套計數。最大巢套計數為其可發生而無相應DSX結束(例如,經由YEND指令)之DSX開始(例如,經由YGEGIN指令)的最大數目。
當目前DSX巢套計數大於該最大值時,則異常中止發生於807。於某些實施例中,異常中止觸發其使用諸如DSX復原電路135之復原電路的轉返。於其他實施例中,YABORT指令被執行如下所述,其不僅履行針對後降位址之轉返,同時亦推測地拋棄已儲存的寫入並重設目前巢套計數且設定DSX狀態為不活動。如上所述,DSX狀態通常被儲存於控制暫存器,諸如圖1中所示之DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。
當目前巢套計數不大於該最大值時,則目前DSX巢套計數被遞增於809。
目前DSX巢套計數是否等於一之判定被執行於811。當為是時,於某些實施例中,後降位址係藉由將其由YBEGIN指令所提供的置換值加至接續於該YBEGIN指令 之指令的位址而被計算,於813。於其中YBEGIN指令提供後降位址之實施例中,則此計算是不需要的。
於815,DSX狀態被設為現用(假如需要的話)且DSX追蹤硬體被重設(例如,如以上所述)。例如,如先前所述,DSX之狀態通常被儲存於可存取位置,諸如暫存器,諸如以上針對圖1所討論的DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。此暫存器可由核心之硬體檢查以判定DSX是否確實發生。
圖9闡明其顯示諸如YBEGIN指令之指令的執行之虛擬碼的範例。
YBEGIN WITH STRIDE指令
圖10闡明用於開始DSX之指令的執行之實施例。如文中所將詳述,此指令被稱為「YBEGIN WITH STRIDE」且被用以通知DSX區之開始。當然,該指令可被稱為其他名稱。於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單元(GPU)、加速處理單元(APU)、數位信號處理器(DSP),等等。於其他實施例中,該指令之執行為仿真。
於1001,YBEGIN WITH STRIDE指令被接收/提取。例如,該指令從記憶體被提取入指令快取或者被提取自指 令快取。該提取的指令可具有如下所述的數個形式之一。
圖11闡明YBEGIN WITH STRIDE指令格式之某些範例實施例。於一實施例中,YBEGIN WITH STRIDE指令包括運算碼(YBEGIN WITH STRIDE)及一運算元,用以提供置換給後降位址,其為程式執行所應去以處置錯誤推測之處、及跨步值運算元,如1101中所示。在本質上,置換為後降位址之一部分。於某些實施例中,置換被提供為即刻運算元。於其他實施例中,置換值被儲存於暫存器或記憶體位置運算元中。於某些實施例中,跨步被提供為即刻運算元。於其他實施例中,跨步被儲存於暫存器或記憶體位置運算元中。根據YBEGIN WITH STRIDE實施方式,DSX狀態暫存器、巢套計數暫存器、及/或RTM狀態暫存器之隱含運算元被使用。
於另一實施例中,YBEGIN WITH STRIDE指令不僅包括運算碼及置換運算元,而同時包括DSX狀態(諸如DSX狀態暫存器)之明確運算元,如1103中所示。於某些實施例中,置換被提供為即刻運算元。於其他實施例中,置換值被儲存於暫存器或記憶體位置運算元中。於某些實施例中,跨步被提供為即刻運算元。於其他實施例中,跨步被儲存於暫存器或記憶體位置運算元中。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等)。根據YBEGIN WITH STRIDE實施方式,巢套計數暫存器及/或RTM狀態暫存器之隱含運算元被使 用。
於另一實施例中,YBEGIN WITH STRIDE指令不僅包括運算碼、置換運算元及跨步值運算元,而同時包括DSX巢套計數(諸如DSX巢套計數暫存器)之明確運算元,如1105中所示。於某些實施例中,置換被提供為即刻運算元。於其他實施例中,置換值被儲存於暫存器或記憶體位置運算元中。於某些實施例中,跨步被提供為即刻運算元。於其他實施例中,跨步被儲存於暫存器或記憶體位置運算元中。如先前所述,DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器)。根據YBEGIN WITH STRIDE實施方式,DSX狀態暫存器及/或RTM狀態暫存器之隱含運算元被使用。
於另一實施例中,YBEGIN WITH STRIDE指令不僅包括運算碼、置換運算元及跨步值運算元,而同時包括DSX狀態(諸如DSX狀態暫存器)及DSX巢套計數(諸如DSX巢套計數暫存器)之明確運算元,如1107中所示。於某些實施例中,置換被提供為即刻運算元。於其他實施例中,置換值被儲存於暫存器或記憶體位置運算元中。於某些實施例中,跨步被提供為即刻運算元。於其他實施例中,跨步被儲存於暫存器或記憶體位置運算元中。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等),而DSX巢套計數可為專屬暫存器、 暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器)。根據YBEGIN WITH STRIDE實施方式,RTM狀態暫存器之隱含運算元被使用。
於另一實施例中,YBEGIN WITH STRIDE指令不僅包括運算碼、置換運算元及跨步值運算元,而同時包括DSX狀態(諸如DSX狀態暫存器)、DSX巢套計數(諸如DSX巢套計數暫存器)、及RTM狀態暫存器之明確運算元,如409中所示。於某些實施例中,置換被提供為即刻運算元。於其他實施例中,置換值被儲存於暫存器或記憶體位置運算元中。於某些實施例中,跨步被提供為即刻運算元。於其他實施例中,跨步被儲存於暫存器或記憶體位置運算元中。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等),而DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器)。
當然,YBEGIN WITH STRIDE之其他變異是可能的。例如,取代提供置換值,該指令包括後降位址本身於即刻、暫存器、或記憶體位置中。
回到圖10,已提取/已接收YBEGIN WITH STRIDE指令被解碼於1003。於某些實施例中,該指令係由硬體解碼器(諸如那些稍後詳述者)所解碼。於某些實施例中,該指令被解碼為微操作(micro-ops)。例如,一些CISC為基的機器通常係使用其被衍生自巨集指令之微操作。於 其他實施例中,解碼為軟體常式之一部分,諸如及時編譯。
於1005,與已解碼YBEGIN WITH STRIDE指令相關的任何運算元被擷取。例如,來自DSX暫存器、DSX巢套計數暫存器、及/或RTM狀態暫存器之資料被擷取。
已解碼YBEGIN WITH STRIDE指令被執行於1007。於其中指令被解碼成為微操作之實施例中,這些微操作被執行。已解碼指令之執行致使硬體執行以下待履行動作之一或更多者:1)判定其RTM異動為現用並開始該異動;2)使用加至YBEGIN WITH STRIDE指令之指令指針的置換值以計算後降位址;3)遞增DSX巢套計數;4)異常中止;5)設定DSX狀態為現用;6)重設DSX追蹤硬體;及/或7)提供跨步值至DSX硬體追蹤器。
通常,針對YBEGIN WITH STRIDE指令之一例子,假如沒有現用RTM異動,則DSX狀態被設為現用;DSX追蹤硬體被重設(例如,如上所述使用提供的跨步值);及後降位址係使用置換值來計算以開始DSX區。如先前所述,DSX之狀態通常被儲存於可存取位置,諸如暫存器,諸如以上針對圖1所討論的DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。DSX追蹤硬體之重設亦被描述如前。
通常,針對YBEGIN WITH STRIDE指令之一例子,假如沒有現用RTM異動,則DSX狀態被設為現用;DSX 巢套計數被遞增(假如該計數小於最大值);DSX追蹤硬體被重設(例如,如上所述使用提供的跨步);及後降位址係使用置換值來計算以開始DSX區。如先前所述,DSX之狀態通常被儲存於可存取位置,諸如暫存器,諸如以上針對圖1所討論的DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。DSX追蹤硬體之重設亦被描述如前。如先前所述,DSX之狀態通常被儲存於可存取位置,諸如暫存器,諸如以上針對圖1所討論的DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。此暫存器可由核心之硬體檢查以判定DSX是否確實發生。
假如有某原因其DSX無法開始,則其他潛在動作之一或更多者發生。例如,於其支援RTM之處理器的某些實施例中,假如RTM異動為現用則首先應已有一DSX現用且RTM被追求。假如首先DSX之設定有錯誤(巢套計數不正確),則異常中止將發生。此外,於某些實施例中,假如沒有DSX則故障被產生且無操作(NOP)被履行。無論履行哪個動作,在該動作後之大部分實施例中,DSX狀態被重設(假如其被設定)以指示沒有未決的DSX。
圖12闡明諸如YBEGIN WITH STRIDE指令之指令的執行之詳細實施例。例如,於某些實施例,此流程為圖 10之方塊1007。於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單元(GPU)、加速處理單元(APU)、數位信號處理器(DSP),等等。於其他實施例中,該指令之執行為仿真。
於某些實施例中,例如,於一支援RTM異動之處理器中,RTM異動是否發生之判定被執行於1201。例如,於其支援RTM之處理器的某些實施例中,假如RTM異動為現用則首先不應已有一DSX現用。於此例中,RTM異動有某錯誤而其結束程序應被啟動。通常,RTM異動狀態被儲存於諸如RTM控制及狀態暫存器之暫存器中。處理器之硬體評估此暫存器之內容以判定是否有RTM異動發生。當有RTM異動發生時,則RTM異動持續處理於1203。
當沒有RTM異動發生、或者RTM不被支援時,則目前DSX巢套計數是否小於最大巢套計數之判定被執行於1205。於某些實施例中,用以儲存目前巢套計數之巢套計數暫存器係由YBEGIN WITH STRIDE指令所提供為運算元。替代地,專屬巢套計數暫存器可存在於硬體中以被用來儲存目前巢套計數。最大巢套計數為其可發生而無相應DSX結束(例如,經由YEND指令)之DSX開始(例如,經由YGEGIN指令)的最大數目。
當目前巢套計數大於該最大值時,則異常中止發生於1207。於某些實施例中,異常中止觸發轉返。於其他實施 例中,YABORT指令被履行如下所述,其不僅履行針對後降位址之轉返,同時亦推測地拋棄已儲存的寫入並重設目前巢套計數且設定DSX狀態為不活動。如上所述,DSX狀態通常被儲存於控制暫存器,諸如圖1中所示之DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。
當目前巢套計數不大於該最大值時,則目前DSX巢套計數被遞增於1209。
目前DSX巢套計數是否等於一之判定被執行於1211。當為是時,於某些實施例中,後降位址係藉由將其由YBEGIN WITH STRIDE指令所提供的置換值加至接續於該YBEGIN WITH STRIDE指令之指令的位址而被計算,於1213。於其中YBEGIN WITH STRIDE指令提供後降位址之實施例中,則此計算是不需要的。
於1215,DSX狀態被設為現用(假如需要的話)且DSX追蹤硬體被重設(例如,如以上所述包括使用已提供的跨步值)。例如,如先前所述,DSX之狀態通常被儲存於可存取位置,諸如暫存器,諸如以上針對圖1所討論的DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。此暫存器可由核心之硬體檢查以判定DSX是否確實發生。
YCONTINUE指令
隨著DSX來到結束(例如,迴路之疊代已運行其路徑)而無任何問題,則於某些實施例中,一指令(YEND)被執行以指示推測區之結束,如以下所述。簡言之,此指令之執行致使目前推測狀態之確認(尚未被寫入之所有寫入)及從目前推測區離開,如以下將討論者。迴路之另一疊代可接著藉由呼叫另一YBEGIN而被起始。
然而,於某些實施例中,對於YBEGIN、YEND、YBEGIN等等之此循環的最佳化是透過使用持續指令來確認目前迴路疊代而可得的,當推測不再需要時(例如,當沒有衝突於儲存之間時)。持續指令亦起始新的推測迴路疊代而無須呼叫YBEGIN。
圖13闡明用於持續DSX而不結束它之指令的執行之實施例。如文中所將詳述,此指令被稱為「YCONTINUE」且被用以通知異動之結束。當然,該指令可被稱為其他名稱。
於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單元(GPU)、加速處理單元(APU)、數位信號處理器(DSP),等等。於其他實施例中,該指令之執行為仿真。
於1301,YCONTINUE指令被接收/提取。例如,該指令從記憶體被提取入指令快取或者被提取自指令快取。該提取的指令可具有數個形式之一。
圖14闡明YCONTINUE指令格式之某些範例實施例。於一實施例中,YCONTINUE指令包括運算碼(YCONTINUE),但是無明確的運算元,如1401中所示。根據YCONTINUE實施方式,DSX狀態暫存器及巢套計數暫存器之隱含運算元被使用。如先前所述,DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器),等等。此外,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器),等等。
於另一實施例中,YCONTINUE指令不僅包括運算碼,而同時包括DSX狀態(諸如DSX狀態暫存器)之明確運算元,如1403中所示。根據YCONTINUE實施方式,巢套計數暫存器之隱含運算元被使用。如先前所述,DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器),等等。此外,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器),等等。
於另一實施例中,YCONTINUE指令不僅包括運算碼,而同時包括DSX巢套計數(諸如DSX巢套計數暫存器)之明確運算元,如1405中所示。根據YCONTINUE實施方式,DSX狀態暫存器之隱含運算元被使用。如先前所述,DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器),等等。此 外,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器),等等。
於另一實施例中,YCONTINUE指令不僅包括運算碼,而同時包括DSX狀態(諸如DSX狀態暫存器)及DSX巢套計數(諸如DSX巢套計數暫存器)之明確運算元,如1407中所示。如先前所述,DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器),等等。此外,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器),等等。
回到圖13,已提取/已接收YCONTINUE指令被解碼於1303。於某些實施例中,該指令係由硬體解碼器(諸如那些稍後詳述者)所解碼。於某些實施例中,該指令被解碼為微操作(micro-ops)。例如,一些CISC為基的機器通常係使用其被衍生自巨集指令之微操作。於其他實施例中,解碼為軟體常式之一部分,諸如及時編譯。
於1305,與已解碼YCONTINUE指令相關的任何運算元被擷取。例如,來自DSX暫存器及DSX巢套計數暫存器之一或更多者的資料被擷取。
已解碼YCONTINUE指令被執行於1307。於其中指令被解碼成為微操作之實施例中,這些微操作被執行。已解碼指令之執行致使硬體執行以下待履行動作之一或更多者:1)判定其執行與DSX相關的推測寫入將被確認(隨 著推測不再需要)並確認之,且開始新的推測迴路疊代(諸如新的DSX區);及/或2)無操作。
這些動作之第一個(使推測寫入為最後並開始新的推測迴路疊代)可由先前所述的DSX檢查硬體來履行。於此動作中,與DSX之迴路疊代相關的所有推測寫入被確認(儲存以致其可於DSX之外部存取),但不同於YEND,DSX狀態未被設定以指示其DSX不存在。例如,與DSX相關的所有寫入(諸如儲存於快取、暫存器、或記憶體中)被確認以致其被最終化且可見於DSX之外。通常,DSX確認將不會發生,除非DSX巢套計數為一。除此之外,於某些實施例中,則nop被履行。
假如DSX非現用,則nop可被履行於某些實施例中。
圖15闡明諸如YCONTINUE指令之指令的執行之詳細實施例。例如,於某些實施例,此流程為圖13之方塊1307。於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單元(GPU)、加速處理單元(APU)、數位信號處理器(DSP),等等。於其他實施例中,該指令之執行為仿真。
DSX是否為現用之判定被執行於1501。如上所述,DSX狀態通常被儲存於控制暫存器,諸如圖1中所示之DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存 器)中之DSX狀態旗標。無論該狀態被儲存於何處,其位置係由處理器之硬體檢查以判定DSX是否確實發生。
當沒有DSX發生時,則無操作(no op)被履行於1503。
當有DSX發生時,則DSX巢套計數是否等於一之判定被執行於1505。如上所述,DSX巢套計數通常被儲存於巢套計數暫存器中。當DSX巢套計數非為一時,則nop被履行於507。當DSX巢套計數為一時,則確認及DSX重新開始被執行於1509。當確認及DSX重新開始發生時,則於某些實施例中,以下之一或更多者發生:1)DSX追蹤硬體被重設(例如,如上所述者);2)後降位址被計算;及3)先前推測區之推測地執行的指令(寫入)被執行。
圖16闡明其顯示諸如YCONTINUE指令之指令的執行之虛擬碼的範例。
YBORT指令
有時候於其需要DSX異常中止之DSX內有問題(諸如錯誤推測)。圖17闡明用於異常中止DSX之指令的執行之實施例。如文中將詳述,此指令被稱為「YABORT」。當然,該指令可被稱為其他名稱。於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單元(GPU)、加速處理單元(APU)、數位信號處理器 (DSP),等等。於其他實施例中,該指令之執行為仿真。
於1701,YABORT指令被接收/提取。例如,該指令從記憶體被提取入指令快取或者被提取自指令快取。該提取的指令可具有如下所述的數個形式之一。
圖18闡明YABORT指令格式之某些範例實施例。於一實施例中,YABORT指令僅包括運算碼(YABORT),如1801中所示。根據YABORT實施方式,DSX狀態暫存器及/或RTM狀態暫存器之隱含運算元被使用。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器),等等。
於另一實施例中,YABORT指令不僅包括運算碼,而同時包括DSX狀態暫存器(諸如DSX狀態暫存器)之明確運算元,如1803中所示。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器),等等。根據YABORT實施方式,RTM狀態暫存器之隱含運算元被使用。
於另一實施例中,YABORT指令不僅包括運算碼,而同時包括DSX狀態暫存器(諸如DSX狀態暫存器)及RTM狀態暫存器之明確運算元,如1805中所示。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存 器),等等。
回到圖17,已提取/已接收YABORT指令被解碼於1703。於某些實施例中,該指令係由硬體解碼器(諸如那些稍後詳述者)所解碼。於某些實施例中,該指令被解碼為微操作(micro-ops)。例如,一些CISC為基的機器通常係使用其被衍生自巨集指令之微操作。於其他實施例中,解碼為軟體常式之一部分,諸如及時編譯。
於1705,與已解碼YABORT指令相關的任何運算元被擷取。例如,來自DSX暫存器及/或RTM狀態暫存器之一或更多者的資料被擷取。
已解碼YABORT指令被執行於1707。於其中指令被解碼成為微操作之實施例中,這些微操作被執行。已解碼指令之執行致使硬體執行以下待履行動作之一或更多者:1)判定其RTM異動為現用並異常中止RTM異動;2)判定其DSX非現用並履行無操作;及/或3)藉由以下方式來異常中止該DSX:重設任何DSX巢套計數、拋棄所有推測地執行的寫入、設定該DSX狀態為不活動、及轉返執行至後降位址。
有關第一動作,RTM狀態通常被儲存於RTM控制及狀態暫存器中。當此暫存器指示其RTM異動發生時,則YABORT指令不應已被執行。如此一來,會有RTM異動之問題且其應異常中止。
有關第二及第三動作,如先前所述,DSX之狀態通常被儲存於可存取位置,諸如暫存器,諸如以上針對圖1所 討論的DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。此暫存器可由核心之硬體檢查以判定DSX是否確實發生。當沒有由此暫存器所指示之DSX時,則將沒有理由執行YABORT指令,而如此一來無操作(或類似操作)被履行。當有由此暫存器所指示之DSX時,則DSX異常中止處理發生,包括:重設DSX追蹤硬體、拋棄所有已儲存之推測地執行的寫入、重設該DSX狀態為不活動、及轉返執行。
圖19闡明諸如YABORT指令之指令的執行之詳細實施例。例如,於某些實施例,此流程為圖17之方塊1707。於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單元(GPU)、加速處理單元(APU)、數位信號處理器(DSP),等等。於其他實施例中,該指令之執行為仿真。
於某些實施例中,例如,於一支援RTM異動之處理器中,RTM異動是否發生之判定被執行於1901。例如,於其支援RTM之處理器的某些實施例中,假如RTM異動為現用則首先不應已有一DSX現用。於此例中,RTM異動有某錯誤而其結束程序應被啟動。通常,RTM異動狀態被儲存於諸如RTM控制及狀態暫存器之暫存器中。處理器之硬體評估此暫存器之內容以判定是否有RTM異動發生。當有RTM異動發生時,則RTM異動持續處理於 1903。
當沒有RTM異動發生、或者RTM不被支援時,則DSX是否為現用之判定被執行於1905。DSX之狀態通常被儲存於可存取位置,諸如以上針對圖1所討論的DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。此暫存器可由核心之硬體檢查以判定DSX是否發生。
當沒有由此暫存器所指示之DSX時,則無操作被履行於1907。當有由此暫存器所指示之DSX時,則DSX異常中止處理發生於1909,包括:重設DSX追蹤硬體、拋棄所有已儲存之推測地執行的寫入、重設該DSX狀態為不活動、及轉返執行。
圖20闡明其顯示諸如YABORT指令之指令的執行之虛擬碼的範例。
YTEST指令
一般而言,希望軟體得知DSX是否為現用,在開始新的DSX推測區之前。圖21闡明用於測試DSX之狀態之指令的執行之實施例。如文中所將詳述,此指令被稱為「YTEST」且被用以透過旗標之使用來提供DSX現用之指示。當然,該指令可被稱為其他名稱。
於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單 元(GPU)、加速處理單元(APU)、數位信號處理器(DSP),等等。於其他實施例中,該指令之執行為仿真。
於2101,YTEST指令被接收/提取。例如,該指令從記憶體被提取入指令快取或者被提取自指令快取。該提取的指令可具有數個形式之一。圖22闡明YTEST指令格式之某些範例實施例。於一實施例中,YTEST指令包括運算碼(YTEST),但是無明確的運算元,如2201中所示。DSX狀態暫存器及旗標暫存器之隱含運算元被使用。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等)。範例旗標暫存器包括EFLAGS暫存器。特別地,旗標暫存器係用以儲存零旗標(ZF)。
於另一實施例中,YTEST指令不僅包括運算碼,而同時包括DSX狀態(諸如DSX狀態暫存器)之明確運算元,如2203中所示。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等)。旗標暫存器之隱含運算元被使用。範例旗標暫存器包括EFLAGS暫存器。特別地,旗標暫存器係用以儲存零旗標(ZF)。
於另一實施例中,YTEST指令不僅包括運算碼,而同時包括旗標暫存器之明確運算元,如2205中所示。範例旗標暫存器包括EFLAGS暫存器。特別地,旗標暫存器係用以儲存零旗標(ZF)。DSX狀態暫存器之隱含運算 元被使用。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等)。
於另一實施例中,YTEST指令不僅包括運算碼,而同時包括DSX狀態(諸如DSX狀態暫存器)及旗標暫存器之明確運算元,如2207中所示。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等)。旗標暫存器之隱含運算元被使用。範例旗標暫存器包括EFLAGS暫存器。特別地,旗標暫存器係用以儲存零旗標(ZF)。
回到圖21,已提取/已接收YTEST指令被解碼於2103。於某些實施例中,該指令係由硬體解碼器(諸如那些稍後詳述者)所解碼。於某些實施例中,該指令被解碼為微操作(micro-ops)。例如,一些CISC為基的機器通常係使用其被衍生自巨集指令之微操作。於其他實施例中,解碼為軟體常式之一部分,諸如及時編譯。
於2105,與已解碼YTEST指令相關的任何運算元被擷取。例如,來自DSX狀態暫存器之資料被擷取。
已解碼YTEST指令被執行於2107。於其中指令被解碼成為微操作之實施例中,這些微操作被執行。已解碼指令之執行致使硬體執行以下待履行動作之一或更多者:1)判定其DSX狀態暫存器指示一DSX為現用,而假如是的話則設定旗標暫存器中之零旗標為0;或者2)判定 其DSX狀態暫存器指示一DSX非為現用,而假如是的話則設定旗標暫存器中之零旗標為1。當然,雖然零旗標被用以顯示DSX現用狀態,但其他旗標係根據實施例而被使用。
圖23闡明其顯示諸如YTEST指令之指令的執行之虛擬碼的範例。
YEND指令
隨著DSX來到結束(例如,迴路之疊代已運行其路徑)而無任何問題,則於某些實施例中,一指令被執行以指示推測區之結束。簡言之,此指令之執行致使目前推測狀態之確認(尚未被寫入之所有寫入)及從目前推測區離開。
圖24闡明用於結束DSX之指令的執行之實施例。如文中所將詳述,此指令被稱為「YEND」且被用以通知DSX之結束。當然,該指令可被稱為其他名稱。
於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單元(GPU)、加速處理單元(APU)、數位信號處理器(DSP),等等。於其他實施例中,該指令之執行為仿真。
於2401,YEND指令被接收/提取。例如,該指令從記憶體被提取入指令快取或者被提取自指令快取。該提取的指令可具有數個形式之一。圖25闡明YEND指令格式 之某些範例實施例。於一實施例中,YEND指令包括運算碼(YEND),但是無明確的運算元,如2501中所示。根據YEND實施方式,DSX狀態、巢套計數、及/或RTM狀態之隱含暫存器運算元被使用。
於另一實施例中,YEND指令不僅包括運算碼,而同時包括DSX狀態(諸如DSX狀態暫存器)之明確運算元,如2503中所示。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等)。根據YEND實施方式,巢套計數及/或RTM狀態之隱含暫存器運算元被使用。
於另一實施例中,YEND指令不僅包括運算碼,而同時包括DSX巢套計數(諸如DSX巢套計數暫存器)之明確運算元,如2505中所示。如先前所述,DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器)。根據YEND實施方式,DSX狀態及/或RTM狀態之隱含暫存器運算元被使用。
於另一實施例中,YEND指令不僅包括運算碼,而同時包括DSX狀態(諸如DSX狀態暫存器)及DSX巢套計數(諸如DSX巢套計數暫存器)之明確運算元,如2507中所示。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等),而DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如 總狀態暫存器)。根據YEND實施方式,RTM狀態暫存器之隱含運算元被使用。
於另一實施例中,YEND指令不僅包括運算碼,而同時包括DSX狀態(諸如DSX狀態暫存器)、DSX巢套計數(諸如DSX巢套計數暫存器)、及RTM狀態之明確運算元,如2509中所示。如先前所述,DSX狀態暫存器可為專屬暫存器、暫存器中之旗標非專屬於DSX狀態(諸如類似旗標暫存器之總狀態暫存器,等等),而DSX巢套計數可為專屬暫存器、暫存器中之旗標非專屬於DSX巢套計數(諸如總狀態暫存器)。
回到圖24,已提取/已接收YEND指令被解碼於2403。於某些實施例中,該指令係由硬體解碼器(諸如那些稍後詳述者)所解碼。於某些實施例中,該指令被解碼為微操作(micro-ops)。例如,一些CISC為基的機器通常係使用其被衍生自巨集指令之微操作。於其他實施例中,解碼為軟體常式之一部分,諸如及時編譯。
於2405,與已解碼YEND指令相關的任何運算元被擷取。例如,來自DSX暫存器、DSX巢套計數暫存器、及/或RTM狀態暫存器之資料被擷取。
已解碼YEND指令被執行於2407。於其中指令被解碼成為微操作之實施例中,這些微操作被執行。已解碼指令之執行致使硬體執行以下待履行動作之一或更多者:1)使其與DSX相關的推測寫入為最終(確認之);2)通知故障(諸如一般保護故障)並履行無操作;3)異常 中止該DSX;及/或4)結束RTM異動。
這些動作之第一個(使推測寫入為最終)致使與該DSX相關的所有推測寫入被確認(被儲存以致其可被存取於該DSX之外部)且該DSX狀態被設定以指示其DSX不存在於DSX狀態暫存器中。例如,與DSX相關的所有寫入(諸如儲存於快取、暫存器、或記憶體中)被確認以致其被最終化且可見於DSX之外。通常,DSX無法被最終化,除非該推測之巢套計數為零。假如巢套計數大於零,則於某些實施例中,NOP被履行。
假如有某原因其DSX無法被最終化,則其他三個潛在動作之一或更多者發生。例如,於其支援RTM之處理器的某些實施例中,假如RTM異動為現用則首先不應已有一DSX現用。於此例中,RTM異動有某錯誤而其結束程序應被啟動,如由以上之第四動作所指示。
於某些實施例中,假如沒有DSX則故障被產生且無操作(NOP)被履行。例如,如先前所述,DSX之狀態通常被儲存於可存取位置,諸如暫存器,諸如以上針對圖1所討論的DSX狀態及控制暫存器(DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。此暫存器可由核心之硬體檢查以判定DSX是否確實發生。
於某些實施例中,假如於異動之確認時有失敗,則異常中止程序被實施。例如,於其支援RTM之處理器的某些實施例,RTM異常中止程序被啟動。
無論履行哪個動作,於大部分實施例中,在該動作之後,DSX狀態被重設(假如其被設定)以指示沒有未決的DSX。
圖26闡明諸如YEND指令之指令的執行之詳細實施例。例如,於某些實施例,此流程為圖24之方塊2407。於某些實施例中,此執行被履行於硬體裝置之一或更多硬體核心上,諸如中央處理單元(CPU)、圖形處理單元(GPU)、加速處理單元(APU)、數位信號處理器(DSP),等等。於其他實施例中,該指令之執行為仿真。
於某些實施例中,例如,於一支援RTM異動之處理器中,RTM異動是否發生之判定被執行於2601。例如,於其支援RTM之處理器的某些實施例中,假如RTM異動為現用則首先不應已有一DSX現用。於此例中,RTM異動有某錯誤而其結束程序應被啟動。通常,RTM異動狀態被儲存於諸如RTM控制及狀態暫存器之暫存器中。處理器之硬體評估此暫存器之內容以判定是否有RTM異動發生。
當有RTM異動發生時,則結束該RTM異動之呼叫被執行於2603。例如,用以結束RTM異動之指令被呼叫並執行。此一指令之範例為XEND。
當沒有RTM異動發生時,則DSX是否為現用之判定被執行於2605。如上所述,DSX狀態通常被儲存於控制暫存器,諸如圖1中所示之DSX狀態及控制暫存器 (DSXSR)。然而,可利用其他機構,諸如非專屬控制/狀態暫存器(諸如FLAGS暫存器)中之DSX狀態旗標。無論該狀態被儲存於何處,其位置係由處理器之硬體檢查以判定DSX是否確實發生。
當沒有DSX發生時,則故障被產生於2607。例如,一般保護故障被產生。此外,於某些實施例中,無操作(nop)被履行。
當有DSX發生時,則DSX巢套計數被遞減於2609。例如,諸如上述之DSX巢套計數暫存器中所儲存的已儲存DSX巢套計數被遞減。
DSX巢套計數是否等於零之判定被執行於2611。如上所述,DSX巢套計數通常被儲存於暫存器中。當DSX巢套計數不是零時,則於某些實施例中,NOP被履行。當DSX巢套計數為零時,則目前DSX之推測狀態被變為最終並確認於2615。
該確認是否成功之判定被執行於2617。例如,是否有錯誤於儲存時?假如為否,則DSX被異常中止於2621。當該確認成功時,則DSX狀態指示(諸如DSX狀態及控制暫存器中所儲存者)被設定以指示沒有DSX現用於2619。於某些實施例中,此指示之設定發生在故障之產生2607或DSX之異常中止2621以後。
圖27闡明其顯示諸如YEND指令之指令的執行之虛擬碼的範例。
以下討論的是用以執行上述指令之指令格式及執行資 源的實施例。
指令集包括一或更多指令格式。既定指令格式係界定各種欄位(位元之數目、位元之位置)以指明(除了別的以外)待履行操作(運算碼)以及將於其上履行操作之運算元。一些指令格式係透過指令模板(或子格式)之定義而被進一步分解。例如,既定指令格式之指令模板可被定義以具有指令格式之欄位的不同子集(所包括的欄位通常係以相同順序,但至少某些具有不同的位元位置,因為包括了較少的欄位)及/或被定義以具有不同地解讀之既定欄位。因此,ISA之各指令係使用既定指令格式(以及,假如被定義的話,以該指令格式之指令模板的既定一者)而被表達,並包括用以指明操作及運算元之欄位。例如,範例ADD指令具有特定運算碼及一指令格式,其包括用以指明該運算碼之運算碼欄位及用以選擇運算元(來源1/目的地及來源2)之運算元欄位;而於一指令串中之此ADD指令的發生將具有特定內容於其選擇特定運算元之運算元欄位中。被稱為先進向量延伸(AVX)(AVX1及AVX2)並使用向量延伸(VEX)編碼技術之一組SIMD延伸已被釋出及/或出版(例如,參見Intel® 64及IA-32架構軟體開發商手冊,2011年十月;及參見Intel®先見向量延伸編程參考,2011年六月)。
範例指令格式
文中所述之指令的實施例可被實施以不同的格式。此 外,範例系統、架構、及管線被詳述於下。指令之實施例可被執行於此等系統、架構、及管線上,但不限定於那些細節。
一般性向量友善指令格式
向量友善指令格式是一種適於向量指令之指令格式(例如,有向量操作特定的某些欄位)。雖然實施例係描述其中向量和純量操作兩者均透過向量友善指令格式而被支援,但替代實施例僅使用具有向量友善指令格式之向量操作。
圖28A-28B為闡明一般性向量友善指令格式及其指令模板的方塊圖,依據本發明之實施例。圖28A為闡明一般性向量友善指令格式及其類別A指令模板的方塊圖,依據本發明之實施例;而圖28B為闡明一般性向量友善指令格式及其類別B指令模板的方塊圖,依據本發明之實施例。明確地,針對一般性向量友善指令格式2800係定義類別A及類別B指令模板,其兩者均包括無記憶體存取2805指令模板及記憶體存取2820指令模板。於向量友善指令格式之背景下術語「一般性」指的是不與任何特定指令集連結的指令格式。
雖然本發明之實施例將描述其中向量友善指令格式支援以下:具有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位元組向量運算元)。
圖28A中之類別A指令模板包括:1)於無記憶體存取2805指令模板內,顯示有無記憶體存取、全捨入控制類型操作2810指令模板及無記憶體存取、資料變換類型操作2815指令模板;以及2)於記憶體存取2820指令模板內,顯示有記憶體存取、暫時2825指令模板及記憶體存取、非暫時2830指令模板。圖28B中之類別B指令模板包括:1)於無記憶體存取2805指令模板內,顯示有無記憶體存取、寫入遮蔽控制、部分捨入控制類型操作2812指令模板及無記憶體存取、寫入遮蔽控制、v大小類型操作2817指令模板;以及2)於記憶體存取2820指令模板內,顯示有記憶體存取、寫入遮蔽控制2827指令模 板。
一般性向量友善指令格式2800包括以下欄位,依圖28A-28B中所示之順序列出如下。
格式欄位2840-此欄位中之一特定值(指令格式識別符值)係獨特地識別向量友善指令格式、以及因此在指令串中之向量友善指令格式的指令之發生。如此一來,此欄位是選擇性的,因為針對一僅具有一般性向量友善指令格式之指令集而言此欄位是不需要的。
基礎操作欄位2842-其內容係分辨不同的基礎操作。
暫存器指標欄位2844-其內容(直接地或透過位址產生)係指明來源及目的地運算元之位置,假設其係於暫存器中或記憶體中。這些包括足夠數目的位元以從PxQ(例如,32x512,16x128,32x1024,64x1024)暫存器檔選擇N暫存器。雖然於一實施例中N可高達三個來源及一個目的地暫存器,但是替代實施例可支援更多或更少的來源及目的地暫存器(例如,可支援高達兩個來源,其中這些來源之一亦作用為目的地;可支援高達三個來源,其中這些來源之一亦作用為目的地;可支援高達兩個來源及一個目的地)。
修飾符欄位2846-其內容係從不指明記憶體存取之那些指令分辨出其指明記憶體存取之一般性向量指令格式的指令之發生,亦即,介於無記憶體存取2805指令模板與記憶體存取2820指令模板之間。記憶體存取操作係讀 取及/或寫入至記憶體階層(於使用暫存器中之值以指明來源及/或目的地位址之某些情況下),而非記憶體存取操作則不會(例如,來源及目的地為暫存器)。雖然於一實施例中此欄位亦於三個不同方式之間選擇以履行記憶體位址計算,但是替代實施例可支援更多、更少、或不同方式以履行記憶體位址計算。
擴增操作欄位2850-其內容係分辨多種不同操作之哪一個將被履行,除了基礎操作之外。此欄位是背景特定的。於本發明之一實施例中,此欄位被劃分為類別欄位2868、α欄位2852、及β欄位2854。擴增操作欄位2850容許操作之共同群組將被履行以單指令而非2、3、或4指令。
比例欄位2860-其內容容許指標欄位之內容的定標,以供記憶體位址產生(例如,以供其使用2比例*指標+基礎之位址產生)。
置換欄位2862A-其內容被使用為記憶體位址產生之部分(例如,以供其使用2比例*指標+基礎+置換之位址產生)。
置換因數欄位2862B(注意:直接在置換因數欄位2862B上方之置換欄位2862A的並列指示一者或另一者被使用)-其內容被使用為位址產生之部分;其指明將被記憶體存取之大小(N)所定標的置換因數-其中N為記憶體存取中之位元組數目(例如,以供其使用2比例*指標+基礎+定標置換之位址產生)。冗餘低階位元被忽略而因 此,置換因數欄位之內容被乘以記憶體運算元總大小(N)來產生最終置換以供使用於計算有效位址。N之值係在運作時間由處理器硬體所判定,根據全運算碼欄位2874(稍後描述於文中)及資料調處欄位2854C。置換欄位2862A及置換因數欄位2862B是選擇性的,因為其未被使用於無記憶體存取2805指令模板及/或不同的實施例可實施該兩欄位之僅一者或者無任何。
資料元件寬度欄位2864-其內容係分辨數個資料元件之哪一個將被使用(於針對所有指令之某些實施例中;於針對僅某些指令之其他實施例中)。此欄位是選擇性的,在於其假如僅有一資料元件寬度被支援及/或資料元件寬度係使用運算碼之某形態而被支援則此欄位是不需要的。
寫入遮蔽欄位2870-其內容係根據每資料元件位置以控制其目的地向量運算元中之資料元件位置是否反映基礎操作及擴增操作之結果。類別A指令模板支援合併-寫入遮蔽,而類別B指令模板支援合併-及歸零-寫入遮蔽兩者。當合併時,向量遮蔽容許目的地中之任何組的元件被保護自任何操作之執行期間(由基礎操作及擴增操作所指明)的更新;於另一實施例中,保留其中相應遮蔽位元具有0之目的地的各元件之舊值。反之,當歸零時,向量遮蔽容許目的地中之任何組的元件被歸零於任何操作之執行期間(由基礎操作及擴增操作所指明);於一實施例中,當相應遮蔽位元具有0值時則目的地之一元件被設為0。 此功能之子集是其控制被履行之操作的向量長度(亦即,被修飾之元件的範圍,從第一者至最後者)的能力;然而,其被修飾之元件不需要是連續的。因此,寫入遮蔽欄位2870容許部分向量操作,包括載入、儲存、運算、邏輯,等等。雖然本發明之實施例係描述其中寫入遮蔽欄位2870之內容選擇其含有待使用之寫入遮蔽的數個寫入遮蔽暫存器之一(而因此寫入遮蔽欄位2870之內容間接地識別其遮蔽將被履行),但是替代實施例取代地或者額外地容許寫入遮蔽欄位2870之內容直接地指明其遮蔽將被履行。
即刻欄位2872-其內容容許即刻之指明。此欄位是選擇性的,由於此欄位存在於其不支援即刻之一般性向量友善格式的實施方式中且此欄位不存在於其不使用即刻之指令中。
類別欄位2868-其內容分辨於不同類別的指令之間。參考圖28A-B,此欄位之內容選擇於類別A與類別B指令之間。於圖28A-B中,圓化角落的方形被用以指示一特定值存在於一欄位中(例如,針對類別欄位2868之類別A2868A及類別B2868B,個別地於圖28A-B中)。
類別A之指令模板
於類別A之非記憶體存取2805指令模板的情況下,α欄位2852被解讀為RS欄位2852A,其內容係分辨不同擴增操作類型之哪一個將被履行(例如,捨入2852A.1及資 料變換2852A.2被個別地指明給無記憶體存取、捨入類型操作2810及無記憶體存取、資料變換類型操作2815指令模板),而β欄位2854係分辨該些指明類型的操作之哪個將被履行。於無記憶體存取2805指令模板中,比例欄位2860、置換欄位2862A、及置換比例欄位2862B不存在。
無記憶體存取指令模板-全捨入控制類型操作
於無記憶體存取全捨入類型操作2810指令模板中,β欄位2854被解讀為捨入控制欄位2854A,其內容係提供靜態捨入。雖然於本發明之所述實施例中,捨入控制欄位2854A包括抑制所有浮點例外(SAE)欄位2856及捨入操作控制欄位2858,但替代實施例可支援可將這兩個觀念均編碼入相同欄位或僅具有這些觀念/欄位之一者或另一者(例如,可僅具有捨入操作控制欄位2858)。
SAE欄位2856-其內容係分辨是否除能例外事件報告;當SAE欄位2856之內容指示抑制被致能時,則一既定指令不報告任何種類的浮點例外旗標且不引發任何浮點例外處置器。
捨入操作控制欄位2858-其內容係分辨一群捨入操作之哪一個將被履行(例如向上捨入、向下捨入、朝零捨入及捨入至最接近)。因此,捨入操作控制欄位2858容許以每指令為基之捨入模式的改變。於本發明之一實施例中,其中處理器包括一用以指明捨入模式之控制暫存器, 捨入操作控制欄位2850之內容係撤銷該暫存器值。
無記憶體存取指令模板-資料變換類型操作
於無記憶體存取資料變換類型操作2815指令模板中,β欄位2854被解讀為資料變換欄位2854B,其內容係分辨數個資料變換之哪一個將被履行(例如,無資料變換、拌合、廣播)。
於類別A之記憶體存取2820指令模板中,α欄位2852被解讀為逐出暗示欄位2852B,其內容係分辨逐出暗示之哪一個將被使用(於圖28A中,暫時2852B.1及非暫時2852B.2被個別地指明給記憶體存取、暫時2825指令模板及記憶體存取、非暫時2830指令模板),而β欄位2854被解讀為資料調處欄位2854C,其內容係分辨數個資料調處操作(亦已知為基元)之哪一個將被履行(例如,無調處;廣播;來源之向上轉換;及目的地之向下轉換)。記憶體存取2820指令模板包括比例欄位2860、及選擇性地置換欄位2862A或置換比例欄位2862B。
向量記憶體指令係履行向量載入自及向量儲存至記憶體,具有轉換支援。至於一般向量指令,向量記憶體指令係以資料元件式方式轉移資料自/至記憶體,以其被實際地轉移之元件由其被選為寫入遮蔽的向量遮蔽之內容所主宰。
記憶體存取指令模板-暫時
暫時資料為可能會夠早地被再使用以受惠自快取的資料。然而,此為一暗示,且不同的處理器可以不同的方式來實施,包括完全地忽略該暗示。
記憶體存取指令模板-非暫時
非暫時資料為不太可能會夠早地被再使用以受惠自第一階快取中之快取且應被給予逐出之既定優先權的資料。然而,此為一暗示,且不同的處理器可以不同的方式來實施,包括完全地忽略該暗示。
類別B之指令模板
於類別B之指令模板的情況下,α欄位2852被解讀為寫入遮蔽控制(Z)欄位2852C,其內容係分辨由寫入遮蔽欄位2870所控制的寫入遮蔽是否應為合併或歸零。
於類別B之非記憶體存取2805指令模板的情況下,β欄位2854之部分被解讀為RL欄位2857A,其內容係分辨不同擴增操作類型之哪一個將被履行(例如,捨入2857A.1及向量長度(VSIZE)2857A.2被個別地指明給無記憶體存取、寫入遮蔽控制、部分捨入控制類型操作2812指令模板及無記憶體存取、寫入遮蔽控制、VSIZE類型操作2817指令模板),而剩餘的β欄位2854係分辨該些指明類型的操作之哪個將被履行。於無記憶體存取2805指令模板中,比例欄位2860、置換欄位2862A、及置換比例欄位2862B不存在。
於無記憶體存取中,寫入遮蔽控制、部分捨入控制類型操作2810指令模板、及剩餘的β欄位2854被解讀為捨入操作欄位2859A且例外事件報告被除能(既定指令則不報告任何種類的浮點例外旗標且不引發任何浮點例外處置器)。
捨入操作控制欄位2859A-正如捨入操作控制欄位2858,其內容係分辨一群捨入操作之哪一個將被履行(例如向上捨入、向下捨入、朝零捨入及捨入至最接近)。因此,捨入操作控制欄位2859A容許以每指令為基之捨入模式的改變。於本發明之一實施例中,其中處理器包括一用以指明捨入模式之控制暫存器,捨入操作控制欄位2850之內容係撤銷該暫存器值。
於無記憶體存取、寫入遮蔽控制、VSIZE類型操作2817指令模板中,剩餘的β欄位2854被解讀為向量長度欄位2859B,其內容係分辨數個資料向量長度之哪一個將被履行(例如,128、256、或512位元組)。
於類別B之記憶體存取2820指令模板的情況下,β欄位2854之部分被解讀為廣播欄位2857B,其內容係分辨廣播類型資料調處操作是否將被履行,而剩餘的β欄位2854被解讀為向量長度欄位2859B。記憶體存取2820指令模板包括比例欄位2860、及選擇性地置換欄位2862A或置換比例欄位2862B。
關於一般性向量友善指令格式2800,全運算碼欄位2874被顯示為包括格式欄位2840、基礎操作欄位2842、 及資料元件寬度欄位2864。雖然一實施例被顯示為其中全運算碼欄位2874包括所有這些欄位,全運算碼欄位2874包括少於所有這些欄位在不支援其所有的實施例中。全運算碼欄位2874提供操作碼(運算碼)。
擴增操作欄位2850、資料元件寬度欄位2864、及寫入遮蔽欄位2870容許這些特徵以每指令為基被指明以一般性向量友善指令格式。
寫入遮蔽欄位與資料元件寬度欄位之組合產生類型化的指令,在於其容許遮蔽根據不同資料元件寬度而被施加。
類別A及類別B中所發現之各種指令模板在不同情況下是有利的。於本發明之某些實施例中,不同處理器或一處理器中之不同核心可支援僅類別A、僅類別B、或兩類別。例如,用於通用計算之高性能通用失序核心可支援僅類別B;主要用於圖形及/或科學(通量)計算之核心可支援僅類別A;及用於兩者之核心可支援兩者(當然,一種具有來自兩類別之模板和指令的某混合但非來自兩類別之所有模板和指令的核心是落入本發明之範圍內)。同時,單一處理器可包括多核心,其所有均支援相同的類別或者其中不同的核心支援不同的類別。例如,於一具有分離的圖形和通用核心之處理器中,主要用於圖形及/或科學計算的圖形核心之一可支援僅類別A;而通用核心之一或更多者可為高性能通用核心,其具有用於支援僅類別B之通用計算的失序執行和暫存器重新命名。不具有分離的 圖形核心之另一處理器可包括支援類別A和類別B兩者之一或更多通用依序或失序核心。當然,來自一類別之特徵亦可被實施於另一類別中,在本發明之不同實施例中。以高階語言寫入之程式將被置入(例如,僅以時間編譯或靜態地編譯)多種不同的可執行形式,包括:1)僅具有由用於執行之處理器所支援的類別之指令的形式;或2)具有其使用所有類別之指令的不同組合所寫入之替代常式並具有控制流碼的形式,該控制流碼係根據由目前正執行該碼之處理器所支援的指令以選擇用來執行之常式。
範例特定向量友善指令格式
圖29為闡明範例特定向量友善指令格式的方塊圖,依據本發明之實施例。圖29顯示特定向量友善指令格式2900,其之特定在於其指明欄位之位置、大小、解讀、及順序,以及那些欄位之部分的值。特定向量友善指令格式2900可被用以延伸x86指令集,而因此某些欄位係類似於或相同於現存x86指令集及其延伸(例如,AVX)中所使用的那些。此格式保持與下列各者一致:具有延伸之現存x86指令集的前綴編碼欄位、真實運算碼位元組欄位、MOD R/M欄位、SIB欄位、置換欄位、及即刻欄位。闡明來自圖28之欄位投映入來自圖29之欄位。
應理解:雖然本發明之實施例係參考為說明性目的之一般性向量友善指令格式2800的背景下之特定向量友善指令格式2900而描述,但除非其中有聲明否則本發明不 限於特定向量友善指令格式2900。例如,一般性向量友善指令格式2800係考量各個欄位之多種可能大小,而特定向量友善指令格式2900被顯示為具有特定大小之欄位。舉特定例而言,雖然資料元件寬度欄位2864被闡明為特定向量友善指令格式2900之一位元欄位,但本發明未如此限制(亦即,一般性向量友善指令格式2800係考量資料元件寬度欄位2864之其他大小)。
一般性向量友善指令格式2800包括以下欄位,依圖29A中所示之順序列出如下。
EVEX前綴(位元組0-3)2902被編碼以四位元組形式。
格式欄位2840(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)為格式欄位2840且其含有0x64(用於分辨本發明之一實施例中的向量友善指令格式之獨特值)。
第二-第四位元組(EVEX位元組1-3)包括數個提供特定能力之位元欄位
REX欄位2905(EVEX位元組1,位元[7-5])-係包括:EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)、及2857BEX位元組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’欄位2810-此為REX’欄位2810之第一部分且為EVER.R’位元欄位(EVEX位元組1,位元[4]-R’),其被用以編碼延伸的32暫存器集之上16個或下16個。於本發明之一實施例中,此位元(連同如以下所指示之其他者)被儲存以位元反轉格式來分辨(於眾所周知的x8632-位元模式)自BOUND指令,其真實運算碼位元組為62,但於MOD R/M欄位(描述於下)中不接受MOD欄位中之11的值;本發明之替代實施例不以反轉格式儲存此及如下其他指示的位元。1之值被用以編碼下16暫存器。換言之,R’Rrrr係藉由結合EVEX.R’、EVEX.R、及來自其他欄位之其他RRR而被形成。
運算碼映圖欄位2915(EVEX位元組1,位元[3:0]-mmmm)-其內容係編碼一暗示的領先運算碼位元組(0F、0F 38、或0F 3)。
資料元件寬度欄位2864(EVEX位元組2,位元[7]-W)係由記號EVEX.W所表示。EVEX.W被用以界定資料類型(32位元資料元件或64位元資料元件)之粒度(大小)。
EVEX.vvvv 2920(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvv之角色可包括以下:1)EVEX.vvvv編 碼其以反轉(1之補數)形式所指明的第一來源暫存器運算元且針對具有2或更多來源運算元為有效的;2)EVEX.vvvv針對某些向量位移編碼其以1之補數形式所指明的目的地暫存器運算元;或3)EVEX.vvvv未編碼任何運算元,該欄位被保留且應含有1111b。因此,EVEX.vvvv欄位2920係編碼其以反轉(1之補數)形式所儲存的第一來源暫存器指明符之4個低階位元。根據該指令,一額外的不同EVEX位元欄位被用以延伸指明符大小至32暫存器。
EVEX.U 2868類別欄位(EVEX位元組2,位元[2]-U)-假如EVEX.U=0,則其指示類別A或EVEX.U0;假如EVEX.U=1,則其指示類別B或EVEX.U1。
前綴編碼欄位2925(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前綴編碼,而因此不需要延伸。
α欄位2852(EVEX位元組3,位元[7]-EH;亦已知為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮蔽控制、及EVEX.N;亦闡明以α)-如先前所描述,此欄位是背景特定的。
β欄位2854(EVEX位元組3,位元[6:4]-SSS,亦已知為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;亦闡明以βββ)-如先前所描述,此欄位是背景特定的。
REX’欄位2810-此為REX’欄位之剩餘部分且為EVER.V’位元欄位(EVEX位元組3,位元[3]-V’),其被用以編碼延伸的32暫存器集之上16個或下16個。此位元被儲存以位元反轉格式。1之值被用以編碼下16暫存器。換言之,V’VVVV係藉由結合EVEX.V’、EVEX.vvvv所形成。
寫入遮蔽欄位2870(EVEX位元組3,位元[2:0]-kkk)-其內容係指明在如先前所述之寫入遮蔽暫存器中的暫存器之指數。於本發明之一實施例中,特定值EVEX.kkk=000具有一特殊行為,其係暗示無寫入遮蔽被用於特別指令(此可被實施以多種方式,包括使用其固線至所有各者之寫入遮蔽或者其旁路遮蔽硬體之硬體)。
真實運算碼欄位2930(位元組4)亦已知為運算碼位 元組。運算碼之部分被指明於此欄位。
MOD R/M欄位2940(位元組5)包括MOD欄位2942、Reg欄位2944、及R/M欄位2946。如先前所述MOD欄位2942之內容係分辨於記憶體存取與非記憶體存取操作之間。Reg欄位2944之角色可被概述為兩情況:編碼目的地暫存器運算元或來源暫存器運算元、或者被視為運算碼延伸而不被用以編碼任何指令運算元。R/M欄位2946之角色可包括以下:編碼其參考記憶體位址之指令運算元;或者編碼目的地暫存器運算元或來源暫存器運算元。
比例、指標、基礎(SIB)位元組(位元組6)-如先前所述,比例欄位2850之內容被用於記憶體位址產生。SIB.xxx 2954及SIB.bbb 2956-這些欄位之內容先前已被參考針對暫存器指標Xxxx及Bbbb。
置換欄位2862A(位元組7-10)-當MOD欄位2942含有10時,位元組7-10為置換欄位2862A,且其工作如舊有32位元置換(disp32)之相同方式且工作以位元組粒度。
置換因數欄位2862B(位元組7)-當MOD欄位2942含有01時,位元組7為置換因數欄位2862B。此欄位之位置係相同於舊有x86指令集8位元置換(disp8)之位置,其工作以位元組粒度。因為disp8是符號延伸的,所以其可僅定址於-128與127位元組偏移之間;關於64位元組快取線,disp8係使用其可被設為僅四個真實可 用值-128、-64、0及64之8位元;因為較大範圍經常是需要的,所以disp32被使用;然而,disp32需要4位元組。相對於disp8及disp32,置換因數欄位2862B為disp8之再解讀;當使用置換因數欄位2862B時,實際置換係由置換因數欄位之內容乘以記憶體運算元存取之大小(N)所判定。置換欄位之類型被稱為disp8*N。此係減少平均指令長度(用於置換欄位之單一位元組但具有更大的範圍)。此壓縮置換是基於假設其有效置換為記憶體存取之粒度的數倍,而因此,位址偏移之冗餘低階位元無須被編碼。換言之,置換因數欄位2862B取代舊有x86指令集8位元置換。因此,置換因數欄位2862B被編碼以如x86指令集8位元置換之相同方式(以致ModRM/SIB編碼規則並無改變),唯一例外是其disp8被超載至disp8*N。換言之,編碼規則或編碼長度沒有改變,但僅於藉由硬體之置換值的解讀(其需由記憶體運算元之大小來縮放置換以獲得位元組式的位址偏移)。
即刻欄位2872係操作如先前所述。
全運算碼欄位
圖29B為闡明其組成全運算碼欄位2874之特定向量友善指令格式2900的欄位之方塊圖,依據本發明之一實施例。明確地,全運算碼欄位2874包括格式欄位2840、基礎操作欄位2842、及資料元件寬度(W)欄位2864。基礎操作欄位2842包括前綴編碼欄位2925、運算碼映圖 欄位2915、及真實運算碼欄位2930。
暫存器指標欄位
圖29C為闡明其組成暫存器指標欄位2844之特定向量友善指令格式2900的欄位之方塊圖,依據本發明之一實施例。明確地,暫存器指標欄位2844包括REX欄位2905、REX’欄位2910、MODR/M.reg欄位2944、MODR/M.r/m欄位2946、VVVV欄位2920、xxx欄位2954、及bbb欄位2956。
擴增操作欄位
圖29D為闡明其組成擴增操作欄位2850之特定向量友善指令格式2900的欄位之方塊圖,依據本發明之一實施例。當類別(U)欄位2868含有0時,則其表示EVEX.U0(類別A 2868A);當其含有1時,則其表示EVEX.U1(類別B 2868B)。當U=0且MOD欄位2942含有11(表示無記憶體存取操作)時,則α欄位2852(EVEX位元組3,位元[7]-EH)被解讀為rs欄位2852A。當rs欄位2852A含有1(捨入2852A.1)時,則β欄位2854(EVEX位元組3,位元[6:4]-SSS)被解讀為捨入控制欄位2854A。捨入控制欄位2854A包括一位元SAE欄位2856及二位元捨入操作欄位2858。當rs欄位2852A含有0(資料變換2852A.2)時,則β欄位2854(EVEX位元組3,位元[6:4]-SSS)被解讀為三位元資料 變換欄位2854B。當U=0且MOD欄位2942含有00、01、或10(表示記憶體存取操作)時,則α欄位2852(EVEX位元組3,位元[7]-EH)被解讀為逐出暗示(EH)欄位2852B且β欄位2854(EVEX位元組3,位元[6:4]-SSS)被解讀為三位元資料調處欄位2854C。
當U=1時,則α欄位2852(EVEX位元組3,位元[7]-EH)被解讀為寫入遮蔽控制(Z)欄位2852C。當U=1且MOD欄位2942含有11(表示無記憶體存取操作)時,則β欄位2854之部分(EVEX位元組3,位元[4]-S0)被解讀為RL欄位2857A;當其含有1(捨入2857A.1)時,則β欄位2854之剩餘部分(EVEX位元組3,位元[6-5]-S2-1)被解讀為捨入操作欄位2859A;而當RL欄位2857A含有0(VSIZE 2857.A2)時,則β欄位2854之剩餘部分(EVEX位元組3,位元[6-5]-S2-1)被解讀為向量長度欄位2859B(EVEX位元組3,位元[6-5]-L1-0)。當U=1且MOD欄位2942含有00、01、或10(表示記憶體存取操作)時,則β欄位2854(EVEX位元組3,位元[6:4]-SSS)被解讀為向量長度欄位2859B(EVEX位元組3,位元[6-5]-L1-0)及廣播欄位2857B(EVEX位元組3,位元[4]-B)。
範例暫存器架構
圖30為一暫存器架構3000之方塊圖,依據本發明之一實施例。於所示之實施例中,有32個向量暫存器 3010,其為512位元寬;這些暫存器被稱為zmm0至zmm31。較低的16個zmm暫存器之較低階256位元被重疊於暫存器ymm0-16上。較低的16個zmm暫存器之較低階128位元(ymm暫存器之較低階128位元)被重疊於暫存器xmm0-15上。特定向量友善指令格式2900係操作於這些重疊的暫存器檔上,如以下表中所闡明。
換言之,向量長度欄位2859B於最大長度與一或更多其他較短長度之間選擇,其中每一此較短長度為前一長度之長度的一半;而無向量長度欄位2859B之指令模板係操作於最大長度上。此外,於一實施例中,特定向量友善指令格式2900之類別B指令模板係操作於緊縮或純量單/雙精確度浮點資料及緊縮或純量整數資料上。純量操作為履行於zmm/ymm/xmm暫存器中之最低階資料元件上的操作;較高階資料元件位置係根據實施例而被保留如其在該指令前之相同者或者被歸零。
寫入遮蔽暫存器3015-於所示之實施例中,有8個 寫入遮蔽暫存器(k0至k7),大小各為64位元。於替代實施例中,寫入遮蔽暫存器3015之大小為16位元。如先前所述,於本發明之一實施例中,向量遮蔽暫存器k0無法被使用為寫入遮蔽;當其通常將指示k0之編碼被用於寫入遮蔽時,其係選擇0xFFFF之固線寫入遮蔽,有效地除能該指令之寫入遮蔽。
通用暫存器3025-於所示之實施例中,有十六個64位元通用暫存器,其係連同現存的x86定址模式來用以定址記憶體運算元。這些暫存器被參照以RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15。
純量浮點堆疊暫存器檔(x87堆疊)3045,MMX緊縮整數平坦暫存器檔3050係別名於其上-於所示之實施例中,x87堆疊為用以使用x87指令集延伸而在32/64/80位元浮點資料上履行純量浮點操作之八元件堆疊;而MMX暫存器被用以履行操作在64位元緊縮整數資料上、及用以保持運算元以供介於MMX與XMM暫存器間所履行的某些操作。
本發明之替代實施例可使用較寬或較窄的暫存器。此外,本發明之替代實施例可使用更多、更少、或不同的暫存器檔及暫存器。
範例核心架構,處理器,及電腦架構
處理器核心可被實施以不同方式、用於不同目的、以及於不同處理器中。例如,此類核心之實施方式可包括: 1)用於通用計算之通用依序核心;2)用於通用計算之高性能通用失序核心;3)主要用於圖形及/或科學(通量)計算之特殊用途核心。不同處理器之實施方式可包括:1)CPU,其包括用於通用計算之一或更多通用依序核心及/或用於通用計算之一或更多通用失序核心;及2)核心處理器,其包括主要用於圖形及/或科學(通量)之一或更多特殊用途核心。此等不同處理器導致不同的電腦系統架構,其可包括:1)在來自該CPU之分離晶片上的共處理器;2)在與CPU相同的封裝中之分離晶粒上的共處理器;3)在與CPU相同的晶粒上的共處理器(於該情況下,此一處理器有時被稱為特殊用途邏輯,諸如集成圖形及/或科學(通量)邏輯、或稱為特殊用途核心);及4)在一可包括於相同晶粒上之所述CPU(有時稱為應用程式核心或應用程式處理器)、上述共處理器、及額外功能的晶片上之系統。範例核心架構被描述於下,接續著範例處理器及電腦架構之描述。
範例核心架構 依序或失序核心方塊圖
圖31A為闡明範例依序管線及範例暫存器重新命名、失序問題/執行管線兩者之方塊圖,依據本發明之實施例;圖31B為一方塊圖,其闡明將包括於依據本發明之實施例的處理器中之依序架構核心之範例實施例及範例暫存器重新命名、失序問題/執行架構核心兩者。圖31A-B中 之實線方盒係闡明依序管線及依序核心,而虛線方盒之選擇性加入係闡明暫存器重新命名、失序問題/執行管線及核心。假設其依序形態為失序形態之子集,將描述失序形態。
於圖31A中,處理器管線3100包括提取級3102、長度解碼級3104、解碼級3106、配置級3108、重新命名級3110、排程(亦已知為分派或發送)級3112、暫存器讀取/記憶體讀取級3114、執行級3116、寫入回/記憶體/寫入級3118、例外處置級3122、及確定級3124。
圖31B顯示處理器核心3190,其包括一耦合至執行單元引擎單元3150之前端單元3130,且兩者均耦合至記憶體單元3170。核心3190可為減少指令集計算(RISC)核心、複雜指令集計算(CISC)核心、極長指令字元(VLIW)核心、或者併合或替代核心類型。當作又另一種選擇,核心3190可為特殊用途核心,諸如(例如)網路或通訊核心、壓縮引擎、共處理器核心、通用計算圖形處理單元(GPGPU)核心、圖形核心,等等。
前端單元3130包括一分支推測單元3132,其係耦合至指令快取單元3134,其係耦合至指令翻譯旁看緩衝器(TLB)3136,其係耦合至指令提取單元3138,其係耦合至解碼單元3140。解碼單元3140(或解碼器)可解碼指令;並可將以下產生為輸出:一或更多微操作、微碼進入點、微指令、其他指令、或其他控制信號,其被解碼自(或者反應)、或被衍生自原始指令。解碼單元3140可 使用各種不同的機制來實施。適當機制之範例包括(但不限定於)查找表、硬體實施方式、可編程邏輯陣列(PLA)、微碼唯讀記憶體(ROM),等等。於一實施例中,核心3190包括微碼ROM或者儲存用於某些巨指令之微碼的其他媒體(例如,於解碼單元3140中或者於前端單元3130內)。解碼單元3140被耦合至執行引擎單元3150中之重新命名/配置器單元3152。
執行引擎單元3150包括重新命名/配置器單元3152,其係耦合至撤回單元3154及一組一或更多排程器單元3156。排程器單元3156代表任何數目的不同排程器,包括保留站、中央指令窗,等等。排程器單元3156被耦合至實體暫存器檔單元3158。實體暫存器檔單元3158之各者代表一或更多實體暫存器檔,其不同者係儲存一或更多不同的資料類型,諸如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,其為下一待執行指令之位址的指令指標),等等。於一實施例中,實體暫存器檔單元3158包含向量暫存器單元、寫入遮蔽暫存器單元、及純量暫存器單元。這些暫存器單元可提供架構向量暫存器、向量遮蔽暫存器、及通用暫存器。實體暫存器檔單元3158係由撤回單元3154所重疊以闡明其中暫存器重新命名及失序執行可被實施之各種方式(例如,使用記錄器緩衝器和撤回暫存器檔;使用未來檔、歷史緩衝器、和撤回暫存器檔;使用暫存器映圖和暫存器池,等等)。撤回單元3154及實體暫存器檔單元3158被耦合至 執行叢集3160。執行叢集3160包括一組一或更多執行單元3162及一組一或更多記憶體存取單元3164。執行單元3162可履行各種操作(例如,偏移、相加、相減、相乘)以及於各種類型的資料上(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。雖然某些實施例可包括數個專屬於特定功能或功能集之執行單元,但其他實施例可包括僅一個執行單元或者全部履行所有功能之多數執行單元。排程器單元3156、實體暫存器檔單元3158、及執行叢集3160被顯示為可能複數的,因為某些實施例係針對某些類型的資料/操作產生分離的管線(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或記憶體存取管線,其各具有本身的排程器單元、實體暫存器檔單元、及/或執行叢集-且於分離記憶體存取管線之情況下,某些實施例被實施於其中僅有此管線之執行叢集具有記憶體存取單元3164)。亦應理解:當使用分離管線時,這些管線之一或更多者可為失序發送/執行而其他者為依序。
該組記憶體存取單元3164被耦合至記憶體單元3170,其包括資料TLB單元3172,其耦合至資料快取單元3174,其耦合至第二階(L2)快取單元3176。於一範例實施例中,記憶體存取單元3164可包括載入單元、儲存位址單元、及儲存資料單元,其各者係耦合至記憶體單元3170中之資料TLB單元3172。指令快取單元3134被進一步耦合至記憶體單元3170中之第二階(L2)快取單 元3176。L2快取單元3176被耦合至一或更多其他階的快取且最終至主記憶體。
舉例而言,範例暫存器重新命名、失序發送/執行核心架構可實施管線3100如下:1)指令提取3138履行提取和長度解碼級3102和3104;2)解碼單元3140履行解碼級3106;3)重新命名/配置器單元3152履行配置級3108和重新命名級3110;4)排程器單元3156履行排程級3112;5)實體暫存器檔單元3158和記憶體單元3170履行暫存器讀取/記憶體讀取級3114;執行叢集3160履行執行級3116;6)記憶體單元3170和實體暫存器檔單元3158履行寫入回/記憶體寫入級3118;7)各個單元可參與例外處置級3122;及8)撤回單元3154和實體暫存器檔單元3158履行確定級3124。
核心3190可支援一或更多指令集(例如,x86指令集,具有其已被加入以較新版本之某些延伸);MIPS Technologies of Sunnyvale,CA之MIPS指令集;ARM Holdings of Sunnyvale,CA之ARM指令集(具有諸如NEON之選擇性額外延伸),包括文中所述之指令。於一實施例中,核心3190包括支援緊縮資料指令集延伸(例如,AVX1、AVX2)之邏輯,藉此容許由許多多媒體應用程式所使用的操作使用緊縮資料來履行。
應理解:核心可支援多線程(執行二或更多平行組的操作或線緒),並可以多種方式執行,包括時間切割多線程、同時多線程(其中單一實體核心提供邏輯核心給其實 體核心正同時地多線程之每一線緒)、或者其組合(例如,時間切割提取和解碼以及之後的同時多線程,諸如Intel® Hyperthreading科技)。
雖然暫存器重新命名被描述於失序執行之背景,但應理解其暫存器重新命名可被使用於依序架構。雖然處理器之所述的實施例亦包括分離的指令和資料快取單元3134/3174以及共享L2快取單元3176,但替代實施例可具有針對指令和資料兩者之單一內部快取,諸如(例如)第一階(L1)內部快取、或多階內部快取。於某些實施例中,該系統可包括內部快取與外部快取之組合,該外部快取是位於核心及/或處理器之外部。替代地,所有快取可於核心及/或處理器之外部。
特定範例依序核心架構
圖32A-B闡明更特定的範例依序核心架構之方塊圖,該核心將為晶片中之數個邏輯區塊之一(包括相同類型及/或不同類型之其他核心)。邏輯區塊係透過高頻寬互連網路(例如,環狀網路)來通訊,利用某些固定功能邏輯、記憶體I/O介面、及其他必要I/O邏輯,根據其應用而定。
圖32A為單處理器核心之方塊圖,連同與晶粒上互連網路3202之其連接、以及第二階(L2)快取3204之其本地子集,依據本發明之實施例。於一實施例中,指令解碼器3200支援具有緊縮資料指令集延伸之x86指令集。L1 快取3206容許針對快取記憶體之低潛時存取入純量及向量單元。雖然於一實施例中(為了簡化設計),純量單元3208及向量單元3210使用分離的暫存器組(個別地,純量暫存器3212及向量暫存器3214),且於其間轉移的資料被寫入至記憶體並接著從第一階(L1)快取3206被讀取回;但本發明之替代實施例可使用不同的方式(例如,使用單一暫存器組或者包括一通訊路徑,其容許資料被轉移於兩暫存器檔之間而不被寫入及讀取回)。
L2快取3204之本地子集為其被劃分為分離本地子集(每一處理器核心有一個)之總體L2快取的部分。各處理器核心具有一直接存取路徑通至L2快取3204之其本身的本地子集。由處理器核心所讀取的資料被儲存於其L2快取子集3204中且可被快速地存取,平行於存取其本身本地L2快取子集之其他處理器核心。由處理器核心所寫入之資料被儲存於其本身的L2快取子集3204中且被清除自其他子集,假如需要的話。環狀網路確保共享資料之一致性。環狀網路為雙向的,以容許諸如處理器核心、L2快取及其他邏輯區塊等代理於晶片內部彼此通訊。各環狀資料路徑於每方向為1012位元寬。
圖32B為圖32A中之處理器核心的部分之延伸視圖,依據本發明之實施例。圖32B包括L1快取3204之L1資料快取3206A部分、以及有關向量單元3210和向量暫存器3214之更多細節。明確地,向量單元3210為16寬的向量處理單元(VPU)(參見16寬的ALU 3228), 其係執行整數、單精確度浮點、及雙精確度浮點指令之一或更多者。VPU支援以拌合單元3220拌合暫存器輸入、以數字轉換單元3222A-B之數字轉換、及於記憶體輸入上以複製單元3224之複製。寫入遮蔽暫存器3226容許斷定結果向量寫入。
具有集成記憶體控制器及圖形之處理器
圖33為一種處理器3300之方塊圖,該處理器3300可具有多於一個核心、可具有集成記憶體控制器、且可具有集成圖形,依據本發明之實施例。圖33中之實線方塊闡明處理器3300,其具有單核心3302A、系統代理3310、一組一或更多匯流排控制器單元3316;而虛線方塊之選擇性加入闡明一替代處理器3300,其具有多核心3302A-N、系統代理單元3310中之一組一或更多集成記憶體控制器單元3314、及特殊用途邏輯3308。
因此,處理器3300之不同實施方式可包括:1)CPU,具有其為集成圖形及/或科學(通量)邏輯(其可包括一或更多核心)之特殊用途邏輯3308、及其為一或更多通用核心(例如,通用依序核心、通用失序核心、兩者之組合)之核心3302A-N;2)共處理器,具有其為主要用於圖形及/或科學(通量)之大量特殊用途核心的核心3302A-N;及3)共處理器,具有其為大量通用依序核心的核心3302A-N。因此,處理器3300可為通用處理器、共處理器或特殊用途處理器,諸如(例如)網路或通訊處 理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高通量多數集成核心(MIC)共處理器(包括30或更多核心)、嵌入式處理器,等等。該處理器可被實施於一或更多晶片上。處理器3300可為一或更多基底之部分及/或可被實施於其上,使用數個製程技術之任一者,諸如(例如)BiCMOS、CMOS、或NMOS。
記憶體階層包括該些核心內之一或更多階快取、一組或者一或更多共享快取單元3306、及耦合至該組集成記憶體控制器單元3314之額外記憶體(未顯示)。該組共享快取單元3306可包括一或更多中階快取,諸如第二階(L2)、第三階(L3)、第四階(L4)、或其他階快取、最後階快取(LLC)、及/或其組合。雖然於一實施例中環狀為基的互連單元3312將以下裝置互連:集成圖形邏輯3308、該組共享快取單元3306、及系統代理單元3310/集成記憶體單元3314,但替代實施例可使用任何數目之眾所周知的技術以互連此等單元。於一實施例中,一致性被維持於一或更多快取單元3306與核心3302-A-N之間。
於某些實施例中,一或更多核心3302A-N能夠進行多線程。系統代理3310包括協調並操作核心3302A-N之那些組件。系統代理單元3310可包括(例如)電力控制單元(PCU)及顯示單元。PCU可為或者包括用以調節核心3302A-N及集成圖形邏輯3308之電力狀態所需的邏輯和組件。顯示單元係用以驅動一或更多外部連接的顯示。
核心3302A-N可針對架構指令集為同質的或異質的;亦即,二或更多核心3302A-N可執行相同的指令集,而其他者可執行該指令集或不同指令集之僅一子集。
範例電腦架構
圖34-37為範例電腦架構之方塊圖。用於膝上型電腦、桌上型電腦、手持式PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、開關、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、視頻遊戲裝置、機上盒、微控制器、行動電話、可攜式媒體播放器、手持式裝置、及各種其他電子裝置之技術中已知的其他系統設計和組態亦為適當的。通常,能夠結合處理器及/或其他執行邏輯(如文中所揭露者)之多種系統或電子裝置為一般性適當的。
現在參考圖34,其顯示依據本發明之一實施例的系統3400之方塊圖。系統3400可包括一或更多處理器3410、3415,其被耦合至控制器集線器3420。於一實施例中,控制器集線器3420包括圖形記憶體控制器集線器(GMCH)3490及輸入/輸出集線器(IOH)3450(其可於分離的晶片上);GMCH 3490包括記憶體及圖形控制器(耦合至記憶體3440及共處理器3445);IOH 3450為通至GMCH 3490之耦合輸入/輸出(I/O)裝置3460。另一方面,記憶體與圖形控制器之一或兩者被集成於處理器內(如文中所述者),記憶體3440及共處理器3445被直接 地耦合至處理器3410、及具有IOH 3450之單一晶片中的控制器集線器3420。
額外處理器3415之選擇性本質於圖34中被標示以斷線。各處理器3410、3415可包括文中所述的處理核心之一或更多者並可為處理器3300之某版本。
記憶體3440可為(例如)動態隨機存取記憶體(DRAM)、相位改變記憶體(PCM)、或兩者之組合。針對至少一實施例,控制器集線器3420經由諸如前側匯流排(FSB)等多點分支匯流排、諸如QuickPath互連(QPI)等點對點介面、或類似連接3495而與處理器3410、3415通訊。
於一實施例中,共處理器3445為特殊用途處理器,諸如(例如)高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器,等等。於一實施例中,控制器集線器3420可包括集成圖形加速器。
於實體資源3410、3415間可有多樣差異,針對價值矩陣之譜,包括架構、微架構、熱、功率耗損特性,等等。
於一實施例中,處理器3410執行其控制一般類型之資料處理操作的指令。指令內所嵌入者可為共處理器指令。處理器3410辨識這些共處理器指令為其應由裝附之共處理器3445所執行的類型。因此,處理器3410將共處理器匯流排或其他互連上之這些共處理器指令(或代表共 處理器指令之控制信號)發送至共處理器3445。共處理器3445接受並執行該些接收的共處理器指令。
現在參考圖35,其顯示依據本發明之實施例的第一更特定範例系統3500之方塊圖。如圖35中所示,多處理器系統3500為點對點互連系統,並包括經由點對點互連3550而耦合之第一處理器3570及第二處理器3580。處理器3570及3580之每一者可為處理器3300之某版本。於本發明之一實施例中,處理器3570及3580個別為處理器3410及3415,而共處理器3538為共處理器3445。於另一實施例中,處理器3570及3580個別為處理器3410及共處理器3445。
處理器3570及3580被顯示為個別地包括集成記憶體控制器(IMC)單元3572及3582。處理器3570亦包括其匯流排控制器單元點對點(P-P)介面3576及3578之部分;類似地,第二處理器3580包括P-P介面3586及3588。處理器3570、3580可使用P-P介面電路3578、3588而經由點對點(P-P)介面3550來交換資訊。如圖35中所示,IMC 3572及3582將處理器耦合至個別記憶體,亦即記憶體3532及記憶體3534,其可為本地地裝附至個別處理器之主記憶體的部分。
處理器3570、3580可各經由個別的P-P介面3552、3554而與晶片組3590交換資訊,使用點對點介面電路3576、3594、3586、3598。晶片組3590可經由高性能介面3539而選擇性地與共處理器3538交換資訊。於一實施 例中,共處理器3538為特殊用途處理器,諸如(例如)高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器,等等。
共享快取(未顯示)可被包括於任一處理器中或者於兩處理器外部,而經由P-P互連與處理器連接,以致處理器之任一者或兩者的本地快取資訊可被儲存於共享快取中,假如處理器被置於低功率模式時。
晶片組3590可經由一介面3596而被耦合至第一匯流排3516。於一實施例中,第一匯流排3516可為周邊組件互連(PCI)匯流排、或者諸如PCI快速匯流排或其他第三代I/O互連匯流排等匯流排,雖然本發明之範圍未如此限制。
如圖35中所示,各種I/O裝置3514可被耦合至第一匯流排3516,連同匯流排橋3518,其係將第一匯流排3516耦合至第二匯流排3520。於一實施例中,一或更多額外處理器3515(諸如共處理器、高通量MIC處理器、GPGPU加速器(諸如,例如,圖形加速器或數位信號處理(DSP)單元)、場可編程閘極陣列、或任何其他處理器)被耦合至第一匯流排3516。於一實施例中,第二匯流排3520可為低管腳數(LPC)匯流排。各個裝置可被耦合至第二匯流排3520,其包括(例如)鍵盤/滑鼠3522、通訊裝置3527、及資料儲存單元3528,諸如磁碟機或其他大量儲存裝置(其可包括指令/碼及資料3530),於一實施例中。此外,音頻I/O 3524可被耦合至 第二匯流排3520。注意:其他架構是可能的。例如,取代圖35之點對點架構,系統可實施多點分支匯流排其他此類架構。
現在參考圖36,其顯示依據本發明之實施例的第二更特定範例系統3600之方塊圖。圖35與36中之類似元件具有類似的參考數字,且圖35之某些形態已從圖36省略以免混淆圖36之其他形態。
圖36闡明其處理器3570、3580可包括集成記憶體及I/O控制邏輯(「CL」)3572和3582,個別地。因此,CL 3572、3582包括集成記憶體控制器單元並包括I/O控制邏輯。圖36闡明其不僅記憶體3532、3534被耦合至CL 3572、3582,同時其I/O裝置3614亦被耦合至控制邏輯3572、3582。舊有I/O裝置3615被耦合至晶片組3590。
現在參考圖37,其顯示依據本發明之一實施例的SoC 3700之方塊圖。圖33中之類似元件具有類似的參考數字。同時,虛線方塊為更多先進SoC上之選擇性特徵。於圖37中,互連單元3702被耦合至:應用程式處理器3710,其包括一組一或更多核心202A-N及共享快取單元3306;系統代理單元3310;匯流排控制器單元3316;集成記憶體控制器單元3314;一組一或更多共處理器3720,其可包括集成圖形邏輯、影像處理器、音頻處理器、及視頻處理器;靜態隨機存取記憶體(SRAM)單元3730;直接記憶體存取(DMA)單元3732;及顯示單元 3740,用以耦合至一或更多外部顯示。於一實施例中,共處理器3720包括特殊用途處理器,諸如(例如)網路或通訊處理器、壓縮引擎、GPGPU、高通量MIC處理器、嵌入式處理器,等等。
文中所揭露之機制的實施例可被實施以硬體、軟體、韌體、或此等實施方式之組合。本發明之實施例可被實施為電腦程式或程式碼,其被執行於可編程系統上,該可編程系統包含至少一處理器、儲存系統(包括揮發性和非揮發性記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置。
程式碼(諸如圖35中所示之碼3530)可被應用於輸入指令以履行文中所述之功能並產生輸出資訊。輸出資訊可被應用於一或更多輸出裝置,以已知的方式。為了本申請案之目的,處理系統包括任何系統,其具有處理器,諸如(例如)數位信號處理器(DSP)、微控制器、特定應用積體電路(ASIC)、或微處理器。
程式碼可被實施以高階程序或目標導向的編程語言來與處理系統通訊。程式碼亦可被實施以組合或機器語言,假如想要的話。事實上,文中所述之機制在範圍上不限於任何特定編程語言。於任何情況下,該語言可為編譯或解讀語言。
至少一實施例之一或更多形態可由其儲存在機器可讀取媒體上之代表性指令所實施,該機器可讀取媒體代表處理器內之各個邏輯,當由機器讀取時造成該機器製造邏輯 以履行文中所述之技術。此等表示(已知為「IP核心」)可被儲存在有形的、機器可讀取媒體上,且被供應至各個消費者或製造設施以載入其實際上製造該邏輯或處理器之製造機器。
此類機器可讀取儲存媒體可包括(無限制)由機器或裝置所製造或形成之物件的非暫態、有形配置,包括:儲存媒體,諸如硬碟、包括軟碟、光碟、微型碟唯讀記憶體(CD-ROM)、微型碟可再寫入(CD-RW)、及磁光碟等任何其他類型的碟片;半導體裝置,諸如唯讀記憶體(ROM)、諸如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可編程唯讀記憶體(EPROM)等隨機存取記憶體(RAM)、快閃記憶體、電可抹除可編程唯讀記憶體(EEPROM)、相位改變記憶體(PCM)、磁或光學卡、或者適於儲存電子指令之任何其他類型的媒體。
因此,本發明之實施例亦包括含有指令或含有諸如硬體描述語言(HDL)等設計資料之非暫態、有形的機器可讀取媒體,該硬體描述語言(HDL)係定義文中所述之結構、電路、設備、處理器及/或系統特徵。此類實施例亦可被稱為程式產品。
仿真(包括二元翻譯、碼變形,等等)
於某些情況下,指令轉換器可被用以將來自來源指令集之指令轉換至目標指令集。例如,指令轉換器可將指令 翻譯(例如,使用靜態二元翻譯、動態二元翻譯,包括動態編譯)、變形、仿真、或者轉換至一或更多其他指令以供由核心所處理。指令轉換器可被實施以軟體、硬體、韌體、或其組合。指令轉換器可位於處理器上、處理器外、或者部分於處理器上而部分於處理器外。
圖38為一種對照軟體指令轉換器之使用的方塊圖,該轉換器係用以將來源指令集中之二元指令轉換至目標指令集中之二元指令,依據本發明之實施例。於所述之實施例中,指令轉換器為一種軟體指令轉換器,雖然替代地該指令轉換器亦可被實施以軟體、韌體、硬體、或其各種組合。圖38顯示一種高階語言3802之程式可使用x86編譯器3804而被編譯以產生x86二元碼3806,其可由具有至少一x86指令集核心之處理器3816來本機地執行。具有至少一x86指令集核心之處理器3816代表任何處理器,其可藉由可相容地執行或者處理以下事項來履行實質上如一種具有至少一x86指令集核心之Intel處理器的相同功能:(1)Intel x86指令集核心之指令集的實質部分或者(2)針對運作於具有至少一x86指令集核心之Intel處理器上的應用程式或其他軟體之物件碼版本,以獲得如具有至少一x86指令集核心之Intel處理器的相同結果。x86編譯器3804代表一種編譯器,其可操作以產生x86二元碼3806(例如,物件碼),其可(具有或沒有額外鏈結處理)被執行於具有至少一x86指令集核心之處理器3816上。類似地,圖38顯示高階語言3802之程式可使 用替代的指令集編譯器3808而被編譯以產生替代的指令集二元碼3810,其可由沒有至少一x86指令集核心之處理器3814來本機地執行(例如,具有其執行MIPS Technologies of Sunnyvale,CA之MIPS指令集及/或其執行ARM Holdings of Sunnyvale,CA之ARM指令集的核心之處理器)。指令轉換器3812被用以將x86二元碼3806轉換為其可由沒有至少一x86指令集核心之處理器3814來本機地執行的碼。已轉換碼不太可能相同於替代的指令集二元碼3810,因為能夠執行此功能之指令很難製造;然而,已轉換碼將完成一般性操作並由來自替代指令集之指令所組成。因此,指令轉換器3812代表軟體、韌體、硬體、或其組合,其(透過仿真、模擬或任何其他程序)容許處理器或其他不具有x86指令集處理器或核心的電子裝置來執行x86二元碼3806。

Claims (17)

  1. 一種設備,包含:解碼器硬體,用以解碼用以支援資料推測執行(DSX)之指令類別,包括用以開始DSX、結束DSX之指令、及用以於DSX期間執行之推測指令;執行硬體,用以推測地執行包括該些推測指令之支援DSX的已解碼指令;及更新推測指令追蹤硬體,其中該些推測指令包括用以指示該DSX中之排序的運算元。
  2. 如申請專利範圍第1項之設備,其中該些推測指令為推測記憶體指令。
  3. 如申請專利範圍第2項之設備,其中該些推測記憶體指令係來自載入、儲存、散佈、及收集之群組。
  4. 如申請專利範圍第2項之設備,其中該些推測記憶體指令包括用以區分於非推測記憶體指令之間的運算碼。
  5. 如申請專利範圍第1項之設備,進一步包含:DSX追蹤硬體,用以追蹤推測記憶體存取並檢測推測指令之DSX中的排序違規,其係使用該些推測指令之指示排序、指令存取之位址、及被追蹤之該些推測指令是否為寫入;及用以於排序違規時觸發錯誤推測。
  6. 如申請專利範圍第5項之設備,其中該DSX追蹤硬體包含:移位器電路,用以移位推測記憶體指令之測試中元件的位址;雜湊電路,用以雜湊該已移位位址; 含有複數組項目之雜湊表,其中各項目係用以保持針對先前執行的推測記憶體指令之元件的有效位元、序號、識別號、及存取類型;及衝突檢查電路,用以判定介於該測試中元件與該些複數組項目的項目之間的衝突何時存在。
  7. 一種方法,包含:提取指令,其包括運算碼及用以指示資料推測指令(DSX)中之排序的運算元;解碼該指令;及推測地執行該已解碼指令並使用該指令之該排序以更新DSX追蹤硬體,當該指令為該DSX之一部分時。
  8. 如申請專利範圍第7項之方法,其中該指令為推測記憶體指令。
  9. 如申請專利範圍第8項之方法,其中該推測記憶體指令為載入、儲存、散佈、及收集之一。
  10. 如申請專利範圍第7項之方法,其中該DSX追蹤硬體包含:移位器電路,用以移位推測記憶體指令之測試中元件的位址;雜湊電路,用以雜湊該已移位位址;含有複數組項目之雜湊表,其中各項目係用以保持針對先前執行的推測記憶體指令之元件的有效位元、序號、識別號、及存取類型;及衝突檢查電路,用以判定介於該測試中元件與該些複 數組項目的項目之間的衝突何時存在。
  11. 如申請專利範圍第7項之方法,其中該雜湊表為光暈過濾器。
  12. 如申請專利範圍第7項之方法,進一步包含:判定該指令是該DSX之一部分。
  13. 如申請專利範圍第7項之方法,進一步包含:判定該指令不是該DSX之一部分;非推測地執行該指令。
  14. 一種儲存指令之非暫態機器可讀取媒體,當由機器所執行時該些指令係致使電路被製造,該電路包含:解碼器硬體,用以解碼用以支援資料推測執行(DSX)之指令類別,包括用以開始DSX、結束DSX之指令、及包括用以於DSX期間執行之排序運算元的推測指令;執行硬體,用以推測地執行包括該些推測指令之支援DSX的已解碼指令;及更新推測指令追蹤硬體,其中該些推測指令包括用以指示該DSX中之排序的運算元。
  15. 如申請專利範圍第14項之非暫態機器可讀取媒體,其中該些推測指令為推測記憶體指令。
  16. 如申請專利範圍第15項之非暫態機器可讀取媒體,其中該些推測記憶體指令係來自載入、儲存、散佈、及收集之群組。
  17. 如申請專利範圍第16項之非暫態機器可讀取媒體,其中該DSX追蹤硬體包含: 移位器電路,用以移位推測記憶體指令之測試中元件的位址;雜湊電路,用以雜湊該已移位位址;含有複數組項目之雜湊表,其中各項目係用以保持針對先前執行的推測記憶體指令之元件的有效位元、序號、識別號、及存取類型;及衝突檢查電路,用以判定介於該測試中元件與該些複數組項目的項目之間的衝突何時存在。
TW104138799A 2014-12-24 2015-11-23 用於資料推測執行之系統設備及方法 TWI630550B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/582,878 US10061589B2 (en) 2014-12-24 2014-12-24 Systems, apparatuses, and methods for data speculation execution
US14/582,878 2014-12-24

Publications (2)

Publication Number Publication Date
TW201631470A TW201631470A (zh) 2016-09-01
TWI630550B true TWI630550B (zh) 2018-07-21

Family

ID=56151343

Family Applications (1)

Application Number Title Priority Date Filing Date
TW104138799A TWI630550B (zh) 2014-12-24 2015-11-23 用於資料推測執行之系統設備及方法

Country Status (3)

Country Link
US (1) US10061589B2 (zh)
TW (1) TWI630550B (zh)
WO (1) WO2016105801A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10061583B2 (en) 2014-12-24 2018-08-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10387158B2 (en) 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10303525B2 (en) 2014-12-24 2019-05-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10387156B2 (en) 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10942744B2 (en) 2014-12-24 2021-03-09 Intel Corporation Systems, apparatuses, and methods for data speculation execution

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5872947A (en) * 1995-10-24 1999-02-16 Advanced Micro Devices, Inc. Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions
US6279101B1 (en) * 1992-08-12 2001-08-21 Advanced Micro Devices, Inc. Instruction decoder/dispatch
US20100095091A1 (en) * 2007-03-26 2010-04-15 Telefonaktiebolaget L M Ericsson (Publ) Processor, Method and Computer Program

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4864930A (en) 1985-05-09 1989-09-12 Graphics Microsystems, Inc. Ink control system
US5511172A (en) 1991-11-15 1996-04-23 Matsushita Electric Co. Ind, Ltd. Speculative execution processor
JP3670290B2 (ja) 1995-02-14 2005-07-13 富士通株式会社 特殊機能を提供する高性能投機的実行プロセッサの構造及び方法
KR100203131B1 (ko) 1996-06-24 1999-06-15 김영환 반도체 소자의 초저접합 형성방법
US6128703A (en) 1997-09-05 2000-10-03 Integrated Device Technology, Inc. Method and apparatus for memory prefetch operation of volatile non-coherent data
US6640315B1 (en) 1999-06-26 2003-10-28 Board Of Trustees Of The University Of Illinois Method and apparatus for enhancing instruction level parallelism
US6748589B1 (en) 1999-10-20 2004-06-08 Transmeta Corporation Method for increasing the speed of speculative execution
US6629234B1 (en) 2000-03-30 2003-09-30 Ip. First, L.L.C. Speculative generation at address generation stage of previous instruction result stored in forward cache for use by succeeding address dependent instruction
US6854048B1 (en) 2001-08-08 2005-02-08 Sun Microsystems Speculative execution control with programmable indicator and deactivation of multiaccess recovery mechanism
US7117347B2 (en) 2001-10-23 2006-10-03 Ip-First, Llc Processor including fallback branch prediction mechanism for far jump and far call instructions
US6845442B1 (en) 2002-04-30 2005-01-18 Advanced Micro Devices, Inc. System and method of using speculative operand sources in order to speculatively bypass load-store operations
US6950925B1 (en) 2002-08-28 2005-09-27 Advanced Micro Devices, Inc. Scheduler for use in a microprocessor that supports data-speculative execution
US20040049657A1 (en) 2002-09-10 2004-03-11 Kling Ralph M. Extended register space apparatus and methods for processors
TWI231450B (en) 2002-10-22 2005-04-21 Ip First Llc Processor including fallback branch prediction mechanism for far jump and far call instructions
US6862664B2 (en) 2003-02-13 2005-03-01 Sun Microsystems, Inc. Method and apparatus for avoiding locks by speculatively executing critical sections
US20040163082A1 (en) 2003-02-13 2004-08-19 Marc Tremblay Commit instruction to support transactional program execution
US7363470B2 (en) 2003-05-02 2008-04-22 Advanced Micro Devices, Inc. System and method to prevent in-flight instances of operations from disrupting operation replay within a data-speculative microprocessor
US7185323B2 (en) 2003-05-16 2007-02-27 Sun Microsystems, Inc. Using value speculation to break constraining dependencies in iterative control flow structures
US7500087B2 (en) 2004-03-09 2009-03-03 Intel Corporation Synchronization of parallel processes using speculative execution of synchronization instructions
US20070006195A1 (en) 2004-03-31 2007-01-04 Christof Braun Method and structure for explicit software control of data speculation
TWI305323B (en) 2004-08-23 2009-01-11 Faraday Tech Corp Method for verification branch prediction mechanisms and readable recording medium for storing program thereof
US7856537B2 (en) 2004-09-30 2010-12-21 Intel Corporation Hybrid hardware and software implementation of transactional memory access
US20070118696A1 (en) 2005-11-22 2007-05-24 Intel Corporation Register tracking for speculative prefetching
US7404041B2 (en) 2006-02-10 2008-07-22 International Business Machines Corporation Low complexity speculative multithreading system based on unmodified microprocessor core
US7681015B2 (en) 2007-01-30 2010-03-16 Nema Labs Ab Generating and comparing memory access ranges for speculative throughput computing
US9075622B2 (en) 2008-01-23 2015-07-07 Arm Limited Reducing errors in pre-decode caches
US8739141B2 (en) 2008-05-19 2014-05-27 Oracle America, Inc. Parallelizing non-countable loops with hardware transactional memory
US9569254B2 (en) 2009-07-28 2017-02-14 International Business Machines Corporation Automatic checkpointing and partial rollback in software transaction memory
US20120227045A1 (en) 2009-12-26 2012-09-06 Knauth Laura A Method, apparatus, and system for speculative execution event counter checkpointing and restoring
US8438571B2 (en) 2010-02-24 2013-05-07 International Business Machines Corporation Thread speculative execution and asynchronous conflict
US20120079245A1 (en) 2010-09-25 2012-03-29 Cheng Wang Dynamic optimization for conditional commit
US10387324B2 (en) 2011-12-08 2019-08-20 Intel Corporation Method, apparatus, and system for efficiently handling multiple virtual address mappings during transactional execution canceling the transactional execution upon conflict between physical addresses of transactional accesses within the transactional execution
WO2013115818A1 (en) 2012-02-02 2013-08-08 Intel Corporation A method, apparatus, and system for transactional speculation control instructions
US20140059333A1 (en) 2012-02-02 2014-02-27 Martin G. Dixon Method, apparatus, and system for speculative abort control mechanisms
US9268596B2 (en) 2012-02-02 2016-02-23 Intel Corparation Instruction and logic to test transactional execution status
US9652242B2 (en) 2012-05-02 2017-05-16 Apple Inc. Apparatus for predicate calculation in processor instruction set
US9348642B2 (en) 2012-06-15 2016-05-24 International Business Machines Corporation Transaction begin/end instructions
US9298631B2 (en) * 2012-06-15 2016-03-29 International Business Machines Corporation Managing transactional and non-transactional store observability
US9811340B2 (en) 2012-06-18 2017-11-07 Intel Corporation Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor
US9367471B2 (en) 2012-09-10 2016-06-14 Apple Inc. Fetch width predictor
US9262206B2 (en) 2014-02-27 2016-02-16 International Business Machines Corporation Using the transaction-begin instruction to manage transactional aborts in transactional memory computing environments
US9454370B2 (en) 2014-03-14 2016-09-27 International Business Machines Corporation Conditional transaction end instruction
US10061583B2 (en) 2014-12-24 2018-08-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10387156B2 (en) 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US9785442B2 (en) 2014-12-24 2017-10-10 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10303525B2 (en) 2014-12-24 2019-05-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10387158B2 (en) 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US20160357556A1 (en) 2014-12-24 2016-12-08 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for data speculation execution

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6279101B1 (en) * 1992-08-12 2001-08-21 Advanced Micro Devices, Inc. Instruction decoder/dispatch
US5872947A (en) * 1995-10-24 1999-02-16 Advanced Micro Devices, Inc. Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions
US20100095091A1 (en) * 2007-03-26 2010-04-15 Telefonaktiebolaget L M Ericsson (Publ) Processor, Method and Computer Program

Also Published As

Publication number Publication date
US20160188343A1 (en) 2016-06-30
WO2016105801A1 (en) 2016-06-30
US10061589B2 (en) 2018-08-28
TW201631470A (zh) 2016-09-01

Similar Documents

Publication Publication Date Title
TWI610232B (zh) 用於資料預測執行之系統、裝置及方法
TWI575453B (zh) 用於資料預測執行之系統、設備及方法
TWI657371B (zh) 用於資料推測性執行的系統、設備及方法
TWI575452B (zh) 用於資料推測性執行的系統、設備及方法
TWI509406B (zh) 用於以推測支援來執行向量化的裝置及方法
TWI630550B (zh) 用於資料推測執行之系統設備及方法
TWI610230B (zh) 用於資料推測執行的系統、設備及方法
TWI620122B (zh) 用於資料推測執行的設備和方法
TW201740290A (zh) 用於轉換編碼格式的硬體設備及方法
TWI567643B (zh) 用於資料推測執行的系統、設備和方法