TWI578230B - 用於執行複數個乘法運算的方法和設備 - Google Patents

用於執行複數個乘法運算的方法和設備 Download PDF

Info

Publication number
TWI578230B
TWI578230B TW104105354A TW104105354A TWI578230B TW I578230 B TWI578230 B TW I578230B TW 104105354 A TW104105354 A TW 104105354A TW 104105354 A TW104105354 A TW 104105354A TW I578230 B TWI578230 B TW I578230B
Authority
TW
Taiwan
Prior art keywords
instruction
value
field
processor
job
Prior art date
Application number
TW104105354A
Other languages
English (en)
Other versions
TW201602905A (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 TW201602905A publication Critical patent/TW201602905A/zh
Application granted granted Critical
Publication of TWI578230B publication Critical patent/TWI578230B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Description

用於執行複數個乘法運算的方法和設備
本發明大致上關於電腦處理器領域。特別地,本發明關於有效率地執行複數個乘法運算的方法和設備。
指令集、或是指令集架構(ISA)是與程式化有關的電腦架構的一部份,以及包含本地資料型式、指令、暫存器架構、定址模式、記憶體架構、中斷及例外處理、以及外部輸入及輸出(I/O)。應指出,指令一詞於此大致上意指巨集指令,其是提供給處理器用於執行的指令,巨集指令係與微指令或微作業(微op)相反的,微指令或微作業是將巨集指令解碼之處理器的解碼器的結果。
ISA與用以實施指令集的處理器設計技術集的微架構有所區別。設有不同微架構的處理器共用共同的指令集。舉例而言,Intel® Pentium 4處理器、Intel® CoreTM處理器、及來自加州太陽谷的超微公司的之處理器實施成幾乎是相同版本的x86指令集(某些程度上增加更新的版 本),但具有不同的內部設計。舉例而言,在使用習知的技術之不同微架構中,以不同方式實施相同的ISA暫存器架構,其包含專用的實體暫存器、使用暫存器重命令機制(例如使用暫存器混疊表(RAT)、重排序緩衝器(ROB)及退出暫存器檔案)之一或更多動態分配實體暫存器。除非另外指明,否則,此處使用暫存器架構、暫存器檔案、及暫存器之文句以表示軟體/程式人員可看到的及指令指明暫存器的方式。在需要區別的情形中,將使用形容詞「邏輯」、「架構」、或「軟體可見的」來表示暫存器架構中的暫存器/檔案,而使用不同的形容詞以指明給定的微架構中的目的地暫存器(例如,實體暫存器、重排序緩衝器、退出暫存器、暫存器池)。
指令集包含一或更多指令格式。給定的指令格式界定不同的欄位(位元數目、位元位置)以特別指明要被執行的作業(作業碼)以及作業要於其上執行的運算元。某些指令格式可以經由指令樣板(或副子令格式)的界定而進一步斷開。舉例而言,給定的指令格式的指令樣板可以被界定為具有不同子集合的指令格式欄位(所包含的多個欄位典型上是相同次序,但是,因為有較少的欄位被包含,所以,至少某些欄位具有不同的位元位置)及/或被界定為具有被不同解譯的給定欄位。因此,使用給定的指令格式(以及,假使被界定時,在指令格式的多個指令樣板中的給定之一中)以表示給定的指令,以及,指明作業及運算元。舉例而言,指令串是特定序列的指令,其中序列中 的各指令是依指令格式的指令發生(以及,假使被界定時,該指令格式的指令樣板中之給定之一)。
科學的、財務的、自動向量化的一般目的、RMS(辨識、開發及合成)、以及影像和多媒體應用(例如,2D/3D圖形、影像處理、影像壓縮/解壓縮、語音辨識演繹法及音頻操作)通常要求對大量的資料項執行相同的作業(稱為「資料平行性」)。單一指令多資料(SIMD)意指促使處理器對多資料項執行作業之指令型式。SIMD技術特別適合某些處理器,這些處理器能將暫存器中的多個位元邏輯上分成一些固定大小的資料元,各資料元代表分別的值。舉例而言,在64位元暫存器中的位元被指定為作為對四個各別代表分別的16位元值之分別的16位元資料元作業之源運算元。此型式的資料被稱為「緊縮」資料型式或是「向量」資料型式,以及,此資料型式的運算元被稱為緊縮資料運算元或是向量運算元。換言之,緊縮資料項或向量意指緊縮資料元的序列,且緊縮資料運算元或向量運算元可以是SIMD指令的源或目的地運算元(也稱為緊縮資料指令或向量指令)。
舉例而言,一型式的SIMD指令指明以垂直方式對二源向量運算元執行單一向量作業,以便以相同數目的資料元、以及依相同資料元次序,產生相同大小的目的地向量運算元(也稱為結果向量運算元)。舉例而言,源向量運算元中的資料元稱為源資料元,而目的地向量運算元中的資料元稱為目的地或結果資料元。這些源向量運算元具有 相同的尺寸以及含有相同寬度的資料元,因此,它們含有相同數目的資料元。在二源向量運算元中相同的位元位置中的源資料元形成資料元對(也稱為對應的資料元)。對這些源資料元對中的各對分別地執行該SIMD指令指明的作業以產生結果資料元的比對數目,因此,各對源資料元具有對應的結果資料元。由於作業是垂直的且由於結果向量運算元是相同尺寸、具有相同數目的資料元、及結果資料元以與源向量運算元相同的資料元次序儲存,所以,結果資料元與源向量運算元中它們對應的成對的的源資料元位於相同的結果向量運算元的位元位置。除了此舉例說明的型式的SIMD指令之外,還有各種其它型式的SIMD指令(例如,僅具有一或具有二以上的源向量運算元;以水平方式操作;產生具有不同大小的結果向量運算元;具有不同尺寸的資料元;及/或具有不同的資料元次序)。應瞭解,目的地向量運算元(或目的地運算元)一詞定義為執行指令指定的作業之直接結果,包含目的地運算元儲存在位置(其可為該指令指定的暫存器或記憶體位址),以致於其可由另一指令存取作為源運算元(由另一指令的相同位置指定)。
例如具有包含x86的指令集、MMXTM、串流SIMD擴充(SSE)、SSE2、SSE3、SSE4.1、及SSE4.2指令之Intel® CoreTM處理器採用的SIMD技術能夠顯著增進應用性能(CoreTM是加州Santa Clara的Intel Corporation的註冊商標或商標。也已經設計及公告稱為進階向量擴充 (AVX)以及使用VEX碼化設計的其它SIMD擴充集。
與本申請案特別相關的一指令乘法指令。在高性能計算平台中多個演繹法將多個計算值相乘。一般而言,各乘法運算要求執行一指令。
100‧‧‧管線
190‧‧‧核心
200‧‧‧處理器
300‧‧‧系統
400‧‧‧系統
500‧‧‧系統
600‧‧‧系統晶片
800‧‧‧主記憶體
900‧‧‧VMUL3執行邏輯
1700‧‧‧暫存器架構
從參考下述附圖之詳細說明,可較佳地瞭解本發明,其中:圖1A是方塊圖,顯示根據本發明的實施例之舉例說明的有序提取、解碼、退出管線以及舉例說明之暫存器重命名、亂序發佈/執行管線;圖1B是方塊圖,顯示根據本發明的實施例之包含於處理器中之舉例說明的有序提取、解碼、退出核心以及舉例說明之暫存器重命名、亂序發佈/執行架構核心的實施例;圖2是根據本發明的實施例之具有整合記憶體控制器及圖形處理器之多核心處理器及單核心處理器的方塊圖;圖3顯示根據本發明的一實施例之系統的方塊圖;圖4顯示根據本發明的實施例之第二系統的方塊圖;圖5顯示根據本發明的實施例之第三系統的方塊圖;圖6顯示根據本發明的實施例之系統晶片(SoC)的方塊圖;圖7是方塊圖,對比根據本發明的實施例之使用軟體指令轉換器以將源指令集中的二進位指令轉換成標的指令 集中的二進位指令;圖8顯示實施本發明的實施例之處理器架構的一實施例;圖9A顯示用於執行複數個乘法運算之架構的一實施例;圖9B顯示用於執行複數個乘法運算之架構的RKS一實施例;圖10顯示用於執行複數個乘法運算之方法的一實施例;圖11A-B是方塊圖,顯示根據本發明的實施例之同屬向量友善指令格式及其指令樣板。圖12A-D是方塊圖,顯示根據本發明的實施例之舉例說明的特定向量友善指令格式。圖13是根據本發明的一實施例之暫存器架構的方塊圖。
【發明內容及實施方式】
在下述說明中,為了說明目的而揭示眾多特定細節,以助於完整瞭解下述本發明的實施例。但是,沒有這些特定細節中的某些細節,習於此技藝者仍可實施本發明的實施例。在其它情形中,習知的結構及裝置以方塊圖顯示,以免模糊本發明的實施例之基本原理。
舉例說明的處理器架構及資料型式
圖1A是方塊圖,顯示根據本發明的實施例之舉例說明的有序提取、解碼、退出管線以及舉例說明之暫存器重命名、亂序發佈/執行管線。圖1B是方塊圖,顯示根據本發明的實施例之包含於處理器中之舉例說明的有序提取、解碼、退出核心以及舉例說明之暫存器重命名、亂序發佈/執行架構核心的實施例。圖1A-B中的實線框顯示管線及核心的有序部份,而選加的虛線框顯示暫存器重命名、亂序發佈/執行管線及核心。
在圖1A中,處理器管線100包含提取級102、長度解碼級104、解碼級106、分配級108、重命名級110、排程(也稱為發送或發佈)級112、暫存器讀取/記憶體讀取級114、執行級116、寫回/記憶體寫入級118、例外處理級122、及提交級124。
圖1B顯示處理器核心190,其包含耦合至執行引擎單元150的前端單元130,引擎單元150及前端單元130都耦合至記憶體單元170。核心190可為精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、超長指令字(VLIW)核心、或是混合或替代核心型式。又另一選項,核心190可為特別用途核心,例如,網路或通訊核心、壓縮引擎、共處理器核心、一般用途計算圖形處理單元(GPGPU)核心、圖形核心、等等。
前端單元130包含耦合至指令快取單元134的分枝預測單元132,指令快取單元134耦合至指令轉譯旁看緩衝器(TLB)136,指令轉譯旁看緩衝器(TLB)136耦合至 指令提取單元138,指令提取單元138耦合至解碼單元140。解碼單元140(或解碼器)將指令解碼,以及產生從原始指令解碼、或是以其它方式反應原始指令、或是從原始指令導出之一或更多微作業、微碼進入點、微指令、其它指令、或其它控制訊號,以作為輸出。可以使用各種不同的機構以實施解碼單元140。適當機構的實例包含但不限於查詢表、硬體實施、可編程邏輯陣列(PLA)、微碼微讀記憶體(ROM)、等等。在一實施例中,核心190包含微碼ROM或儲存微碼以用於某些巨集指令的微碼之其它媒體(例如,在解碼單元140或者是前端單元130內)。解碼單元140耦合至執行引擎單元150中的重命名/分配器單元152。
執行引擎單元150包含耦合至退出單元154及一或更多排程器單元156的集合之重命名/分配器單元152。排程器單元156代表任何數目的不同排程器、包含保留站、中央指令窗、等等。排程器單元156耦合至實體暫存器檔案單元158。各實體暫存器檔案單元158代表一或更多實體暫存器檔案,不同的實體暫存器檔案儲存一或更多不同的資料型式,例如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如指令指標器,指令指標器是要被執行的下一指令之位置)、等等。在一實施例中,實體暫存器檔案單元158包括向量暫存器單元、寫入遮罩暫存器單元、及純量暫存器單元。這些暫存器單元可以提供架構向量暫存器、向量遮罩暫存器、及一般用 途暫存器。實體暫存器檔案單元158由退出單元154重疊以顯示實施暫存器重命名及亂序執行的各種方式(例如,使用再排序緩衝器和退出暫存器檔案;使用未來檔案、歷史緩衝器、及退出暫存器檔案;使用暫存器映射及暫存器庫;等等)。退出單元154及實體暫存器檔案單元158耦合至執行簇160。執行簇160包含一或更多執行單元162及一或更多記憶體存取單元164的集合。執行單元162執行多種作業(例如,偏移、加法、減法、乘法)及對各種型式的資料(例如純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)執行。雖然某些實施例包含多個專用於特定指令或功能集的執行單元,但是,其它實施例可以僅包含都執行所有功能之多個執行單元或是僅一執行單元。由於某些實施例產生用於某些型式的資料/作業之分別的管線(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或記憶體存取管線,這些管線均具有它們自已的排程器單元、實體暫存器單元、及/或執行簇-以及,在分別的記憶體存取管線的情形中,實施某些實施例,其中,僅有此管線的執行簇具有記憶體存取單元164),所以,排程器單元156、實體暫存器檔案單元158、及執行簇160顯示為可能是複數的。也應瞭解,在使用分別的管線之情形中,這些管線中之一或更多可以是亂序發佈/執行而其餘的為有序。
記憶體存取單元164的組耦合至記憶體單元170,記憶體單元170包含資料轉譯旁看緩衝器(TLB)單元 172,資料TLB單元172耦合至資料快取單元174,資料快取單元174耦合至等級2(L2)快取單元176。在一舉例說明的實施例中,記憶體存取單元164包含載入單元、儲存位址單元、及儲存資料單元,各單元均耦合至記憶體單元170中的資料TLB單元172。指令快取單元134又耦合至記憶體單元170中的等級2(L2)快取單元176。L2快取單元176耦合至一或更多其它等級的快取記憶體以及最後耦合至主記憶體。
舉例而言,舉例說明的暫存器重命名、亂序發佈/執行核心架構可以如下所述地實施管線100:1)指令提取138執行提取及長度解碼級102和104;2)解碼單元140執行解碼級106;3)重命名/分配器單元152執行分配級108及重命名級110;4)排程器單元156執行排程級112;5)實體暫存器檔案單元158及記憶體單元170執行暫存器讀取/記憶體讀取級114;執行簇160執行執行級116;6)記憶體單元170及實體暫存器檔案單元158執行寫回/記憶體寫入級118;7)在例外處理級122中牽涉到多種單元;及8)退出單元154及實體暫存器單元158執行提交級124。
核心190支援一或更多指令集(例如,x86指令集(具有添加更新的版本之某些延伸);加州Sunvale的MIPS Technologies公司之MIPS指令集;加州Sunvale的ARM Holdings公司的ARM指令集(具有例如NEON等選加的延伸)),包含此處所述的指令。在一實施例中,核 心190包含邏輯以支援緊縮資料指令集延伸(例如,如下所述之AVX1、AVX2、及/或某些形式的同屬向量友善指令格式(U=0及/或U=1)),藉以允許由很多多媒體應用所使用的作業使用緊縮資料來執行。
應瞭解,核心可支援多緒化(執行二或更多平行組的作業或緒),以及以包含時間切片多緒化、同時多緒化(其中,單一實體核心提供用於各緒之邏輯核心,實體核心是同時多緒的)等各種式方、或者其組合,而如此執行(例如,在Intel®的混合緒化技術中之時間切片提取及解碼和之後的同時多緒化)。
雖然在亂序執行的背景下說明暫存器重命名,但是,應瞭解,在有序架構中可使用暫存器重命名。雖然所示的處理器之實施例也包含分別的指令及資料快取單元134/174以及共用的L2快取單元176,但是,替代的實施例可以具有用於指令及資料之單一內部快取記憶體,例如等級1(L1)內部快取記憶體、或多等級內部快取記憶體。在某些實施例中,系統包含內部快取記憶體及核心和/或處理器之外部的外部快取記憶體。替代地,所有快取記憶體可以是在核心及/或處理器的外部。
圖2是根據本發明的實施例之具有一個以上的核心、具有整合記憶體控制器及具有整合的圖形之處理器200的方塊圖。圖2中的粗線框顯示具有單核心202A的處理器200、系統代理器210、一或更多匯流排控制器單元216,而選加的虛線框顯示具有多核心202A-N的替代處理器 200、系統代理器單元210中的一或更多整合的記憶體控制器元214的組、以及特別用途的邏輯208。
因此,處理器200的不同實施包含:1)具有與圖形及/或科學(輸貫量)邏輯(包含一或更多核心)整合之特定用途的邏輯208之CPU,以及,核心202A-N是一或更多一般用途核心(例如,一般用途的有序核心、一般用途的亂序核心、二者的組合);2)設有核心202A-N的共處理器是大數目的主要用於圖形及/或科學(輸貫量)之特定用途核心;以及,3)設有核心202A-N的共處理器是大數目的一般用途的有序核心。因此,處理器200可為一般用途的處理器、共處理器或特定用途的處理器,舉例而言,網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(一般用途的圖形處理單元)、高輸貫量多整合核心(MIC)處理器(包含30或更多的核心)、嵌入式處理器、等等。處理器可以實施於一或更多晶片中。使用例如BiCMOS、CMOS、或NMOS等多種製程技術中的任一技術,處理器200可以是部份及/或實施在一或更多基底上。
記憶體階層包含在核心內的一或更多等級的快取、一或更多共用快取單元206的組、及耦合至整合記憶體控制器單元214組之外部記憶體(未顯示)。共用快取單元206組可以包含例如等級2(L2)、等級3(L3)、等級4(L4)、或其它等級快取等一或更多中級快取、最後等級快取(LLC)、及/或其組合。雖然在一實施例中,環式 互連單元212將整合圖形邏輯208、共用快取單元206的組、及系統代理單元210/整合的記憶體控制器單元214互連,但是,替代實施例可以使用任何數目的已知技術來互連這些單元。在一實施例中,在一或更多快取單元206與核心202-A-N之間維持相干性。
在某些實施例中,一或更多核心202A-N能夠多緒化。系統代理器210包含那些元件協調及作業核心202A-N。系統代理器單元210可以包含例如電力控制單元(PCU)及顯示單元。PCU可以是或包含調節核心202A-N及整合圖形邏輯208的電力狀態所需的邏輯及元件。顯示單元是用於驅動一或更多外部連接的顯示器。
以架構指令集的觀點而言,核心202A-N可以是同質的或異質的;亦即,核心202A-N中的二或更多核心能夠執行相同的指令集,而其它核心能夠僅執行指令集的子集合或不同的指令集。在一實施例中,核心202A-N是異質的以及包含下述之「小」核心及「大」核心。
圖3-6是舉例說明的電腦架構的方塊圖。用於膝上型電腦、桌上型電腦、手持PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位訊號處理器(DSP)、圖形裝置、電動遊戲裝置、機上盒、微控制器、行動電話、可攜式媒體播放器、手持裝置、及各式各樣的其它電子裝置等技術領域中熟知的其它系統設計及配置也是適合的。一般而言,能夠併有此處所揭示的處理器及/或其它執行邏輯的眾多種類的系 統或電子裝置通常是適合的。
現在參考圖3,其顯示根據本發明的一實施例之系統300的方塊圖。系統300可以包含耦合至控制器集線器320之一或更多處理器310、315。在一實施例中,控制器集線器320包含圖形記憶體控制器集線器(GMCH)390及輸入/輸出集線器(IOH)350(可以在分開的晶片上);GMCH 390包含記憶體及圖形控制器,記憶體340及共處理器345耦合至記憶體及圖形控制器;IOH 350將輸入/輸出(I/O)裝置360耦合至GMCH 390。替代地,記憶體及圖形控制器中之一或二者整合於處理器之內(如此處所述般),記憶體340及共處理器345直接耦合至處理器310,以及,控制器集線器320與IOH 350在單一晶片中。
在圖3中以虛線顯示增加的處理器315之選加本質。各處理器310、315包含此處所述的處理核心中之一或更多且可為處理器200的某版本。
舉例而言,記憶體340可以是動態隨機存取記憶體(DRAM)、相變記憶體(PCM)、或是二者的組合。對於至少一實施例而言,控制器集線器320經由例如前側匯流排(FSB)等多點匯流排、例如快速路徑互連(QPI)等點對點介面、或是類似連接395而與處理器310、315通訊。
在一實施例中,共處理器345是特別用途的處理器,例如高輸貫量MIC處理器、網路或通訊處理器、壓縮引 擎、圖形處理器、GPGPU、嵌入式處理器、等等。在一實施例中,控制器集線器320包含整合圖形加速器。
以包含架構、微架構、熱、耗電特徵、等等度量計量領域的觀點而言,實體源310、315之間有各種差異。
在一實施例中,處理器310執行控制一般型式的資料處理作業的指令。嵌入於指令內的可為共處理器指令。處理器310將這些共處理器指令視為應由附接的共處理器345執行的型式。因此,處理器310在共處理器匯流排或是其它互連上發佈這些共處理器指令(或是代表共處理器指令的控制訊號)給共處理器345。共處理器345接受及執行收到的共處理器指令。
現在參考圖4,其為根據本發明的實施例之第一更特定的舉例說明的系統400的方塊圖。如圖4中所示般,多處理器系統400是點對點互連系統,以及包含經由點對點互連450耦合的第一處理器470和第二處理器480。各處理器470及480可以是某版本的處理器200。在本發明的一實施例中,處理器470和480分別是處理器310和315,而共處理器438是共處理器345。在另一實施例中,處理器470及480分別是處理器310和共處理器345。
處理器470和480顯示為分別包含整合記憶體控制器(IMC)單元472和482。處理器470也包含點對點(P-P)介面476和478作為其匯流排控制器單元的一部份;類似地,第二處理器480包含P-P介面486和488。處理 器470、480使用P-P介面電路478、488而經由點對點(P-P)介面450交換資訊。如圖4所示,IMC 472及482將處理器耦合至各別記憶體,亦即記憶體432和記憶體434,它們可以是本地附著至各別處理器的主記憶體的部份。
處理器470、480使用點對點介面電路476、494、486、498,經由個別的P-P介面452、454而均可以與晶片組490交換資訊。晶片組490經由高性能圖形介面439,可選擇地與共處理器438交換資訊。在一實施例中,共處理器438是特定用途處理器,例如高輸貫量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器、等等。
共用的快取記憶體(未顯示)可以包含在任一處理器中或二處理器的外部、但尚未經由P-P互連與處理器連接,以致於假使處理器處於低電力模式中時,任一或二處理器的本地快取資訊可以儲存在共用的快取記憶體中。
晶片組490可以經由介面496而耦合至第一匯流排416。在一實施例中,第一匯流排416可以是週邊元件互連(PCI)匯流排,或是例如PCI快速匯流排或其它第三代I/O互匯流排等匯流排,但是,本發明的範圍不侷限於此。
如圖4中所示般,各式各樣的I/O裝置414與匯流排橋接器418耦合至第一匯流排416,匯流排橋接器418耦合第一匯流排416至第二匯流排420。在一實施例中,例 如共處理器、高輸貫量MIC處理器、GPGPU、加速器(例如圖形加速器或是數位訊號處理(DSP)單元)、現場可編程閘陣列、或是任何其它處理器等一或更多增加的處理器415耦合至第一匯流排416。在一實施例中,第二匯流排420可以是低接腳數(LPC)匯流排。在一實施例中,各種裝置可以耦合至第二匯流排420,舉例而言,包含鍵盤及/或滑鼠422、通訊裝置427及例如碟片驅動器或其它大量儲存裝置等包含指令/碼及資料430的儲存單元428。此外,音訊I/O 424可以耦合至第二匯流排420。注意,其它架構是可能的。舉例而言,取代圖4的點對點架構,系統可以實施多點匯流排或其它此類架構。
現在參考圖5,其顯示根據本發明的實施例之第二更特定舉例說明的系統500之方塊圖。圖4及5中類似的元件帶有類似的代號,以及,圖4的某些態樣在圖5中被省略,以免模糊圖5的其它態樣。
圖5顯示處理器470、480分別包含整合的記憶體及I/O控制邏輯(CL)472和482。因此,CL 472、482包含整合記憶體控制器單元及包含I/O控制邏輯。圖5顯示不僅記憶體432、434耦合至CL 472、482,I/O裝置514也耦合至控制邏輯472、482。舊制I/O裝515耦合至晶片組490。
現在參考圖6,其顯示根據本發明的實施例之SoC 600的方塊圖。圖2中類似的元件帶有類似的代號。而且,虛線框是關於更多進階的SoC的選加特點。在圖6 中,互連單元602耦合至:應用處理器610,包含一或更多核心202A-N及共用快取單元206的集合;系統代理器單元210;匯流排控制器單元216;整合記憶體控制器單元214;包含整合圖形邏輯、影像處理器、音訊處理器、以及視訊處理器之一或更多共處理器620的組;靜態隨機存取記憶體(SRAM)單元630;直接記憶體存取(DMA)單元632;以及用於耦合至一或更多外部顯示器的顯示單元640。在一實施例中,共處理器620包含特定用途的處理器,例如網路或通訊處理器、壓縮引擎、GPGPU、高輸貫量MIC處理器、嵌入式處理器、等等。
此處揭示的機構實施例可以以硬體、軟體、韌體或這些實施方式的結合來實施。本發明的實施例可以實施成在可編程系統上執行的電腦程式或程式碼,可編程系統包括至少一處理器、儲存系統(包含依電性及非依電性記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置。
例如圖4中所示的碼430等程式碼可以應用至輸入指令以執行此處所述的功能和產生輸出資訊。輸出資訊可以以已知方式應用至一或更多輸出裝置。為了此應用,處理系統包含具有例如數位訊號處理器(DSP)、微控制器、特定應用積體電路(ASIC)、或微處理器等處理器之任何系統。
程式碼可以以高階程序或物件導向的程式語言實施,以與處理系統通訊。假使需要時,程式碼也可以以組合或 機器語言來實施。事實上,此處所述的機構在範圍上不侷限於任何特定的程式語言。在任何情形中,語言可以是編譯或解譯的語言。
至少一實施例的一或更多態樣可以由儲存在機器可讀取的媒體上之代表指令實施,代表指令代表處理器內各種邏輯,代表指令由機器讀取時促使機器製造邏輯以執行此處所述的技術。稱為「IP核心」的這些代表可以儲存在實體的、機器可讀取的媒體並供應至各式各樣的客戶或製造設施,而載入至真正地製造處理器或邏輯的製造機器中。
此機器可讀取的媒體包含但不限於由機器或裝置製造或形成的物件之非暫時性、實體配置,包括例如硬碟等儲存媒體、包含軟碟、光碟、光碟唯讀記憶體(CD-ROM)、可重寫光碟(CD-RW)、及磁光碟等任何其它型式的碟片、例如唯讀記憶體(ROM)、例如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)等隨機存取記憶體(RAM)、可抹拭可編程唯讀記憶體(EPPROM)、快閃記憶體、電可抹拭可編程唯讀記憶體(EEPROM)等半導體裝置、相位改變記憶體(PCM)、磁性或光學卡、或適用於儲存電子指令的任何其它型式的媒體。
因此,本發明的實施例也包含含有指令或含有設計資料之非暫時的、實體的機器可讀取的媒體,所述設計資料是例如硬體說明語言(HDL),其界定此處所述的結構、電路、裝置、處理器及/或系統特徵。這些實施例也意指 程式產品。
在某些情形中,指令轉換器可以用以將指令從源指令集轉換至標的指令集。舉例而言,指令轉換器可以將指令轉譯(例如,使用靜態二進位轉譯、包含動態編譯的動態二進位轉譯)、變形、模仿、或其它方式轉換至由核心處理的一或更多其它指令。指令轉換器可以以軟體、硬體、韌體、或其結合來實施。指令轉換器可以是在處理器上、不在處理器上、或部份在處理器上及部份不在處理器上。
圖7是方塊圖,對比根據本發明的實施例之使用軟體指令轉換器以將源指令集中的二進位指令轉換成標的指令集中的二進位指令。在顯示的實施例中,指令轉換器是軟體指令轉換器,但是,指令轉換器可以替代地以軟體、硬體、或其各種結合來實施。圖7顯示高階語言702的程式,其可以由X86編譯器704編譯以產生X86二進位碼706,二進位碼706可以由具有至少一X86指令集核心716的處理器原地執行。具有至少一x86指令集核心716的處理器代表藉由共容地執行或其它方式地處理下述,而能夠與具有至少一x86指令集核心的英特爾處理器執行實質上相同功能的任何處理器:(1)英特爾x86指令集核心的指令集的實質部份,或是(2)以在具有至少一x86指令集核心的Intel處理器上執行為目的之應用程式或其它軟體的物件碼版本,以便取得與具有至少一x86指令集核心的英特爾處理器實質上相同的結果。x86編譯器704代表可以操作以產生x86二進位碼706(例如,物件碼) 之編譯器,x86二進位碼706藉由或不藉由增加的鏈結處理,都可以在具有至少一x86指令集核心716的處理器上執行。類似地,圖7顯示高階語言702的程式,使用替代指令集編譯器708,可以將其編譯以產生替代指令集二進位碼710,替代指令集二進位碼710可以由不具有至少一x86指令集核心714的處理器(例如,具有執行例如加州Sunnyvale的MIPS Technologies公司的MIPS指令集及/或加州Sunnyvale的ARM Holdings公司的ARM指令集之核心的處理器)原地執行。指令轉換器712用以將x86二進位碼706轉換成可以由不具有x86指令集核心714的處理器原地執行的碼。由於能夠如此執行的指令轉換器難以製造,所以,此轉換的碼不太可能與替代指令集二進位碼710相同;但是,所述轉換的碼將完成一般操作及由來自替代指令集的指令組成。因此,指令轉換器712代表軟體、韌體、硬體或其組合,其經由仿真、模擬或任何其它處理而允許不具有x86指令集處理器或核心的處理器或其它電子裝置來執行x86二進位碼706。
用於執行複數個乘法運算的方法及設備
下述本發明的實施例提供用於在單一指令中執行二乘法之多乘法指令的系列之架構擴充。在一實施例中,架構擴充提供給英特爾架構(IA),但是,本發明的基本原理不侷限於任何特定ISA。
在現存的處理器架構中,各乘法指令執行單一乘法運 算。舉例而言,在英特爾架構中,VMULSS及VMULPS將二單一精度浮點值相乘,而VMULSD和VMULPD將二雙精度浮點值相乘。相對地,此處所述的雙乘法指令系列(在一實施例中標示為VMUL3),在單一指令中執行二乘法,藉以降低功率及釋放解碼槽以用於其它指令。在一實施例中,對三源運算元執行二乘法:第二及第三源運算元首先相乘以產生中間結果,然後中間結果再乘以第一源運算元。
如圖8所示,本發明的實施例可以在舉例說明的處理器855上實施,處理器855包含執行單元840,執行單元840具有VMUL3執行邏輯841以執行此處所述的VMUL3指令。暫存器集805提供用於運算元、控制資料及其它型式的資料之暫存器儲存,而執行單元840執行指令串。
為了簡明起見,於圖8中顯示單一處理器核心(「核心0」)的細節。但是,將瞭解,圖8中所示的各核心可以具有與核心0相同的邏輯集。如同所示,各核心也包含專用等級1(L1)快取記憶體812及等級2(L2)快取記憶體811,用於根據指定的快取管理政策而快取指令及資料。L1快取記憶體812包含用於儲存指令之分別的指令快取記憶體820、以及用於儲存資料之分別的資料快取記憶體821。以可為固定尺寸(例如長度64、128、512位元組)之快取線的粒度,管理儲存於各式各樣的處理器快取記憶體內的指令及資料。本舉例說明的實施例之各核心具有:指令提取單元810,用於從主記憶體800及/或共 同等級3(L3)快取記憶體816提取指令;解碼單元830,用於將指令解碼(例如,將程式指令解碼成微作業或是「μ ops」);執行單元840,用於執行指令(例如,如此處所述的VMUL3指令);以及,寫回單元850,用於使指令退出及將結果寫回。
指令提取單元810包含各式各樣習知的組件,包含:下一指令指標器803,用於儲存要從記憶體800(或是快取記憶體中之一)提取的下一指令之位址;指令轉譯旁看緩衝器(ITLB)804,用於儲存最近使用的虛擬對實體指令位址對映,以增進位址轉譯速度;分支預測單元802,用於推測地預測指令分支位址;以及,分支標的緩衝器(BTB)801,用於儲存分支位址及標的位址。一旦被提取時,指令接著被串流至指令管線的其餘級,指令管線包含解碼單元830、執行單元840、及寫回單元850。這些單元中的各單元之結構及功能是具有此技藝中的一般技術者所熟知的,且於此將不會詳述,以免模糊本發明的不同實施例之有關態樣。
在本發明的一實施例中,VMUL3執行邏輯841執行下述指令系列:VMUL3SS xmm1{k1}{z}, xmm2, xmm3/mV{er}
VMUL3PS zmm1{k1}{z}, zmm2, zmm3/B32(mV){er}
VMUL3SD xmm1{k1}{z}, xmm2, xmm3/mV{er}
VMUL3PD zmm1{k1}{z}, zmm2, zmm3/B64(mV){er}
其中,xmm1-3及zmm1-3是在暫存器組805內的暫 存器,儲存單一精度(32位元)或是雙精度(64位元)浮點格式之緊縮或純量浮點值。
特別地,在一實施例中,VMUL3SS將儲存在xmm1、xmm2、及xmm3中的三個純量、單精度浮點值相乘。在運算時,第二運算元(來自xmm2)乘以第三運算元(來自xmm3),並將結果(具有中間捨入)乘以第一運算元(來自xmm1)且儲存於目的地暫存器中。在一實施例中,目的地暫存器與用於儲存第一運算元(例如xmm1)的暫存器是相同的暫存器。
在一實施例中,VMUL3PS將儲存在xmm1、xmm2、及xmm3中的三個緊縮、單精度浮點值相乘。在運算時,第二運算元(來自zmm2)乘以第三運算元(來自zmm3),並將結果(具有中間捨入)乘以第一運算元(來自zmm1)且儲存於目的地暫存器中。在一實施例中,目的地暫存器與用於儲存第一運算元(例如zmm1)的暫存器是相同的暫存器。
在一實施例中,VMUL3SD將儲存在xmm1、xmm2、及xmm3中的三個純量、雙精度浮點值相乘。在運算時,第二運算元(來自xmm2)乘以第三運算元(來自xmm3),並將結果(具有中間捨入)乘以第一運算元(來自xmm1)且儲存於目的地暫存器中。在一實施例中,目的地暫存器與用於儲存第一運算元(例如xmm1)的暫存器是相同的暫存器。
最後,在一實施例中,VMUL3PD將儲存在zmm1、 zmm2、及zmm3中的三個緊縮、雙精度浮點值相乘。在運算時,第二運算元(來自zmm2)乘以第三運算元(來自zmm3),並將結果(具有中間捨入)乘以第一運算元(來自zmm1)且儲存於目的地暫存器中。在一實施例中,目的地暫存器與用於儲存第一運算元(例如zmm1)的暫存器是相同的暫存器。
在一實施例中,各VMUL3指令的三立即位元[2:0]被用以控制乘法的正負號。舉例而言,中間的位元0的值可以控制第一運算元的正負號(例如,1=負,0=正,或反之);中間的位元1的值可以控制第二運算元的正負號;以及,中間的位元2的值可以控制第三運算元的正負號。
在一實施例中,從單指令乘法資料(SIMD)暫存器中讀取第一及第二運算元,而從SIMD暫存器或記憶體位置中讀取第三運算元。
圖9A顯示與VMUL3執行邏輯841的一實施例相關連的其它細節,VMUL3執行邏輯841包含用於分配用於各VMUL3微作業的資源之分配器940以及用於VMUL3微作業要由功能單元912執行之排程的保留站902。在操作時,跟隨在將各VMUL3指令解碼成微作業之解碼級830之後,指令解碼器806將微作業傳送給包含暫存器混疊表(RAT)941之分配器單元940。在亂序管線中,分配器單元940將各進入的微作業指派給重排序緩衝器(ROB)950中的位置,藉以將微作業的邏輯目的地位址對映至ROB 950中對應的實體目的地位址。RAT 941維持 此對映。
ROB 950的內容最終會被退出至真實暫存器檔案(RRF)951中的位置。RAT 941也儲存真實暫存器檔案有效位元,所述有效位元標示邏輯位址所表示的值是否在退出後的ROB 950中或是RRF 951中的實體位址處找到。假使在RRF中找到,則值被視為是目前處理器架構狀態的一部份。根據此對映,RAT 941也使每一邏輯源位址與ROB 950或RRF 951中的對應位置相關連。
各進入的微作業也被分配器940指派及寫入保留站(RS)902中的登錄。保留站902將等待由功能單元執行的VMUL3微作業組合。在此情形中,二融合乘法及加法(FMA)功能單元FMA0 910和FMA1 911會如下所述地執行乘法運算以執行VMUL3指令。於需要時,結果會經由寫回匯流排而被寫回至RS 902。
在一實施例中,保留站登錄邏輯上分成複數組以降低分別用於讀取及寫入登錄之讀及寫埠的數目。在圖9A中所示的實施例中,二保留站組RS0 900和RS1 901會安排分別經由埠0和1而由FMA0 910和FMA1 911功能單元執行之VMUL3微作業的排程。
在一實施例中,任何VMUL3指令可經由管線而被執行為單一微作業。特別地,微作業首先由執行第二和第三運算元(例如,如上所述地從xmm2/xmm3或從zmm2/zmm3)的第一相乘之FMA0 910(經由RS0 900)執行,以產生中間結果。微作業在緩衝器單元905內延遲且接著 由FMA1 911第二次執行(經由RS1 901),以將中間結果與第一運算元相乘(例如,從xmm1/zmm1)。如先前所述般,最終結果儲存於xmm1/zmm1內。此外,如同已述,VMUL3指令的中間值指明用於三源運算元中的各源運算元之正負號。在一實施例中,在重新發出指令之前,微作業的第二議題會被強制等待(經由緩衝器905)剛好FMA的潛候期(例如,5個時脈循環)。
各式各樣現有的資料旁路可被用以提供中間結果給埠1上的FMA1 911。在一實施例中,中間結果被暫時地儲存於ROB 950或任何其它可由FMA1 911讀取及使用的儲存位置。在一實施例中,寫回匯流排可被用以提供中間結果給RS1 901,RS1 901接著使中間結果可經由埠1而可由FMA1 911利用。但是,本發明的基本原理不侷限於提供中間結果給FMA1 911的任何特定方式。此外,雖然ROB 905顯示於圖9A中,但是,將瞭解,在某些處理器實施中(例如,有序管線),沒有ROB 950被使用且可以使用不同形成的儲存以儲存中間結果及執行後的最結果。
如圖9B所示,並未要求二功能單元來實施本發明的基本原理。具體而言,在本實施例中,相同的功能單元(FMA0 910)連續執行VMUL3二次,以產生最終結果。亦即,FMA0 910執行第二與第三運算元之間的第一相乘,以及,將中間結果及微作業重新循回經過其本身,以執行第二相乘(一旦完成時,被傳遞經過管線的其餘部 份)。雖然顯示微作業的第二次迭代會通過保留站902,但是,在一實施例中,在功能單元級912內單純地執行再循環(亦即,在功能單元級912內使用暫時緩衝器儲存而直接從FMA0 910至其本身)。此外,在另一實施中,在功能單元912集內新的專用功能單元獨立地執行VMUL3指令(亦即,不使用融合的乘法及加法功能單元)。
上述實施例由於僅有一指令被解碼,所以,比使用二VMUL指令可提供改良的耗電。此外,確保經由旁通而讀取暫時源,以致於沒有資料需要從暫存器檔案讀取。
數個元一起相乘的應用中,使用此處所述的VMUL3指令,將乘法指令的數目除以2。舉例而言,對於浮點值相乘之可向量化的長迴路,可以使用VMUL3以將指令計數虛擬地降低2。
用於執行眾多乘法運算的方法之一實施例顯示於圖10中。在1001,從記憶體子系統提取單一VMUL3指令。如同已述,VMUL3指令包含第一、第二、第三源運算元、目的地運算元、及立即值。在1002,VMUL3指令被解碼成微作業。如上所述,在一實施例中,產生單一乘法微作業(以及對完成VMUL3指令所要求的二乘法運算執行二次)。
在1003,在準備由功能單元執行時,取回源運算元值。舉例而言,由保留站902及/或分配器單元940執行此運算。
在1004,執行VMUL3指令。在一實施例中,使用第 二及第三運算元,一次執行乘法微作業,以產生中間結果。接著,使用中間結果及第一運算元,第二次執行微作業,以產生最後結果(亦即,第一、第二、及第三源運算元的乘法)。如上所述,各源運算元的正負號可提供作為三位元中間值。
在1005,VMUL3指令的結果儲存於目的地運算元位置中(例如暫存器),對於一或更多後續的運算,可從此位置將其讀出。
舉例說明的指令格式
此處所述的指令的實施例可以以不同的格式具體實施。此外,舉例說明的系統、架構、及管線詳述於下。可在這些系統、架構、及管線之上,執行指令的實施例,但不限於那些細節。
向量友善指令格式是適用於向量指令的指令格式(例如,有某些向量作業特有的領域)。雖然說明向量及純量作業都是經由向量友善指令格式支援的實施例,但是,替代實施例可僅使用向量友善指令格式的向量作業。
圖11A-11B是方塊圖,顯示根據發明的實施例之同屬向量友善指令格式及其指令樣板。圖11A是方塊圖,顯示根據發明的實施例之同屬向量友善指令格式及其等級A指令樣板;而圖11B是方塊圖,顯示根據發明的實施例之同屬向量友善指令格式及其等級B指令樣板。具體而言,等級A及等級B指令樣板定義之同屬向量友善指令格式 1500都包含無記憶體存取1505指令樣板及記憶體存取1520指令樣板。向量友善指令格式的背景中之同屬一詞意指未被繫結至任何特定指令集的指令格式。
雖然將說明向量友善指令格式支援下述的發明實施例:具有32位元(4位元組)或64位元(8位元組)資料元件寬度(或大小)的64位元組向量運算元長度(或大小)(因此,16個雙字大小元件或者8個四字大小元組成的64位元組向量);具有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位元組向量運算元)。
圖11A中的等級A指令樣板包含:1)在無記憶體存取1505指令樣板之內,有顯示無記憶體存取、全修整控制型作業1510指令樣板以及無記憶體存取、資料轉換型作業1515指令樣板;以及2)在記憶體存取1520指令樣板之內,有顯示記憶體存取、暫時1525指令樣板以及記 憶體存取、非暫時1530指令樣板。圖11B中的等級B指令樣板包含:1)在無記憶體存取1505指令樣板之內,有顯示無記憶體存取、寫入遮罩控制、部份修整控制型作業1516指令樣板以及無記憶體存取、寫入遮罩控制、vsize型作業1517指令樣板;以及2)在記憶體存取1520指令樣板之內,有顯示記憶體存取、寫入遮罩控制1527指令樣板。
同屬向量友善指令格式1500包含圖11A-11B中依序顯示的下述列出之欄位。
格式欄位1540-此欄位中的特定值(指令格式識別值)獨特地識別向量友善指令格式,因此,在指令串中向量友善指令格式的指令發生。如此,在對於僅具有同屬向量友善指令格式的指令集而言是不需要的情形中,此欄位是選加的。
基礎作業欄位1542-其內容區別不同的基礎作業。
暫存器索引欄1544-其內容直接或經由位址產生而指明源和目的地運算元的位置在暫存器或記憶體中。這些包含足夠數目的位元以從PxQ(例如32 x 512、16 x 128、32 x 1204、64 x 1204)暫存器檔案中選取N個暫存器。雖然在一實施例中,N可以高達三個源及一個目的地暫存器,但是,替代實施例可以支援更多或更少的源以及目的地暫存器(例如,可以支援高達二個源,其中,這些源中之一也作為目的地,可以支援高達三個源,其中,這些源中之一也作為目的地,可以支援高達二個源及一目的 地)。
修改符欄位1546-其內容區別指定與未指定記體存取的同屬向量指令格式的指令之發生;亦即,在無記憶體存取1505指令樣板與記憶體存取1520指令樣板之間區別。記憶體存取作業讀取及/或寫至記憶體層級結構(在某些情形中使用暫存器中的值以指定源及/或目的地位址),而非記憶體存取作業未如此作(例如,源及目的地是暫存器)。雖然在一實施例中,此欄位也在三個不同方式之間選取以執行記憶體位址計算,但是,替代實施例可以支援更多、更少、或不同的方式以執行記憶體位址計算。
擴增作業欄1550-其內容區別各種不同作業中那一作業是基礎作業之外也是要被執行的。此欄位是內容特定的。在發明的一實施例中,此欄位被分成等級欄位1568、阿爾發欄位1552、貝他欄位1554。擴增作業欄位1550允許共同組的作業在單一指令中而不是在2、3或4指令中被執行。
比例欄位1560-其內容允許用於記憶體位址產生的索引欄位的內容比例化(例如,用於使用2scale*index+base的位址產生)。
位移欄位1562A-其內容作為部份記憶體位址產生(例如,用於使用2scale*index+base+displacement的位址產生)。
位移因數欄位1562B(注意,位移欄位1562A直接在 位移因數欄位1562B上標示一或另一者被使用)-其內容作為部份位址產生;其指定要依記憶體存取(N)的大小而比例化的位移因數-其中,N是記憶體存取中的位元組數目(例如,用於使用2scale*index+base+scaled displacement的位址產生)。冗餘低階位元被忽略,因此,位移因數欄位的內容乘以記憶體運算元全部尺寸(N)以產生計算有效位址時使用的最後位移。根據全運算碼欄位1574(稍後說明)及資料操縱欄位1554C,在運行時間,由處理器硬體決定N的值。在位移欄位1562A及位移因數欄位1562B不用於無記憶體存取1505指令樣板及/或不同實施例僅實施二者中之一或不實施二者的情形中,位移欄位1562A及位移因數欄位1562B是選加的。
資料元件寬度欄位1564-其內容區別一些資料元件寬度中的哪一寬度是要被使用(在某些實施例中用於所有指令;在其它實施例中僅用於某些指令)。在假使使用運算碼的某些態樣而僅有一資料元件寬度被支援及/或資料元件寬度被支援時不需要此欄位的情形中,此欄位是選加的。
寫入遮罩欄位1570-以每一資料元位置為基礎,其內容控制目的地向量運算元中的資料元件位置是否反應基礎作業及擴增作業的結果。等級A指令樣板支援合併寫入遮罩,而等級B指令樣板支撐合併及零化寫入遮罩。當合併時,向量遮罩允許目的地中任何組的元件在任何作業的執行期間受保護(由基礎作業及擴增作業指定)而免於更 新;在其它的一實施例中,保留對應的遮罩位元具有0之目的地的每一元件的舊值。相反地,當零化向量遮罩允許目的地中的任何組的元件在任何作業(由基礎作業及擴增作業指定)執行期間零化時;在一實施例中,當對應的遮罩位元具有0值時,目的地的元件被設定為0。此功能的子集合是控制被執行的作業的向量長度之能力(亦即,被修改的元件的跨幅,從第一至最後一個);但是,被修改的元件不一定是連續的。如此,寫入遮罩欄1570允許部份向量作業,包含載入、儲存、算術、邏輯、等等。雖然說明寫入遮罩欄位1570的內容選取一些含有要被使用的寫入遮罩之寫入遮罩暫存器中之一(因此,寫入遮罩欄位1570的內容間接地識別要被執行的遮罩)的發明實施例,但是,替代實施例取代地或增加地允許遮罩寫入欄位1570的內容直接指定遮罩被執行。
立即欄位1572-其內容允許立即性的規格。在此欄位未出現在未支援立即性的同屬向量友善格式實施中以及其未出現在未使用立即性的指令中之情形中,此欄位是選加的。
等級欄位1568-其內容區別不同等級的指令。參考圖11A-B,此欄位的內容在等級A與等級B指令之間選取。在圖11A-B中,經過整修的角落方形被用以標示特定值存在於欄位中(例如,分別在圖11A-B中用於等級欄位1568的等級A 1568A及等級B 1568B)。
等級A的指令樣板
在等級A的非記憶體存取1505指令樣板的情形中,阿爾發欄位1552被解譯為RS欄位1552A,其內容區別不同的擴增操作型式中那一型式是要被執行(例如,整修1552A.1及資料轉換1552A.2分別被指定用於無記憶體存取、整修型式作業1510及無記憶體存取、資料轉換型式作業1515指令樣板),而貝他欄位1554區別被指定的型式的作業中那些作業是要被執行。在無記憶體存取1505指令樣板中,比例欄位1560、位移欄位1562A及位移比例欄位1562B不存在。
無記憶體存取指令樣板-完全整修控制型作業
在無記憶體存取完全整修控制型作業1510指令樣板中,貝他欄位1554被解譯為整修控制欄位1554A,其內容提供靜態整修。雖然在上述的發明實施例中,整修控制欄位1554A包含抑制所有浮點例外(SAE)欄位1556及整修作業控制欄位1558,但是,替代實施例可以支援將這二概念編碼成相同欄位或是僅具有這些概念/欄位中之一或其它(例如,可以僅具有整修作業控制欄位1558)。
SAE欄位1556-其內容區別是否將例外事件報告禁能;當SAE欄位的1556內容標示抑制被賦能時,給定的指令不報告任何種類的浮點例外旗標及不引起任何浮點例外處理器。
整修作業控制欄位1558-其內容區別整修作業組中哪一作業要執行(例如,向上整修、向下整修、朝向零整修及整修至最近)。因此,整修操作控制欄位1558允許根據每一指令之整修模式的改變。在處理器包含用於指明整修模式的控制暫存器之發明的一實施例中,整修作業控制欄位1550的內容凌駕該暫存器值。
無記憶體存取指令樣板-資料轉換型式作業
在無記憶體存取資料轉換型式操作1515指令樣板中,貝他欄位1554被解譯為資料轉換欄位1554B,其內容區別多個資料轉換中何者要被執行(例如,無資料轉換、拌和、廣播)。
在等級A的記憶體存取1520指令樣板的情形中,阿爾發欄位1552被解譯為逐出暗示欄位1552B,其內容區別逐出暗示中之一是要被使用(在圖12A中,暫時1552B.1及非暫時1552B.2分別被指定用於記憶體存取、暫時1525指令樣板以及記憶體存取、非暫時1530指令樣板),而貝他欄位1554被解譯為資料操縱欄位1554C,其內容區別多個資料操縱操作(也稱為原始)中何者是要被執行(例如,無操縱;廣播;源的上轉;及目的地的下轉)。記憶體存取1520指令樣板包含比例欄位1560,且選加地包含位移欄位1562A或位移比例欄位1562B。
藉由轉換支援,向量記憶體指令對記憶體執行向量載入及向量儲存。與正常的向量指令一般,向量記憶體指令 以資料元件方式對記憶體傳輸資料,而真正被傳送的元件是由被選為寫入遮罩的向量遮罩的內容所標示。
記憶體存取指令樣板-暫時
暫時資料是能夠足夠快再被使用而從快取獲利之資料。但是,這是暗示,以及,不同的處理器可以以不同方式實施它,包含完全忽略暗示。
記憶體存取指令樣板-非暫時
非暫時資料是不太可能足夠快再被使用以從第一層快取記憶體中的快取獲利之資料,且應被授予逐出優先權。但是,這是暗示,以及,不同的處理器可以以不同方式實施它,包含完全忽略暗示。
等級B的指令樣板
在等級B的指令樣板的情形中,阿爾發欄位1552被解譯為寫入遮罩控制(Z)欄位1552C,其內容區別由寫入遮罩欄位1570控制的寫入遮罩是否應為合併或零化。
在等級B的非記憶體存取1505指令樣板的情形中,部份貝他欄位1554是被解譯為RL欄位1557A,其內容區別不同的擴增作業型式中何者是要被執行(例如,整修1557A.1以及向量長度(VSIZE)1557A.2分別被指定用於無記憶體存取、寫入遮罩控制、部份整修控制型作業1516指令樣板以及無記憶體存取、寫入遮罩控制、VSIZE 型作業1517指令樣板),而貝他欄位1554的其餘部份區別那一指定型式的作業是要被執行。在無記憶體存取1505指令樣板中,比例欄位1560、位移欄位1562A、及位移比例欄位1562B不存在。
在無記憶體存取中,寫入遮罩控制、部份整修控制型作業1510指令樣板、貝他欄位1554的其它部份被解譯為整修作業欄位1559A且例外事件報告被禁能(給定的指令不報告任何種類的浮點例外旗標及不引起任何浮點例外處理器)。
整修操作控制欄位1559A-正如同整修作業控制欄位1558般,其內容區別整修作業組中何者要執行(例如,向上整修、向下整修、朝向零整修及整修至最近)。因此,整修作業控制欄位1559允許根據每一指令來改變整修模式。在處理器包含用於指定整修模式的控制暫存器之發明的一實施例中,整修操作控制欄位1550的內容淩駕該暫存器值。
在無記憶體存取、寫入遮罩控制,VSIZE型作業1517指令樣板中,貝他欄位1554的其餘部份被解譯為向量長度欄位1559B,其內容區別是要多個資料向量長度中的何者執行(例如,128、256、或512位元組)。
在等級B的記憶體存取1520指令樣板的情形中,部份貝它欄位1554被解譯為廣播欄位1557B,其內容區別廣播型資料操縱作業是否要被執行,而貝它欄位1554中的其它部份被解譯為向量長度欄位1559B。記憶體存取 1520指令樣板包含比例欄位1560,以及,選加地包含位移欄位1562A或是位移比例欄位1562B。
關於同屬向量友善指令格式1500,完全運算碼欄位1574顯示為包含格式欄位1540、基礎作業欄位1542、及資料元件寬度欄位1564。雖然顯示完全運算碼欄位1574包含所有這些欄位的一實施例,但是,在未支援所有它們的實施例中,完全運算碼欄位1574包含小於所有這些欄位的欄位。完全運算碼1574提供作業碼(運算碼)。
擴增作業欄位1550、資料元件寬度欄位1564、及寫入遮罩欄位1570允許根據每一同屬向量友善指令格式的指令來指定這些特點。
因為寫入遮罩欄位及資料元件寬度欄位允許根據不同的資料元件寬度來施加遮罩,所以,它們的結合會產生型式化的指令。
等級A及等級B之內發現的各種指令樣板在不同的情形中是有利的。在本發明的某些實施例中,不同的處理器或在處理器內不同的核心僅支援等級A、僅支援等級B、或此二等級。舉例而言,要用於一般用途的計算之高性能一般用途亂序核心可以僅支援等級B,主要用於圖形及/或科學(輸貫量)計算之核心可以僅支援等級A,以及,主要用於二者的核心可以支援這二等級(當然,具有來自二等級的樣板及指令但不是來自二等級的所有樣板及指令之某些混合的核心是在本發明的範圍之內)。而且,單一處理器包含多核心,而所有這些核心支援相同的等級 或是不同的核心支援不同的等級。舉例而言,在具有分別的圖形及一般用途的核心之處理器中,主要用於圖形成及/或科學計算之多個圖形核心中之一僅支援等級A,而多個一般用途的核心中之一或更多可以是具有用於僅支援等級B之一般用途計算的暫存器再命名及亂序執行的高性能一般用途核心。未具有分別的圖形核心之另一處理器包含支援等級A及等級B等二等級之一或更多一般用途的有序或亂序核心。當然,在本發明的不同實施例中,來自一等級的特點也可在其它等級中實施。以高階語言撰寫的程式將被置於(例如,剛好即時被編譯或靜態地被編譯)各式各樣不同的可執行形式,包含:1)僅具有由用於執行的標的處理器所支援的等級之指令;或者,2)具有使用所有等級的指令之不同的組合而撰寫的替代常式以及具有根據由目前正執行碼的處理器支援的指令而選取要執行的常式之控制流動碼的形式。
圖12A-D是方塊圖,顯示根據本發明的實施例之舉例說明的特定向量友善指令格式。圖12A-D顯示特定向量友善指令格式1600,特定向量友善指令格式1600在其指定欄位的位置、大小、解譯、及次序、以及用於那些欄位中的某些欄位之值的情形中是特定的。特定向量友善指令格式1600可以被用以延伸x86指令集,因而某些欄位類似於或同於現有的x86指令集中使用的欄位以及其延伸(例如,AVX)。此格式維持與具有延伸的現存x86指令集的前置編碼欄位、真實運算碼位元組欄位、MOD R/M 欄位、SIB欄位、位移欄位、及立即欄位一致。顯示來自圖12的欄位映射之來自圖11的欄位。
應瞭解,雖然在同屬向量友善指令格式1500的內容中為了說明而參考特定向量友善指令格式1600,以說明發明的實施例,但是,除非特別申明,否則本發明不侷限於特定向量友善指令格式1600。舉例而言,同屬向量友善指令格式1500慮及用於各種欄位的各種可能大小,而特定向量友善指令格式1600顯示為具有特定大小的欄位。具體舉例而言,雖然資料元件寬度欄位1564在特定向量友善指令格式1600中顯示為一位元欄位,但是,本發明不限於此(亦即,同屬向量友善指令格式1500慮及資料元件寬度欄位1564的其它大小)。
同屬向量友善指令格式1500包含依圖12A中所示的次序而於下列出的下述欄位。
EVEX Prefix(位元組0-3)1602)-以四位元組形式編碼。
格式欄位1640(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)是格式欄位1640以及其含有0x62(用於區別發明的一實施例中向量友善指令格式的獨特值)。
第二-第四位元組(EVEX位元組1-3)包含提供特定能力的多個位元欄位。
REX欄位1605(EVEX位元組1,位元[7-5])-由EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、 EVEX.X位元欄位(EVEX位元組1,位元[6]-X)、及1557BEX位元組1,位元[5]-B)組成。EVEX.R、EVEX.X及EVEX.B位元欄位提供與對應的VEX位元欄位相同的功能性,且使用1s互補形式來編碼,亦即,ZMMO被編碼為1611B,ZMM15被編碼為0000B。如同此技藝中所知般,指令的其它欄位將暫存器索引的較低的三個位元編碼(rrr,xxx,及bbb),以致於藉由將EVEX.R、EVEX.X、及EVEX.B相加,可以形成Rrrr、Xxxx、及Bbbb。
REX’欄位1605-這是REX’欄位1510的第一部份且是用以將延伸的32暫存器組的上16或下16編碼之EVEX.R’位元欄位(EVEX位元組1,位元[4]-R’)。在發明的一實施例中,此位元與如下標示的其它位元以位元反轉格式儲存,以與BOUND指令區別(在已知的x86 32位元模式中),BOUND指令的真實運算碼位元組是62,但是,在MOD R/M欄(下述)中未接受MOD欄位中11的值;發明的替代實施例未以反轉格式儲存此位元及下述其它標示的位元。1的值用以將下16暫存器編碼。換言之,藉由結合來自其它欄位的EVEX.R'、EVEX.R、及其它RRR以形成R'Rrrr。
運算碼映射欄位1615(EVEX位元組1,位元[3:0]-mmmm)-它的內容將暗指的領先運算碼位元組(0F,0F 38,或0F 3)編碼。
資料元件寬度欄位1664(EVER位元組2,位元[7]- W)-由記號EVEX.W表示。EVEX.W用以界定資料型式(32位元資料元件或64位元資料元件)的粒度(大小)。
EVEX.vvvv 1620(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv的角色可以包含下述:1)EVEX.vvvv將以反轉(1s互補)形式指定的第一源暫存器運算元編碼,且對於具有2或更多源運算元的指令是有效的;2)EVEX.vvvv將對某些向量偏移,以1s互補形式指定的目的地暫存器運算元編碼;或者3)EVEX.vvvv未將任何運算元編碼,欄位被保留。因此,EVEX.vvvv欄位1620將依反轉(1s互補)形式儲存的第一源暫存器說明符的4下階位元編碼。取決於指令,額外的不同EVEX位元欄位被用以延伸說明符大小至32暫存器。
EVEX.U 1668等級欄位(EVEX位元組2,位元[2]-U)-假使EVEX.U=0,則其標示等級A或EVEX.U0;假使EVEX.U=1,則其標示等級B或EVEX.U1。
前置編碼欄位1625(EVEX位元組2,位元[1:0]-pp)-提供增加的位元用於基礎作業欄位。除了提供支援給EVEX前置格式的舊制SSE指令,這也具有使SIMD前置小巧化(而非要求位元組來表示SIMD前置,EVEX前置僅要求2位元)的優點。在一實施例中,為了支援以舊制格式及EVEX前置格式等二格式使用SIMD前置(66H、F2H、F3H)之舊制SSE指令,這些舊制SIMD前置被編碼成SIMD前置編碼欄位;以及,在被提供給解碼 器的PLA(以致於PLA可以執行這些舊制指令的舊制及EVEX等二格式而不用修改)之前,在運行時間被擴展成舊制SIMD前置。雖然較新的指令可以直接使用EVEX前置編碼欄位的內容作為運算碼延伸,但是,某些實施例為了一致性而以類似方式擴展但允許不同的意義由這些舊制SIMD前置規定。替代實施例可以重新設計PLA以支援2位元SIMD前置編碼,因而不要求擴展。
阿爾發欄位1652(EVEX位元組3,位元[7]-EH;也稱為EVEX.EH、EXEX.rs、EVEX.RL、EVEX.寫入遮罩控制、及EVEX.N;也以α顯示),如以往所述般,此欄位是內容特定的。
貝他欄位1654(EVEX位元組3,位元[6:4])-SSS;也稱為EVEX.s2-0、EXEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也以βββ顯示)-如先前所述般,此欄位是內容特定的。
REX’欄位1610-這是REX’欄位的餘部且是可被用以將延伸的32暫存器組中的上16或下16編碼之EVEX.V’位元欄位(EVEX位元組3,位元[3]-V’)。此位元以位元反轉格式儲存。1的值被用以將下16暫存器編碼。換言之,藉由結合EVEX.V'、EVEX.vvvv以形成V'VVVV。
寫入遮罩欄位1670(EVEX位元組3,位元[2:0]-kkk)-如同先前所述般,其內容指定寫入遮罩暫存器中的暫存器索引。在發明的一實施例中,特定值EVEX.kkk=000具有特別的表現,暗指無寫入遮罩用於特 定的指令(這可以以各種方式實施,包含使用實體接線至繞過遮罩硬體的所有或硬體之寫入遮罩)。
真實運算碼欄位1630(位元組4)也稱為運算碼位元組。在此欄位中指定運算碼的一部份。
MOD R/M欄位1640(位元組5)包含MOD欄位1642、Reg欄位1644、及R/M欄位1646。如同先前所述般,MOD欄位1642的內容區別記憶體存取與非記憶體存取作業。Reg欄位1644的角色可以總合為二情形:將目的地暫存器運算元或源暫存器運算元編碼,或是被當作運算元延伸且不被用以將任何指令運算元編碼。R/M欄位1646的角色可以包含下述:將指引記憶體位址的指令運算元編碼,或者,將目的地暫存器運算元或源暫存器運算元編碼。
比例、索引、基礎(SIB)位元組(位元組6)-如同先前所述般,比例欄位1650的內容是用於記憶體位址產生。SIB.xxx 1654及SIB.bbb 1656-這些欄位的內容先前已被指稱與暫存器索引Xxxx及Bbbb有關。
位移欄位1662A(位元組7-10)-當MOD欄位1642含有10時,位元組7-10是位移欄位1662A,且其工作與舊制32位元位移(disp32)相同並以位元組粒度工作。
位移因數欄位1662B(位元組7)-當MOD欄位1642含有01時,位元組7是位移因數欄位1662B。此欄位的位置與以位元組粒度工作的舊制x86指令組8位元位移(disp8)的位置相同。由於disp8是正負號延伸,所 以,其僅可以在-168與167位元組偏移之間定址;以64位元組快取線的觀點而言,disp8使用可以被設定為僅四個真正有用的值-168、-64、0、及64之8位元;由於通常需要更大的範圍,所以,使用disp32;但是,disp32要求4位元組。與disp8和disp32相反,位移因數欄位1662B是disp8的再解譯;當使用位移因數欄位1662B時,真實的位移由位移因數欄位的內容乘以記憶體運算元存取(N)所決定。此型式的位移被稱為disp8*N。這降低平均的指令長度(用於位移但是具有更大範圍的單一位元組)。此被壓縮的位移是根據有效的位移是記憶體存取的粒度之倍數的假設,因此,位址偏移的冗餘低階位元不需被編碼。換言之,位移因數欄位1662B替代舊制x86指令集8位元位移。因此,位移因數欄位1662B以同於x86指令集8位元位移的方式編碼(以致於ModRM/SIB編碼規則不變),僅有的例外是disp8被超載至disp8*N。換言之,編碼規則或編碼長度沒有變化,但是僅有硬體對位移值的解譯有變化(這需要將位移依記憶體運算元的大小來比例化以取得位元組方式的位址偏移)。立即欄位1572如先前所述地操作。
完全運算碼欄位
圖12B是方塊圖,顯示根據本發明的一實施例之構成完全運算碼欄位1674之特定同屬向量友善指令格式1600的欄位。具體而言,完全運算碼欄位1774包含格式欄位 1640、基礎作業欄位1642、及資料元件寬度(W)欄位1664。基礎作業欄位1642包含前置編碼欄位1625、運算碼映射欄位1615、及真實運算碼欄位1630。
暫存器索引欄位
圖12C是方塊圖,顯示根據本發明的一實施例之構成暫存器索引欄位1644之特定同屬向量友善指令格式1600的欄位。具體而言,暫存器索引欄位1644包含REX欄位1605、REX’欄位1610、MODR/M.reg欄位1644,MODR/M.r/m欄位1646、VVVV欄位1620、xxx欄位1654、及bbb欄位1656。
擴增作業欄位
圖12D是方塊圖,顯示根據本發明的一實施例之構成擴增作業欄位1650之特定同屬向量友善指令格式1600的欄位。當等級(U)欄位1568含有0時,則其標示EVEX.U0(等級A 1668A);當其含有1時,則其標示EVEX.U1(等級B 1668B)。當U=0及MOD欄位1642含有11(標示無記憶體存取作業)時,阿爾發欄位1652(EVEX位元組3,位元[7]-EH)被解譯為rs欄位1652A。當rs欄位1652A含有1(整修1652A.1)時,貝他欄位1654(EVEX位元組3,位元[6:4]-SSS)被解譯為整修控制欄位1654A。整修控制欄位1654A包含一位元SAE欄位1656及二位元整修作業欄位1658。當rs欄位 1652A含有0(資料轉換1652A.2)時,貝他欄位1654(EVEX位元組3,位元[6:4]-SSS)被解譯為三位元資料轉換欄位1654B。當U=0及MOD欄位1642含有00、01、或10(標示記憶體存取作業)時,阿爾發欄位1652(EVEX位元組3,位元[7]-EH)被解譯為逐出暗示(EH)欄位1652B,以及貝他欄位1654(EVEX位元組3,位元[6:4]-SSS)被解譯為三位元資料操作欄位1654C。
當U=1時,阿爾發欄位1652(EVEX位元組3,位元[7]-EH)被解譯為寫入遮罩控制(Z)欄位1652C。當U=1及MOD欄位1642含有11(標示無記憶體存取作業)時,部份貝他欄位1654(EVEX位元組3,位元[4]-S0)被解譯為RL欄位1657A;當其含有1(整修1657A.1)時,貝他欄位1654的其餘部份(EVEX位元組3,位元[6-5]-S2-1)被解譯為整修作業欄位1659A,而當RL欄位1657A含有0(VSIZE 1657.A2)時,貝他欄位1654的其餘部份(EVEX位元組3,位元[6-5]-S2-1)被解譯為向量長度欄位1659B(EVEX位元組3,位元[6-5]-L1-0)。當U=1及MOD欄位1642含有00、01、或10(標示記憶體存取作業)時,貝他欄位1654(EVEX位元組3,位元[6:4]-SSS)被解譯為向量長度欄位1659B(EVEX位元組3,位元[6-5]-L1-0)及廣播欄位1657B(EVEX位元組3,位元[4]-B)。
圖13是根據本發明的一實施例之暫存器架構1700的 方塊圖。在所示的實施例中,有516位元寬的32個向量暫存器1710;這些暫存器稱為zmm0至zmm31。較低的16zmm暫存器的低階256位元被覆蓋於暫存器ymm0-16之上。較低的16zmm暫存器的低階168位元(ymm暫存器的低階168位元)被覆蓋於暫存器xmm0-15之上。特定向量友善指令格式1600如下述表格中所示般對這些被覆蓋的暫存器檔案作業。
換言之,向量長度欄位1559B在最大長度與一或更多其它較短的長度之間選取,其中,每一此較短長度是先前長度的長度之一半;以及,不具向量長度欄位1559B的指令樣板對最大向量長度操作。此外,在一實施例中,特定向量友善指令格式1600的等級B指令樣板對緊縮的或純 量的單/雙精度浮點資料及緊縮的或純量的整數資料作業。純量作業是對zmm/ymm/xmm暫存器中最低階資料元件位置執行的作業;更高階的資料元件位置視實施例而留在它們在指令之前的相同位置或者被零化。
寫入遮罩暫存器1715-在所示的實施例中,有8個寫入遮罩暫存器(k0至k7),每一寫入暫存器大小為64位元。在替代實施例中,寫入遮罩暫存器1715大小為16位元。如同先前所述般,在本發明的一實施例中,向量遮罩暫存器k0無法作為寫入遮罩;當正常標示k0的編碼用於寫入遮罩時,其選取0xFFFF的實體接線的寫入遮罩,有效地使用於該指令的寫入遮罩禁能。
一般用途暫存器1725-在所示的實施例中,有十六個64位元的一般用途暫存器,它們與現存的x86定址模式一起作用以將記憶體運算元定址。這些暫存器以名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15表示。
純量浮點堆疊暫存器檔案(x87堆疊)1745,MMX緊縮整數平坦暫存器檔案1750混疊於其上-在所示的實施例中,x87堆疊是八元件堆疊,用以使用x87指令集延伸,對32/64/80位元浮點資料執行純量浮點作業;而MMX暫存器被用以對64位元緊縮的暫存器資料執行作業,以及為了某些在MMX及XMM暫存器之間執行的作業而固持運算元。
本發明的替代實施例可以使用更寬或更窄的暫存器。 此外,本發明的替代實施例可以使用更多、更少、或不同的暫存器檔案及暫存器。
在上述說明書中,己參考特定舉例說明的實施例,說明本發明。但是,顯然可知,在不悖離後附的申請專利範圍中揭示的本發明的廣義精神及範圍之下,可以作各種修改及變化。因此,說明書及圖式被視為是說明性的而非限制性的。
本發明的實施例包含上述說明之各式各樣的步驟。步驟可以以機器可讀取的指令具體實施,這些指令可用以促使一般目的或特定目的處理器執行這些步驟。替代地,這些步驟可以由含有用於執行步驟之實體接線的邏輯之特定硬體組件、或是程式化的電腦組件及客製化硬體組件的程式化電腦的任何組合所執行。
如同此處所述般,指令意指例如特定應用積體電路(ASIC)等硬體的特定配置,ASIC係配置成執行具有預定功能或儲存在記憶體中的軟體指令,記憶體係以非暫時的電腦可讀取媒體具體實施。如此,使用儲存於及執行於一或更多電子裝置(例如終端站台、網路元件、等等)上的碼及資料,可以實施圖式中所示的技術。這些電子裝置使用電腦可讀取的媒體以儲存及通訊(內部地及/或在網路上與其它電子裝置)碼及資料,電腦可讀取的媒體可為例如非暫時的電腦機器-可讀取的儲存媒體(例如磁碟;光碟;隨機存取記憶體;唯讀記憶體;快閃記憶體裝置;相變記憶體)以及暫時的電腦可讀取通訊媒體(例如電 的、光學的、聲的或其它形式的傳播訊號-例如載波、紅外線訊號、數位訊號、等等)。此外,這些電子裝置典型地包含一或更多耦合至一或更多其它組件的處理器,一或更多其它組件可為例如一或更多儲存裝置(非暫時的機器可讀取的儲存媒體)、使用者輸入/輸出裝置(例如鍵盤、觸控螢幕、及/或顯示器)、及網路連接。處理器組及其它組件的耦合典型上經由一或更多匯流排及橋接器(也稱為匯流排控制器)。載送網路交通之儲存裝置及訊號分別代表一或更多機器可讀取的儲存媒體以及機器可讀取的通訊媒體。因此,給定的電子裝置之儲存裝置典型地儲存用於在該電子裝置的一或更多處理器的組上執行之碼及/或資料。當然,可以使用軟體、韌體、及/或硬體的不同組合,實施本發明的實施例之一或更多部份。在此詳細說明中,為了說明之目的,揭示眾多特定細節以助於完整瞭解本發明。但是,習於此技藝者將清楚,不用這些特定細節中的某些細節,仍可實施本發明。在某些情形中,未特別詳細地說明熟知的結構及功能,以免模糊本發明的標的。因此,本發明的範圍及精神應以後附的申請專利範圍之觀點來判斷。
100‧‧‧管線
102‧‧‧提取
104‧‧‧長度解碼
106‧‧‧解碼
108‧‧‧分配
110‧‧‧重命名
112‧‧‧排程
114‧‧‧暫存器讀取/記憶體
116‧‧‧執行級
118‧‧‧寫回/記憶體寫入
122‧‧‧例外處理
124‧‧‧提交

Claims (20)

  1. 一種處理器,包括:指令提取單元,從記憶體子系統提取單一雙乘法指令,該雙乘法指令具有三源運算元值;解碼單元,將該雙乘法指令解碼以產生單一微作業(uop);以及執行單元,其在序列中執行該微作業兩次:第一次將該三源運算元值中的第一值及第二值相乘,以產生中間結果,以及第二次執行該微作業以將該中間結果乘以該三源運算元值中的第三值而產生最終結果;其中,該執行單元又包括保留站,其用以安排該雙乘法指令由至少一功能單元執行的排程,其中,該微作業是要從該保留站傳送至該至少一功能單元之第一功能單元以及在由該至少一功能單元之該第一功能單元或第二功能單元執行之前也提供給延遲緩衝器。
  2. 如申請專利範圍第1項之處理器,其中,該執行單元包括該延遲緩衝器以在第二次執行該微作業之前延遲該微作業。
  3. 如申請專利範圍第1項之處理器,其中,該至少一功能單元的每一者包括融合的乘法及加法功能單元。
  4. 如申請專利範圍第1項之處理器,其中,當該第一功能單元完成該微作的第一次執行及產生該中間結果時,該微作業又從該延遲緩衝器傳送至第二功能單元,該第二功能單元將該中間結果乘以該三源運算元值中的第三 值以產生該最終結果。
  5. 如申請專利範圍第4項之處理器,其中,當順序地執行二次來自單一雙乘法指令的該單一微作業時,產生該最終結果。
  6. 如申請專利範圍第1項之處理器,其中,該雙乘法指令的第一、第二、及第三源運算元值是浮點值。
  7. 如申請專利範圍第6項之處理器,其中,該浮點值包括單精度或雙精度浮點值。
  8. 如申請專利範圍第1項之處理器,其中,該雙乘法指令包括立即值以標示用於該第一源運算元值、第二源運算元值、及第三源運算元值中的各源運算元之正負號。
  9. 如申請專利範圍第8項之處理器,其中,該立即值包括三位元值,而各位元的值標示用於該第一源運算元值、第二源運算元值、及第三源運算元的正負號值。
  10. 如申請專利範圍第1項之處理器,其中,該保留站包含第一保留站分隔及第二保留站分隔,該第一保留站分隔用於安排經由第一執行埠之該微作業的第一次執行的排程,該第二保留站分隔用於安排經由第二執行埠之該微作業的第二次執行的排程。
  11. 一種方法,包括:從記憶體子系統提取單一雙乘法指令,該雙乘法指令具有三源運算元值;將該雙乘法指令解碼以產生至少單一微作業(uop);以及 第一次執行該微作業以將該三源運算元值中的第一值及第二值相乘,以產生中間結果,以及第二次執行該微作業以將該中間結果乘以該三源運算元值中的第三值而產生最終結果,其中該微作業之執行包括:安排該雙乘法指令由至少一功能單元執行的排程,其中,該微作業會傳送至該至少一功能單元之第一功能單元以及在由該至少一功能單元之該第一功能單元或第二功能單元執行之前也提供給該延遲緩衝器。
  12. 如申請專利範圍第11項之方法,其中,又包括:在第二次執行該微作業之前,將該微作業延遲在延遲緩衝器中。
  13. 如申請專利範圍第11項之方法,其中,該至少一功能單元的每一者包括融合的乘法及加法功能單元。
  14. 如申請專利範圍第11項之方法,其中,當該第一功能單元完成該微作的第一次執行及產生該中間結果時,該微作業又從該延遲緩衝器傳送至第二功能單元,該第二功能單元將該中間結果乘以該三源運算元值中的第三值以產生該最終結果。
  15. 如申請專利範圍第14項之方法,其中,當順序地執行二次來自單一雙乘法指令的該單一微作業時,產生該最終結果。
  16. 如申請專利範圍第11項之方法,其中,該雙乘法指令的第一、第二、及第三源運算元值是浮點值。
  17. 如申請專利範圍第16項之方法,其中,該浮點 值包括單精度或雙精度浮點值。
  18. 如申請專利範圍第11項之方法,其中,該雙乘法指令包括立即值以標示用於該第一源運算元值、第二源運算元值、及第三源運算元值中的各源運算元之正負號。
  19. 如申請專利範圍第18項之方法,其中,該立即值包括三位元值,而各位元的值標示用於該第一源運算元值、第二源運算元值、及第三源運算元值的正負號。
  20. 如申請專利範圍第11項之方法,其中,由保留站執行排程,該保留站包含第一保留站分隔及第二保留站分隔,該第一保留站分隔用於安排經由第一執行埠之該微作業的第一次執行的排程,該第二保留站分隔用於安排經由第二執行埠之該微作業的第二次執行的排程。
TW104105354A 2014-03-28 2015-02-16 用於執行複數個乘法運算的方法和設備 TWI578230B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US14/229,183 US20150277904A1 (en) 2014-03-28 2014-03-28 Method and apparatus for performing a plurality of multiplication operations

Publications (2)

Publication Number Publication Date
TW201602905A TW201602905A (zh) 2016-01-16
TWI578230B true TWI578230B (zh) 2017-04-11

Family

ID=53016263

Family Applications (1)

Application Number Title Priority Date Filing Date
TW104105354A TWI578230B (zh) 2014-03-28 2015-02-16 用於執行複數個乘法運算的方法和設備

Country Status (7)

Country Link
US (1) US20150277904A1 (zh)
JP (2) JP6092904B2 (zh)
KR (1) KR101729829B1 (zh)
CN (1) CN104951278A (zh)
DE (1) DE102015002253A1 (zh)
GB (1) GB2526406B (zh)
TW (1) TWI578230B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170177361A1 (en) * 2015-12-22 2017-06-22 Michael Anderson Apparatus and method for accelerating graph analytics
US10387988B2 (en) 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
GB2548600B (en) * 2016-03-23 2018-05-09 Advanced Risc Mach Ltd Vector predication instruction
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US10089110B2 (en) * 2016-07-02 2018-10-02 Intel Corporation Systems, apparatuses, and methods for cumulative product
CN106951211B (zh) * 2017-03-27 2019-10-18 南京大学 一种可重构定浮点通用乘法器
US10417731B2 (en) * 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US11221849B2 (en) 2017-09-27 2022-01-11 Intel Corporation Instructions for vector multiplication of unsigned words with rounding
WO2019066796A1 (en) * 2017-09-27 2019-04-04 Intel Corporation INSTRUCTIONS FOR THE VECTORIAL MULTIPLICATION OF WORDS SIGNED AT BOROUGH
US10572568B2 (en) * 2018-03-28 2020-02-25 Intel Corporation Accelerator for sparse-dense matrix multiplication
US10459688B1 (en) * 2019-02-06 2019-10-29 Arm Limited Encoding special value in anchored-data element

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5606677A (en) * 1992-11-30 1997-02-25 Texas Instruments Incorporated Packed word pair multiply operation forming output including most significant bits of product and other bits of one input
US20040230774A1 (en) * 2003-05-12 2004-11-18 International Business Machines Corporation Multifunction hexadecimal instructions
US20050198472A1 (en) * 2004-03-04 2005-09-08 Sih Gilbert C. Digital signal processors with configurable dual-MAC and dual-ALU
US20110153993A1 (en) * 2009-12-22 2011-06-23 Vinodh Gopal Add Instructions to Add Three Source Operands
WO2013095619A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Super multiply add (super madd) instruction with three scalar terms

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2580371B2 (ja) * 1990-07-18 1997-02-12 株式会社日立製作所 ベクトルデ―タ処理装置
US8589663B2 (en) * 2006-06-27 2013-11-19 Intel Corporation Technique to perform three-source operations
US8583902B2 (en) * 2010-05-07 2013-11-12 Oracle International Corporation Instruction support for performing montgomery multiplication

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5606677A (en) * 1992-11-30 1997-02-25 Texas Instruments Incorporated Packed word pair multiply operation forming output including most significant bits of product and other bits of one input
US20040230774A1 (en) * 2003-05-12 2004-11-18 International Business Machines Corporation Multifunction hexadecimal instructions
US20050198472A1 (en) * 2004-03-04 2005-09-08 Sih Gilbert C. Digital signal processors with configurable dual-MAC and dual-ALU
US20110153993A1 (en) * 2009-12-22 2011-06-23 Vinodh Gopal Add Instructions to Add Three Source Operands
WO2013095619A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Super multiply add (super madd) instruction with three scalar terms

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Intel, "IA-64 Application Developer's Architecture Guide", May 1999, http://www-users.cs.umn.edu/~chenh/ADAG.pdf *

Also Published As

Publication number Publication date
JP6498226B2 (ja) 2019-04-10
JP2017142799A (ja) 2017-08-17
TW201602905A (zh) 2016-01-16
KR101729829B1 (ko) 2017-04-24
KR20150112779A (ko) 2015-10-07
GB201504489D0 (en) 2015-04-29
US20150277904A1 (en) 2015-10-01
JP2015191661A (ja) 2015-11-02
JP6092904B2 (ja) 2017-03-08
DE102015002253A1 (de) 2015-10-01
GB2526406B (en) 2017-01-04
GB2526406A (en) 2015-11-25
CN104951278A (zh) 2015-09-30

Similar Documents

Publication Publication Date Title
TWI578230B (zh) 用於執行複數個乘法運算的方法和設備
TWI502499B (zh) 執行將寫入罩暫存器轉換成向量暫存器中的索引值列表的系統、裝置及方法
TWI756251B (zh) 執行複數的熔合乘-加指令的系統與方法
TWI587215B (zh) 排序加速度處理器,方法,系統,及指令
TWI567556B (zh) 無區域性提示向量記憶體存取之處理器、方法、系統與指令
TWI622930B (zh) 用於實施具有疊代相依條件之疊代的向量迴圈的處理器、方法和計算系統
TWI550512B (zh) 擴展記憶體源至目的地暫存器及壓縮源暫存器至目的地記憶體位置之處理器
TWI617978B (zh) 用於向量索引載入和儲存之方法和設備
TWI524266B (zh) 用以偵測向量暫存器內相等元素之裝置及方法
TWI498815B (zh) 用以響應於單一指令而執行橫向部分和之系統、裝置及方法
TWI489384B (zh) 執行置換運算的處理器與方法及具有該處理器的電腦系統
TWI486872B (zh) 向量緊縮壓縮及重複之實施系統、設備和方法
TWI760341B (zh) 用於跨步載入的系統、設備及方法
TW201643695A (zh) 用於執行向量位元反轉和交叉的方法和設備
JP2018506094A (ja) 多倍長整数(big integer)の算術演算を実行するための方法および装置
TWI603261B (zh) 用以執行離心操作的指令及邏輯
CN107003848B (zh) 用于融合乘法-乘法指令的装置和方法
TWI622879B (zh) 考慮用於執行之載入資料元件中的空間區域性之裝置和方法
TWI482086B (zh) 用以於緊縮資料元件上執行差分編碼之系統、裝置及方法
TW201732568A (zh) 用於巷道為主的跨類收集的系統、設備與方法
TW201810034A (zh) 用於累和的系統、設備及方法
TWI539374B (zh) 映射源運算元至不同範圍的系統及其處理器
TW201732574A (zh) 用於改善向量通量的系統、方法及設備
CN107003841B (zh) 用于融合加法-加法指令的装置和方法
TWI599953B (zh) 用以執行大整數算數運算之方法及裝置