TWI556164B - 具有不同讀取及寫入遮罩之多元件指令 - Google Patents

具有不同讀取及寫入遮罩之多元件指令 Download PDF

Info

Publication number
TWI556164B
TWI556164B TW101148751A TW101148751A TWI556164B TW I556164 B TWI556164 B TW I556164B TW 101148751 A TW101148751 A TW 101148751A TW 101148751 A TW101148751 A TW 101148751A TW I556164 B TWI556164 B TW I556164B
Authority
TW
Taiwan
Prior art keywords
vector
field
mask
components
register
Prior art date
Application number
TW101148751A
Other languages
English (en)
Other versions
TW201346742A (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 TW201346742A publication Critical patent/TW201346742A/zh
Application granted granted Critical
Publication of TWI556164B publication Critical patent/TWI556164B/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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/764Masking
    • 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/30018Bit or string 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/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask

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)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Description

具有不同讀取及寫入遮罩之多元件指令
發明之領域大致有關計算系統,具體言之,係有關具有不同讀取及寫入遮罩之多元件指令。
第1圖顯示以半導體晶片上之邏輯電路實現的處理核心100之高層次圖。處理核心包含管線101。管線由多個階段組成,各階段被設計成執行完全執行程式碼指令所需之多步驟流程中的一特定步驟。這些步驟典型地至少包含:1)指令擷取及解碼;2)資料擷取;3)執行;4)寫回(write-back)。一旦資料被相同的指令所識別且於另一之前階段(例如上述步驟2)被擷取,執行階段執行由在之前階段(例如上述步驟1)被擷取及解碼的指令所識別之特定操作。所被操作的資料係典型地自(通用)暫存器儲存空間102擷取。於操作完成時所建立之新的資料亦典型地「寫回」暫存器儲存空間(例如上述步驟4)。
與執行階段相關聯的邏輯電路係典型地由多個「執行單元」或「功能單元」103_1至103_N所組成,其各被設計成執行其本身獨特的操作之子集(例如,第一功能單元執行整數數學操作、第二功能單元執行浮點指令、第三功能單元執行載入/儲存操作自/至快取/記憶體等。由所有功能單元所執行的所有操作之集合對應至由處理核心100所支持的「指令集」。
兩種類型的處理器架構係廣泛地為電腦科學領域所知悉:「純量」及「向量」。純量處理器係被設計成執行施行操作於單一集的資料之指令,而向量處理器係被設計成執行施行操作於多個集的資料之指令。第2A及2B圖顯示展示純量處理器與向量處理器之基本差異的對照範例。
第2A圖顯示純量AND指令之範例,其中單一運算元集(A及B)一起進行AND操作以產生單一的(或「純量的」)結果C(亦即,AB=C)。相反的,第2B圖顯示向量AND指令之範例,其中兩個運算元集(A/B及D/E)分別一起平行地進行AND操作以同時產生向量結果C、F(亦即,A.AND.B=C及D.AND.E=F)。關於術語,「向量」為具有多個「元件(element)」之資料元件。舉例來說,向量V=Q,R,S,T,U具有五個不同資料元件件:Q,R,S,T及U。例示向量V的「尺寸」為5(由於其具有五個元件)。
第1圖亦顯示向量暫存器空間107的存在,其係不同於通用暫存器空間102。具體言之,通用暫存器空間102係被名義上使用以儲存純量值。因此,當任何執行單元施行純量操作時,其名義上使用自通用暫存器儲存空間102呼叫的(called)運算元。相反的,當任何執行單元施行向量操作時,其名義上使用自向量暫存器空間107呼叫的運算元。不同區域的記憶體可同樣地被分配成供純量值及向量值的儲存。
亦應注意的是,在個別輸入至及輸出自功能單元 103_1至103_N之遮罩邏輯104_1至104_N及105_1至105_N的存在。於各種實現中,對於向量操作,這些層中只有一層是實際被實現的-雖然此非嚴格要求(雖然未圖示於第1圖,可想像地,僅執行純量而非向量操作的執行單元不需要具有任何遮罩層)。對於任何採用遮罩的向量指令,輸入遮罩邏輯104_1至104_N及/或輸出遮罩邏輯105_1至105_N可被使用以控制哪些元件對於該向量指令係被有效率地操作。於此,遮罩向量係自遮罩暫存器空間106讀取(例如,協同輸入運算元向量自向量暫存器儲存空間107讀取)且係存在於遮罩邏輯104、105層之至少一層。
執行向量程式碼的整個過程中,各向量指令不需要要求完整資料字元。舉例來說,用於一些指令的輸入向量可僅為8元件、用於其他指令的輸入向量可為16元件、用於其他指令的輸入向量可為32元件等。因此,遮罩層104/105係被使用以識別應用於特定指令的完整向量資料字元之一組元件,以影響各指令的不同向量尺寸。典型地,對於各向量指令,保持於遮罩暫存器空間106中之特定遮罩型樣係被指令調出(called out)、自遮罩暫存器空間擷取、及提供至遮罩層104/105之其中一者或兩者,以「賦能(enable)」正確集的元件以用於特定向量操作。
第3A圖圖示功能單元之例示電路設計,其可執行一種新類別的指令,後文中稱為「水平(horizontal)」指令,其(類似傳統向量指令)接收輸入向量來源運算元、產生輸出向量結果及使用遮罩。然而,不同於傳統向量指令,水平指令有效地支持具有第一尺寸之輸入向量運算元及具有不同的第二尺寸之輸出結果向量。亦即,來源運算元中「有效(active)」元件的數量可不同於結果中「有效」元件的數量。
如第3A圖所示,讀取遮罩電路303應用讀取遮罩暫存器301之內容至來源運算元暫存器302之內容。讀取遮罩的此應用基本上界定來源運算元300中之將由水平指令所操作的元件組304。於第3A圖中的特定實施例,共同操作係藉由指令執行邏輯電路305被應用至所選擇的元件組及產生純量結果R306。舉例來說,若共同操作為ADD操作,則執行邏輯電路305將所選擇的元件組304相加以形成純量和306。
根據第3A圖之特定設計方案,操作之純量結果306係散開(fanned out)成完整向量資料寬度以形成輸出向量307。舉例來說,若處理器支持N個元件之最大向量尺寸,則輸出向量307對應至具有N個元件的資料結果,N個元件中之各者包含結果R 306。輸出向量307可被保持於暫存器中或僅於訊號線上傳播。
寫入遮罩電路308接著應用寫入遮罩暫存器309之內容至輸出向量307以產生結果向量310。於此,如第3A 圖所示,結果向量310包含結果R於在寫入遮罩中指明的各元件。於一實施例中,非於寫入遮罩中所指明的那些元件係被給定0的值。舉例來說,若N=8且寫入遮罩為[0,0,1,0,0,1,0,1],則結果向量將為[0,0,R,0,0,R,0,R]。結果向量310接著被寫入至由該指令所指明的指定暫存器中。
第3A圖之電路設計方案的替代(如第3B圖所示)係包含N個平行階段的操作邏輯電路315_1至315_N,其對於完整寬度輸出向量結果之各元件各執行(於水平指令的情形下)相同的操作於所選擇的輸入元件組。第3B圖的設計方案可例如被使用於當使用以實現水平指令的邏輯電路亦被使用以支持傳統向量指令時。舉例來說,在ADD操作的情形中,電路315_1至315_N對應至N個ADD電路。
在傳統向量ADD指令之情形中,於一實施例中,讀取遮罩電路314沒有被使用且來自兩輸入向量運算元的獨立對係展現於其個別ADD電路(例如,第一向量輸入運算元之第一元件及第二向量輸入運算元之第二元件係被應用至第一ADD電路315_1)。因圖式簡化的目的,此設計特徵並未圖示於第3圖。寫入遮罩電路318接著應用寫入遮罩之內容至邏輯電路315所產生的輸出向量以形成結果向量。
於水平指令之情形中,讀取遮罩電路314係被使用以應用讀取遮罩向量至輸入運算元向量以獲得完整用於向量 尺寸的所有N個元件之水平指令的元件組。亦即,各邏輯電路315_1至315_N自讀取遮罩電路314接收用於操作之元件組。用於N個元件中之各者的具有相同純量結果之完整N寬輸出向量係存在於寫入遮罩電路318。寫入遮罩電路自寫入遮罩暫存器319施加一寫入遮罩以產生結果輸出向量320。
應注意的是,第3A圖之讀取遮罩電路304不同於第3B圖之讀取遮罩電路314。具體言之,第3A圖之讀取遮罩電路304產生用於操作之單一元件組,而第3B圖之讀取遮罩電路314產生用於操作之N個元件組。
第4A及4B圖分別顯示上述兩個電路設計的方法。根據第4A圖之方法(其可由第3A圖之電路設計所執行),讀取遮罩係被施加至輸入運算元以產生所要操作的元件組於401。該組運算元接著被操作以產生純量結果於402。純量結果接著被散開以建立具有多元件的向量,其中各元件包含純量結果於403。寫入遮罩接著被施加至該向量以建立結果向量於404,其係被寫入至指定暫存器中。
根據第4B圖之方法,用於操作之元件組的多個例子係自讀取遮罩及輸入運算元建立於411。多個相同的操作接著分別被平行執行於各建立的元件組,以建立輸出向量於412。寫入遮罩接著被施加至輸出向量以建立結果向量於413,其係被寫入至指定暫存器中。
明顯地,第4A及4B圖之方法皆可利用不同於寫入 遮罩之識別元件的不同組合及與寫入遮罩不同的數量之讀取遮罩。
以上說明關於執行於用於操作的元件組之所有元件之相同操作。舉例來說,若所要操作的元件組對應至輸入向量運算元的元件(E1,E4,E7,E15),且操作為相加操作(ADD),則該操作可被執行為(E1+E4+E7+E15)。同樣地,若操作為相乘操作(MUL),則該操作可被執行為(E1 * E4 * E7 * E15)。除了數學操作外,相同的格式也可應用至邏輯操作。
舉例來說,若操作為邏輯OR操作(OR),則該操作可被執行為(E1 OR E4 OR E7 OR E15)。同樣地,若操作為邏輯AND操作,則該操作可被執行為(E1 AND E4 AND E7 AND E15)。所屬技術領域中具有通常知識者將瞭解到實際上任何邏輯操作皆適用(例如,XOR,NAND,NOR等)。基本上,能夠接受多個輸入且無關多個輸入的數量之任何數學或邏輯操作皆可被實現於前述格式。
第5A及5B圖關於支持更先進的水平指令之功能單元邏輯電路,其可接收讀取遮罩向量以外的兩個來源運算元。隨著額外的向量輸入運算元,第5A圖之功能單元設計可支持用於水平指令之多層數學及邏輯操作。根據第5A圖之方案,於暫存器501中之讀取遮罩係被施加至分別儲存於暫存器502及503中之一對輸入向量運算元以建立兩個分開的所要操作的元件組504_1、504_2。
作為範例,若讀取遮罩識別第一、第四、第七、及第 十五個元件,則所要操作的第一元件組係自儲存於暫存器502中之第一輸入向量運算元中取出(E1_1,E1_4,E1_7,E1_15)且所要操作的第二元件組係自儲存於暫存器503中之第二輸入向量運算元中取出(E2_1,E2_4,E2_7,E2_15)。各種多層數學及邏輯操作可接著藉由操作邏輯電路505被執行。基本格式為:((op 1於第一運算元之所有元件)op2(op 1於第二運算元之所有元件))。
舉例來說,以下範例皆對應至此基本格式;(E1_1+E1_4+E1_7+E1_15)*(E2_1+E2_4+E2_7+E2_15)
((E1_1)*(E1_4)*(E1_7)*(E1_15))+((E2_1)*(E2_4)*(E2_7)*(E2_15))
(E1_1+E1_4+E1_7+E1_15)/(E2_1+E2_4+E2_7+E2_15)
((E1_1)*(E1_4)*(E1_7)*(E1_15))/((E2_1)*(E2_4)*(E2_7)*(E2_15)).
所屬技術領域中具有通常知識者亦了解到以上表示的任何數學運算子可基本上被任何邏輯操作(例如,OR,NOR,XOR,AND,NAND等)代替。
輸出向量可藉由關於第3或4圖之上述技術(散開純量結果或以平行操作複製所要操作的元件組)由邏輯電路505建立。寫入遮罩電路506接著施加儲存於暫存器507中之寫入遮罩以建立結果向量,其係儲存於指定暫存器中。
如第5B圖所示,由第5A圖之電路所執行的處理係施加讀取遮罩至一對輸入向量運算元以建立用於操作之個別元件組於511。該元件組接著被操作於512(例如,藉 由剛才說明的多層操作)且輸出向量係被建立。寫入遮罩係被施加至輸出向量以建立結果向量,其係被寫入至指定暫存器513中。
於額外的實施例中,第三輸入向量運算元係被包含使得三個所要操作的元件組係被建立。如此,可進行三階層的執行(例如(E1_1+E1_4+E1_7+E1_15)* (E2_1+E2_4+E2_7+E2_15)* (E3_1+E3_4+E3_7+E3_15))。
於另一實施例中,多於一個讀取遮罩向量可被包含於指令格式中,使得不同元件位置可自一對輸入向量運算元中選擇。舉例來說,參照第5A圖之電路,不是施加相同讀取遮罩至兩輸入向量,第一讀取遮罩係被施加至儲存於暫存器502中之第一輸入向量,且第二讀取遮罩(未圖示)係被施加至儲存於暫存器503中之第二輸入向量。於此,第一及第二讀取遮罩可為不同的以識別不同的元件組。
如此,所遵循的多層數學或邏輯操作可具有於其個別的第一階層項中表示之不同的元件位置。舉例來說,若第一遮罩向量識別第一、第四、第七、及第十五個元件位置,而第二遮罩向量識別第二、第五、第八、及第十六個元件位置,則可能的操作包含(其他變形可自以上說明立即分辨):(E1_1+E1_4+E1_7+E1_15)*(E2_2+E2_5+E2_8+E2_16)
((E1_1)*(E1_4)*(E1_7)*(E1_15))+((E2_2)*(E2_5)*(E2_8)*(E2_16))
同樣的,用於此方案之寫入遮罩可識別不僅不同於讀取遮罩的元件組,還有不同於讀取遮罩之元件的數量。
後文中詳細說明之相對新的向量指令格式技術之實施例可容納除了寫入遮罩以外的多達四個向量來源運算元。如此,第一對的來源運算元可分別對應至兩個讀取遮罩,且第二對的來源運算元可分別對應至第一及第二輸入向量。如此,指令格式可採取以下格式:INSTRUCTION k1;k2;V1;V2,其中k1及k2為讀取遮罩對且V1及V2為輸入向量運算元對。明顯地,輸入向量之其中一者可自記憶體而非暫存器空間被擷取,且指定暫存器可為相同的暫存器(輸入運算元(例如,V1或V2)之其中一者係源自於此)。於前所述的延伸中,單一讀取遮罩係被施加至三個輸入向量,指令格式可採用以下格式:INSTRUCTION k1;V1;V2;V3。同樣的,指定暫存器可為作為來源運算元暫存器之其中一者的相同的暫存器。
例示指令格式
於此所述之指令的實施例可被體現於不同格式。舉例來說,與此所述的指令可被體現於VEX、一般向量友善、或其他格式。VEX及一般向量友善格式係詳細說明如後。此外,例示系統、架構、及管線係詳細說明如後。指令的實施例可被執行於此系統、架構、及管線,但不限於此。
VEX指令格式
VEX編碼允許指令具有多於兩個運算元,且允許SIMD向量暫存器大於128位元。VEX前置的使用提供三運算元(或更多)語法。舉例來說,先前兩運算元指令所執行的操作,例如A=A+B,其覆寫(overwrite)來源運算元。VEX前置的使用可使運算元執行非破壞性操作,例如A=B+C。
第6A圖顯示例示AVX指令格式,包含VEX前置602、真實運算碼欄位630、Mod R/M位元組640、SIB位元組650、位移欄位662、及IMM8 672。第6B圖顯示來自第6A圖的哪些欄位組成完整運算碼欄位674及基本操作欄位642。第6C圖顯示來自第6A圖的哪些欄位組成暫存器索引欄位644。
VEX前置(位元組0-2)602係被以三位元組格式被編碼。第一位元組為格式欄位640(VEX位元組0,位元[7:0]),其包含明確的C4位元組值(使用以區別C4指令格式之唯一值)。第二至三位元組(VEX位元組1-2)包含提供特定功能之一些位元欄位。具體言之,REX欄位605(VEX位元組1,位元[7-5])由VEX.R位元欄位(VEX位元組1,位元[7]-R)、VEX.X位元欄位(VEX位元組1,位元[6]-X)、及VEX.B位元欄位(VEX位元組1,位元[5]-B)組成。指令的其他欄位如該領域所熟知者將暫存器索引之較低三個位元編碼(rrr,xxx,bbb),使得Rrrr,Xxxx,Bbbb可藉由加入VEX.R,VEX.X,VEX.B被形 成。運算碼映射欄位615(VEX位元組1,位元[4:0]-mmmmm)包含內容編碼隱含引導運算碼位元組。W欄位664(VEX位元組2,位元[7]-W)-係由標記VEX.W所表示,且根據該指令提供不同的功能。VEX.vvvv 620(VEX位元組2,位元[6:3]-vvvv)的任務可包含以下所述:1)VEX.vvvv編碼第一來源暫存器運算元,以反向的形式(1的補數)來表示且對於具有2或更多來源運算元之指令也是有效的;2)VEX.vvvv編碼指定暫存器運算元,對於特定向量偏移以1的補數形式表示;或3)VEX.vvvv不編碼任何運算元,該欄位被保留且應包含1111b。若VEX.L 668尺寸欄位(VEX位元組2,位元[2]-L)=0,其表示128位元向量;若VEX.L=1,其表示256位元向量。前置編碼欄位625(VEX位元組2,位元[1:0]-pp)對於基本操作欄位提供額外的位元。
真實運算碼欄位630(位元組3)亦稱為運算碼位元組。部份的運算碼係於此欄位被指明。
MOD R/M欄位640(位元組4)包含MOD欄位642(位元[7-6])、Reg欄位644(位元[5-3])、及R/M欄位646(位元[2-0])。Reg欄位644的任務可包含以下所述:編碼指定暫存器運算元或來源暫存器運算元(Rrrr之rrr)、或被作為運算碼延伸且不被使用以編碼任何指令運算元。R/M欄位646的任務可包含以下所述:編碼參照記憶體位址之指令運算元、或編碼指定暫存器運算元或來源暫存器運算元。
定比、索引、基本(SIB)-定比欄位650(位元組5)的內容包含SS 652(位元[7-6]),其係被使用以供記憶體位址產生。SIB.xxx 654(位元[5-3])及SIB.bbb 656(位元[2-0])之內容已於先前參照關於暫存器索引Xxxx及Bbbb。
位移(displacement)欄位662及立即(immediate)欄位(IMM8)672包含位址資料。
一般向量友善指令格式
向量友善指令格式為適合用於向量指令(例如,有特定於向量操作之特定欄位)之一指令格式。雖然實施例中係說明透過向量友善指令格式可支持向量及純量操作,替代實施例可僅使用向量操作於向量友善指令格式。
第7A-7B圖為說明根據本發明之實施例的一般向量友善指令格式及其指令範本之方塊圖。第7A圖為說明根據本發明之實施例的一般向量友善指令格式及其A類別指令範本之方塊圖;而第7B圖為說明根據本發明之實施例的一般向量友善指令格式及其B類別指令範本之方塊圖。具體言之,被界定為A類別及B類別指令範本之一般向量友善指令格式700皆包含無記憶體存取705指令範本及記憶體存取720指令範本。一般向量友善指令格式中的「一般」表示未被用於特定指令集之指令格式。
本發明之實施例將說明如下,其中向量友善指令格式支援以下所述者:64位元組向量運算元長度(或尺寸) 與32位元(4位元組)或64位元(8位元組)資料元件寬度(或尺寸)(且因此,64位元組向量由16個雙字元尺寸元或替代地或8個四字元尺寸元組成);64位元組向量運算元長度(或尺寸)與16位元(2位元組)或8位元(1位元組)資料元件寬度(或尺寸);32位元組向量運算元長度(或尺寸)與32位元(4位元組)、64位元(8位元組)、16位元(2位元組)、或8位元(1位元組)資料元件寬度(或尺寸);及16位元組向量運算元長度(或尺寸)與32位元(4位元組)、64位元(8位元組)、16位元(2位元組)、或8位元(1位元組)資料元件寬度(或尺寸);替代實施例可支援更多、更少及/或不同的向量運算元尺寸(例如,256位元組向量運算元)與更多、更少或不同的資料元件寬度(例如,128位元(16位元組)資料元件寬度)。
第7A圖中之A類別指令範本包含:1)在無記憶體存取705指令範本中,顯示有一無記憶體存取、完整修整控制(full round control)類型操作710指令範本及一無記憶體存取、資料轉換類型操作715指令範本;及2)在記憶體存取720指令範本中,顯示有一記憶體存取、時間性(temporal)725指令範本及一記憶體存取、非時間性(non-temporal)730指令範本。第7B圖中之B類別指令範本包含:1)在無記憶體存取705指令範本中,顯示有一無記憶體存取、寫入遮罩控制、部份修整控制(partial round control)類型操作712指令範本及一無記憶體存 取、寫入遮罩控制、vsize類型操作717指令範本;及2)在記憶體存取720指令範本中,顯示有一記憶體存取、寫入遮罩控制727指令範本。
一般向量友善指令格式700包含以下欄位,其以第7A-7B圖所說明的順序列出。連同以上所述,於一實施例中,參照於第7A-B及8圖中所提供的格式細節,無記憶體存取指令類型705或記憶體存取指令類型720可被利用。用於讀取遮罩、輸入向量運算元、及目的地之位址可被識別於後述之暫存器位址欄位744中。於進一步實施例中,寫入遮罩係被指明於寫入遮罩欄位770。於進一步實施例中,讀取遮罩係被編碼於EVEX.vvvv欄位1020中且寫入遮罩係被編碼於EVEX.kkk欄位770中。
格式欄位740-於此欄位中的特定值(指令格式識別符值)唯一地識別向量友善指令格式,而因此識別指令流中向量友善指令格式之指令的發生。就其真正意義來說,在不需要僅具有一般向量友善指令格式之指令集的情況下,此欄位為選擇性的。
基本(base)操作欄位742-其內容區別不同的基本操作。
暫存器索引(index)欄位744-其內容直接地或透過位址產生而指明在暫存器或記憶體中來源及指定運算元之位置。這些包含足夠數量的位元以從PxQ(例如32x512,16x128,32x1024,64x1024)個暫存器檔案中選擇N個暫存器。雖然於一實施例中,N可多至三個來源及一 個指定暫存器,替代實施例可支持更多或更少來源及指定暫存器(例如,可支持多至兩個來源,其中一個亦作用為目的地;可支持多至兩個來源及一個目的地)。
修改符欄位746-其內容區別一般向量指令格式之指令的發出,其指明自那些不會者的記憶體存取;亦即,無記憶體存取705指令範本及記憶體存取720指令範本之間。記憶體存取操作讀取及/或寫入記憶體階層(於某些情形,使用暫存器中的值來指明來源及/或指定位址),而無記憶體存取操作則否(例如,來源及目的地為暫存器)。雖然於一實施例中,此欄位亦在三種不同的方式中選擇以執行記憶體位址計算,替代實施例可支持更多、更少、或不同的方式以執行記憶體位址計算。
增益操作欄位750-其內容區別除了基本操作以外,各種各樣的不同的操作中之何者將被執行。此欄位為內文特定的。於本發明一實施例中,此欄位被區分成類別欄位768、alpha欄位752、及beta欄位754。增益操作欄位750允許共同群組之將被執行的操作於單一指令,2、3、或4個指令則否。
定比(scaling)欄位760-其內容允許用於記憶體位址產生之用於索引欄位的內容之定比(例如,用於使用2scale * index+base之位址產生)。
位移欄位762A-其內容係用於部分的記憶體位址產生(例如,用於使用2scale * index+base+displacement之位址產生)。
位移因子欄位762B(注意,直接在位移因子欄位762B之上的位移欄位762A的並列表示其中一者係被使用)-其內容係用於部分的位址產生;其指明由記憶體存取之尺寸(N)所定比的一位移因子-其中N為記憶體存取中之位元組的數量(例如,用於使用2scale * index+base+scaled displacement之位址產生)。冗餘低階位元被忽略且因而位移因子欄位的內容係乘上記憶體運算元總尺寸(N)以產生將被使用以計算有效位址之最終位移。N的值係由處理器硬體在運行時間根據整個運算碼欄位774(稍後說明)及資料調處欄位754C來決定。在非為使用於無記憶體存取705指令範本及/或不同的實施例可實現兩者中之僅一者或沒有的情況下,位移欄位762A及位移因子欄位762B為選擇性的。
資料元件寬度欄位764-其內容區別一些資料元件寬度中之何者將被使用(於一些實施例係對於所有指令;於其他實施例係對於僅一些指令)。在若僅一個資料元件寬度被支持及/或資料元件寬度係使用其他態樣的運算碼而被支持的情況下,其係非需要的,此欄位為選擇性的。
寫入遮罩欄位770-其內容控制(在以每資料元件位置的基礎下)於指定向量運算元之資料元件位置是否反映基本操作及增益操作的結果。A類別指令範本支持合併寫入遮蔽(merging-writemasking)、而B類別指令範本支持合併及歸零寫入遮蔽。當合併時,向量遮罩允許目的地中任何組的元在任何操作(由基本操作及增益操作所指 明)的執行期間被保護;於其他實施例,當對應的遮罩位元具有0時,保留目的地的各元之舊值。相反的,當歸零向量遮罩允許目的地中任何組的元在任何操作(由基本操作及增益操作所指明)的執行期間被歸零;於一實施例,當對應的遮罩位元具有0值時,目的地的元被設為0。此功能的子集為控制被執行的操作之向量長度的能力(亦即,被修改的元之跨距(span),從第一到最後);然而,被修改的元並非一定要是連續的。因此,寫入遮罩欄位770允許部分的向量操作,包含載入、儲存、算術、邏輯等。雖然本發明之實施例係說明寫入遮罩欄位770的內容選擇一些包含將被使用的寫入遮罩之寫入遮罩暫存器之其中一者(且因此寫入遮罩欄位770的內容間接地識別該將被執行的遮蔽),替代實施例替代的或額外的允許遮罩寫入欄位770的內容直接指明將被執行的遮蔽。
立即欄位772-其內容允許立即的說明。在其不存在於不支持立即的一般向量友善格式之實現及不存在於不使用立即的指令的情況下,此欄位為選擇性的。
類別欄位768-其內容區別不同的類別之間的指令。參考第7A-B圖,此欄位的內容選擇A類別及B類別指令。於第7A-B圖,角落為圓形的方形係使用以表示欄位中存在一特定值(例如,分別於第7A-B圖中用於類別欄位768之A類別768A及B類別768B)。
A類別指令範本
在A類別的非記憶體存取705指令範本中,alpha欄位752係被解譯為RS欄位752A,其內容區別不同的增益操作類型中之何者將被執行(例如,修整(round)752A.1及資料轉換752A.2係分別指明無記憶體存取、修整類型操作710及無記憶體存取、資料轉換類型操作715指令範本),而beta欄位754區別指明的類型之操作中的何者將被執行。於無記憶體存取705指令範本中,定比欄位760、位移欄位762A、及位移定比欄位762B並不存在。
無記憶體存取指令範本-完整修整控制類型操作
於無記憶體存取完整修整控制類型操作710指令範本,beta欄位754係被解譯為修整控制欄位754A,其內容提供靜態修整(static rounding)。雖然本發明說明實施例的修整控制欄位754A包含抑制所有浮點例外(Suppress All floating point Exceptions;SAE)欄位756及修整操作控制欄位758,替代實施例可支持可編碼這些概念於相同欄位或僅具有一個或其他的這些概念/欄位(例如,可僅具有修整操作控制欄位758)。
SAE欄位756-其內容區別是否取消(disable)例外事件報告;當SAE欄位756的內容表示抑制是可進行的(enabled),給定指令不報告任何類型的浮點例外旗標且不提出任何浮點例外處理器。
修整操作控制欄位758-其內容區別執行修整操作的 群組中之何者(例如,捨進(Round-up)、捨位(Round-down)、向零方向捨入(Round-towards-zero)、及向最近者做進位(Round-to-nearest)。因此,修整操作控制欄位758允許修整模式的改變(在依據指令的基礎下(per instruction basis))。於本發明之處理器包含用以指明修整模的控制暫存器的一實施例中,修整操作控制欄位750的內容置換(override)暫存器值。
無記憶體存取指令範本-資料轉換類型操作
於無記憶體存取資料轉換類型操作715指令範本,beta欄位754係被解譯為資料轉換欄位754B,其內容區別一些資料轉換中之何者將被執行(例如,無資料轉換、拌和(swizzle)、廣播(broadcast)。
於A類別的記憶體存取720指令範本的情形下,alpha欄位752係被解譯為趕出提示(eviction hint)欄位752B,其內容區別趕出提示中之何者將被使用(於第7A圖,時間性(temporal)752B.1及非時間性(non-temporal)752B.2係分別指明記憶體存取、時間性725指令範本及記憶體存取、非時間性730指令範本),而beta欄位754係被解譯為資料調處欄位754C,其內容區別一些資料調處操作(亦已知為原指令(primitive))中之何者將被執行(例如,無調處;廣播;來源的上轉換(up conversion);及目的地的下轉換(down conversion)。記憶體存取720指令範本包含定比欄位760及選擇性的位 移欄位762A或位移定比欄位762B。
偕同轉換支持,向量記憶體指令執行來自記憶體的向量負載或執行向量儲存至記憶體。如同正規(regular)向量指令的情形,向量記憶體指令以資料元件式(data element-wise)從記憶體轉移資料或轉移資料至記憶體,偕同實際被轉移的資料元件係由被選擇為寫入遮罩的向量遮罩之內容所規定(dictate)。
記憶體存取指令範本-時間性
時間性資料為很可能夠快被再使用而受益自快取的資料。然而,此為一提示,且不同的處理器可以不同的方式將其實現,包含完全忽略該提示。
記憶體存取指令範本-非時間性
非時間性資料為不可能夠快被再使用而受益自第一階快取之快取且應被給定趕出優先的資料。然而,此為一提示,且不同的處理器可以不同的方式將其實現,包含完全忽略該提示。
B類別指令範本
在B類別的指令範本之情形中,alpha欄位752係被解譯為寫入遮罩控制(Z)欄位752C,其內容區別由寫入遮罩欄位770所控制的寫入遮蔽是否應為合併或歸零。
在B類別的非記憶體存取705指令範本的情形中,部 分的beta欄位754係被解譯為RL欄位757A,其內容區別不同的增益操作類型中之何者將被執行(例如,修整(round)757A.1及向量長度(VSIZE)757A.2係分別指明無記憶體存取、寫入遮罩控制、部份修整控制類型操作712指令範本及無記憶體存取、寫入遮罩控制、VSIZE類型操作717指令範本),而其餘的beta欄位754區別指明的類型之操作中的何者將被執行。於無記憶體存取705指令範本中,定比欄位760、位移欄位762A、及位移定比欄位762B並不存在。
於無記憶體存取、寫入遮罩控制、部份修整控制類型操作710指令範本中,其餘的beta欄位754係被解譯為修整操作欄位759A且例外事件報告係被取消(給定指令不報告任何類型的浮點例外旗標且不提出任何浮點例外處理器)。
修整操作控制欄位759A-就像是修整操作控制欄位758,其內容區別執行修整操作的群組中之何者(例如,捨進、捨位、向零方向捨入、及向最近者做進位。因此,修整操作控制欄位759A允許修整模式的改變(在依據指令的基礎下)。於本發明之處理器包含用以指明修整模的控制暫存器的一實施例中,修整操作控制欄位750的內容置換暫存器值。
於無記憶體存取、寫入遮罩控制、VSIZE類型操作717指令範本中,其餘的beta欄位754係被解譯為向量長度欄位759B,其內容區別一些資料向量長度中之何者將 被執行(例如,128、256、或512位元組)。
在B類別記憶體存取720指令範本之情形中,部分的beta欄位754係被解譯為廣播欄位757B,其內容區別廣播類型資料調處操作是否將被執行,而其餘的beta欄位754係被解譯為向量長度欄位759B。記憶體存取720指令範本包含定比欄位760、及選擇性的位移欄位762A或位移定比欄位762B。
關於一般向量友善指令格式700,完整運算碼欄位774係顯示包含格式欄位740、基本操作欄位742、及資料元件寬度欄位764。雖然一實施例係顯示其中完整運算碼欄位774包含所有的這些欄位,然而,完整運算碼欄位774可包含少於並不支持其全部之實施例中的所有這些欄位。完整運算碼欄位774提供操作碼(運算碼)。
增益操作欄位750、資料元件寬度欄位764、及寫入遮罩欄位770允許這些特徵在根據指令的基礎下被指明於一般向量友善指令格式。
寫入遮罩欄位及資料元件寬度欄位的結合建立類型的指令,其中其允許遮罩根據不同的資料元件寬度被應用。
A類別及B類別的許多指令範本在不同的情況下為有利的。在本發明之某些實施例中,不同的處理器或處理器內之不同的核心可支持僅A類別、僅B類別、或兩種類別皆可。舉例來說,打算用於通用計算之高效能一般目的失序(out-of-order)核心可支持僅B類別、主要打算用於圖形及/或科學(處理量)計算之核心可支持僅A類 別、且打算用於兩者的核心可支持兩者(當然,具有某些來自兩種類別之範本及指令(但非來自兩種類別之所有範本及指令)的混合係在本發明之範圍內)。同樣的,單一處理器可包含多個核心,其所有皆支持相同的類別或其中不同的核心支持不同的類別。舉例來說,在具有分開的圖形及一般目的核心處理器中,主要打算用於圖形及/或科學計算的其中一圖形核心可支持僅A類別,而一或多個一般目的核心可為打算用於通用計算具有失序執行及暫存器更名之高效能一般目的核心可支持僅B類別。不具有分開的圖形核心之另一處理器可包含多一個一般目的按序(in-order)或失序核心,其支持A類別及B類別兩者。當然,一類別的特徵可亦被實現於本發明不同的實施例中之其他類別。以高階語言撰寫的程式將被編譯成(例如,僅以時間編譯(time compiled)或靜態編譯(statically compiled))各種不同的可執行的形式,包含:1)僅具有由用於執行之目標處理器所支持的類別之指令的形式;或2)具有使用不同的所有類別的指令之組合所寫入的替代常式且具有選擇常式以根據正在執行該碼之處理器所支持的指令來執行之控制流碼之形式。
範例特定向量友善指令格式
第8A圖為說明根據本發明之實施例的範例特定向量友善指令格式之方塊圖。第8A圖顯示特定向量友善指令格式800,其係特定於指明欄位之位置、尺寸、註釋、及 次序,以及其中某些欄位的值。特定向量友善指令格式800可被使用以延伸x86指令集,且因此某些欄位相似或相同於使用於現有x86指令集及其延伸(例如,AVX)中之欄位。此格式仍與現有x86指令集及延伸之前置編碼欄位、真實運算碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位、及立即欄位一致。第8A圖之欄位對映的第7圖之欄位已被說明。
應了解的是,雖然本發明之實施例為了說明的目的參考一般向量友善指令格式700之內容來說明特定向量友善指令格式800,本發明並不限於特定向量友善指令格式800,除非另有說明。舉例來說,一般向量友善指令格式700對於各種欄位考量許多可能的尺寸,而特定向量友善指令格式800係顯示為具有特定尺寸的欄位。經由特定範例,雖然資料元件寬度欄位764係說明為一個位元欄位於特定向量友善指令格式800,本發明並不受限於此(亦即,一般向量友善指令格式700考量其他尺寸的資料元件寬度欄位764)。
一般向量友善指令格式700包含以下欄位,其以第8A圖所說明的順序列出。
EVEX前置(位元組0-3)802-係以四個位元組的形式來編碼。
格式欄位740(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)為格式欄位740,且其包含0x62(被使用以區別本發明之一實施例中的向量友善指令 格式之唯一值)。
第二至第四位元組(EVEX位元組1-3)包含提供特定作用的一些位元欄位。
REX欄位805(EVEX位元組1,位元[7-5])-由EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)、及757BEX位元組1,位元[5]-B)組成。EVEX.R、EVEX.X、及EVEX.B位元欄位提供如同對應的VEX位元欄位之相同的功能,且係被使用1的補數形式(1s complement form)而編碼,亦即ZMM0係被編碼成1111B、ZMM15係被編碼成0000B。指令的其他欄位如該領域所熟知者將暫存器索引之較低三個位元編碼(rrr,xxx,及bbb),使得Rrrr,Xxxx,Bbbb可藉由加入EVEX.R,EVEX.X,EVEX.B被形成。
REX’欄位710-此為REX’欄位710之第一部份且為EVEX.R’位元欄位(EVEX位元組1,位元[4]-R’),其係被使用以編碼較高16或較低16個延伸的32個暫存器組。於本發明之一實施例,此位元(連同以下所表示的其他位元)係以位元反向格式(bit inverted format)被儲存以區別(於已知x86 32位元模式中)BOUND指令,其真實運算碼位元組為62,但不接受MOD R/M欄位(稍後說明)11的值於MOD欄位;本發明之替代實施例不儲存此位元及其他以反向格式表示的位元。1的值係被使用以編碼較低16個暫存器。換句話說,R’Rrrr係藉由結合 EVEX.R’、EVEX.R、及來自其他欄位之其他RRR而被形成。
運算碼映射欄位815(EVEX位元組1,位元[3:0]-mmmm)-其內容編碼隱含引導運算碼位元組(0F,0F 38,或0F 3)。
資料元件寬度欄位764(EVEX位元組2,位元[7]-W)-係由表示法EVEX.W來表示。EVEX.W係被使用以界定資料類型(32位元資料元件或64位元資料元件)之粒度(尺寸)。
EVEX.vvvv 820(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv的任務可包含以下所列者:1)EVEX.vvvv編碼第一來源暫存器運算元,以反向的形式(1的補數)來表示且對於具有2或更多來源運算元之指令也是有效的;2)EVEX.vvvv編碼指定暫存器運算元,對於特定向量偏移以1的補數形式表示;或3)EVEX.vvvv不編碼任何運算元,該欄位被保留且應包含1111b。因此,EVEX.vvvv欄位820編碼以反向形式(1的補數)儲存的第一來源暫存器說明符之4個低階位元。根據該指令,額外的不同的EVEX位元欄位係被使用以延伸說明符尺寸至32個暫存器。
EVEX.U 768類別欄位(EVEX位元組2,位元[2]-U)-若EVEX.U=0,則其表示A類別或EVEX.U0;若EVEX.U=1,則其表示B類別或EVEX.U1。
前置編碼欄位825(EVEX位元組2,位元[1:0]-pp)- 對基本操作欄位提供額外的位元。除了對EVEX前置格式的舊有(legacy)SSE指令提供支持,其亦有助於簡潔SIMD前置(而不需一位元組以表示SIMD前置,EVEX前置僅需要2位元)。於一實施例,為了支持使用舊有格式及EVEX前置格式的SIMD前置(66H,F2H,F3H)之舊有SSE指令,這些舊有SIMD前置被編碼成SIMD前置編碼欄位;且在被提供至解碼器的PLA之前,在運行時間係被擴展成舊有SIMD前置(故PLA可執行這些舊有指令的舊有及EVEX格式而不需修改)。雖然較新的指令可直接使用EVEX前置編碼欄位的內容作為運算碼延伸,特定實施例以相似方式擴展以達成一致性,但允許不同的意義被這些舊有SIMD前置所指明。替代實施例可重新設計PLA以支持2位元SIMD前置編碼,且因此不需要該延伸。
Alpha欄位752(EVEX位元組3,位元[7]-EH:亦已知為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮罩控制、及EVEX.N;亦以α表示)-如前所述,此欄位為內文特定的。
Beta欄位754(EVEX位元組3,位元[6:4]-SSS,亦已知為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;亦以βββ表示)-如前所述,此欄位為內文特定的。
REX’欄位710-此為REX’欄位之餘項且為EVEX.V’位元欄位(EVEX位元組3,位元[3]-V’),其可被使用 以編碼較高16或較低16個延伸的32個暫存器組。此位元係以位元反向格式儲存。1的值係被使用以編碼較低16個暫存器。換句話說,V’VVVV係藉由結合EVEX.V’、EVEX.vvvv而形成。
寫入遮罩欄位770(EVEX位元組3,位元[2:0]-kkk)-其內容指明寫入遮罩暫存器中之暫存器的索引,如前所述者。於本發明之一實施例,特定值EVEX.kkk=000具有特別的表現,暗示無寫入遮罩被使用於特定指令(此可被實現於許多方式,包含使用硬接線(hardwired)至全部者之寫入遮罩或略過(bypass)遮蔽硬體之硬體)。
真實運算碼欄位830(位元組4)亦已知為運算碼位元組。部份的運算碼係被指明於此欄位。
MOD R/M欄位840(位元組5)包含MOD欄位842、Reg欄位844、及R/M欄位846。如前所述,MOD欄位842的內容區別記憶體存取及非記憶體存取操作。Reg欄位844的任務可被概述為兩種情況:編碼指定暫存器運算元或來源暫存器運算元、或被視為運算碼延伸且不使用以編碼任何指令運算元。R/M欄位846之任務可包含以下所列者:編碼參照記憶體位址之指令運算元,或編碼指定暫存器運算元或來源暫存器運算元。
定比、索引、基本(SIB)位元組(位元組6)-如前所述,定比欄位750的內容係被使用於記憶體位址產生。SIB.xxx 854及SIB.bbb 856-這些欄位的內容已於 先前參照關於暫存器索引Xxxx及Bbbb。
位移欄位762A(位元組7-10)-當MOD欄位842包含10時,位元組7-10為位移欄位762A,且其作用相同於舊有32位元位移(disp32)且以位元組粒度作用。
位移因子欄位762B(位元組7)-當MOD欄位842包含01時,位元組7為位移因子欄位762B。此欄位的位置相同於舊有x86指令集8位元位移(disp8),其以位元組粒度作用。由於disp8係符號延伸的(sign extended)其僅可在-128及127位元組偏位之間定址;根據64位元組快取列,disp8使用8位元,其可被設定為僅四個真的有用的值-128,-64,0,64;由於通常需要較大範圍,disp32係被使用;然而,disp32需要4個位元組。與disp8及disp32相比,位移因子欄位762B為disp8之重新解釋(reinterpretation);當使用位移因子欄位762B時,實際位移係藉由位移因子欄位乘上記憶體運算元存取(N)之尺寸的內容而被決定。此類型的位移被稱為disp8*N。此降低平均指令長度(使用於位移之單一位元組但具有大的多之範圍)。此壓縮的位移係根據假設有效的位移為記憶體存取之粒度的倍數,且因此,位址偏位之冗餘低階位元不需要被編碼。換句話說,位移因子欄位762B取代舊有x86指令集8位元位移。因此,位移因子欄位762B以與x86指令集8位元位移同樣的方式被編碼(故ModRM/SIB編碼規則沒有改變),唯一例外是disp8超負載至disp8*N。換句話說,編碼規則或編碼長度沒有 藉由硬體(其需要記憶體運算元之尺寸來定比該位移以取得位元組式(byte-wise)位址偏位)來改變但僅在位移值之註釋有改變。
立即欄位772如前所述來操作。
完整運算碼欄位
第8B圖為說明根據本發明一實施例之組成完整運算碼欄位774之特定向量友善指令格式800之欄位之方塊圖。具體言之,完整運算碼欄位774包含格式欄位740、基本操作欄位742、及資料元件寬度(W)欄位764。基本操作欄位742包含前置編碼欄位825、運算碼映射欄位815、及真實運算碼欄位830。
暫存器索引欄位
第8C圖為說明根據本發明一實施例之組成暫存器索引欄位744之特定向量友善指令格式800之欄位之方塊圖。具體言之,暫存器索引欄位744包含REX欄位805、REX’欄位810、MODR/M.reg欄位844、MODR/M.r/m欄位846、VVVV欄位820、xxx欄位854、及bbb欄位856。
增益操作欄位
第8D圖為說明根據本發明一實施例之組成增益操作欄位750之特定向量友善指令格式800之欄位之方塊圖。 當類別(U)欄位768包含0時,其表明EVEX.U0(A類別768A);當其包含1時,其表明EVEX.U1(B類別768B)。當U=0且MOD欄位842包含11(表明無記憶體存取操作)時,alpha欄位752(EVEX位元組3,位元[7]-EH)係被解譯為rs欄位752A。當rs欄位752A包含1(修整752A.1)時,beta欄位754(EVEX位元組3,位元[6:4]-SSS)係被解譯為修整控制欄位754A。修整控制欄位754A包含一個位元SAE欄位756及兩個位元修整操作欄位758。當rs欄位752A包含0(資料轉換752A.2)時,beta欄位754(EVEX位元組3,位元[6:4]-SSS)係被解譯為三個位元資料轉換欄位754B。當U=0且MOD欄位842包含00、01、或10(表明記憶體存取操作)時,alpha欄位752(EVEX位元組3,位元[7]-EH)係被解譯為趕出提示(EH)欄位752B且beta欄位754(EVEX位元組3,位元[6:4]-SSS)係被解譯為三個位元資料調處欄位754C。
當U=1,alpha欄位752(EVEX位元組3,位元[7]-EH)係被解譯為寫入遮罩控制(Z)欄位752C。當U=1且MOD欄位842包含11(表明無記憶體存取操作)時,部分的beta欄位754(EVEX位元組3,位元[4]-S0)係被解譯為RL欄位757A;當其包含1(修整757A.1)時,其餘的beta欄位754(EVEX位元組3,位元[6-5]-S2-1)係被解譯為修整操作欄位759A,而當RL欄位757A包含0(VSIZE 757.A2)時,其餘的beta欄位754 (EVEX位元組3,位元[6-5]-S2-1)係被解譯為向量長度欄位759B(EVEX位元組3,位元[6-5]-L1-0)。當U=1且MOD欄位842包含00、01、或10(表明記憶體存取操作)時,beta欄位754(EVEX位元組3,位元[6:4]-SSS)係被解譯為向量長度欄位759B(EVEX位元組3,位元[6-5]-L1-0)及廣播欄位757B(EVEX位元組3,位元[4]-B)。
範例暫存器架構
第9圖為根據本發明一實施例之暫存器架構900的方塊圖。於所說明的實施例中,有512位元寬的32個向量暫存器910;這些暫存器參照zmm0至zmm31。較低的16個zmm暫存器之較低階的256位元係覆蓋於暫存器ymm0-16上。較低的16個zmm暫存器之較低階的128位元(暫存器之較低階的128位元)係覆蓋於暫存器xmm0-15上。特定向量友善指令格式800操作於這些覆蓋暫存器檔案如下表所說明。
換句話說,向量長度欄位759B在最大長度與一或多個其他較短的長度之間選擇,其中各較短的長度為前面的長度之一半;且不包含向量長度欄位759B之指令範本操作於最大向量長度。再者,於一實施例,特定向量友善指令格式800之B類別指令範本操作於緊密的或純量單/雙精度浮點資料及緊密的或純量整數資料。純量操作為執行於zmm/ymm/xmm暫存器中之最低階資料元件位置之操作;較高階資料元件位置根據實施例係與在指令之前者一樣或歸零。
寫入遮罩暫存器915-於所說明的實施例中,有8個寫入遮罩暫存器(k0至k7),尺寸為64位元。於一替代實施例,寫入遮罩暫存器915的尺寸為16位元。如前所述,於本發明之一實施例,向量遮罩暫存器k0無法被使用作為寫入遮罩;當一般表示k0的編碼係被使用作為寫入遮罩時,其選擇硬接線的寫入遮罩0xFFFF,有效地對於該指令取消寫入遮蔽。
通用暫存器925-於所說明的實施例中,有十六個64位元通用暫存器,其係與現有x86定址模式一起被使用以定址記憶體運算元。這些暫存器係參照名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15。
純量浮點堆疊暫存器檔案(x87堆疊)945,其更名MMX緊縮整數平坦(packed integer flat)暫存器檔案 950-於所說明的實施例中,x87堆疊為使用x87指令集延伸之使用以執行純量浮點操作於32/64/80位元浮點資料的八元(eight-element)堆疊;而MMX暫存器係被使用以執行操作於64位元緊縮整數資料,以及對於MMX及XMM暫存器間執行的某些操作保持運算元。
本發明之替代實施例可使用較寬或較窄的暫存器。此外,本發明之替代實施例可使用較多、較少、或不同的暫存器檔案及暫存器。
範例核心架構、處理器、及電腦架構
處理器核心可用不同的方式、根據不同的目的、及在不同的處理器中來實現。舉例來說,此等核心的實現可包含:1)打算用於通用計算之一般目的按序核心;2)打算用於通用計算之高效能一般目的失序核心;3)打算主要用於圖形及/或科學(處理量)計算之特殊目的核心。不同的處理器之實現可包含:1)包含打算用於通用計算之一或多個一般目的按序核心及/或打算用於通用計算之一或多個一般目的失序核心之CPU;及2)包含打算主要用於圖形及/或科學(處理量)計算之一或多個特殊目的核心之共處理器。此不同的處理器導致不同的電腦系統架構,其可包含:1)於CPU分開的晶片上之共處理器;2)與CPU相同的封裝之分開的晶粒上之共處理器;3)與CPU在相同的晶粒上之共處理器(於此情形,此共處理器有時被稱為特殊目的邏輯,例如積體圖形及/或科學 (處理量)邏輯、或稱為特殊目的核心),及4)晶片上之系統,其可包含與所述CPU於相同的晶粒上(有時稱為應用核心(application core)或應用處理器)、上述共處理器、及額外的功能。範例核心架構將接著說明,然後是範例處理器及電腦架構的說明。
範例核心架構 按序及失序核心方塊圖
第10A圖為說明根據本發明之實施例的範例循序管線及範例暫存器更名、故障事件/執行管線兩者之方塊圖。第10B圖為說明根據本發明之實施例的包含於處理器中之按序架構核心及範例暫存器更名、故障事件/執行架構核心之方塊圖。第10A-B圖中的實線方塊說明循序管線及按序核心,而選擇性的額外的虛線方塊說明暫存器更名、故障事件/執行管線及核心。按序態樣為失序態樣的子集,失序態樣將被說明。
於第10A圖,處理器管線1000包含擷取階段1002、長度解碼階段1004、解碼階段1006、分配階段1008、更名階段1010、排程(亦已知為配送或發出)階段1012、暫存器讀取/記憶體讀取階段1014、執行階段1016、回寫(write back)/記憶體寫入階段1018、例外處置階段1022、及確定階段1024。
第10B圖顯示包含耦接至執行引擎單元1050之前端單元1030(兩者皆耦接至記憶體單元1070)之處理器核 心1090。核心1090可為精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、超長指令字(VLIW)核心、或混合或替代核心類型。於另一選擇性,核心1090可為特殊目的核心,例如,舉例來說,網路或通訊核心、壓縮引擎、共處理器核心、一般目的計算圖形處理單元(General Purpose Computing Graphics Processing Unit;GPGPU)核心、圖形核心、或類似者。
前端單元1030包含耦接至指令快取單元1034之分支預測單元1032,指令快取單元1034係耦接至指令轉譯後備緩衝區(Translation Lookaside Buffer;TLB)1036,TLB 1036係耦接至指令提取單元1038,指令提取單元1038係耦接至解碼單元1040。解碼單元1040(或解碼器)可解碼指令並產生為輸出一或多個微操作、微式碼進入點、微指令、其他指令、或其他控制訊號,其係從原始指令解碼、或反映原始指令、或從原始指令導出。解碼單元1040可使用各種不同的機構來實現。合適的機構之範例包含(但不限於)檢查表、硬體實現、可程式化邏輯陣列(Programmable Logic Array;PLA)、微碼唯讀記憶體(ROM)等。於一實施例,核心1090包含微碼ROM或儲存微碼以用於特定巨集指令之其他媒體(例如,於解碼單元1040或另外在前端單元1030內)。解碼單元1040係耦接至執行引擎單元1050中之更名/分配器單元1052。
執行引擎單元1050包含耦接至引退單元1054及一組一或多個排程器單元1056之更名/分配器單元1052。排程 器單元1056表示任何數量之不同的排程器,包含保留站(reservations stations)、中央指令視窗(central instruction window)等。排程器單元1056係耦接至實體暫存器檔案單元1058。各實體暫存器檔案單元1058表示一或多個實體暫存器檔案,不同的實體暫存器檔案儲存一或多個不同的資料類型,例如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,將被執行的下一個指令之位址的指令指標)等。於一實施例,實體暫存器檔案單元1058包含向量暫存器單元、寫入遮罩暫存器單元、及純量暫存器單元。這些暫存器單元可提供架構向量暫存器、向量遮罩暫存器、及一般目的暫存器。實體暫存器檔案單元1058被引退單元1054所重疊以說明多種方式,其中暫存器更名及失序執行可被實現(例如,使用重排緩衝器及引退暫存器檔案;使用未來檔案(future file)、歷史緩衝器、及引退暫存器檔案;使用暫存器圖(暫存器map)及許多的暫存器;等)。引退單元1054及實體暫存器檔案單元1058係耦接至執行叢集1060。執行叢集1060包含一組一或多個執行單元1062及一組一或多個記憶體存取單元1064。執行單元1062可執行許多操作(例如,偏移、加、減、乘)及於許多類型的資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。雖然某些實施例可包含專屬於特定功能或功能組之一些執行單元,其他實施例可包含僅一個或多個全部執行全部功能之執行單元。排程器單元1056、實 體暫存器檔案單元1058、及執行叢集1060被顯示為可能為複數個,因為特定實施例對於特定類型的資料/操作(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或記憶體存取管線,其各具有其本身排程器單元、實體暫存器檔案單元及/或執行叢集-且在分開的記憶體存取管線的情形中,其中僅此管線之執行叢集具有記憶體存取單元1064之特定實施例係被實現)建立分開的管線。亦應了解的是,在分開的管線被使用的情形下,這些管線中之一或多個可為失序發出/執行且其餘者為按序。
此組記憶體存取單元1064係耦接至記憶體單元1070,其包含資料TLB單元1072,資料TLB單元1072耦接至資料快取單元1074,資料快取單元1074耦接至第2層(L2)快取單元1076。於一範例實施例,記憶體存取單元1064可包含載入單元、儲存位址單元、儲存資料單元,各者係耦接至記憶體單元1070中之資料TLB單元1072。指令快取單元1034更耦接至記憶體單元1070中之第2層(L2)快取單元1076。L2快取單元1076係耦接至一或多個其他層的快取且最後耦接至主記憶體。
舉例來說,範例暫存器更名、故障事件/執行核心架構可如下所述實現管線1000:1)指令擷取1038執行擷取及長度編碼階段1002及1004;2)解碼單元1040執行解碼階段1006;3)更名/分配器單元1052執行分配階段1008及更名階段1010;4)排程器單元1056執行排程階 段1012;5)實體暫存器檔案單元1058及記憶體單元1070執行暫存器讀取/記憶體讀取階段1014;執行叢集1060執行執行階段1016;6)記憶體單元1070及實體暫存器檔案單元1058執行回寫/記憶體寫入階段1018;7)許多單元可被包含於例外處置階段1022;及8)引退單元1054及實體暫存器檔案單元1058執行確定階段1024。
核心1090可支持一或多個指令集(例如,x86指令集(偕同一些已被以新的版本加入的延伸);位於美國Sunnyvale,CA的MIPS Technologies公司之MIPS指令集;位於美國Sunnyvale,CA的ARM Holdings公司之ARM指令集(偕同選擇性的額外的延伸,例如NEON),包含文中所述之指令。於一實施例,核心1090包含邏輯以支持緊縮資料指令集延伸(例如,AVX1,AVX2),因而允許由許多多媒體應用程式所使用的操作將被使用緊縮資料來執行。
應了解的是,核心可支持多緒(multithreading)(執行二或更多平行組的操作或緒),且可於許多方式中如此操作,包含分時多緒、同時多緒(其中單一實體核心對各緒提供一邏輯核心,實體核心係同時多緒)、或其組合(例如,分時擷取及解碼及其後同時多緒,例如Intel®的Hyperthreading技術)。
雖然暫存器更名係於失序執行的說明中說明,應了解的是,暫存器更名可被使用於按序架構。雖然所說明的處理器之實施例亦包含分開的指令及資料快取單元 1034/1074及共享的L2快取單元1076,替代實施例可具有單一內部快取以用於指令及資料兩者,例如,舉例來說,第1層(L1)內部快取、或多層內部快取。於某些實施例,該系統可包含內部快取及外部快取(其係在核心及/或處理器外部)的組合。替代地,所有的快取可在核心及/或處理器外部。
特定範例按序核心架構
第11A-B圖為說明更多特定範例按序核心架構的方塊圖,其核心可為晶片中數個邏輯區塊(包含相同類型及/或不同的類型之其他核心)中之其中一者。邏輯區塊透過具有一些固定功能邏輯、記憶體I/O介面、及其他需要I/O邏輯(根據應用需求)之高頻寬互連網路(例如,環形網路)來通訊。
第11A圖為根據本發明之實施例的單一處理器核心的方塊圖,連同其與晶片上互連網路1102之連接及連同其第2層(L2)快取1104之本地子集。於一實施例,指令解碼器1100支持偕同緊縮資料指令集延伸之x86指令集。L1快取1106允許純量及向量單元之至快取記憶體的低潛時(low-latency)存取。雖然於一實施例(為了簡化設計)中,純量單元1108及向量單元1110使用分開的暫存器組(分別為純量暫存器1112及向量暫存器1114)且於其間轉移之資料係被寫入至記憶體然後從第1層(L1)快取1106讀回(read back),本發明之替代實施例可使 用不同的方式(例如,使用單一暫存器組或包含允許在兩個暫存器檔案之間轉移而不需要被回寫及讀回的資料之通訊路徑)。
L2快取1104之本地子集為全域(global)L2快取的一部分,全域L2快取係被區分成分開的本地子集,每個處理器核心有一個。各處理器核心具有直接存取路徑至其L2快取1104本身的本地子集。由處理器核心所讀取的資料係被儲存於其L2快取子集1104且可被快速地存取,與其他處理器核心存取其本身本地L2快取子集平行處理。由處理器核心所寫入的資料係被儲存於其本身L2快取子集1104且若需要,從其他子集清除(flush)。環形網路確保共享資料的共性(coherency)。環形網路為雙向的,以允許代理器(例如處理器核心、L2快取及其他邏輯區塊)在晶片內彼此通訊。各環形資料路徑在每個方向為1012位元寬。
第11B圖為根據本發明之實施例的第11A圖中之處理器核心的部份之展開圖。第11B圖包含L1快取1104之一部份的L1資料快取1106A,以及更詳細的向量單元1110及向量暫存器1114。具體言之,向量單元1110為16-寬(16-wide)向量處理單元(Vector Processing Unit;VPU)(見16-寬ALU 1128),其執行一或多個整數、單精度浮點、及雙精度浮點指令。VPU支持以拌和單元1120拌和暫存器輸入、以數值轉換單元1122A-B進行數值轉換、及以複製單元1124進行複製於記憶體輸入。 寫入遮罩暫存器1126允許斷定向量寫入。
積體記憶體控制器及圖形之處理器
第12圖為根據本發明之實施例的處理器1200之方塊圖,其可具有多於一個的核心、可具有積體記憶體控制器、及可具有積體圖形。第12圖中的實線方塊說明具有單一核心1202A、系統代理器1210、一組一或多個匯流排控制器單元1216之處理器1200,而選擇性的額外的虛線方塊說明具有多個核心1202A-N、系統代理器單元1210中的一組一或多個積體記憶體控制器單元1214、及特殊目的邏輯1208之替代處理器。
因此,處理器1200之不同的實現可包含:1)具有特殊目的邏輯1208之CPU,該特殊目的邏輯1208為積體圖形及/或科學(處理量)邏輯(其可包含一或多個核心)且核心1202A-N為一或多個一般目的核心(例如,一般目的按序核心、一般目的失序核心、及兩者的組合);2)共處理器,其核心1202A-N為大量的打算主要用於圖形及/或科學(處理量)計算之特殊目的核心;及3)共處理器,其核心1202A-N為大量的一般目的按序核心。因此,處理器1200可為通用處理器、共處理器或專用處理器,例如,舉例來說,網路或通訊處理器、壓縮引擎、圖形處理器、一般目的計算圖形處理單元(General Purpose Computing Graphics Processing Unit;GPGPU)核心、高處理量多重整合核心(Many Integrated Core;MIC)共處 理器(包含30或更多核心)、內嵌式處理器、或類似者。處理器可被實現於一或多個晶片。處理器1200可為部分的及/或可被實現於一或多個使用任何之一些處理技術的基板,例如,舉例來說,BiCMOS、CMOS、或NMOS。
記憶體階層包含核心內之一或多層之快取、一組或一或多個共享的快取單元1206、及耦接至該組積體記憶體控制器單元1214之外部記憶體(未圖示)。該組共享的快取單元1206可包含一或多個中層快取,例如第2層(L2)、第3層(L3)、第4層(L4)或其他層的快取、最後層快取(Last Level Cache;LLC)、及/或其組合。雖然於一實施例中環式互連單元1212互連積體圖形邏輯1208、該組共享的快取單元1206、及系統代理器單元1210/積體記憶體控制器單元1214,替代實施例可使用任何數量的已知技術來互連此等單元。於一實施例,一或多個快取單元1206及核心1202-A-N之間的共性係被維持。
於某些實施例,一或多個核心1202A-N能夠進行多緒處理。系統代理器1210包含協調及操作核心1202A-N的那些組件。系統代理器單元1210可包含例如電源控制單元(Power Control Unit;PCU)及顯示單元。PCU可為或包含調節核心1202A-N及積體圖形邏輯1208之電源狀態所需之邏輯及組件。顯示單元係用以驅動一或多個外部連接的顯示器。
核心1202A-N可為同質的(homogenous)或不同質的(heterogeneous)架構指令集;亦即,二或更多的核心1202A-N能夠執行相同的指令集,而其他者僅能夠執行該指令集或不同的指令集之子集。
範例電腦架構
第13-16圖為範例電腦架構之方塊圖。所屬技術領域中已知的關於膝上型電腦、桌上型電腦、手持型PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換器、內嵌式處理器、數位訊號處理器(DSP)、圖形裝置、視訊遊戲裝置、機上盒、微控制器、行動電話、行動多媒體播放器、手持裝置、及許多其他電子裝置之其他系統設計及組態亦合適。通常,能夠結合文中所揭露之處理器及/或其他執行邏輯之許多種類的系統或電子裝置一般為適合的。
現參照第13圖,所顯示者為根據本發明一實施例之系統1300的方塊圖。系統1300可包含一或多個處理器1310、1315,其係耦接至控制器集線器1320。於一實施例中,控制器集線器1320包含圖形記憶體控制器集線器(Graphics Memory Controller Hub;GMCH)1390及輸入/輸出集線器(Input/Output Hub;IOH)1350(其可為分開的晶片);GMCH 1390包含耦接至記憶體1340及共處理器1345之記憶體及圖形控制器;IOH 1350係將輸入/輸出(I/O)裝置1360耦接至GMCH 1390。替代地,記憶 體及圖型控制器之其中一者或兩者係於處理器(如文中所述)中集成(integrated),記憶體1340及共處理器1345係直接耦接至處理器1310,且控制器集線器1320係與IOH 1350於同一晶片中。
選擇性的額外的處理器1315係於第13圖中以虛線表示。各處理器1310、1315可包含一或多個文中所述的處理核心且可為某些版本的處理器1200。
記憶體1340可為,舉例來說,動態隨機存取記憶體(DRAM)、相變記憶體(Phase Change Memory;PCM)、或兩者的組合。於至少一個實施例中,控制器集線器1320經由多點分歧匯流排(例如前側匯流排(Frontside Bus;FSB))、點對點介面(例如QuickPath互連(QuickPath Interconnect;QPI)、或類似連接1395而與處理器1310、1315通訊。
於一實施例,共處理器1345為專用處理器,例如,舉例來說,高處理量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、內嵌式處理器、或類似者。於一實施例,控制器集線器1320可包含積體圖形加速器。
在包含架構的、微架構的、熱的、電源消耗特性、及類似者之指標的度量指標之範圍的方面下,實體資源1310、1315之間可有許多不同。
於一實施例,處理器1310執行控制一般類型的資料處理操作之指令。內嵌於指令中者可為共處理器指令。處 理器1310認可這些共處理器指令為應由附接的(attached)共處理器1345所執行之類型。因此,處理器1310發出這些共處理器指令(或表示共處理器指令之控制訊號)於共處理器匯流排或其他互連,至共處理器1345。共處理器1345接收並執行所接收的共處理器指令。
現參照第14圖,所顯示者為根據本發明之實施例的第一更特定的範例系統1400之方塊圖。如第14圖所示,多處理器系統1400為點對點互連系統,且包含經由點對點互連1450耦接之第一處理器1470及第二處理器1480。各處理器1470及1480可為某些版本的處理器1200。於本發明之一實施例,處理器1470及1480係分別為處理器1310及1315,而共處理器1438為共處理器1345。於其他實施例,處理器1470及1480係分別為處理器1310及共處理器1345。
處理器1470及1480係顯示為分別包含積體記憶體控制器(IMC)單元1472及1482。處理器1470亦包含作為其匯流排控制器單元之點對點(P-P)介面1476及1478;同樣地,第二處理器1480包含P-P介面1486及1488。處理器1470、1480可經由點對點(P-P)介面1450使用P-P介面電路1478、1488來交換資訊。如第14圖所示,IMC 1472及1482耦接處理器至各別的記憶體,也就是記憶體1432及記憶體1434,其可為主記憶體本地地附接至各別處理器的部分。
處理器1470、1480各可與晶片組1490經由個別P-P介面1452、1454使用點對點介面電路1476、1494、1486、1498來交換資訊。晶片組1490可選擇性地與共處理器1438經由高效能介面1439來交換資訊。於一實施例,共處理器1438為專用處理器,例如,舉例來說,高處理量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、內嵌式處理器、或類似者。
共享的快取(未圖示)可被包含於其中一處理器中或於兩處理器的外部,但經由P-P互連與該等處理器連接,使得若處理器係被處於低電源模式,處理器之其中一者或兩者的本地快取資訊可被儲存於共享的快取中。
晶片組1490可經由介面1496被耦接至第一匯流排1416。於一實施例,第一匯流排1416可為週邊組件互連(Peripheral Component Interconnect;PCI)匯流排、或例如PCI Express匯流排之匯流排或另一第三代I/O互連匯流排,雖然本發明之範疇並不限於此。
如第14圖所示,各種I/O裝置1414可被耦接至第一匯流排1416,連同耦接第一匯流排1416至第二匯流排1420之匯流排橋接器1418。於一實施例,一或多個額外的處理器1415(例如共處理器、高處理量MIC處理器、GPGPU的加速器(例如,圖形加速器或數位訊號處理(DSP)單元)、場效可程式化閘極陣列(field programmable gate array)、或任何其他處理器)係耦接至第一匯流排1416。於一實施例,第二匯流排1420可為 少腳位(Low Pin Count;LPC)匯流排。許多裝置可被耦接至第二匯流排1420,包含,舉例來說,鍵盤及/或滑鼠1422、通訊裝置1427及儲存單元1428(例如磁碟機或其他大量儲存裝置,於一實施例中,其可包含指令/碼及資料1430)。再者,音訊I/O 1424可被耦接至第二匯流排1420。應注意的是,其他架構是可能的。舉例來說,取代第14圖之點對點架構,系統可實現多點分歧匯流排或其他此架構。
現參照第15圖,所顯示者為根據本發明之實施例的第二更特定的範例系統1500之方塊圖。第14及15圖中相似的元件以相似的元件符號表示,且第14圖之特定態樣已從第15圖中省略,以避免模糊第15圖之其他態樣。
第15圖說明處理器1470、1480可分別包含積體記憶體及I/O控制邏輯(Control Logic;CL)1472及1482。因此,CL 1472、1482包含積體記憶體控制器單元且包含I/O控制邏輯。第15圖說明不僅記憶體1432、1434耦接至CL 1472、1482,而且I/O裝置1514亦耦接至控制邏輯1472、1482。舊有I/O裝置1515係耦接至晶片組1490。
現參照第16圖,所顯示者為根據本發明之一實施例的SoC 1600之方塊圖。類似於第12圖中的元件係以類似的元件符號表示。同樣的,虛線方塊為進階的SoC之選擇性的特徵。於第16圖,互連單元1602係耦接至:應用處理器1610,其包含一組一或多個核心202A-N及共享的 快取單元1206;系統代理器單元1210;匯流排控制器單元1216;積體記憶體控制器單元1214;一組或一或多個共處理器1620,其可包含積體圖形邏輯、影像處理器、音訊處理器、及視訊處理器;靜態隨機存取記憶體(SRAM)單元1630;直接記憶體存取(DMA)單元1632;及顯示單元1640,用於耦接至一或多個外部顯示器。於一實施例,共處理器1620包含專用處理器,例如,舉例來說,網路或通訊處理器、壓縮引擎、GPGPU、高處理量MIC處理器、內嵌式處理器、或類似者。
本文所揭露的機構之實施例可被實現於硬體、軟體、韌體、或此等實現方式的組合。本發明之實施例可被實現為電腦程式或執行於包含至少一處理器、儲存系統(包含非揮發性記憶體及/或儲存元件)、至少一個輸入裝置、及至少一個輸出裝置之可程式化的系統之程式碼。
程式碼(例如第14圖所說明的碼1430)可被應用以輸入指令以執行文中所述之功能並產生輸出資訊。可利用已知方式將輸出資訊應用至一或多個輸出裝置。於此應用,處理系統可包含任何具有例如數位訊號處理器(DSP)、微控制器、特定功能積體電路(Application Specific Integrated Circuit;ASIC)、或微處理器之處理器的系統。
程式碼可被實現於高階程序或物件導向程式語言以與處理系統通訊。若希望的話,程式碼亦可實現於組合或機械語言。事實上,文中所述的機構不限於任何特定程式語 言的範疇。在任何情況下,語言可為編譯或解譯語言。
至少一個實施例之一或多個態樣可藉由儲存於機器可讀取媒體之代表性指令來實現,代表性指令表示處理器內的許多邏輯,當其由機器所讀取時,會使機器組合邏輯以執行文中所述技術。此等表示(已知為「IP核心」)可被儲存於實體的(tangible)機器可讀取媒體且被供應至許多消費者或製造設施以載入實際製造邏輯或處理器之製造機器。
此機器可讀取儲存媒體可包含(不限於)非過渡的、實體的由機器或裝置所製造或形成的物件之佈置,包含儲存媒體,例如硬碟、任何其他類型的碟(包含軟碟、光碟、唯讀光碟(Compact Disk Read-Only Memories;CD-ROMs)、可抹寫光碟(Compact Disk Rewritable’s;CD-RWs)、及磁光碟;半導體裝置,例如唯讀記憶體(ROM)、隨機存取記憶體(RAM),例如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可程式化唯讀記憶體(EPROM)、快閃記憶體、電氣可抹除可程式化唯讀記憶體、相變記憶體(PCM)、磁卡或光卡、或適合於儲存電子指令之任何其他類型的媒體。
因此,本發明之實施例亦包含非過渡的、實體的機器可讀取媒體,包含指令或包含設計資料,例如硬體描述語言(Hardware Description Language;HDL),其定義結構、電路、裝置、處理器及/或文中所述之系統特徵。此 等實施例亦可被稱為程式產品。
模仿(包含二進制轉譯、碼變形等)
在某些情況,指令轉換器可被使用以將指令從來源指令集轉換至目標指令集。舉例來說,指令轉換器可轉譯(例如,使用靜態轉譯、包含動態編譯之動態二進制轉譯)、變形、模仿、或其他,將指令轉換成將由核心所處理的一或多個其他指令。指令轉換器可被實現於軟體、硬體、韌體、或其組合。指令轉換器可為處理器上(on processor)、處理器外(off processor)、部分處理器上部份處理器外。
第17圖為對比使用根據本發明之實施例的軟體指令轉換器以將來源指令集中的二進位指令轉換成目標指令集中的二進位指令之方塊圖。於所說明的實施例,指令轉換器為軟體指令轉換器,雖然替代地,指令轉換器可被實現於軟體、韌體、硬體、或其各種組合。第17圖顯示高階語言1702的程式可被使用x86編譯器1704來編譯以產生x86二進制碼1706,其可由具有至少一個x86指令集核心的處理器1716本體地(natively)執行。具有至少一個x86指令集核心的處理器1716表示可執行與具有至少一個x86指令集核心之Intel處理器實質相同的功能之任何處理器,其係藉由相容地執行或其他處理(1)Intel x86指令集核心之指令集的實質部份或(2)目標為運行於具有至少一個x86指令集核心之Intel處理器的其他軟體或 應用之物件碼版本,以達成與具有至少一個x86指令集核心之Intel處理器實質相同的結果。x86編譯器1704表示能夠產生x86二進制碼1706(例如,物件碼)之編譯器,該x86二進制碼1706可在具有或不具有額外的鏈接處理(linkage processing)之情況下由具有至少一個x86指令集核心之處理器1716所執行。同樣地,第17圖顯示高階語言1702的程式可被使用替代指令集編譯器1708來編譯以產生替代指令集二進制碼1710,其可由不具有至少一個x86指令集核心的處理器1714((例如,具有執行位於美國Sunnyvale,CA的MIPS Technologies公司之MIPS指令集及/或執行位於美國Sunnyvale,CA的ARM Holdings公司之ARM指令集之核心的處理器)本體地執行。指令轉換器1712係被使用以轉換x86二進制碼1706成為可由不具有x86指令集核心之處理器1714本體地執行之碼。此經轉換的碼不可能與替代指令集二進制碼1710相同,因為能如此之指令轉換器很難製成;然而,經轉換的碼將實現一般操作且由來自替代指令集的指令所組成。因此,透過模仿、模擬、或任何其他處理,指令轉換器1712表示軟體、韌體、硬體、或其組合,允許不具有x86指令集處理器或核心之處理器或其他電子裝置執行x86二進制碼1706。
100‧‧‧處理核心
101‧‧‧管線
102‧‧‧暫存器儲存空間
103_1‧‧‧功能單元
103_N‧‧‧功能單元
104_1‧‧‧遮罩邏輯
104_N‧‧‧遮罩邏輯
105_1‧‧‧遮罩邏輯
105_N‧‧‧遮罩邏輯
106‧‧‧遮罩暫存器空間
107‧‧‧向量暫存器儲存空間
300‧‧‧來源運算元
301‧‧‧讀取遮罩暫存器
302‧‧‧來源運算元暫存器
303‧‧‧讀取遮罩電路
304‧‧‧元件組
305‧‧‧指令執行邏輯電路
306‧‧‧純量和
307‧‧‧輸出向量
308‧‧‧寫入遮罩電路
309‧‧‧寫入遮罩暫存器
310‧‧‧結果向量
314‧‧‧讀取遮罩電路
315_1‧‧‧邏輯電路
315_2‧‧‧邏輯電路
315_3‧‧‧邏輯電路
315_N-2‧‧‧邏輯電路
315_N-1‧‧‧邏輯電路
315_N‧‧‧邏輯電路
318‧‧‧寫入遮罩電路
319‧‧‧寫入遮罩暫存器
320‧‧‧結果輸出向量
401‧‧‧步驟
402‧‧‧步驟
403‧‧‧步驟
404‧‧‧步驟
411‧‧‧步驟
412‧‧‧步驟
413‧‧‧步驟
501‧‧‧暫存器
502‧‧‧暫存器
503‧‧‧暫存器
504_1‧‧‧元件組
504_2‧‧‧元件組
505‧‧‧邏輯電路
506‧‧‧寫入遮罩電路
507‧‧‧暫存器
511‧‧‧步驟
512‧‧‧步驟
513‧‧‧步驟
602‧‧‧VEX前置
605‧‧‧REX欄位
615‧‧‧運算碼映射欄位
620‧‧‧VEX.vvvv
625‧‧‧前置編碼欄位
630‧‧‧真實運算碼欄位
640‧‧‧MOD R/M欄位
642‧‧‧MOD欄位
644‧‧‧Reg欄位
646‧‧‧R/M欄位
650‧‧‧定比欄位
652‧‧‧SS
654‧‧‧SIB.xxx
656‧‧‧SIB.bbb
662‧‧‧位移欄位
664‧‧‧W欄位
668‧‧‧VEX.L
672‧‧‧立即欄位
674‧‧‧完整運算碼欄位
700‧‧‧一般向量友善指令格式
705‧‧‧無記憶體存取
710‧‧‧無記憶體存取、完整修整控制類型操作
712‧‧‧無記憶體存取、寫入遮罩控制、部份修整控制類型操作
715‧‧‧無記憶體存取、資料轉換類型操作
717‧‧‧無記憶體存取、寫入遮罩控制、vsize類型操作
720‧‧‧記憶體存取
725‧‧‧記憶體存取、時間性
727‧‧‧記憶體存取、寫入遮罩控制
730‧‧‧記憶體存取、非時間性
740‧‧‧格式欄位
742‧‧‧基本操作欄位
744‧‧‧暫存器索引欄位
746‧‧‧修改符欄位
746A‧‧‧無記憶體存取
746B‧‧‧記憶體存取
750‧‧‧增益操作欄位
752‧‧‧alpha欄位
752A‧‧‧RS欄位
752A.1‧‧‧修整
752A.2‧‧‧資料轉換
752B‧‧‧趕出提示欄位
752B.1‧‧‧時間性
752B.2‧‧‧非時間性
752C‧‧‧寫入遮罩控制欄位
754‧‧‧beta欄位
754A‧‧‧修整控制欄位
754B‧‧‧資料轉換欄位
754C‧‧‧資料調處欄位
756‧‧‧抑制所有浮點例外欄位
757A‧‧‧RL欄位
757A.1‧‧‧修整
757A.2‧‧‧向量長度
757B‧‧‧廣播欄位
758‧‧‧修整操作控制欄位
759A‧‧‧修整操作欄位
759B‧‧‧向量長度欄位
760‧‧‧定比欄位
762A‧‧‧位移欄位
762B‧‧‧位移因子欄位
764‧‧‧資料元件寬度欄位
768‧‧‧類別欄位
768A‧‧‧A類別
768B‧‧‧B類別
770‧‧‧寫入遮罩欄位
772‧‧‧立即欄位
774‧‧‧完整運算碼欄位
800‧‧‧特定向量友善指令格式
802‧‧‧EVEX前置
805‧‧‧REX欄位
810‧‧‧REX’欄位
815‧‧‧運算碼映射欄位
820‧‧‧VVVV欄位
825‧‧‧前置編碼欄位
830‧‧‧真實運算碼欄位
840‧‧‧MOD R/M欄位
842‧‧‧MOD欄位
844‧‧‧Reg欄位
846‧‧‧R/M欄位
854‧‧‧xxx欄位
856‧‧‧bbb欄位
900‧‧‧暫存器架構
910‧‧‧向量暫存器
915‧‧‧寫入遮罩暫存器
925‧‧‧通用暫存器
945‧‧‧純量浮點堆疊暫存器檔案
950‧‧‧MMX緊縮整數平坦暫存器檔案
1000‧‧‧處理器管線
1002‧‧‧擷取階段
1004‧‧‧長度解碼階段
1006‧‧‧解碼階段
1008‧‧‧分配階段
1010‧‧‧更名階段
1012‧‧‧排程階段
1014‧‧‧暫存器讀取/記憶體讀取階段
1016‧‧‧執行階段
1018‧‧‧回寫/記憶體寫入階段
1022‧‧‧例外處置階段
1024‧‧‧確定階段
1030‧‧‧前端單元
1032‧‧‧分支預測單元
1034‧‧‧指令快取單元
1036‧‧‧指令轉譯後備緩衝區
1038‧‧‧指令提取單元
1040‧‧‧解碼單元
1050‧‧‧執行引擎單元
1052‧‧‧更名/分配器單元
1054‧‧‧引退單元
1056‧‧‧排程器單元
1058‧‧‧實體暫存器檔案單元
1060‧‧‧執行叢集
1062‧‧‧執行單元
1064‧‧‧記憶體存取單元
1070‧‧‧記憶體單元
1072‧‧‧資料TLB單元
1074‧‧‧資料快取單元
1076‧‧‧第2層快取單元
1090‧‧‧處理器核心
1100‧‧‧指令解碼器
1102‧‧‧晶片上互連網路
1104‧‧‧第2層快取之本地子集
1106‧‧‧第1層快取
1106A‧‧‧第1層資料快取
1108‧‧‧純量單元
1110‧‧‧向量單元
1112‧‧‧純量暫存器
1114‧‧‧向量暫存器
1120‧‧‧拌和單元
1122A‧‧‧數值轉換單元
1122B‧‧‧數值轉換單元
1124‧‧‧複製單元
1126‧‧‧寫入遮罩暫存器
1128‧‧‧16-寬ALU
1200‧‧‧處理器
1202A‧‧‧核心
1202N‧‧‧核心
1204A‧‧‧快取單元
1204N‧‧‧快取單元
1206‧‧‧共享的快取單元
1208‧‧‧特殊目的邏輯
1210‧‧‧系統代理器單元
1212‧‧‧環式互連單元
1214‧‧‧積體記憶體控制器單元
1216‧‧‧匯流排控制器單元
1300‧‧‧系統
1310‧‧‧處理器
1315‧‧‧處理器
1320‧‧‧控制器集線器
1340‧‧‧記憶體
1345‧‧‧共處理器
1350‧‧‧輸入/輸出集線器
1360‧‧‧輸入/輸出裝置
1390‧‧‧圖形記憶體控制器集線器
1395‧‧‧連接
1400‧‧‧系統
1414‧‧‧I/O裝置
1415‧‧‧處理器
1416‧‧‧第一匯流排
1418‧‧‧匯流排橋接器
1420‧‧‧第二匯流排
1422‧‧‧鍵盤及/或滑鼠
1424‧‧‧音訊I/O
1427‧‧‧通訊裝置
1428‧‧‧儲存單元
1430‧‧‧碼及資料
1432‧‧‧記憶體
1434‧‧‧記憶體
1438‧‧‧共處理器
1439‧‧‧高效能介面
1450‧‧‧點對點互連
1452‧‧‧P-P介面
1454‧‧‧P-P介面
1470‧‧‧處理器
1472‧‧‧積體記憶體控制器單元
1476‧‧‧P-P介面
1478‧‧‧P-P介面
1480‧‧‧處理器
1482‧‧‧積體記憶體控制器單元
1486‧‧‧P-P介面
1488‧‧‧P-P介面
1490‧‧‧晶片組
1494‧‧‧P-P介面
1496‧‧‧介面
1498‧‧‧P-P介面
1500‧‧‧系統
1514‧‧‧I/O裝置
1515‧‧‧舊有I/O裝置
1600‧‧‧晶片上系統
1602‧‧‧互連單元
1610‧‧‧應用處理器
1620‧‧‧共處理器
1630‧‧‧靜態隨機存取記憶體單元
1632‧‧‧直接記憶體存取單元
1640‧‧‧顯示單元
1702‧‧‧高階語言
1704‧‧‧x86編譯器
1706‧‧‧x86二進制碼
1708‧‧‧替代指令集編譯器
1710‧‧‧替代指令集二進制碼
1712‧‧‧指令轉換器
1714‧‧‧不具有x86指令集核心的處理器
1716‧‧‧具有至少一個x86指令集核心的處理器
本發明藉由範例加以說明且非限於後附圖式,其中類 似的元件符號表示類似的元件,其中:第1圖顯示處理器管線;第2A及2B圖比較純量與向量操作;第3A及3B圖顯示例示用於可利用不同讀取及寫入遮罩執行多元件操作的功能單元之電路設計;第4A及4B圖分別顯示第3A及3B圖之電路所執行的方法;第5A及5B圖顯示個別的電路設計及用於可利用不同讀取及寫入遮罩執行多元件操作之操作的方法;第6A圖顯示例示AVX指令格式;第6B圖顯示來自第6A圖的哪些欄位組成完整運算碼欄位及基本操作欄位;第6C圖顯示來自第6A圖的哪些欄位組成暫存器索引欄位;第7A-7B圖為說明根據本發明之實施例的一般向量友善指令格式及其指令範本之方塊圖;第8A圖為說明根據本發明之實施例的範例特定向量友善指令格式之方塊圖;第8B圖為說明根據本發明一實施例的特定向量友善指令格式800的欄位之方塊圖,其組成完整運算碼欄位774;第8C圖為說明根據本發明一實施例的特定向量友善指令格式800的欄位之方塊圖,其組成暫存器索引欄位744; 第8D圖為說明根據本發明一實施例的特定向量友善指令格式800的欄位之方塊圖,其組成增益操作欄位750;第9圖為根據本發明一實施例之暫存器架構的方塊圖;第10A圖為說明根據本發明之實施例的範例循序管線及範例暫存器更名、故障事件/執行管線兩者之方塊圖;第10B圖說明根據本發明之實施例的範例循序架構核心及範例暫存器更名、故障事件/執行管線兩者之包含於處理器中的核心之方塊圖;第11A-B圖顯示更特定範例的循序核心架構之方塊圖,核心為晶片上數個邏輯方塊之其中一者(包含相同類型及/或不同類型的其他核心);第12圖為根據本發明之實施例的處理器之方塊圖,其可具有多於一個的核心、可具有積體記憶體控制器、及可具有積體圖形;第13圖為根據本發明一實施例之範例系統的方塊圖;第14圖為根據本發明之實施例的第一更特定範例系統的方塊圖;第15圖為根據本發明之實施例的第二更特定範例系統的方塊圖;第16圖為根據本發明之實施例的SoC之方塊圖; 第17圖為對比使用根據本發明之實施例的軟體指令轉換器以將來源指令集中的二進位指令轉換成目標指令集中的二進位指令之方塊圖。
300‧‧‧來源運算元
301‧‧‧讀取遮罩暫存器
302‧‧‧來源運算元暫存器
303‧‧‧讀取遮罩電路
304‧‧‧元件組
305‧‧‧指令執行邏輯電路
306‧‧‧純量和
307‧‧‧輸出向量
308‧‧‧寫入遮罩電路
309‧‧‧寫入遮罩暫存器
310‧‧‧結果向量

Claims (25)

  1. 一種處理核心,包含:一第一暫存器,用以儲存一讀取遮罩;一第二暫存器,用以儲存一第一輸入向量運算元;一第三暫存器,用以儲存與該讀取遮罩不同之一寫入遮罩;一功能單元,其用以執行一單一指令以:對該第一輸入向量運算元應用該讀取遮罩以產生該第一向量運算元之一組元件以供操作;建立具有於該組元件上執行之一操作的結果之一輸出向量;以及應用該寫入遮罩至該輸出向量以建立一合成向量;其中該功能單元包含:讀取遮罩電路,用以對該第一輸入向量運算元應用該讀取遮罩;電路,用以產生具有該結果之該輸出向量;及寫入遮罩電路,用以對該輸出向量應用該寫入遮罩。
  2. 如申請專利範圍第1項之處理核心,其中該操作將該組元件相加。
  3. 如申請專利範圍第1項之處理核心,其中該操作將該組元件相乘。
  4. 如申請專利範圍第1項之處理核心,其中該操作將該組元件做交集(AND)。
  5. 如申請專利範圍第1項之處理核心,其中該操作 將該組元件做聯集(OR)。
  6. 如申請專利範圍第1項之處理核心,其中該操作將該組元件執行以下任一者:互斥或(XOR);反及(NAND);反或(NOR)。
  7. 一種執行一指令的方法,包含:從一第一暫存器讀取一第一讀取遮罩;從一第二暫存器或記憶體位置讀取一第一向量運算元;對該第一向量運算元應用該讀取遮罩以產生一組元件以供操作;執行該組元件之一操作;藉由產生該操作的結果之多種情況以建立一輸出向量;從一第三暫存器讀取一第一寫入遮罩,該第一寫入遮罩不同於該第一讀取遮罩;從一第四暫存器讀取一第二向量運算元;對該輸出向量應用該第一寫入遮罩以建立一合成向量;將該合成向量寫入至一目的暫存器。
  8. 如申請專利範圍7項之方法,更包含:對該第二向量運算元應用該讀取遮罩以識別一第二組元件以供操作,執行該操作的步驟包含對該第二組元件連 同該第一組元件執行該操作。
  9. 如申請專利範圍7項之方法,更包含:從一第五暫存器讀取一第二讀取遮罩,該第二讀取遮罩不同於該第一讀取遮罩;對該第二向量運算元應用該第二讀取遮罩以產生一第二組元件以供操作,執行該操作的步驟包含對該第二組元件連同該第一組元件執行該操作。
  10. 如申請專利範圍9項之方法,其中該目的暫存器為該第二或第四暫存器之其中一者。
  11. 如申請專利範圍7項之方法,其中該操作執行至少以下其中一者:將該組元件相加;將該組元件相乘。
  12. 如申請專利範圍7項之方法,其中該操作執行至少以下其中一者:將該組元件做交集(AND);將該組元件做聯集(OR)該組元件做互斥或(XOR);該組元件做反及(NAND);該組元件做反或(NOR)。
  13. 一種處理核心,包含:一第一暫存器,用以儲存一第一輸入向量運算元;一第二暫存器,用以儲存一第二輸入向量運算元;一第三暫存器,用以儲存一寫入遮罩; 一功能單元,其用以執行一單一指令以:對該第一及第二輸入向量運算元應用各個不同於該寫入遮罩之至少一讀取遮罩以產生一第一組及第二組元件以供操作;建立具有於該第一及第二組元件上執行之一操作的結果之一輸出向量;應用該寫入遮罩至該輸出向量以建立一合成向量;其中該功能單元包含:讀取遮罩電路,用以對該第一及第二輸入向量運算元應用該至少一讀取遮罩;電路,用以產生該輸出向量;及寫入遮罩電路,用以對該輸出向量應用該寫入遮罩。
  14. 如申請專利範圍13項之處理核心,其中該操作將該第一組元件相加及將該第二組元件相加。
  15. 如申請專利範圍13項之處理核心,其中該操作將該第一組元件相乘及將該第二組元件相乘。
  16. 如申請專利範圍13項之處理核心,其中該操作將該第一組元件做交集(AND)及將該第二組元件做交集(AND)。
  17. 如申請專利範圍13項之處理核心,其中該操作將該第一組元件做聯集(OR)及將該第二組元件做聯集(OR)。
  18. 如申請專利範圍13項之處理核心,其中該操作將該第一組元件及該第二組元件執行以下任一者: 互斥或(XOR);反及(NAND);反或(NOR)。
  19. 一種處理核心,包含:一第一暫存器,若該處理核心在操作中,則用以儲存一讀取遮罩;一第二暫存器,若該處理核心在操作中,則用以儲存一第一輸入向量運算元;一第三暫存器,若該處理核心在操作中,則用以儲存與該讀取遮罩不同之一寫入遮罩;一功能單元,若該處理核心在操作中,則用以執行該單一指令以:對該第一輸入向量運算元應用該讀取遮罩以產生該第一向量運算元之一組元件以供操作;建立具有於該組元件上執行之一操作的結果之一輸出向量;以及應用該寫入遮罩至該輸出向量以建立一合成向量。
  20. 如申請專利範圍第19項之處理核心,其中該操作將該組元件相加。
  21. 如申請專利範圍第19項之處理核心,其中該操作將該組元件相乘。
  22. 如申請專利範圍第19項之處理核心,其中該操作將該組元件做交集(AND)。
  23. 如申請專利範圍第19項之處理核心,其中該操 作將該組元件做聯集(OR)。
  24. 如申請專利範圍第19項之處理核心,其中該操作將該組元件執行以下任一者:互斥或(XOR);反及(NAND);反或(NOR)。
  25. 如申請專利範圍第19項之處理核心,其中該功能單元包含:讀取遮罩電路,用以對該第一輸入向量運算元應用該讀取遮罩;電路,用以產生具有該結果之該輸出向量;及寫入遮罩電路,用以對該輸出向量應用該寫入遮罩。
TW101148751A 2011-12-23 2012-12-20 具有不同讀取及寫入遮罩之多元件指令 TWI556164B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/067248 WO2013095659A1 (en) 2011-12-23 2011-12-23 Multi-element instruction with different read and write masks

Publications (2)

Publication Number Publication Date
TW201346742A TW201346742A (zh) 2013-11-16
TWI556164B true TWI556164B (zh) 2016-11-01

Family

ID=48669297

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101148751A TWI556164B (zh) 2011-12-23 2012-12-20 具有不同讀取及寫入遮罩之多元件指令

Country Status (4)

Country Link
US (2) US9489196B2 (zh)
CN (1) CN104350461B (zh)
TW (1) TWI556164B (zh)
WO (1) WO2013095659A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9507593B2 (en) 2011-12-23 2016-11-29 Intel Corporation Instruction for element offset calculation in a multi-dimensional array
US9489196B2 (en) 2011-12-23 2016-11-08 Intel Corporation Multi-element instruction with different read and write masks
US9665368B2 (en) * 2012-09-28 2017-05-30 Intel Corporation Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register
US9996350B2 (en) 2014-12-27 2018-06-12 Intel Corporation Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multidimensional array
US10346170B2 (en) * 2015-05-05 2019-07-09 Intel Corporation Performing partial register write operations in a processor
US10152452B2 (en) * 2015-05-29 2018-12-11 Intel Corporation Source operand read suppression for graphics processors
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
US11249754B2 (en) * 2017-12-21 2022-02-15 Intel Corporation Apparatus and method for vector horizontal add of signed/unsigned words and doublewords
CN115098165B (zh) * 2022-06-13 2023-09-08 昆仑芯(北京)科技有限公司 数据处理方法、装置、芯片、设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5903769A (en) * 1997-03-31 1999-05-11 Sun Microsystems, Inc. Conditional vector processing
US20060227966A1 (en) * 2005-04-08 2006-10-12 Icera Inc. (Delaware Corporation) Data access and permute unit
TW200802083A (en) * 2005-11-22 2008-01-01 Intel Corp Technique for setting a vector mask
TW201140435A (en) * 2009-12-22 2011-11-16 Intel Corp Synchronizing SIMD vectors

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5717947A (en) 1993-03-31 1998-02-10 Motorola, Inc. Data processing system and method thereof
US5590297A (en) 1994-01-04 1996-12-31 Intel Corporation Address generation unit with segmented addresses in a mircroprocessor
US7395298B2 (en) 1995-08-31 2008-07-01 Intel Corporation Method and apparatus for performing multiply-add operations on packed data
US20030154349A1 (en) 2002-01-24 2003-08-14 Berg Stefan G. Program-directed cache prefetching for media processors
AU2003228069A1 (en) 2002-05-24 2003-12-12 Koninklijke Philips Electronics N.V. A scalar/vector processor
US6957305B2 (en) 2002-08-29 2005-10-18 International Business Machines Corporation Data streaming mechanism in a microprocessor
US7017028B2 (en) * 2003-03-14 2006-03-21 International Business Machines Corporation Apparatus and method for updating pointers for indirect and parallel register access
JP4744510B2 (ja) 2004-04-22 2011-08-10 シリコン ハイブ ビー・ヴィー データ値の多次元アレイへのパラレルなアクセスを提供するデータ処理装置
US20070150697A1 (en) * 2005-05-10 2007-06-28 Telairity Semiconductor, Inc. Vector processor with multi-pipe vector block matching
US20070186210A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US7383402B2 (en) 2006-06-05 2008-06-03 Sun Microsystems, Inc. Method and system for generating prefetch information for multi-block indirect memory access chains
US7493451B2 (en) 2006-06-15 2009-02-17 P.A. Semi, Inc. Prefetch unit
JP2008158662A (ja) 2006-12-21 2008-07-10 Matsushita Electric Ind Co Ltd メモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、メモリアクセストレース情報取得プログラム、及び記録媒体
GB2475653B (en) 2007-03-12 2011-07-13 Advanced Risc Mach Ltd Select and insert instructions within data processing systems
US8255884B2 (en) * 2008-06-06 2012-08-28 International Business Machines Corporation Optimized scalar promotion with load and splat SIMD instructions
US9519947B2 (en) 2009-09-25 2016-12-13 Nvidia Corporation Architecture and instructions for accessing multi-dimensional formatted surface memory
US20120216011A1 (en) * 2011-02-18 2012-08-23 Darryl Gove Apparatus and method of single-instruction, multiple-data vector operation masking
US9489196B2 (en) 2011-12-23 2016-11-08 Intel Corporation Multi-element instruction with different read and write masks
US9507593B2 (en) 2011-12-23 2016-11-29 Intel Corporation Instruction for element offset calculation in a multi-dimensional array
KR20160122278A (ko) 2012-08-18 2016-10-21 퀄컴 테크놀로지스, 인크. 프리페칭을 갖는 변환 색인 버퍼
US9996350B2 (en) 2014-12-27 2018-06-12 Intel Corporation Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multidimensional array

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5903769A (en) * 1997-03-31 1999-05-11 Sun Microsystems, Inc. Conditional vector processing
US20060227966A1 (en) * 2005-04-08 2006-10-12 Icera Inc. (Delaware Corporation) Data access and permute unit
TW200802083A (en) * 2005-11-22 2008-01-01 Intel Corp Technique for setting a vector mask
TW201140435A (en) * 2009-12-22 2011-11-16 Intel Corp Synchronizing SIMD vectors

Also Published As

Publication number Publication date
TW201346742A (zh) 2013-11-16
US9489196B2 (en) 2016-11-08
US10037208B2 (en) 2018-07-31
US20170052783A1 (en) 2017-02-23
CN104350461B (zh) 2017-10-27
WO2013095659A1 (en) 2013-06-27
CN104350461A (zh) 2015-02-11
WO2013095659A9 (en) 2014-11-27
US20130339678A1 (en) 2013-12-19

Similar Documents

Publication Publication Date Title
TWI743058B (zh) 硬體處理器、用於融合指令之方法及非暫時性機器可讀媒體
TWI610229B (zh) 用於向量廣播及互斥或和邏輯指令的設備與方法
TWI556164B (zh) 具有不同讀取及寫入遮罩之多元件指令
TWI502499B (zh) 執行將寫入罩暫存器轉換成向量暫存器中的索引值列表的系統、裝置及方法
US20190114169A1 (en) Vector multiplication with accumulation in large register space
US9792115B2 (en) Super multiply add (super MADD) instructions with three scalar terms
TWI502491B (zh) 用於將一表列索引值轉換成為遮罩值之方法、製造物品及處理器
TWI489381B (zh) 多暫存器散布指令
TWI524266B (zh) 用以偵測向量暫存器內相等元素之裝置及方法
TWI489383B (zh) 遮蔽排列指令的裝置及方法
US9733935B2 (en) Super multiply add (super madd) instruction
TWI501147B (zh) 用於從通用暫存器至向量暫存器的廣播之裝置及方法
TWI480798B (zh) 用於資料類型之向下轉換的裝置及方法
TW201349105A (zh) 點積處理器、方法、系統及指令
CN108415882B (zh) 利用操作数基础系统转换和再转换的向量乘法
TW201346720A (zh) 浮點定比處理器、方法、系統及指令
CN114791795A (zh) 用于复数乘法的装置和方法
US11275583B2 (en) Apparatus and method of improved insert instructions
TWI514269B (zh) 用於大整數算術之向量指令的設備與方法
TWI526930B (zh) 用以複製及遮蔽資料結構之設備及方法
JP2018506094A (ja) 多倍長整数(big integer)の算術演算を実行するための方法および装置
CN107003848B (zh) 用于融合乘法-乘法指令的装置和方法
TW201732568A (zh) 用於巷道為主的跨類收集的系統、設備與方法
TWI559219B (zh) 用於選擇向量運算之元素的裝置及方法(二)
US9946540B2 (en) Apparatus and method of improved permute instructions with multiple granularities

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees