[go: up one dir, main page]

TWI489381B - 多暫存器散布指令 - Google Patents

多暫存器散布指令 Download PDF

Info

Publication number
TWI489381B
TWI489381B TW101147188A TW101147188A TWI489381B TW I489381 B TWI489381 B TW I489381B TW 101147188 A TW101147188 A TW 101147188A TW 101147188 A TW101147188 A TW 101147188A TW I489381 B TWI489381 B TW I489381B
Authority
TW
Taiwan
Prior art keywords
destination
vector register
source
instruction
index
Prior art date
Application number
TW101147188A
Other languages
English (en)
Other versions
TW201346731A (zh
Inventor
Ashish Jha
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of TW201346731A publication Critical patent/TW201346731A/zh
Application granted granted Critical
Publication of TWI489381B publication Critical patent/TWI489381B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Description

多暫存器散布指令
本發明係有關於電腦處理器架構,特別係有關於多暫存器散布指令。
指令集,或指令集架構(ISA)係電腦架構中有關程式的一部分,以及可包括原生資料類型(native data type)、指令、暫存器架構、定址模式(addressing mode)、記憶體架構、中斷(interrupt)及例外處理(exception handling)以及外部輸入及輸出(I/O)等。請注意指令在此一般指的是巨集指令(macro-instruction)(提供予處理器執行)相較於微指令(micro-instruction)或微運算(micro-ops)(處理器之解碼器解碼巨集指令之結果)。指令集架構和巨集指令架構不同,指令集架構係處理器實現ISA的內部設計。具有不同巨集指令架構的處理器可共享共同的指令集。
一指令集包括一或多指令格式(format)。給定指令格式定義不同欄位(field)(位元數、位元位置)以規定所欲執行的運算以及執行運算所需的運算元。給定指令以使用給定指令格式以及規定運算及運算元加以表示。指令串流(stream)為指令的規定序列,序列中的每一指令為以一指令格式的指令之發生。
科學的、金融的、自動向量化通用目的的、RMS (recognition,mining and synthesis)/視覺及多媒體的應用(如2D/3D圖形、影像處理、視訊壓縮/解壓縮、聲音辨識演算法及音訊處理)通常要求在大量的資料項目上(參照為資料平行處理“data parallelism”)執行相同的運算。單一指令多重資料(SIMD)係屬促使處理器在多重資料項目上執行相同運算之指令類型。SIMD技術特別適用於處理器可將暫存器中的位元邏輯性的切分為若干固定大長度的資料元件,其各一者代表一個別值。例如,在64-位元暫存器中的位元可規定為來源運算元運算在4個個別16-位元的資料元件上,其各一者代表個別16-位元值。又如另一例,在256-位元暫存器中的位元可規定為來源運算元運算在4個個別64-位元的封裝資料元件上(四字組[quad-word]資料元件),8個個別32-位元的封裝資料元件上(二字組[double-word]資料元件),16個個別16-位元的封裝資料元件上(字組[word]資料元件),或32個個別8-位元的封裝資料元件上(位元[byte]資料元件)。此種資料類型參照為封裝(packed)資料運算元或向量運算元。換言之,封裝資料項目或向量參照為一序列之封裝資料元件;以及至封裝資料運算元或向量運算元係為SIMD指令(也稱為封裝資料指令或向量指令)的來源或目的運算元。
透過範例,一類型的SIMD指令規定單一向量運算以垂直方式執行在二個來源運算元上以產生具有相同長度、相同資料元件數目以及相同資料元件順序之目的向量運算 元(也稱為結果向量運算元)。在來源向量運算元中資料元件參照為來源資料元件,而在目的向量運算元中資料元件參照為目的資料元件。來源向量運算元長度相同且具有相同長度的資料元件,因此具有相同數目的資料元件。在二個來源向量運算元中相同位元位置的來源資料元件形成資料元件對(同時參照為對應資料元件;即每一來源運算元中資料元件位置0的資料元件相對應,每一來源運算元中資料元件位置1的資料元件相對應,以此類推)。由SIMD指令所規定的運算會分別在每一來源資料元件對上執行以產生匹配的結果資料元件數,而因此每一對來源資料元件具有對應的結果資料元件。既然為垂直運算且結果向量運算元為相同長度、具相同資料元件數、以及結果資料元件以相同資料元件順序儲存以作為來源向量運算元,結果資料元件在結果向量運算元中與對應的來源資料元件在來源向量運算元中具相同位元位置。除此SIMD指令類型外,尚有其他不同類型的SIMD指令(如僅有1或大於2個來源向量運算元;以水平方式運算;產生不同長度結果向量運算元;具不同長度之資料元件;及/或具不同資料順序)。應當理解的是目的向量運算元一詞(或目的運算元)定義為執行指令所規定運算的直接結果,包括此目的運算元在一位置的的儲存(可為暫存器或由指令所規定之記憶體位置),由此另一指令可將其存取作為來源運算元(由另一指令所規定之相同位置)。
特定指令集架構允許多重向量及純量運算以平行完成 及更新指令集架構暫存器集。若干運算一旦值在向量暫存器中被運算,則其元件會分散在不同向量暫存器中。傳統上,採用置亂(permute)及置換(shuffle)之長依賴鏈在不同暫存器集間進行分散運算,此為相當昂貴且複雜的。
於下說明中描述許多特定細節。然而,必須了解的是本發明之實施例可在沒有特定細節下實施。在其他情形下,眾所周知的電路、架構及技術未顯示其細節以確保不會造成說明描述中的模糊。
說明書中參照為“實施例”、“實施範例”等指示實施例可能包含特定特徵、架構或特性,但並非所有實施例必須包含此等特定特徵、架構或特性。再者,此等用語無需參照為相同實施例。更者,當特定特徵、架構或特性與實施例關連描述,也代表熟習此技術領域者當可將特定特徵、架構或特性與其他實施例進行關連,儘管在此未明確述及。
如前所述,用以在向量暫存器中分散計算值的分散運算傳統利用置亂及置換的複雜及長依賴鏈來執行,其與目的暫存器數目成比例,且對程式人員或編譯器而言非常耗時以及導致長指令序列。
以下說明多暫存器分散指令(ScatterMultiReg)之實施例以及用於執行此等指令之系統、架構、指令格式等之 實施例。多暫存器分散指令包括來源運算元及目的運算元。來源運算元規定包括複數個來源資料元件之一來源向量暫存器,其儲存於多個目的向量暫存器中。目的運算元識別複數個目的資料元件,每一目的資料元件規定一目的向量暫存器以及一索引至目的向量暫存器中。當執行時,多暫存器散布指令促使處理器從單一來源向量暫存器儲存多個資料元件之多個目的向量暫存器。
在若干實施例中,目的運算元規定識別目的資料元件之向量暫存器。在其他實施例中,目的運算元規定識別目的資料元件之記憶體位置。
例如指令“Scatter<MultiReg[PS/PD]zmm1,zmm2”,其中zmm1及zmm2為向量暫存器(如128-、256-、512-位元暫存器)。向量暫存器zmm2包括多個來源資料元件(如16資料元件假設每一資料元件為32位元以及zmm2為512-位元暫存器),根據向量暫存器zmm1的內容至少部分會儲存於目的向量暫存器中。向量暫存器zmm1包含多個資料元件,當指令執行時每一資料元件可規定另一向量暫存器及向量暫存器中之索引,以使向量暫存器儲存向量暫存器zmm2中的資料元件於向量暫存器zmm1中的資料元件所對應的位置中。“PS”指令位置指示純量浮點(4位元組),而指令“PD”部分則指示雙精度浮點(8位元組)。多暫存器分散指令應用於整數向量形式之另一範例可如“ScatterMultiReg[D/Q]zmm1,zmm2”,其分散封裝DWORD或QWORD整數元件。
另一指令範例為“ScatterMultiReg[PS/PD]<memory>,zmm2”,其中<memory>為記憶體位置而zmm2為向量暫存器(如128-、256-、512-位元暫存器)。向量暫存器zmm2包括多個來源資料元件(如16資料元件假設每一資料元件為32位元以及zmm2為512-位元暫存器),根據記憶體位置<memory>的內容至少部分會儲存於目的向量暫存器中。記憶體位置<memory>識別多個資料元件,每一資料元件可規定向量暫存器及索引,以使向量暫存器儲存向量暫存器zmm2中的資料元件。“PS”指令位置指示純量浮點(4位元組),而指令“PD”部分則指示雙精度浮點(8位元組)。多暫存器分散指令應用於整數向量形式之另一範例可如“ScatterMultiReg[D/Q]<memory>,zmm2”,其分散封裝DWORD或QWORD整數元件。
第1圖說明根據一實施例之多暫存器分散指令之一執行範例。多暫存器分散指令100包括目的運算元105及來源運算元110。多暫存器分散指令100屬於指令集架構,以及在指令串流中指令100之每一“發生(occurrence)”包含在目的運算元105及來源運算元110中的值。在此範例中,目的運算元105及來源運算元110兩者為向量暫存器(如128-、256-、512-位元暫存器)。向量暫存器可為具有16個32-位元資料元件的zmm暫存器,然而,也可採用其他資料元件及暫存器長度如xmm或ymm暫存器及16-或64-位元資料元件。
來源向量暫存器的內容150由來源運算元(zmm2未 圖示)所規定包含多個來源資料元件。如第1圖所示,在zmm2索引0的來源資料元件包含值160,在zmm2索引1的來源資料元件包含值162,在zmm2索引2的來源資料元件包含值164,在zmm2索引3的來源資料元件包含值166。在zmm2索引4-15的來源資料元件也包含值;然而由於根據zmm1的內容不會被分散,故未圖示於第1圖中,於下將詳述細節。
向量暫存器zmm1包含多個資料元件,其各一者可規定分散索引及遮罩值142。每一分散索引及遮罩值142可規定目的向量暫存器及其索引,以及更可規定向量暫存器zmm2中一位置上的來源資料元件是否被儲存於所規定目的向量暫存器中資料元件所對應的位置中。對純量浮點(PS),每一分散索引及遮罩值142為4位元組(32位元)。在某些實施例中,較低的16位元用以表示向量暫存器的數目以及向量暫存器中的索引,而較高的位元則指示是否採取行動(無論來源資料元件是否在分散索引之對應位置且遮罩值會複製至所規定向量暫存器之規定索引上)。如此,由目的運算元105所規定的向量暫存器資料元件指示目的向量暫存器145及其至此等暫存器之索引。
第2圖說明根據一實施例之範例分散索引及遮罩值格式210。分散索引的較低8-位元及遮罩格式210指示向量暫存器的數目210。下一較低8-位元代表向量暫存器索引215。最高位元為可行動位元210,用以指示是否採取行動(是否依分散索引及遮罩值儲存來源向量暫存器中對應位 置之來源於由暫存器數目210所識別之暫存器之暫存器索引215所識別之目的資料元件上)。
例如,使用如第2圖所示之分散索引及遮罩值格式,資料元件在zmm1暫存器的索引0被識別為具有分散索引及遮罩值(以十六進制表示)0x80000003h,其代表向量暫存器3(如zmm3)及索引0,以及為可採取行動的。資料元件在zmm1暫存器的索引1被識別為具有分散索引及遮罩值(以十六進制表示)0x80000004h,其代表向量暫存器4(如zmm4)及索引0,以及為可採取行動的。資料元件在zmm1暫存器的索引2被識別為具有分散索引及遮罩值(以十六進制表示)0x80000505h,其代表向量暫存器5(如zmm5)及索引5,以及為可採取行動的。資料元件在zmm1暫存器的索引3被識別為具有分散索引及遮罩值(以十六進制表示)0x800000206h,其代表向量暫存器6(如zmm6)及索引2,以及為可採取行動的。資料元件在zmm1暫存器的索引4-15之各一被識別為具有分散索引及遮罩值(以十六進制表示)0x00000000h,其代表向量暫存器0(如zmm0)及索引0,以及為不可行動的(意指來源向量暫存器zmm2索引4-15的元件會被分散)。
在不同實施例中選擇代表向量暫存器數目的位元及選擇代表向量暫存器索引的位元是可以不同的。例如,較低的16位元用以表示向量暫存器的數目,而較高的16位元則可形成暫存器索引,此允許未來ISA擴充。在此情形下,指令也可包含遮罩暫存器以指示是否為可採取行動 的。
在若干實施例中,由向量運算元所規定之向量暫存器之來源資料元件,其依分散索引及遮罩值儲存在分散索引及遮罩值所識別之對應位置上以作為指令執行結果(假設分散索引及遮罩值指示為可採取行動的)。例如,在此實施例中,既然資料元件zmm1[0](zmm1暫存器的索引0)的分散索引及遮罩值為0x080000003h,值160(其為由來源運算元110(zmm2[0])-與分散索引及遮罩值相同位置-所規定向量暫存器上來源資料元件之值)儲存於向量暫存器zmm3(zmm3[0])索引0之目的資料元件上以作為指令執行結果。
如第1圖所示,依zmm1[0]的分散索引及遮罩值指示,值160,即zmm2[0]上之來源資料元件值,儲存於zmm3[0]的資料元件中以作為指令執行結果。如zmm1[1]的分散索引及遮罩值所指示,值162,即zmm2[1]上之來源資料元件值,儲存於zmm4[0]的資料元件中以作為指令執行結果。如zmm1[2]的分散索引及遮罩值所指示,值164,即zmm2[2]上之來源資料元件值,儲存於zmm5[5]的資料元件中以作為指令執行結果。如zmm1[3]的分散索引及遮罩值所指示,值166,即zmm2[3]上之來源資料元件值,儲存於zmm6[2]的資料元件中以作為指令執行結果。既然zmm1[4-15]中每一資料元件之分散索引及遮罩值指示不採取動作,zmm2[4-15]中的來源資料元件不會作為指令執行結果儲存於目的資料元件中。
因此,在指令100執行發生後,來自zmm2[0]的值160會儲存於zmm3[0](zmm3[1-15]資料元件依指令100執行結果並未改變),來自zmm2[1]的值162會儲存於zmm4[0](zmm4[1-15]資料元件依指令100執行結果並未改變),來自zmm2[2]的值164會儲存於zmm5[5](zmm5[0-4]及zmm5[6-15]資料元件依指令100執行結果並未改變),以及來自zmm2[3]的值166會儲存於zmm6[2](zmm6[0-1]及zmm6[3-15]資料元件依指令100執行結果並未改變), 第3圖說明根據一實施例之多暫存器分散指令之另一執行範例。多暫存器分散指令300包括目的運算元305及來源運算元310。多暫存器分散指令300屬於指令集架構,以及在指令串流中指令300之每一“發生(occurrence)”包含在目的運算元305及來源運算元310中的值。在此範例中,來源運算元310為向量暫存器(如128-、256-、512-位元暫存器)而目的運算元305為識別多個目的資料元件之記憶體位置,其各一者可規定分散索引及遮罩值142、可規定目的向量暫存器及其索引、以及更可規定在暫存器zmm2中一位置(其對應資料元件位置)之來源資料元件是否被儲存於所規定的目的向量暫存器中。在一實施例中,每一分散索引及遮罩值342的格式與第1圖及第2圖中所述相同。
來源向量暫存器的內容350由來源運算元(zmm2未圖示)所規定包含多個來源資料元件。如第3圖所示,在 zmm2索引0的來源資料元件包含值360,在zmm2索引1的來源資料元件包含值362,在zmm2索引2的來源資料元件包含值364,在zmm2索引3的來源資料元件包含值366。在zmm2索引4-15的來源資料元件也包含值;然而由於根據目的運算元305所規定記憶體位置的內容不會被分散,故未圖示於第3圖中,於下將詳述細節。
使用如第2圖所示之分散索引及遮罩值格式,由運算元305所規定之記憶體位置索引0的資料元件被識別為具有分散索引及遮罩值(以十六進制表示)0x80000003h,其代表向量暫存器3(如zmm3)及索引0,以及為可採取行動的。由運算元305所規定之記憶體位置索引1的資料元件被識別為具有分散索引及遮罩值(以十六進制表示)0x80000004h,其代表向量暫存器4(如zmm4)及索引0,以及為可採取行動的。由運算元305所規定之記憶體位置索引2的資料元件被識別為具有分散索引及遮罩值(以十六進制表示)0x80000505h,其代表向量暫存器5(如zmm5)及索引5,以及為可採取行動的。由運算元305所規定之記憶體位置索引3的資料元件被識別為具有分散索引及遮罩值(以十六進制表示)0x800000206h,其代表向量暫存器6(如zmm6)及索引2,以及為可採取行動的。由運算元305所規定之記憶體位置的資料元件索引4-15之各一被識別為具有分散索引及遮罩值(以十六進制表示)0x0h,其指示來源向量暫存器zmm2索引4-15的元件不會被分散。
如第3圖所示,由運算元305所規定之記憶體位置索引0的分散索引及遮罩值指示,值360,即zmm2[0]上之來源資料元件值,儲存於zmm3[0]的資料元件中以作為指令執行結果。由運算元305所規定之記憶體位置索引1的分散索引及遮罩值指示,值362,即zmm2[1]上之來源資料元件值,儲存於zmm4[0]的資料元件中以作為指令執行結果。由運算元305所規定之記憶體位置索引2的分散索引及遮罩值指示,值364,即zmm2[2]上之來源資料元件值,儲存於zmm5[5]的資料元件中以作為指令執行結果。由運算元305所規定之記憶體位置索引3的分散索引及遮罩值指示,值366,即zmm2[3]上之來源資料元件值,儲存於zmm6[2]的資料元件中以作為指令執行結果。既然由運算元305所規定之記憶體位置索引4-15中每一資料元件之分散索引及遮罩值指示不採取動作,zmm2[4-15]中的來源資料元件不會作為指令執行結果儲存於目的資料元件中。
由此,多暫存器分散指令以單一指令由單一向量暫存器分散不同來源資料元件至多個向量暫存器的資料元件中。在若干實施例中,存取會進行優化,以使在特定線(lane)中所有暫存器中的值可在一次掃描(sweep)中被複製。既然多暫存器分散指令以單一指令分散來自單一向量暫存器的元件至多個向量暫存器中,其可移除前述花費大的必須的置換及置亂,由此改善效能。
多暫存器分散指令可由編譯器自動產生或者可由軟體 發展人員編寫程式碼產生。單一多暫存器分散指令不僅節省指令數,同時簡化程式複雜度。單一多暫存器分散指令也降低執行埠(port)壓力以及降低內部緩衝器如RS(Reservation Station)、ROB(Re-Order Buffer)、擷取及解碼(fetch and decode)緩衝器之使用,增加效能及減低功耗。
第4圖為根據一實施例說明藉由執行多暫存器分散指令由單一向量暫存器至多個向量暫存器的分散多值之範例運算之流程圖。在操作410中,由處理器擷取多暫存器散布指令(如由處理器之擷取單元進行)。多暫存器散布指令包括來源運算元以及目的運算元。來源運算元規定包括複數個來源資料元件之來源向量暫存器分散至多個目的,向量暫存器(如xmm、ymm或zmm暫存器)。目的運算元識別複數個目的資料元件,其中每一目的資料元件規定目的向量暫存器以及一索引至目的向量暫存器中。
例如,在一實施例中,目的運算元規定識別複數個目的資料元件的向量暫存器(如xmm、ymm或zmm暫存器)或記憶體位置,其中每一目的資料元件規定目的向量暫存器以及一索引至目的向量暫存器中。每一資料元件同時規定來自來源向量暫存器(由來源運算元規所定)的資料元件是否應被複製至所規定的目的向量暫存器中。
由操作410移至操作415,處理器解碼已擷取之多暫存器散布指令。例如,在若干實例中,處理器包含被提供指令的硬體解碼單元(如由處理器擷取單元)。例如,硬 體解碼單元可解碼多暫存器分散指令為單一寬微指令。在另一範例中,硬體解碼單元可解碼多暫存器分散指令為多個寬微指令。另一實施例特別適用於失序處理器管線,解碼單元可解碼多暫存器分散指令為一或多微運算(micro-ops),在此每一微運算可以失序被發佈及執行。同時,解碼單元可以一或多解碼器實現以及每一解碼器可以可程式化邏輯陣列(PLA)實現,如本技藝所周知。透過範例,所給定解碼單元可1)具轉向(steering)邏輯可將不同巨集指令導向至不同解碼器;2)一第一解碼器可解碼指令集之子集(然更多為第二、第三及第四解碼器)以及同時產生2個微運算;3)第二、第三及第四解碼器每一解碼器僅可解碼整體指令集之子集並且一次只產生1個微運算;4)微-序列器ROM可僅解碼整體指令集之子集並且同時產生4個微運算;以及5)多工(multiplexing)邏輯由解碼器饋入以及微-序列器ROM決定何者的輸出提供予微運算佇列。例如,一實施例可具有第二、第三及第四解碼器,每一解碼器可同時產生2個微運算;以及可包含微-序列器ROM可同時產生8個微運算。
接著流程移至操作420,在此處理器執行已解碼之多暫存器散布指令,用於每一第一複數個目的資料元件,以使在該來源向量暫存器中的一位置中之來源資料元件之一者對應目的資料元件儲存在目的向量暫存器中由目的資料元件所規定之索引上之一位置。
第5圖為根據一實施例說明執行多暫存器分散指令, 其目的運算元規定向量暫存器之範例運算之流程圖。在一實施例中,第5圖所描述之操作與操作420共同執行。
在操作510中,處理器讀取由目的運算元所規定之向量暫存器之第一資料元件值(分散索引及遮罩值)。在一實施例中此值以分散索引及遮罩值格式210為格式。流程移至操作515,在此處理器決定分散索引及遮罩值是否指示資料元件應從來源運算元所規定之來源向量暫存器之對應位置被複製。例如,參照分散索引及遮罩值格式210,處理器決定在可採取行動位元220是否被規定分散索引及遮罩值中。若分散索引及遮罩值指示資料元件應從來源向量暫存器被複製,則流程移至操作530,否則進行操作520。
在操作520中,處理器讀取由目的運算元所規定之向量暫存器之後續資料元件值(下一分散索引及遮罩值)。流程移至操作525,在此處理器決定分散索引及遮罩值是否指示資料元件應從來源運算元所規定之來源向量暫存器之對應位置被複製。若是,則流程移至操作530,否則移至操作540。
在操作530中,處理器決定目的向量暫存器及由分散索引及遮罩值所指示之暫存器索引。例如,依分散索引及遮罩值格式210,值的較低8-位元識別向量暫存器(由暫存器數目),較高8-位元識別暫存器之索引。接著流程移至操作535,在此處理器-在所決定目的向量暫存器之決定索引上-儲存由來源運算元所規定之來源向量暫存器之來 源資料元件於由目的運算元規定之資料元件對應位置中(向量暫存器中分散索引及遮罩值之位置係由目的運算元規定)。接著流程由操作535移至操作540。
在操作540中,處理器決定是否存在另一資料元件於目的向量暫存器中。若是,則流程移至操作520。若否,則操作完成。
第6圖為根據一實施例說明執行多暫存器分散指令,其目的運算元規定記憶體位置之範例運算之流程圖。在一實施例中,第6圖所描述之操作與操作420共同執行。
在操作610中,處理器擷取由目的運算元中所識別記憶體位置所規定之資料元件。在一實施例中,每一所擷取之資料元件以分散索引及遮罩值格式210為格式。流程移至操作615,在此處理器決定第一擷取資料元件之分散索引及遮罩值是否指示資料元件應從來源運算元所規定之來源向量暫存器之對應位置被複製。若分散索引及遮罩值指示資料元件應從來源向量暫存器被複製,則流程移至操作630,否則進行操作620。
在操作620中,處理器讀取由目的運算元所規定之記憶體位置之後續資料元件值(下一分散索引及遮罩值)。流程移至操作625,在此處理器決定分散索引及遮罩值是否指示資料元件應從來源運算元所規定之來源向量暫存器之對應位置被複製。若是,則流程移至操作630,否則移至操作640。
在操作630中,處理器決定目的向量暫存器及由分散 索引及遮罩值所指示之暫存器索引。接著流程移至操作635,在此處理器-在所決定目的向量暫存器之決定索引上-儲存由來源運算元所規定之來源向量暫存器之來源資料元件於由目的運算元規定之資料元件對應位置中(記憶體位置中分散索引及遮罩值之位置係由目的運算元規定)。接著流程由操作635移至操作640。
在操作640中,處理器決定是否存在另一資料元件於目的運算元規定之記憶體位置中。若是,則流程移至操作620。若否,則操作完成。
選擇性實施例
以上所述之實施例為多暫存器分散指令,其在來源向量暫存器中的位置對應所規定資料元件中分散索引及遮罩值的位置,決定來源資料元件被儲存於目的中,再選擇性實施例中,遮罩值允許選擇來源向量暫存器之索引。
例如指令“Scatter<MultiReg[PS/PD]zmm1,zmm2”,其中zmm1及zmm2為向量暫存器(如128-、256-、512-位元暫存器)。向量暫存器zmm2包括多個來源資料元件(如16資料元件假設每一資料元件為32位元以及zmm2為512-位元暫存器),根據向量暫存器zmm1的內容至少部分會儲存於目的向量暫存器中。向量暫存器zmm1包含多個資料元件,每一向量暫存器會規定另一向量暫存器(目的向量暫存器)及向量暫存器中之索引,以及更規定來源向量暫存器中之索引(來源索引)。執行指令之結 果,對應所規定來源索引之來源資料元件將被儲存於目的向量暫存器之目的索引上。“PS”指令位置指示純量浮點(4位元組),而指令“PD”部分則指示雙精度浮點(8位元組)。多暫存器分散指令應用於整數向量形式之另一範例可如“ScatterMultiReg[D/Q]zmm1,zmm2”,其分散封裝DWORD或QWORD整數元件。
另一指令範例為“ScatterMultiReg[PS/PD]<memory>,zmm2”,其中<memory>為記憶體位置而zmm2為向量暫存器(如128-、256-、512-位元暫存器)。向量暫存器zmm2包括多個來源資料元件(如16資料元件假設每一資料元件為32位元以及zmm2為512-位元暫存器),根據記憶體位置<memory>的內容至少部分會儲存於目的向量暫存器中。記憶體位置<memory>會識別多個資料元件,每一資料元件可規定向量暫存器(目的向量暫存器)及向量暫存器中之索引(目的索引),以及更規定來源向量暫存器中之索引(來源索引)。執行指令之結果,對應所規定來源索引之來源資料元件將被儲存於目的向量暫存器之目的索引上。“PS”指令位置指示純量浮點(4位元組),而指令“PD”部分則指示雙精度浮點(8位元組)。多暫存器分散指令應用於整數向量形式之另一範例可如“ScatterMultiReg[D/Q]<memory>,zmm2”,其分散封裝DWORD或QWORD整數元件。
第7圖說明根據一實施例多暫存器分散指令之一執行範例。多暫存器分散指令700包括目的運算元705及來源 運算元710。多暫存器分散指令700屬於指令集架構,以及在指令串流中指令700之每一“發生(occurrence)”包含在目的運算元705及來源運算元710中的值。在此範例中,目的運算元705及來源運算元710兩者為向量暫存器(如128-、256-、512-位元暫存器)。向量暫存器可為具有16個32-位元資料元件的zmm暫存器,然而,也可採用其他資料元件及暫存器長度如xmm或ymm暫存器及16-或64-位元資料元件。
來源向量暫存器的內容750由來源運算元(zmm2未圖示)所規定包含多個來源資料元件。如第7圖所示,在zmm2索引0的來源資料元件包含值760,在zmm2索引1的來源資料元件包含值762,在zmm2索引2的來源資料元件包含值764,在zmm2索引3-15的來源資料元件也包含值;然而由於根據zmm1的內容不會被分散,故未圖示於第7圖中,於下將詳述細節。
向量暫存器zmm1包含多個資料元件,其各一者可規定分散索引及遮罩值742。每一分散索引及遮罩值742可指示下列事項:目的向量暫存器、目的向量暫存器之索引(目的暫存器索引)以及來源向量暫存器之索引(來源暫存器索引)。每一分散索引及遮罩值742也可指示指令執行是否導致對應來源暫存器索引之資料元件會被儲存於目的向量暫存器中。對純量浮點(PS),每一分散索引及遮罩值742為4位元組(32位元)。在某些實施例中,較低的16位元用以表示向量暫存器的數目以及向量暫存器中 的索引,而較高的位元則指示是否採取行動(無論來源資料元件是否在分散索引之對應位置且遮罩值會複製至所規定向量暫存器之規定索引上)。如此,由目的運算元705所規定的向量暫存器資料元件指示目的向量暫存器745及其至此等暫存器之索引。
第8圖說明根據一實施例之範例分散索引及遮罩值格式。分散索引的較低8-位元及遮罩格式810指示向量暫存器的數目810。下一較高8-位元代表向量暫存器索引815。下一較高8-位元代表向量暫存器索引825。最高位 元為可行動位元810,用以指示是否採取行動(是否儲存來源資料元件於由來源暫存器索引825所識別之來源暫存器索引上由暫存器數目810所識別之暫存器之暫存器索引815所識別之目的資料元件上)。
例如,使用如第8圖所示之分散索引及遮罩值格式,資料元件在zmm1暫存器的索引0被識別為具有分散索引及遮罩值(以十六進制表示)0x80000003h,其代表向量暫存器3(如zmm3)及索引0,及來源暫存器索引0(由來源運算元710規定之向量暫存器zmm2),以及為可採取行動的。資料元件在zmm1暫存器的索引1被識別為具有分散索引及遮罩值(以十六進制表示)0x80010004h,其代表目的向量暫存器4(如zmm4)及索引0,及來源向量暫存器索引1(向量暫存器zmm2),以及為可採取行動的。資料元件在zmm1暫存器的索引2被識別為具有分散索引及遮罩值(以十六進制表示)0x80010505h,其代 表向量暫存器5(如zmm5)及索引5,及來源向量暫存器索引1(向量暫存器zmm2)以及為可採取行動的。資料元件在zmm1暫存器的索引3被識別為具有分散索引及遮罩值(以十六進制表示)0x800200206h,其代表向量暫存器6(如zmm6)及索引2,及來源向量暫存器索引2(向量暫存器zmm2)以及為可採取行動的。資料元件在zmm1暫存器的索引4-15之各一被識別為具有分散索引及遮罩值(以十六進制表示)0x00000000h,其代表向量暫存器0(如zmm0)及索引0,以及為不可行動的(意指來源向量暫存器zmm1索引4-15的分散索引及遮罩值之分散結果不為元件)。
在不同實施例中選擇代表目的向量暫存器數的位元、代表目的向量暫存器索引的位元、代表來源向量暫存器索引的位元等可以是不同的。
如第7圖所示,依zmm1[0]的分散索引及遮罩值指示,值760,即zmm2[0]上之來源資料元件值,儲存於zmm3[0]的資料元件中以作為指令執行結果。如zmm1[1]的分散索引及遮罩值所指示,值762,即zmm2[1]上之來源資料元件值,儲存於zmm4[0]的資料元件中以作為指令執行結果。如zmm1[2]的分散索引及遮罩值所指示,值762,即zmm2[1]上之來源資料元件值,儲存於zmm5[5]的資料元件中以作為指令執行結果。由此,值762被分散至多個目的資料元件中。如zmm1[3]的分散索引及遮罩值所指示,值764,即zmm2[2]上之來源資料元件值,儲存於 zmm6[2]的資料元件中以作為指令執行結果。
因此,在指令700執行發生後,來自zmm2[0]的值760會儲存於zmm3[0](zmm3[1-15]資料元件依指令700執行結果並未改變),來自zmm2[1]的值162會儲存於zmm4[0]及zmm5[5](zmm4[1-15]及zmm5[0-4;6-15]資料元件依指令700執行結果並未改變),來自zmm2[2]的值164會儲存於zmm6[2](zmm6[0-1]及zmm6[3-15]資料元件依指令700執行結果並未改變)。
第9圖說明根據一實施例之多暫存器分散指令之另一執行範例。多暫存器分散指令900包括目的運算元905及來源運算元910。多暫存器分散指令900屬於指令集架構,以及在指令串流中指令900之每一“發生(occurrence)”包含在目的運算元905及來源運算元910中的值。在此範例中,來源運算元910為向量暫存器(如128-、256-、512-位元暫存器)而目的運算元905為識別多個目的資料元件之記憶體位置,其各一者可規定分散索引及遮罩值942。在一實施例中,每一分散索引及遮罩值942的格式與第7圖及第8圖中所述相同。
來源向量暫存器的內容950由來源運算元(zmm2未圖示)所規定包含多個來源資料元件。如第9圖所示,在zmm2索引0的來源資料元件包含值960,在zmm2索引1的來源資料元件包含值962,在zmm2索引2的來源資料元件包含值964。在zmm2索引4-15的來源資料元件也包含值;然而由於根據目的運算元905所規定記憶體位置的 內容不會被分散,故未圖示於第9圖中,於下將詳述細節。
由運算元905所規定之記憶體位置包括多個資料元件,其各一者可規定分散索引及遮罩值942。每一分散索引及遮罩值942可指示下列事項:目的向量暫存器、至目的向量暫存器之索引(目的暫存器索引)以及至來源向量暫存器之索引(來源暫存器索引)。因此,由目的運算元905所規定之記憶體位置之資料元件指示目的向量暫存器945,此等暫存器之索引,同時指示來源資料元件被複製。
使用如第9圖所示之分散索引及遮罩值,由運算元905所規定之記憶體位置索引0的資料元件被識別為具有分散索引及遮罩值(以十六進制表示)0x80000003h,其代表目的向量暫存器3(如zmm3)及索引0,及來源暫存器索引0(由來源運算元710所規定之向量暫存器zmm2),以及為可採取行動的。由運算元905所規定之記憶體位置索引1的資料元件被識別為具有分散索引及遮罩值(以十六進制表示)0x80010004h,其代表目的向量暫存器4(如zmm4)及索引0,及來源暫存器索引1(向量暫存器zmm2),以及為可採取行動的。由運算元905所規定之記憶體位置索引2的資料元件被識別為具有分散索引及遮罩值(以十六進制表示)0x80010505h,其代表向量暫存器5(如zmm5)及索引5,及來源暫存器索引1(向量暫存器zmm2),以及為可採取行動的。由運算元 905所規定之記憶體位置索引3的資料元件被識別為具有分散索引及遮罩值(以十六進制表示)0x800200206h,其代表向量暫存器6(如zmm6)及索引2,及來源暫存器索引2(向量暫存器zmm2),以及為可採取行動的。由運算元905所規定之記憶體位置的資料元件索引4-15之各一被識別為具有分散索引及遮罩值(以十六進制表示)0x0h,其指示此等元件不會被分散。
如第9圖所示,由運算元905所規定之記憶體位置索引0的分散索引及遮罩值指示,值960,即zmm2[0]上之來源資料元件值,儲存於zmm3[0]的資料元件中以作為指令執行結果。由運算元905所規定之記憶體位置索引1的分散索引及遮罩值指示,值962,即zmm2[1]上之來源資料元件值,儲存於zmm4[0]的資料元件中以作為指令執行結果。由運算元905所規定之記憶體位置索引2的分散索引及遮罩值指示,值962,即zmm2[1]上之來源資料元件值,儲存於zmm5[5]的資料元件中以作為指令執行結果。由此,值962被分散於多個目的資料元件中。由運算元905所規定之記憶體位置索引3的分散索引及遮罩值指示,值964,即zmm2[2]上之來源資料元件值,儲存於zmm6[2]的資料元件中以作為指令執行結果。
因此,如第7-9圖所述之多暫存器分散指令可以單一指令使來自單一向量暫存器之一或多來源資料元件被儲存於多個向量暫存器之資料元件中。在若干實施例中,存取會進行優化,以使在特定線(lane)中所有暫存器中的值 可在一次掃描(sweep)中被複製。既然多暫存器分散指令以單一指令分散來自單一向量暫存器的元件至多個向量暫存器中,其可移除前述花費大的必須的置換及置亂,由此改善效能。
第10圖為根據一實施例說明藉由在處理器中執行多暫存器分散指令由單一向量暫存器至多個向量暫存器的分散一或多值之範例運算之流程圖。在操作1010中,由處理器擷取多暫存器散布指令(如由處理器之擷取單元進行)。多暫存器散布指令包括來源運算元以及目的運算元。來源運算元規定包括複數個來源資料元件之來源向量暫存器分散至多個目的,向量暫存器(如xmm、ymm或zmm暫存器)。目的運算元識別複數個目的資料元件,其中每一目的資料元件規定目的向量暫存器以及一索引至目的向量暫存器中。
例如,在一實施例中,目的運算元規定識別複數個目的資料元件的向量暫存器(如xmm、ymm或zmm暫存器)或記憶體位置,目的向量暫存器之索引,以及由來源運算元所歸定之來源向量暫存器之索引。每一資料元件同時規定來自來源向量暫存器的資料元件是否應被複製至所規定的目的向量暫存器中。
由操作1010移至操作1015,處理器解碼多暫存器散布指令。例如,在若干實例中,處理器包含被提供指令的硬體解碼單元(如由處理器擷取單元)。本領域周知不同的解碼單元可使用作為前述解碼單元。接著流程移至操作 1020,在此處理器執行已解碼之多暫存器散布指令,用於每一目的資料元件,以使在來源向量暫存器中的位置中之來源資料元件對應目的資料元件儲存在目的向量暫存器中由目的資料元件所規定索引上之位置。
第11圖為根據一實施例說明執行多暫存器分散指令,其目的運算元規定向量暫存器之範例運算之流程圖。在一實施例中,第11圖所描述之操作與操作1020共同執行。
在操作1110中,處理器讀取由目的運算元所規定之向量暫存器之第一資料元件值(分散索引及遮罩值)。在一實施例中此值以分散索引及遮罩值格式810為格式。流程移至操作1115,在此處理器決定分散索引及遮罩值是否指示資料元件應從來源運算元所規定之來源向量暫存器之對應位置被複製。例如,參照分散索引及遮罩值格式810,處理器決定在可採取行動位元820是否被規定分散索引及遮罩值中。若分散索引及遮罩值指示資料元件應從來源向量暫存器被複製,則流程移至操作1130,否則進行操作1120。
在操作1120中,處理器讀取由目的運算元所規定之向量暫存器之後續資料元件值(下一分散索引及遮罩值)。流程移至操作1125,在此處理器決定分散索引及遮罩值是否指示資料元件應從來源運算元所規定之來源向量暫存器之對應位置被複製。若是,則流程移至操作1130,否則移至操作1140。
在操作1130中,處理器決定目的向量暫存器及由分散索引及遮罩值所指示之暫存器索引。例如,依分散索引及遮罩值格式810,值的較低8-位元識別目的向量暫存器(由暫存器數目),下較高8-位元識別目的暫存器之索引,以及再較高8-位元識別來源暫存器之索引。
接著流程移至操作1135,在此處理器在所決定目的向量暫存器之所決定索引上儲存所決定來源資料元件。接著流程由操作1135移至操作1140。
在操作1140中,處理器決定是否存在另一資料元件於目的向量暫存器中。若是,則流程移至操作1120。若否,則操作完成。
第12圖為根據一實施例說明執行多暫存器分散指令,其目的運算元規定記憶體位置之範例運算之流程圖。在一實施例中,第11圖所描述之操作與操作1020共同執行。在操作1210中,處理器擷取由目的運算元中所識別記憶體位置所規定之資料元件。在一實施例中,每一所擷取之資料元件以分散索引及遮罩值格式810為格式。流程移至操作1215,在此處理器決定第一擷取資料元件之分散索引及遮罩值是否指示資料元件應從來源運算元所規定之來源向量暫存器之對應位置被複製。若分散索引及遮罩值指示資料元件應從來源向量暫存器被複製,則流程移至操作1230,否則進行操作1220。
在操作1220中,處理器讀取由目的運算元所規定之記憶體位置之後續資料元件值(下一分散索引及遮罩 值)。流程移至操作1225,在此處理器決定分散索引及遮罩值是否指示資料元件應從來源運算元所規定之來源向量暫存器之對應位置被複製。若是,則流程移至操作1230,否則移至操作1240。
在操作1230中,處理器決定目的向量暫存器、目的向量暫存器之索引以及來源向量暫存器之索引,由分散索引及遮罩值所指示。接著流程移至操作1235,在此處理器在所決定目的向量暫存器之所決定索引上儲存所決定之來源資料元件。接著流程由操作1235移至操作1240。
在操作1240中,處理器決定是否存在另一資料元件於目的運算元規定之記憶體位置中。若是,則流程移至操作1220。若否,則操作完成。
在此所述之指令可以不同格式實現。此外,範例系統、架構及管線將於下詳述。
VEX指令格式
VEX編碼允許指令具有多於二的運算元,以及允許SIMD向量暫存器大於128位元。使用VEX前綴提供三-運算元(或更多)語法。例如,先前二-運算元指令執行如A=A+B之運算,重覆寫入來源運算元。使用VEX前綴可使運算元執行如A=B+C之非破壞運算。
第13A圖說明根據一實施例AVX指令格式之範例,包括VEX前綴1302、實際操作碼欄位1330、Mod R/M位元組1340、SIB位元組1350、置換欄位1362、以及IMM8 1372。第13B圖說明根據一實施例由第13A圖中欄位構成完全操作碼欄位1374以及基本運算欄位1342。第13C圖說明根據一實施例由第13A圖中欄位構成暫存器索引欄位1344。
VEX前綴(位元組0-2)1302以3-位元組形式進行編碼。第一位元組為Format Field 1340(VEX位元組0,位元[7:0]),其包含明確的C4位元組值(用來分辨C4指令格式之單一值)。第2-3位元組為Format Field 1340(VEX位元組1-2)包括提供特定能力之數個位元欄位。特別地,REX欄位1305(VEX位元組1,位元[7-5])由VEX.R位元欄位(VEX位元組1,位元[7]-R)組成,VEX.X位元欄位(VEX位元組1,位元[6]-X)組成,以及VEX.b位元欄位(VEX位元組1,位元[5]-B)組成。指令其他欄位編碼暫存器索引之較低3位元在本技藝為已知(rrr、xxx及bbb),因此Rrrr、Xxxx及Bbbb可藉由增加VEX.R、VEX.X及VEX.B來形成。操作碼映射欄位1315(VEX位元組1,位元[4:0]-mmmmm)包含解碼隱含領先操作碼位元組之內容。W欄位1364(VEX位元組2,位元[7]-W)以符號VEX.W代表,並視指令提供不同功能。VEX.vvvv 1302(VEX位元組2,位元[6:3]-vvvv)的角色可如下列:1)VEX.vvvv編碼第一來源暫存器運算元,規定以倒數(1s補數)形式以及對具有2或更多來源運算元之指令為有效的;2)VEX.vvvv編碼目的暫存器運算元,以1s補數形式對特向量移位進行規;或3) VEX.vvvv並不編碼任何運算元,欄位會保留且應包含111b。若VEX.L 1368 Size欄位為0(VEX位元組2,位元[2]-L),其指示128位元向量;若VEX.L=1,其指示256位元向量。前綴編碼欄位1325(VEX位元組2,位元[1:0]-pp)為基本運算欄位提供額外的位元。
Real Opcode Field 1330(位元組3)已知為操作碼位元組。部分操作碼在此欄位中設定。
MOD R/M Field 1340(位元組4)包含MOD欄位1342(位元[7-6]),Reg欄位1344(位元[5-3]),以及R/M欄位1346(位元[2-0])。Reg欄位1344的角色可包含下列:編碼目的暫存器運算元或來源暫存器運算元(Rrrr之rrr),或被視為操作碼擴充且不用來編碼指令運算元。R/M欄位1346的角色可包含下列:編碼參照記憶體位置之指令運算元,或編碼目的暫存器運算元或來源暫存器運算元。
Scale、Index、Base(SIB)-Scale欄位1350(位元組5)包含SS1352(位元[7-6]),其用於記憶體位址產生。SIB.xxx 1354(位元[5-3])及SIB.bbb 1356(位元[2-3\0])的內容已於先前參照關於暫存器索引Xxxx及Bbbb。
Displacement Field 1362及immediate欄位(IMM8)包含位址資料。
通用向量友好指令格式
向量友好指令(vector friendly instruction)格式係一種適用於向量指令之指令格式(如存在特定欄位規定向量運算)。然而所述實施例透過向量友好指令同時支援向量及純量運算,另一實施例僅使用向量友好指令於向量運算。
第14A-14B圖為根據本發明之一實施例說明通用向量友好指令格式以及其A群組指令模板之區塊圖。第14A圖為一區塊圖說明根據本發明之實施例通用向量友好指令格式及群組A指令模板(template);而第14B圖為一區塊圖說明根據本發明之實施例通用向量友好指令格式及群組B指令模板(template)。特別地,通用向量友好指令格式1400定義群組A及群組B指令模板,兩者包含無記憶體存取1405指令模板及記憶體存取1420指令模板。在向量友好指令格式內容中通用(generic)一詞指的是未連結任何特定指令集之指令格式。
然而本發明之實施例將以向量友好指令格式支援如下進行描述:具32位元(4位元組)之64位元組運算元長度(或大小)或64位元(8位元組)資料元寬度(或大小)(且因此,64位元組向量包含16雙字大小元件或8四字大小元件);具16位元(2位元組)之64位元組運算元長度(或大小)或8位元(1位元組)資料元寬度(或大小);具32位元(4位元組)、64位元(8位元組)、16位元(2位元組)之32位元組運算元長度(或大小)或8位元(1位元組)之資料元寬度(或大小); 以及具32位元(4位元組)、64位元(8位元組)、16位元(2位元組)之16位元組運算元長度(或大小)或8位元(1位元組)之資料元寬度(或大小);不同實施例可支援具有較多、較少及/或不同資料元件寬度(如128位元(16位元組)資料元件寬度)之較多、較少及/或不同向量運算元大小(如256位元組向量運算元)。
第14A圖中的群組A指令模板包含:1)在無記憶體存取1405指令模板中顯示無記憶體存取、全輪控制(full round control)類型操作1410指令模板以及無記憶體存取、資料轉換類型操作1415指令模板;以及2)在記憶體存取1420指令模板中顯示記憶體存取、暫態(temporal)1425指令模板以及記憶體存取、非暫態1430指令模板。第14B圖中的群組B指令模板包含:1)在無記憶體存取1405指令模板中顯示無記憶體存取、寫入遮罩控制、部分輪控制(partial round control)類型操作1412指令模板以及無記憶體存取、寫入遮罩控制、vsize類型操作1417指令模板;以及2)在記憶體存取1420指令模板中顯示記憶體存取、寫入遮罩控制1427指令模板。
通用向量友好指令格式1400包含表列於下之欄位以便第14A-14B圖說明。
Format欄位1440-在此欄位之特定值(指令格式識別器值)獨特的識別向量友好指令格式,以及因此促使向量串流中向量友好指令格式之指令的發生。如此一來,在僅有通用向量友好指令格式之指令集不必然需要此欄位的情 形下選擇性的,此欄位為選擇性的。
Base operation欄位1442-其內容用以分辨不同的基本操作。
Register index欄位1444-其內容直接或透過位址產生、規定來源及目的運算元之位置,可在暫存器或記憶體中。此包括足夠數量的位元以從PxQ(如32×512、16×128、32×1024、64×1024)中選擇N個暫存器。在一實施例中,N可多達2個來源及1個目的暫存器,在其他實施例中則可以支援較多或較少暫存器(如可支援多達2個來源其中1個來源可被視為目的,可支援多達2個來源其中1個來源可被視為目的,可支援多達2個來源及1個目的)。
Modifier欄位1446-其內容分辨在用以規定記憶體存取是否發生之通用向量指令格式中指令的發生,亦即,在無記憶體存取1405指令模板及記憶體存取1420指令模板間。記憶體存取操作讀取及/或寫入記憶體階層(在若干情形下使用暫存器中的值以規定來源及/或目的位址),而非-記憶體存取操作則否(如來源及目的為暫存器)。在一實施例中,此欄位也於3種方式中進行選擇以執行記憶體位址計算,其他實施例可支援較多、較少或不同方式以執行記憶體位址計算。
Augmentation operation欄位1450-其內容用以分辨於基本操作外,不同操作中之何者會被執行。此欄位為特定規則的。在本發明之一實施例中,此欄位分為class欄位 1468、alpha欄位1452以及beta欄位1454。Augmentation operation欄位1450允許操作的共同群組可在單一指令中執行而非2、3或4指令。
Scale欄位1460-其內容允許index欄位的內容為記憶體位址產生而進行定標(如為產生位址使用2scale *index+base)。
Displacement欄位1462A-其內容使用作為記憶體位址產生之一部分(如為產生位址使用2scale *index+base+displacement)。
Displacement Factor欄位1462B(請注意displacement欄位1462A與displacement factor欄位1462B並列指出使用其中之一者)-其內容使用作為記憶體位址產生之一部分;其規定由記憶體存取大小(N)所定標之置換因子-在此N為記憶體存取位元數(如如為產生位址使用2scale *index+base+scaled displacement)。較低階的冗餘位元會被忽略,因此displacement factor欄位內容會被乘以記憶體運算元總大小(N)以便產生用於計算有效位址之最終置換。N值係由處理器硬體基於full opcode欄位1474(稍後說明)以及data manipulation欄位1454C於執行期間所決定。既然在無記憶體存取1405指令模板中未被使用,displacement欄位1462A及displacement factor欄位1462B為選澤性的,及/或不同實施例可僅實現兩者之一或無。
Data element width欄位1464-其內容用以分辨多項資 料元件寬度中之何者會被使用(在若干實施例中針對所指令;而在其他實施例中僅針對若干指令)。此欄位在僅支援1個資料元件寬度及/或資料元件寬度使用若干操作碼來支援時無需使用。
Write mask欄位1470-其內容以每個資料元件位置為基礎,控制在目的向量運算元中資料元件位置是否影響基本操作及擴充操作之結果。群組A指令模板支援合併-寫入遮罩,而群組B指令模板支援合併-歸零-寫入遮罩兩者。當合併時,向量遮罩在任何操作期間允許在目的中之任何元件集受到無需更新的保護(由基本操作及擴充操作所規定);在另一實施例中,保留目的中每一元件的舊值,其中所對應遮罩位元具有0。相反地,當零向量遮罩允許目的中的任何元件集於任何操作執行期間(由基本操作及擴充操作所規定)為零;在一實施例中,當對應遮罩位元具有0值,目的元件設為0。此一功能的子集為控制被執行操作之向量長度之能力(意即元件的跨距(span)被修正,由第一個至最後一個);然而元件無需連續被修正。因此,write mask欄位1470允許部分向量操作,包括載入(load)、儲存、四則運算(arithmetic)、邏輯等。在此所述之本發明實施例write mask欄位1470的內容選擇包含將被使用之寫入遮罩的寫入遮罩暫存器數目之一(以及因此write mask欄位1470的內容間接識別將被執行的遮罩),其他實施例替代或額外允許write mask欄位1470的內容直接規定將被執行的遮罩。
Immediate欄位1472-其內容允許即時(immediate)之規定。此欄位為選擇性的,當通用向量友好格式並不支援即時以及指令不使用即時的情形下,此欄位不會出現。
Class欄位1468-其內容用以分辨不同群組指令。請參照第14A-B圖,此欄位的內容由群組A及群組B指令中選擇。在第14A-B圖中,邊角為圓角的方塊用來指示出現在欄位中的規定值(如依次出現在第14A-B圖中class欄位1468之群組A 1468A及群組B 1468B)。
群組A的指令模板
在群組A非-記憶體存取1405指令模板中,alpha欄位1452解譯為RS欄位1452A,其內容分辨不同擴充操作類型中之何者會被執行(如四捨五入(round)1452A.1及資料轉換1452a.2依次規定為無記憶體存取,四捨五入類型操作1410以及無記憶體存取,資料轉換類型操作1415指令模板),而beta欄位1454分辨規定類型的操作何者會被執行。在無記憶體存取1405指令模板中,scale欄位1460,displacement欄位1462A及displacement scale欄位1462B並未出現。
無記憶體存取指令模板-全四捨五入控制(round control)類型操作
在無記憶體存取全四捨五入控制類型操作1410指令模板中,beta欄位1454解譯為四捨五入控制欄位 1454A,其內容提供靜態四捨五入。而在所述之本發明實施例中,四捨五入控制欄位1454A包括抑制所有浮點異常(SAE)欄位1456以及四捨五入操作控制欄位1458,其他實施例可支援編碼此等異常兩者為相同欄位或僅有此等異常/欄位中之一者(如可僅有四捨五入操作控制欄位1458)。
SAE欄位1456-其內容分辨是否關閉異常事件報告;當SAE欄位1456的內容指示啟動抑制,一給定指令不會報告任何種類的浮點異常且不會引發任何浮點異常處理程式(handler)。
Round operation control欄位1458-其內容分辨四捨五入操作群組中之何者被執行(如Round-up、Round-down、Round-towards-zero及Round-to-nearest)。因此,Round operation control欄位1458在每一指令為基礎上允許四捨五入模式的改變。本發明之一實施例中,在此處理器包括控制暫存器以規定四捨五入模式,四捨五入操作控制欄位1450的內容覆蓋暫存器值。
無記憶體存取指令模板-資料轉換類型操作
在無記憶體存取資料轉換類型操作1415指令模板中,beta欄位1454解譯為資料轉換欄位1454B,其內容分辨多項資料轉換中之何者會被執行(如無資料轉換、交叉混合(swizzle)、廣播)。
在群組A記憶體存取1420指令模板中,alpha欄位 1452解譯為驅逐提示(eviction hint)欄位1452A,其內容分辨驅逐提示中之何者會被執行(如第14圖中,時間1452B.1及非時間1452B.2依次規定記憶體存取,時間1425指令模板以及記憶體存取,非時間1430指令模板以及記憶體存取),而beta欄位1454解譯為操控欄位1454C,其內容分辨多項資料操控操作(又稱為基元(primitive))之何者會被執行(如無操控、廣播、來源向上轉換、目的向下轉換)。記憶體存取1420指令模板中包括scale欄位1460,以及選擇性的displacement欄位1462A及displacement scale欄位1462B。
向量指令執行向量載入及至記憶體的向量儲存,具轉換支援。如同一般向量指令,向量記憶體指令以逐元件(element-wise)方式傳輸資料由/至記憶體,元件實際的傳輸是由被選為寫入遮罩之向量遮罩的內容所指示。
記憶體存取指令模板-暫時
暫時資料多可的被重用以由快取得益。也就是說,無論如何,提示可由不同處理器以不同方式實現,包括完全忽略提示。
記憶體存取指令模板-非暫時
非暫時資料不太可能夠快的被重用以由第一階快取中之快取得益且應被優先考慮驅逐。也就是說,無論如何,提示可由不同處理器以不同方式實現,包括完全忽略提 示。
群組B的指令模板
在群組B指令模板中,alpha欄位1452解譯為寫入遮罩控制(Z)欄位1452C,其內容分辨由寫入遮罩欄位1470所控制之寫入遮罩進行合併(merging)或歸零(zeroing)。
在無記憶體存取1405指令模板中,beta欄位1454的部分解譯為RL欄位1457A,其內容分辨不同擴充操作類型中之何者被執行(如四捨五入1457A.1及向量長度(VSIZE)1457A.2依次規定無記憶體存取、寫入遮罩控制、VSIZE類型操作1417指令模板),而beta欄位1454的剩餘部分分辨所規定類型之操作中何者會被執行。在無記憶體存取1405指令模板中,scale欄位1460,displacement欄位1462A及displacement scale欄位1462B並未出現。
在無記憶體存取中,寫入遮罩控制、部分四捨五入控制類型操作1410指令模板、解及異常事件報告譯為四捨五入操作欄位1459A之beta欄位的剩餘部分及異常事件報告為關閉的(一給定指令不報告任何類型之浮點異常旗標(flag)及不引發任何浮點異常處理程序)。
Round operation control欄位1459A-如同Round operation control欄位1458,其內容分辨四捨五入操作群組中之何者被執行(如Round-up、Round-down、Round- towards-zero及Round-to-nearest)。因此,Round operation control欄位1459A在每一指令為基礎上允許四捨五入模式的改變。本發明之一實施例中,處理器包括控制暫存器以規定四捨五入模式,四捨五入操作控制欄位1450的內容覆蓋暫存器值。
在無記憶體存取中,寫入遮罩控制,VSIZE類型操作1417指令模板中,beta欄位1454的其他部分解譯為向量長度欄位1459A,其內容分辨多項資料向量長度中之何者會被執行(如128、256或512位元組)。
在群組B記憶體存取1420指令模板中,部分beta欄位1454解譯為廣播(broadcast)欄位1457B,其內容分辨廣播類型資料操控操作是否被執行,而beta欄位1454的剩餘部分解譯為向量長度欄位1459B。記憶體存取1420指令模板中包括scale欄位1460,以及選擇性的displacement欄位1462A及displacement scale欄位1462B。
關於通用向量友好指令格1400,圖示之全操作碼欄位1474包含格式欄位1440、基本操作欄位1442以及資料元件寬度欄位1464。而一實施例顯示全操作碼欄位1474包含全部此等欄位,若不支援全部欄位也可指包含較少欄位。全操作碼欄位1474提供操作碼(opcode)。
擴充操作欄位1450、資料元件寬度欄位1464以及寫入遮罩欄位1470允許以每一指令基礎上的通用向量友好指令格中規定此等特性。
寫入遮罩欄位及資料元件寬度欄位之結合建立類型化指令,其允許遮罩施用於不同資料元件寬度上。
在群組A與群組B所示現之不同指令模板係得益於不同情形。在本發明之若干實施例中,不同處理器或處理器中不同核心可支援僅群組A、僅群組B、或兩者。例如,通用目的計算之高效能通用目的失序核心可能僅支援群組B,主要為圖形及/或科學(通量)計算之核心可能僅支援群組A,以及用於前述兩者之核心則可支援兩群組(當然,核心具有由兩群組之若干模板及指令之混合,而非本發明範圍前述兩群組之模板及指令之全部)。同時,單一處理器可包含多個核心,可以是所有核心支援相同群組或不同核心支援不同群組。例如,在處理器中具有分別圖形及通用目的核心,主要處理圖形及/或科學計算的圖形核心之一可支援群組A,而通用目的核心之一或多可為具有失序執行及暫存器重命名進行通用目計算之高效能通用目的核心則可能僅支援群組B。另一處理器不具有分別圖形核心可包括一多通用目的循序或失序核心則支援群組A及群組B兩者。當然,在本發明之不同實施例中,來自一群組的特性也可實現於其他群組中。以高階語言所寫的程式可被置於(如及時編譯或靜態編譯)不同執行型態包括:1)僅具有由目標處理器所支援之群組指令之執行型態;或2)具有替代常式(routine)之型態,替代常式使用所有群組指令之不同結合寫入,以及具有基於目前執行程式碼之處理器所支援指令以選擇執行常式之控制流程碼。
範例特定向量友好指令格式
第15A圖為根據本發明之一實施例說明特定向量友好指令格式之一範例之區塊圖。第15A圖顯示特定向量友好指令格式1500,其於位置、大小、解譯及欄位順序上特定,如同若干此等欄位的值。特定向量友好指令格式1500可用於擴充x86指令集,以及因此若干欄位與x86指令集及其延伸類似或相同(如AVX)。此格式與具延之現存x86指令集之prefix encoding欄位、real opcode byte欄位、MOD R/M欄位、SIB欄位、displacement欄位、以及immediate欄位保持一致。第14圖之欄位如圖所示對映至第15圖中。
應理解的是為說明之故,在此所述之本發明實施例中,雖特定向量友好指令格式1500以通用向量友好指令格式1400為內容,然非用以限定本發明之特定向量友好指令格式1500。例如,通用向量友好指令格式1400可容許不同欄位具不同可能大小,而特定向量友好指令格式1500如同所示具有特定大小之欄位。經由特定範例,雖資料元件寬度攔位1464說明作為特定向量友好指令格式1500之一位元欄位,本發明不限於此(意即,通用向量友好指令格式1400容許其他資料元件寬度攔位1464)。
通用向量友好指令格式1400包括以第15A圖所示順序之下列欄位。
EVEX Prefix(位元組0-3)1502-以4-位元形式進行 編碼。
Format欄位1440(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)為format欄位1440以及其包含0x62(在本發明之一實施例中用以分辨向量友好指令格式之獨特值)。
第2-4位元組(EVEX位元組1-3)包括若干提供特定容量之位元欄位。
REX欄位1505(EVEX位元組1,位元[7-5])-包含EVEX.R bit欄位(EVEX位元組1,位元[7]-R)、EVEX.X bit欄位(EVEX位元組1,位元[6]-X)以及EVEX.B bit欄位(EVEX位元組1,位元[5]-B)。 EVEX.R、EVEX.X及EVEX.B bit欄位提供相同功能作為對應VEX bit欄位,以及使用1的補數形式進行編碼,即ZMM0編碼為1111B,ZMM15編碼為0000B。指令其他欄位如本技術領域所知編碼暫存器索引之較低3位元(rrr、xxx及bbb),因此Rrrr、Xxxx及Bbbb可由增加EVEX.R、EVEX.X及EVEX.B而形成。
REX’欄位1410-此為REX’欄位1410的第一部分及為EVEX.R’bit欄位(EVEX位元組1,位元[4]-R’),其用於編碼延伸32暫存器集較高或較低16位元。在本發明之一實施例中,此位元連同以下所述其他位元,係以位元倒置格式儲存(以已知x86 32-位元模式)以便與BOUND指令區隔,其實際操作碼位元組為62,但在MOD R/W欄位(下述)中不接受在MOD欄位中之值11;在本發明其他 實際例中並不以倒置形式儲存此及下述位元。值1用來編碼較低16暫存器。換言之,結合EVEX.R’、EVEX.R以形成R’Rrrr,且由其他欄位形成RRR。
Opcode map欄位1515(EVEX位元組1,位元[3:0]-mmmm)-其內容編碼隱含之領先位組(0F、0F 38或0F 3)。
Data element width欄位1464(EVEX位元組2,位元[7]-W)-以符號EVEX.W表示。EVEX.W用來定義資料類型(32-位元資料元件或64-位元資料元件)之粒度(大小)。
EVEX.vvvv1520(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv的角色可包含下列:1)EVEX.vvvv編碼第一來源暫存器運算元,以倒數(1s補數)形式規定以及對指令具有2或更多來源運算元是有效的;2)EVEX.vvvv編碼目的暫存器運算元,對特定向量位移以1s補數形式規定;2)EVEX.vvvv不編碼任何運算元,保留欄位且應包含1111b。因此,EVEX.vvvv欄位1520編碼第一來源暫存器之4個較低順序位元,規定器(specifier)以倒數(1s補數)形式儲存。視指令而定,額外不同EVEX位元欄位可用來擴充設定器大小至32暫存器。
EVEX.U 1468 Class欄位(EVEX位元組2,位元[2]-U)-若EVEX.U=0,則其指出群組A或EVEX.U0;若EVEX.U=1,則其指出群組B或EVEX.U1。
Prefix encoding欄位1525(EVEX位元組2,位元 [1:0]-pp)-提供基本運算欄位以外之額外位元。除以EVEX前綴格式對legacy SSE指令提供支援外,此也具有壓縮SIMD前綴(並非要求一位元組以表示SIMD前綴,EVEX前綴僅要求2位元)的益處。在一實施例中,支援使用SIMD前綴(66H、F2H、F3H)legacy SSE指令以傳統(legacy)格式或以EVEX前綴格式,這些legacy SIMD前綴編碼至SIMD prefix encoding欄位;以及執行期間在被提供予解碼器PLA之前(因此PLA可無修改下執行legacy指令的legacy及EVEX格式)擴充至legacy SIMD prefix。雖然較新指令可直接使用EVEX prefix encoding欄位的內容作為操作碼延伸,特定實施例以類似方式擴充以保一致性但允許此等legacy SIMD prefix以不同方式計行規定。另一實施例可重設計PLA以支援2位元SIMD前綴編碼,以及因此不要求擴充。
Alpha欄位1452(EVEX位元組3,位元[7]-EH;同時已知為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control以及EVEX.N;同時以α表示)-如前所述,此欄位為內容規定。
Beta欄位1454(EVEX位元組3,位元[6:4]-SSS;同時已知為EVEX.s2-0 、EVEX.r2-0 、EVEX.rr1、EVEX.LL0、EVEX.LLB;同時以β β β表示)-如前所述,此欄位為內容規定。
REX’欄1410-此為REX’欄位以及EVEX.V’位元欄位(EVEX位元組3,位元[3]-V’)的餘數,用以編碼擴充 32暫存器集之較高16或較低16位元。此位元以位元倒數方式儲存。值1使用於編碼較低16暫存器。換言之,V’VVVV結合EVEX.V’與EVEX.vvvv而形成。
Write mask欄位1470(EVEX位元組3,位元[2:0]-kkk)-其內容如前所述規定寫入遮罩暫存器中暫存器之索引。在本發明之一實施例中,規定值EVEX.kkk=000具有特殊行為暗指無寫入遮罩用於特定指令(此可以不同方式實現,包括使用寫入遮罩硬接線(hardwired)至所有物件或硬體繞行遮罩硬體)。
Real Opcode欄位1530(位元組4)同時已知為操作碼(opcode)位元組。部分操作碼於此欄位中規定。
MOD R/M欄位1540(位元組4)包括MOD欄位1542、Reg欄位1544、以及R/M欄位1546。如前所述,MOD欄位1542的內容分辨記憶體存取與非-記憶體存取間之操作。Reg欄位1544的角色可總結於下兩種情形:對目的暫存器運算元或來源暫存器運算元之一進行編碼,或者被視為操作碼擴充而不用於編碼任何指令運算元。R/M欄位1546可包含於下兩種情形:參照記憶體位址編碼指令運算元,或者對目的暫存器運算元或來源暫存器運算元之一進行編碼。
Scale、Index、Base(SIB)位元組(位元組6)-如前所述,scale欄位1450的內容用於記憶體位址產生。SIB.xxx 1554及SIB.bbb 1556-此等欄位之內容先前已參照關於暫存器索引Xxxx及Bbbb。
Displacement欄位1462A(位元組7-10)-當MOD欄位1542包含10,位元組7-10為displacement欄位1462A,其作用與legacy 32-位元置換(disp32)相同且以位元組粒度運作。
Displacement factor欄位1462B(位元組7)-當MOD欄位1542包含01,位元組7為displacement factor欄位1462B。此欄位位置與x86指令集8-位元置換(disp8)相同且以位元組粒度運作。既然disp8為符號擴充,其位址僅可在-128至127位元組位移間;以64位元組快取線而言,disp8使用8位元可僅設定為4個實際有用之值-128、-64、0、及64;然而通常需要更大範圍則使用disp32,disp32需要4位元組。對比disp8及disp32,displacement factor欄位1462B為disp8的重解譯;當使用displacement factor欄位1462B,實際的置換由displacement factor欄位的內容乘以記憶體運算元存取(N)決定。此類置換參照為disp8*N。其減少平均指令長度(用於置換之單一位元組但具有較大範圍)。此種壓縮置換是基於有效置換為記憶體存取粒度倍數之假設,以及因此,位址位移位元之冗餘低順序位元無須編碼。換言之,displacement factor欄位1462B取代legacy x86指令集8-位元置換。因此,displacement factor欄位1462B以相同方編碼作為x86指令集8-位元置換(因此在ModRM/SIB編碼規則中無改變)僅具有disp8過載至disp8*N之異常。換言之,在編碼規則及編碼長度上並無 改變但僅在硬體重解譯置換值中(其必須藉由記憶體運算元之大小定標置換以獲得逐位元組之位址位移)。
Immediate欄位1472操作如前所述。
完全操作碼欄位(Full Opcode Field)
第15B圖為根據本發明之一實施例說明構成完全操作碼欄位1474之特定向量友好指令格式1500欄位之區塊圖。特別地,full opcode欄位1474包含format欄位1440、base operation欄位1442以及data element width(W)欄位1464。base operation欄位1442包括prefix encoding欄位1525、opcode map欄位1515以及real opcode欄位1530。
暫存器索引欄位(Register Index Field)
第15C圖為根據本發明之一實施例說明構成暫存器索引欄位1444之特定向量友好指令格式1500欄位之區塊圖。
特別地,register index欄位1444包含REX欄位1505、REX’欄位1410、MODR/M.reg欄位1544、MODR/M.r/m欄位1546、VVVV欄位1520、xxx欄位1554以及bbb欄位1556。
擴充操作欄位(Augmentation Operation Field)
第15D圖為根據本發明之一實施例說明構成擴充操作 欄位1450之特定向量友好指令格式1500欄位之區塊圖。
當class(U)欄位1468包含0,其標示EVEX.U0(群組A 1468A);當包含1,其標示EVEX.U1(群組B 1468B)。當U=0且MOD欄位1542包含11(標示無記憶體存取操作),alpha欄位1452(EVEX位元組3,位元[7]-EH)解譯作為rs欄位1452A。當rs欄位1452A包含1(round 1452A.1),beta欄位1454(EVEX位元組3,位元[6:4]-SSS)解譯為round control欄位1454A。round control欄位1454A包括1位元SAE欄位1456及2位元round operation欄位1458。當rs欄位1452A包含0(data transform 1452A.2),beta欄位1454(EVEX位元組3,位元[6:4]-SSS)解譯為3位元data transform欄位1454B。當U=0且MOD欄位1542包含00、01或10(標示記憶體存取操作),alpha欄位1452(EVEX位元組3,位元[7]-EH)解譯作為eviction hint(EH)欄位1452B及beta欄位1454(EVEX位元組3,位元[6:4]-SSS)解譯為3位元data manipulation欄位1454c。
當U=1,alpha欄位1452(EVEX位元組3,位元[7]-EH)解譯作為write control(Z)欄位1452C。當U=1且MOD欄位1542包含11(標示無記憶體存取操作),部分beta欄位1454(EVEX位元組3,位元[4]-S0 )解譯為RL欄位1457A;當其包含1(round 1452A.1)beta欄位1454(EVEX位元組3,位元[6-5]-S2-1 )的剩餘部分解譯為round operation欄位1459A,而當RL欄位1457A包含0 (VSIZE 1457.A2)beta欄位1454(EVEX位元組3,位元[6-5]-S2-1 )的剩餘部分解譯為vector length欄位1459B(EVEX位元組3,位元[6-5]-L1-0 )。當U=1及MOD欄位1452包含00、01或10(標示記憶體存取操作),beta欄位1454(EVEX位元組3,位元[6:4]-SSS)解譯為vector length欄位1459A(EVEX位元組3,位元[6-5]-L1-0 )及broadcast欄位1457B(EVEX位元組3,位元[4]-B)。
範例編碼為規定向量友好指令格式 範例暫存器架構
第16圖為根據本發明之一實施例暫存器架構1600之區塊圖。在本說明實施例中,32向量暫存器1610為512位元寬;此等暫存器參照為zmm0至zmm31。較低16zmm暫存器的較低順序128位元(ymm暫存器之較低順序128位元)覆蓋於暫存器xmm0-15之上。規定向量友好指令格式1500於覆蓋暫存器檔上操作如下表說明。
換言之,vector length欄位1459B於最大長度及一或更多其他較短長度間選擇,在此每一較短長度為前長度之一半;以及指令模板沒有vector length欄位1459B操作於最大向量長度上。再者,在一實施例中,規定向量友好指令格式1500之群組B指令模板操作於封裝或純量單一/雙精度浮點資料及封裝或純量整數資料。純量操作為執行於zmm/ymm/xmm暫存器中較低順序資料元件上之操作;較高順序資料元件位置視實施例可保留如指令前之相同者或被歸零。
寫入遮罩暫存器1615(write mask register)-在說明實施例中,存在8個寫入遮罩暫存器(k0至k7),每一大小為64位元。在另一實施例中,寫入遮罩暫存器1615為大小16位元。如前所述,在本發明之一實施例中,向量遮罩暫存器k0無法作為寫入遮罩;當編碼一般指示k0用於寫入遮罩,其選擇硬體線路寫入遮罩0xFFFF有效地 關閉此指令之寫入遮罩。
通用目的暫存器1625-在說明實施例中,存在16個64-位元通用目的暫存器用以根據現存x86位址模式定址記憶體運算元。此等暫存器參照為RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP及R8至R15。
純量浮點堆疊(scalar floating point stack)暫存器檔案(x87堆疊)1645,別名為MMX封裝整數(packed integer)浮點暫存器檔案1650-在說明實施例中,x87堆疊為8-元件堆疊用於在32/64/80-位元浮點資料上使用x87指令集擴充執行純量浮點運算;而MMX暫存器用以於64-位元封裝整數資料上執行運算,如同為若干執行在MMX及XMM間之運算保留運算元。
本發明之另一實施例可使用較寬或較窄之暫存器。此外,本發明之另一實施例也可使用更多、更少或不同暫存器檔案及暫存器。
範例核心架構、處理器及計算機架構
處理器核心可為不同目的、以不同方式、以及不同處理器加以實現。例如,可實現之核心包括:1)用於通用目的計算之通用目的循序核心;2)用於通用目的計算之高效能通用目的失序核心;3)主要用於圖形及/或科學(通量)計算之專用目的核心。不同處理器之實現可包括:1)包含用於通用目的計算之一或多通用目的循序核心及/或用於通用目的計算之一或多通用目的失序核心; 以及2)包含一或多主要用於圖形及/或科學(通量)計算之專用目的核心之共同處理器(coprocessor)。不同處理器導致不同計算機系統架構,其可包括:1)於CPU外個別晶片上之共同處理器;2)與CPU相同封裝中於個別晶粒(die)上之共同處理器;3)與CPU相同矽上之共同處理器(在此情形下,此共同處理器有時稱為專用目的邏輯,如整合圖形及/或科學(通量)邏輯,或專用目的核心);以及4)晶片上之系統可包含與所述CPU在相同晶粒上(有時稱為應用程式核心或應用程式處理器)、前述處理器以及附加功能。範例核心架構將於下範例處理器及計算機架構之後描述。
範例核心架構 循序及失序核心區塊圖
第17A圖為根據本發明之一實施例說明循序導管(in-order pipeline)範例及暫存器重命名範例,失序問題/執行導管兩者之區塊圖。第17B圖為根據本發明之一實施例說明循序架構核心範例及暫存器重命名範例,失序問題/執行架構核心兩者之區塊圖。第17A-B圖中的實線方塊說明循序導管及核心,而選擇性的增加虛線方塊說明暫存器重命名、失序問題/執行導管及核心。循序面向為失序面向之一子集,失序面向於下描述。
在第17A圖中,處理器導管1700包括提取階段1702、長度解碼階段1704、解碼階段1706、配置階段 1708、重命名階段1710、排程(也稱為調度(dispatch)或發佈(issue))階段1712、暫存器讀取/記憶體讀取階段1714、執行階段1716、寫回/記憶體寫入階段1718、異常處理階段1722以及確認階段1724。
第17B圖顯示處理器核心1790包含耦接至執行引擎單元1750之前端單元1730,及其兩者耦接至記憶體單元1770。核心1790可為精簡指令集計算機(RISC)核心、複雜指令集計算機(CISC)核心、超長指令字組(VLIW)核心、或混合或其他核心類型。作為另一選擇,核心1790可為專用目的核心,例如網路或通信核心、壓縮引擎、共同處理器核心、通用目的計算圖形處理單元(GPGPU)核心、圖形核心或其他類似核心。
前端單元1730包括耦接至指令快取單元1734之分支預測單元1732,快取單元1734耦接至指令轉譯後備緩衝器(TLB)1736,指令轉譯後備緩衝器1736耦接至指令提取單元1738,指令提取單元1738耦接至解碼單元1740。解碼單元1740(或解碼器)可解碼指令,並產生一或多微操作、微程式碼進取點、微指令、其他指令或其他控制信號,其由原始指令解碼、或反射、或推衍。解碼單元1740可以不同機制加以實現。適合的機制範例包括,但不限於,查找表(look-up table)、硬體實現、可程式邏輯陣列(PLA)微程式碼唯讀記憶體(microcode ROM)等。在一實施例中,核心1790包括微程式碼唯讀記憶體或其他儲存巨集指令之微程式碼的媒體(如在解碼單元1740 中或在前端單元1730中)。解碼單元1740耦接至執行引擎單元1750中之重命名/分配器單元1752。
執行引擎單元1750包括耦接至報廢單元(retirement unit)1754之重命名/分配器單元1752以及一或多排程器(scheduler)單元1756集合。排程器單元1756代表任數目的不同排程器,包括保留站(reservation station)、中央指令窗(central instruction window)等。排程器單元1756耦接至實體暫存器檔案單元1758。每一實體暫存器檔案單元1758代表一或多實體暫存器檔案,不同實體暫存器檔案儲存一或多不同資料類型,如純量整數、純量浮點、封裝整數、封裝浮點、向量整數、向量浮點、狀態(如指令指標為下一被執行指令之位址)等。在一實施例中,實體暫存器檔案單元1758包含向量暫存器單元、寫入遮罩單元、以及純量暫存器單元。此等暫存器單元可提供架構向量暫存器、向量遮罩暫存器以及通用目的暫存器。實體暫存器檔案單元1758與報廢單元1754重疊以說明暫存器重命名及失序執行可實現之不同方式(如使用記錄器緩衝器及報廢暫存器檔案;使用未來檔案、歷史緩衝器及報廢暫存器;使用暫存器映射及暫存器庫(pool)等)。報廢單元1754及實體暫存器檔案單元1758耦接至執行叢集(cluster)1760。執行叢集1760包括一或多執行單元1762之集合及一或多記憶體存取單元1764之集合。執行單元1762可執行不同運算(如位移、加法、減法、乘法於不同類型資料上(如純量浮點、封裝整數、封 裝浮點、向量整數、向量浮點)。若干實施例可包括一些執行單元為特定功能或功能集所專用,其他實施例可僅包括執所有功能之執行單元或多重執行單元。排程器單元1756、實體暫存器檔案單元1758及執行叢集1760如圖所示可為複數,由於特定實施例創建個別管線對特定類型的資料/操作(如純量整數管線、純量浮點/封裝整數/封裝浮點/向量整數/向量浮點管線及/或記憶體存取管線,其各一具有自屬排程器單元、實體暫存器檔案單元及/或執行叢集-以及在個別記憶體存取管線情形下,特定實施例以僅具記憶體存取單元1764管線之執行叢集加以實現)。應理解的是在此使用個別管線,一或多此等管線可為失序問題/執行及剩餘者為循序。
記憶體存取單元1764之集合耦接至記憶體1770,其包括耦接至資料快取單元1774之資料TLB單元1772,資料快取單元1774耦接至階層2(L2)快取單元1776。在一範例實施例中,記憶體存取單元1764可包含載入單元、儲存位址單元以及儲存資料單元,其各一者耦接至記憶體單元1770中之資料TLB單元1772。指令快取單元1734更耦接至記憶體單元1770中之階層2(L2)快取單元1776。L2快取單元1776耦接至一或多其他階層快取及最終至主記憶體。
透過範例,範例暫存器重命名、失序問題/執行核心架構可如下實現管線1700:1)指令提取1738執行提取及長度解碼階段1702;2)解碼單元1740執行解碼階段 1706;3)重命名/定址器單元1752執行定址階段1708比及重命名階段1710;4)排程器單元1756執行排程器階段1712;5)實體暫存器檔案單元1758及記憶體單元1770執行暫存器讀取/記憶體讀取階段1714;執行叢集1760執行執行階段1716;6)記憶體單元1770以及實體暫存器檔案單元1758執行寫回/記憶體寫入階段1718;7)不同單元可被囊括在異常處理階段1722中;以及8)報廢單元1754及實體暫存器檔案單元1758執行提交階段1724。
核心1790可支援一或多指令集(如x86指令集[已增加較新版本具有若干擴充];MIPS Technologies of Sunnyvale,CA之MIPS指令集;ARM Holdings of Sunnyvale,CA之ARM指令集[具選擇性增加擴充如NEON]),包括在此所述之指令。在一實施例中,核心1790包括支援封裝資料指令集擴充之邏輯(如前述AVX1、AVX2及/或若干通用向量友好指令格式(U=0及/或U=1)之形式),從而允許操作供許多多媒體應用程式使用以執行使用封裝資料。
應理解的是核心可支援多緒(multithreading)(執行2或多操作或執行緒之平行集),以及可以不同方式實現包括分時多緒(time sliced multithreading)、共時多緒(simultaneous multithreading)(在此單一時體核心提供每一執緒邏輯核心以使實體核心為共時多緒)、或兩者之結合(例如分時提取及解碼及共時多緒如Intel Hyperthreading技術)。
當暫存器重命名以失序執行之內容描述,應理解的是暫存器重命明也可使用於循序架構中。雖然處器之說明實施例也包括分別指令及資快取單元1734/1774以及共享L2快取單元1776,其他實例可具有指令及資料之單一內部快取,例如Level 1(L1)內部快取,或內部快取之多重階層。在若干實施例中,系統可包括內部快取及外部快取之結合,外部快取於核心及/或處理器外部。此外,所有快取可於核心及/或處理器外部。
循序核心架構之規定範例(Specific Exemplary In-Order Core Architecture)
第18A-B圖說明更特定範例循序核心架構之區塊圖,此核心可為晶片上若干邏輯區塊之一(包括其他相同類型及/或不同類型之心)。邏輯區塊視應用程式需要透過高頻寬互連網路(如環網)與若干固定功邏輯、記憶體I/O介面及其他必要I/O邏輯進行溝通。
第18A圖為根據本發明之一實施例單一處理器核心,連同其至晶片上(on-die)互連網路1802的連接及其階層2(L2)快取本地子集之區塊圖。在一實施例中,指令解碼器1800支援具封裝資料指令集擴充之x86指令集。L1快取1806允許低延遲(low-latency)存取快取記憶體至純量及向量單元。然在一實施例中(簡化設計),純量單元1808及向量單元1810使用個別暫存器集(依次地,純量暫存器1812及向量暫存器1814)以及傳遞其中資料寫 入至記憶體及接著由階層1(L1)快取1806讀回,本發明另一實施例可使用不同方法(如使用單一暫存器集或包括溝通路徑,其允許資料於兩暫存器檔案間傳遞而沒有寫入及讀回)。
L2快取1804之本地子集(local subset)為全域L2快取之一部分,全域L2快取分為個別本地子集,每一者各具處理器核心。每一處理器核心具有直接存取路徑至其所屬L2快取1804之本地子集。處理器核心所讀取之資料儲存於L2快取子集1804並可快速存取,與其他處理器核心存取其所屬本地L2快取子集平行。處理器核心所寫入之資料儲存於所屬之L2快取子集1804並於必要時從其他子集刷新。環網(ring network)確保共享資料之內聚性(coherency)。環網為雙向以使如處理器核心、L2快取及其他邏輯區塊之代理器在晶片上彼此溝通。每一環資料-路徑為每方向1012-位元寬。
第18B圖為根據本發明之一實施例第18A圖中部分處理器核心之放大檢視。第18B圖包括L1快取1804部分之L1資料快取1806A,以及更多關於向量單元1810及向量暫存器1813之細節。特別地,向量單元1810為16-寬度向量處理單元(VPU)(見16-寬度ALU1828),其執行一或多整數、單精度浮點及雙精度浮點指令。VPU支援以交叉混合(swizzle)單元1820交叉混合暫存器輸入,以數字轉換單元1822A-B進行數字轉換,以及於記憶體輸入上以重製單元1824進行重製。寫入遮罩暫存器1826允許 重製結果向量寫入。
具整合記憶體控制器及圖形之處理器
第19圖為根據本發明之一實施例可能具有大於一核心、可能具整合記憶體控器以及可能具整合圖形之處理器1900之區塊圖。第19圖中之實線方塊說明具單一核心1902A之處理器1900、系統代理器1910、一或多匯流排控制器單元集1916,而虛線方塊選擇性增加說明具有多核心1902A-N之另一處理器1900、系統代理單元中一或多整合記憶體控制器單元1914集以及專用目的邏輯1908。
因此,處理器1900的不實現可包括:1)具專用目的邏輯1908之CPU與圖形及/或科學(通量)邏輯(可包含一或多核心)整合,及核心1902A-N為一或多通用目的核心(如通用目的循序核心、通用目的失序核心或兩者之結合);2)具核心1902A-N之共同處理器,其為大量專用目的核心主要用於圖形及/或科學(通量);3)具核心1902A-N之共同處理器,其為大量通目的循序核心。因此,處理器1900可為通用目的處理器、共同處理器或專用目的處理器,例如網路或溝通處理器、壓縮引擎、圖形處理器、GPGPU(通用目的圖形處理單元)、高通量多整合核心(MIC)共同處理器(包含30或更多核心)、內嵌處理器或其類似處理器。處理器可實現於一或多晶片上。處理器1900可為一或多基底之一部分及/或可由其實現,使用任何數目之處理器技術,例如BiCMOS、CMOS或 NMOS。
記憶體階層架構包含核心中快取之一或多階層、一或多共享快取單元1906或其一集合以及耦接至整合記憶體控制器單元1914集之外部記憶體(未圖示)。共享快取單元1906集可包括一或多中階層快取,如階層2(L2)、階層3(L3)、階層4(L4)、或其他階層之快取、最終階層快取(LLC)、及/或其結合。然在一實施例中,一環(ring)基於互連單元1912與整合圖形邏輯1908、共享快取單元1906集以及系統代理單元1910/整合記憶體控制器單元1914進行互連,另一實施例可使用任何已知互連技術對前述單元進行互連。在一實施例中,於一或多快取單元1906及核心1902-A-N間保持一致性。
在若干實施例中,一或多核心1902A-N為多緒。系統代理單元1910包括核心1902A-N協調及操作之元件。系統代理單元1910可包含如功率控制單元(PCU)及顯示單元。PCU可為或包含調節核心1902A-N功率狀態之邏輯及元件以及整合圖形邏輯1908。顯示單元用以驅動一或多外部顯示器。
核心1902A-N以架構指令集而分可為同質(homogeneous)或異質(heterogeneous)的;也就是說,核心1902A-N的2或多可執行相同指令集,而其他僅可執行此指令集之子集或不同指令集。
範例計算機架構
第20-23圖為範例計算機架構之區塊圖。其他本技術領域已知之系統設計及組配,用於筆記型電腦(laptop)、桌上型電腦(desktop)、手持PC、個人數位助理、工程工作站(engineering workstation)、伺服器、網路伺服器、網路集線器(network hub)、切換開關(switch)、內嵌處理器、數位信號處理器(DSP)、圖形裝置、視訊遊戲裝置、機頂盒、微控制器、手機(cell phone)、可攜式媒體播放器、手持裝置及其他各種電子裝置也都適用。一般而言,可與處理器及/或其他執行邏輯結合之大量系統或電子裝置均(如本文揭示者)適用。
請參照第20圖,第20圖為根據本發明之一實施例之一系統2000之區塊圖。系統2000可包括一或多處理器2010、2015,其耦接至控制器集線器2020。在一實施例中,控制器集線器2020包括圖形記憶體控制器集線器(GMCH)2090以及輸入/輸出集線器(IOH)2050(其可於分別晶片上);GMCH 2090包括記憶體2040及共同處理器2045所耦接之記憶體及圖形控制器;IOH 2050耦接輸入/輸出裝置2060至GMCH 2090。此外,記憶體及圖形控制器之一或兩者整合於處理器(如於此所述)中,記憶體2040及共同處理器2045直接耦接至處理器2010,以及控制器集線器2020與IOH 2050於單一晶片上。
選擇性的額外處理器2015於第20圖中以虛線表示。每一處理器2010、2015可包含在此所述之一或多處理核心以及可為處理器1900之若干版本。
舉例而言,記憶體2040可為動態隨機存取記憶體(DRAM)、相位改變記憶體(PCM)或其兩者之結合。對至少一實施例,控制器集線器2020透過如前端匯流排(FSB)之多點匯流排(multi-drop bus),如QuickPath Interconnect(QPI)或其他類似連接2095之點對點介面與處理器2010、2015溝通。
在一實施例中,共同處理器2045為專用目的處理器,例如高通量MIC處理器、網路或溝通處理器、壓縮引擎、圖形處理器、GPGPU、內嵌處理器或其他類似處理器。在一實施例中,控制器集線器2020可包括整合圖形加速器。
在實體資源2010、2015間存在各種不同,一系列度量範圍包括架構、微架構、熱、功耗特性等等。
在一實施例中,處理器2010執行指令以控制一般類型之資料處理操作。內嵌於指令可為共同處理器指令。處理器2010辨識此等共同處理器指令作為應由附加共同處理器2045所執行之類型。因此,處理器2010發佈共同處理器指令(或控制信號代表共同處理器指令)於至共同處理器2045之共同處理器匯流排或其他互連上。共同處理器2045接受及執行所接收共同處理器指令。
請參照第21圖,為根據本發明之一實施例之第一多規定範例系統之區塊圖。如第21圖所示,多處理器系統2100為點對點互連系統,以及包括透過點對點互連2150所互連之第一處理器2170及第二處理器2180。每一處理 器2170及2180可為處理器1900之若干版本。在本發明之一實施例中,處理器2170及2180依次為處理器2010及2015,而共同處理器2138為共同處理器2145。在另一實施例中,處理器2170及2180依次為處理器2010及2045。
處理器2170及2180顯示依次包含整合記憶體控制器(IMC)單元2172及2182。處理器2170也包含作為匯流排控制器單元點-對-點(P-P)介面2176及2178;類似地,第二處理器2180包含P-P介面2186及2188。處理器2170及2180可透過點-對-點(P-P)介面2150使用P-P介面電路2178、2188交換資訊。如第21圖所示,IMC2172及2182耦接處理器依次至記憶體,即記憶體2132及記憶體2134,其可為部分主記憶體依次本地附加於處理器。
處理器2170、2180可以晶片集2190透過個別P-P介面2152、2154使用點對點介面2176、2194、2186、2198彼此交換資訊。晶片集2190可與共同處理器2138透過高效能介面2139選擇性交換資訊。在一實施例中,共同處理器2138為專用目的處理器,例如高-通量MIC處理器、網路或溝通處理器、壓縮引擎、圖形處理器、GPGPU、內嵌處理器或其他類似處理器。
共享快取(未圖示)可包含於處理器之一中或在處理器兩者外,然而透過P-P互連與處理器連接,以使若處理器進入低功率模式時,處理器之一中或兩者的本地快取資 訊可被儲存於共享快取中。
晶片2190可透過介面2196耦接至第一匯流排2116。在一實施例中,第一匯流排2116可為週邊元件互連(PCI)匯流排,或者如PCI Express匯流排或其他第三代I/O互連匯流排之匯流排,然本發明並不限於此範圍。
如第21圖所示,不同I/O裝置2114可耦接至第一匯流排2116,匯流排橋2118耦接第一匯流排2116至第二匯流排2120。在一實施例中,一或多額外處理器2115,如共同處理器、高-通量MIC處理器、GPGPU、加速器(如圖形加速器或數位信號處理(DSP)單元),欄位可程式化閘陣列或任何其他處理器,耦接至第一匯流排2116。在一實施例中,第二匯流排2120可為低針腳計數(LPC)匯流排。不同裝置可耦接至第二匯流排2120,例如包括鍵盤及/或滑鼠2122、溝通裝置2127及如磁碟機或其他大量儲裝置之儲存單元2128,其包含指令/程式碼及資料2130。再者,音訊I/O 2124可耦接至第二匯流排2120。請注意也可能為其他架構。例如,取代第21圖的點-對-點架構,系統可實現多點匯流排或其他架構。
請參照第22圖,根據本發明之一實施例之第二較多規定範例系統2200之區塊圖。第21圖及第22圖中類似元件具類似參照符號,以及第21圖中特定面向於第22圖中忽略以避免混淆第22圖之面向。
請參照第23圖,根據本發明之一實施例SoC之區塊圖。與第19圖類似元件具類似參照符號。同時,虛線方 塊為進階SoC之選擇性特徵。在第23圖中,互連單元2302耦接至:包含一或多核心202A-N集合之應用程式處理器2310以及共享快取單元1906;系統代理單元1910;匯流排控制器單元1916;整合記憶體控制器單元1914;包含整合圖形邏輯、音訊處理器及視訊處理器之一或多共同處理器集合2320;靜態隨機存取記憶體(SRAM)單元2330;直接記憶體存取(DMA)單元2332;以及耦接至一或多外部顯示器之顯示器單元2340。在一實施例中,共同處理器2320包括專用目的處理器,如網路或溝通處理器、壓縮引擎、GPGPU、高-通量MIC處理器、內嵌處理器或其他類似處理器。
在此所述機制之實施例可以硬體、軟體、韌體或其結合加以實現。本發明之實施例可實現作為計算機程式或程式碼,其執行於包含至少一處理器、一儲存系統(包括揮發性及非揮發性記憶體及/或儲存元件)、至少一輸入裝置以及至少一輸出裝置之可程式化系統上。
如第21圖示之程式碼可應用於輸入指令以執行在此所述之功能並產生輸資訊。輸出資訊可以已知方式應用於一或多輸出裝置。以應用程式目的而言,處理系統包括具有一處理器之任何系統,例如;數位信號處理器(DSP)、微控制器、應用程式規定積體電路(ASIC)或微處理器。
程式碼可以高階程序或物件導向程式語言實現以與處理系統進行溝通。實現程式碼也可以組合語言或機器語言 實際。事實上,在此所述之機制不限於任何特定程式語言。在任何情形下,可為任何可編譯及直譯之語言。
至少一實施例之一或多面向可由代表性指令實現,代表性指令儲存於代表處理器中不同邏輯之機器可讀取儲存媒體,其由機器讀取時促使機器製造邏輯以執行前述技術。此種表示法,稱為“IP core”可儲存於實體、機器可讀取媒體並提供給不同客戶或製造商以載入實際製作製造機器之邏輯或處理器。
此等機器可讀取儲存媒體包括,但不限於,非暫態、由機器或裝置所製造或形成之實體配置物件,包括儲存媒體如硬碟(hard disk)、任何其他類型磁碟包括軟碟(floppy diskette)、光碟(optical disk)、唯讀光碟記憶體(CD-ROM)、可抹寫光碟(CD-RW)及磁光碟(magneto-optical disk),半導體裝置如唯讀記憶體(ROM)、隨機存取記憶體(RAM)、如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、電子可抹除可程式化唯讀記憶體(EEPROM)、快閃記憶體(flash memory)、電子可抹除可程式化唯讀記憶體(EEPROM)、相變化記憶體(phase change memory)、磁或光卡、或適合儲存電子指令之其他類型媒體。
因此,本發明之實施例同時包含非暫態、實體機器可讀取媒體,其包含指令或包含如硬體描述語言(HDL)之設計資料,用以定義在此描述之架構、電路、裝置、處理器及/或系統特徵。此等實施例也可參照為程式產品。
仿真(包括二進制轉換、程式碼變形等)
在若干情形下,指令轉換器可使用於轉換指令由來源指令集至目標指令集。例如,指令轉換器可轉換(如使用靜態二進制轉換、包括動態編譯之動態二進制轉換)、變形、仿真或轉換指令至一或多由核心所處理之其他指令。指令轉換器可以軟體、硬體、韌體或其結合加以實現。指令轉換器可於處理器上、不在處理器上或部分在及部分不在處理器上。
第24圖為根據本發明之實施例用以轉換來源指令集中的二進制指令為目標指令集中的二進制指令之軟體指令轉換器對比使用之區塊圖。在此說明實施例中,指令轉換器為軟體指令轉換器,儘管另一實施例中指令轉換器可以軟體、韌體、硬體或其結合加以實現。第24圖顯示高階語言程式2402可使用x86編譯器2404進行編譯以產生x86二進制程式碼2406,其可本機地由具有至少一x86指令集核心之處理器2416執行。具有至少一x86指令集核心之處理器2416代表可實質執行相同功能如同具有至少一x86指令集核心的Intel處理器之任何處理器,藉由相容執行或其他處理(1)Intel x86指令集核心之實質部分或(2)應用程式或其他軟體目標於執行在Intel處理器上之物件程式碼版本,以實質完成如同具有至少一x86指令核心之Intel處理器之相同結果。x86編譯器2404代表可產生x86二進制程式碼2406(如物件碼)之編譯器,其可 在具有或不具有額外鏈結的情形下,於具有至少一x86指令集核心之處理器2416上執行。類似地,第24圖顯示高階語言程式2402可使用另一指令集編譯器2408加以實現以產生另一指令集二進制程式碼2410,其可本機地由不具有至少一x86指令集核心之處理器2414執行(如具有執行MIPS Technologies of Sunnyvale,CA之MIPS指令集之處理器及/或執行ARM Holdings of Sunnyvale,CA之ARM指令集之處理器)。指令轉換器2412用於轉換x86二進制程式碼2406為可由不具有至少一x86指令集核心之處理器2414本機執行。轉換後程式碼與另一指令集二進制程式碼2410並不相同因為指令轉換器可容許製造不同;轉換後程式碼可完成一般操作且由另一指令集製成指令。因此,指令轉換器2412代表軟體、韌體、硬體或其結合,透過仿真、模擬或其他處理允許不具有x86指令集或核心之處理器或其他電子裝置執行x86二進制程式碼2406。
流程圖顯示由本發明特定實施例所執行之特定順序操作,應理解的是此等順序僅為範例(如另一實施例可以不同順序執行操作、結合特定操作、重疊特定操作等)。
為說明之便以上所述規定若干特定細節以助充分理解本發明之實例。顯而可知任何熟習此技藝者可施行一或多其他實施例而不採用前述之特定細節。所揭露之實施例並非用以限定本發明,本發明之保護範圍當視後附之申請專利範圍所界定者為準。
100,300,700,900‧‧‧指令
142,342,742,942‧‧‧分散索引及遮罩
145,345,745,945‧‧‧目的向量暫存器
150,350,750,950‧‧‧來源向量暫存器內容
210‧‧‧分散索引及遮罩格式
215‧‧‧暫存器索引
810‧‧‧分散索引及遮罩格式
815‧‧‧目的暫存器索引
825‧‧‧來源暫存器索引
1600‧‧‧暫存器架構
1625‧‧‧通用目的暫存器
1610‧‧‧向量暫存器
1645‧‧‧純量浮點堆疊暫存器檔案
1650‧‧‧MMX封裝整數浮點暫存器檔案
1615‧‧‧寫入遮罩暫存器
1700‧‧‧導管
1702‧‧‧提取
1704‧‧‧長度解碼
1706‧‧‧解碼
1708‧‧‧配置
1710‧‧‧重命名
1712‧‧‧排程
1714‧‧‧暫存器讀取/記憶體讀取
1716‧‧‧執行
1718‧‧‧寫回/記憶體寫入
1722‧‧‧異常處理
1724‧‧‧確認
1790‧‧‧核心
1730‧‧‧前端單元
1732‧‧‧分支預測單元
1734‧‧‧指令快取單元
1736‧‧‧指令轉譯後備緩衝器
1738‧‧‧指令提取
1740‧‧‧解碼單元
1750‧‧‧執行引擎單元
1752‧‧‧重命名/分配器單元
1754‧‧‧報廢單元
1756‧‧‧排程器單元
1758‧‧‧實體暫存器檔案單元
1760‧‧‧執行叢集
1762‧‧‧執行單元
1764‧‧‧記憶體存取單元
1770‧‧‧記憶體單元
1772‧‧‧資料TLB單元
1774‧‧‧資料快取單元
1776‧‧‧L2快取單元
1800‧‧‧指令解碼
1808‧‧‧純量單元
1810‧‧‧向量單元
1812‧‧‧純量暫存器
1814‧‧‧向量暫存器
1806‧‧‧L1快取
1804‧‧‧L2快取之本地子集
1802‧‧‧環網
1826‧‧‧寫入遮罩暫存器
1828‧‧‧16-寬度ALU
1824‧‧‧重製
1820‧‧‧交叉混合
1822A,1822B‧‧‧數字轉換單元
1806A‧‧‧L1資料快取
1900‧‧‧處理器
1908‧‧‧專用目的邏輯
1902A,1902N‧‧‧核心
1904A,1904N‧‧‧快取單元
1906‧‧‧共享快取單元
1912‧‧‧環
1910‧‧‧系統代理單元
1914‧‧‧整合記憶體控制器單元
1916‧‧‧匯流排控制器單元
2300‧‧‧晶片上系統
2310‧‧‧應用程式處理器
2320‧‧‧共同處理器
2302‧‧‧互連單元
2330‧‧‧SRAM單元
2332‧‧‧DMA單元
2340‧‧‧顯示單元
2010,2070,2115‧‧‧處理器
2045,2138‧‧‧共同處理器
2060‧‧‧輸入/輸出
2020‧‧‧控制器集線器
2090‧‧‧圖形記憶體控制器集線器
2050‧‧‧輸入/輸出集線器
2040,2132,2134‧‧‧記憶體
2180‧‧‧處理器/共同處理器
2190‧‧‧晶片集
2118‧‧‧匯流排橋
2114‧‧‧輸入/輸出裝置
2124‧‧‧音訊輸入/輸出
2122‧‧‧鍵盤/滑鼠
2127‧‧‧溝通裝置
2128‧‧‧資料儲存
2130‧‧‧程式碼及資料
2214‧‧‧輸入/輸出裝置
2215‧‧‧傳統輸入/輸出
本發明之較佳實施例輔以圖式說明然非用以限制本發明,相同參照符號指示類似元件,其中:第1圖說明根據一實施例之多暫存器分散指令之一執行範例。
第2圖說明根據一實施例之範例分散索引及遮罩值格式。
第3圖說明根據一實施例之多暫存器分散指令之另一執行範例。
第4圖為根據一實施例說明藉由執行多暫存器分散指令由單一向量暫存器至多個向量暫存器的分散多值之範例運算之流程圖。
第5圖為根據一實施例說明執行多暫存器分散指令,其目的運算元規定向量暫存器之範例運算之流程圖。
第6圖為根據一實施例說明執行多暫存器分散指令,其目的運算元規定記憶體位置之範例運算之流程圖。
第7圖說明根據一實施例多暫存器分散指令之一執行範例。
第8圖說明根據一實施例之範例分散索引及遮罩值格式。
第9圖說明根據一實施例之多暫存器分散指令之另一執行範例。
第10圖為根據一實施例說明藉由在處理器中執行多 暫存器分散指令由單一向量暫存器至多個向量暫存器的分散一或多值之範例運算之流程圖。
第11圖為根據一實施例說明執行多暫存器分散指令,其目的運算元規定向量暫存器之範例運算之流程圖。
第12圖為根據一實施例說明執行多暫存器分散指令,其目的運算元規定記憶體位置之範例運算之流程圖。
第13A圖說明根據一實施例AVX指令格式之範例,包括VEX前綴、實際操作碼(opcode)欄位、Mod R/M位元組、SIB位元組、置換欄位、以及IMM8。
第13B圖說明根據一實施例由第13A圖中欄位構成完全操作碼欄位以及基本運算欄位。
第13C圖說明根據一實施例由第13A圖中欄位構成暫存器索引欄位。
第14A圖為根據本發明之一實施例說明通用向量友好指令格式以及其A群組指令模板之區塊圖。
第14B圖為根據本發明之一實施例說明通用向量友好指令格式以及其B群組指令模板之區塊圖。
第15A圖為根據本發明之一實施例說明特定向量友好指令格式之一範例之區塊圖。
第15B圖為根據本發明之一實施例說明第15A圖中構成完全操作碼欄位之特定向量友好指令格式欄位之區塊圖。
第15C圖為根據本發明之一實施例說明構成暫存器索引欄位之特定向量友好指令格式欄位之區塊圖。
第15D圖為根據本發明之一實施例說明構成擴充操作欄位之特定向量友好指令格式欄位之區塊圖。
第16圖為根據本發明之一實施例暫存器架構之區塊圖。
第17A圖為根據本發明之一實施例說明循序導管(in-order pipeline)範例及暫存器重命名範例,失序(out-of-order)問題/執行導管兩者之區塊圖。
第17B圖為根據本發明之一實施例說明循序架構核心範例及暫存器重命名範例,失序(out-of-order)問題/執行架構核心兩者之區塊圖。
第18A圖為根據本發明之一實施例單一處理器核心,連同其至晶片上(on-die)互連網路的連接及其階層2(L2)快取本地子集之區塊圖。
第18B圖為根據本發明之一實施例第18A圖中部分處理器核心之放大檢視。
第19圖為根據本發明之一實施例可能具有大於一核心、可能具整合記憶體控器以及可能具整合圖形之處理器之區塊圖。
第20圖為根據本發明之一實施例之一系統之區塊圖。
第21圖為根據本發明之一實施例之第一較多規定範例系統之區塊圖。
第22圖為根據本發明之一實施例之第二較多規定範例系統之區塊圖。
第23圖為根據本發明之一實施例SoC之區塊圖。
第24圖為根據本發明之實施例用以轉換來源指令集中的二進制指令為目標指令集中的二進制指令之軟體指令轉換器對比使用之區塊圖。
100‧‧‧指令
105‧‧‧目的運算元
110‧‧‧來源運算元
142‧‧‧分散索引及遮罩
145‧‧‧目的向量暫存器
150‧‧‧來源向量暫存器內容
160、162、164、166‧‧‧值

Claims (20)

  1. 一種在計算機處理器中執行多暫存器散布指令之方法,包含:擷取包括一來源運算元以及一目的運算元之該多暫存器散布指令,其中該來源運算元規定包括複數個來源資料元件之一來源向量暫存器,其中該目的運算元識別第一複數個目的資料元件,其中每一該等目的資料元件規定一目的向量暫存器以及一索引至該目的向量暫存器中;解碼已擷取之該多暫存器散布指令;以及執行已解碼之該多暫存器散布指令,用於每一該等第一複數個目的資料元件,以使在該來源向量暫存器中的一位置中之該等來源資料元件之該一者對應該目的資料元件儲存在該目的向量暫存器中由該目的資料元件所規定之該索引上之一位置。
  2. 如申請專利範圍第1項所述之方法,其中該目的運算元規定識別該等第一複數目的資料元件之一向量暫存器。
  3. 如申請專利範圍第2項所述之方法,其中由該目的運算元所規定之該向量暫存器包括第二複數個目的資料元件,其包括該等第一複數個目的資料元件以及至少一目的資料元件,該至少一目的資料元件指示由於執行已解碼之該多暫存器散布指令,在該來源向量暫存器中的一位置中之該等來源資料元件之該一者對應不儲存在一目的向量暫存器中之該目的資料元件。
  4. 如申請專利範圍第2項所述之方法,其中該來源向量暫存器以及由該目的運算元所規定之該向量暫存器為各512-位元。
  5. 如申請專利範圍第4項所述之方法,其中每一該等第一複數目的資料元件為32-位元,其中8位元指示一目的向量暫存器以及8位元指示至一索引該目的向量暫存器中。
  6. 如申請專利範圍第1項所述之方法,其中該目的運算元規定識別該等第一複數個目的資料元件之一記憶體位置。
  7. 如申請專利範圍第1項所述之方法,其中該來源向量暫存器為512-位元。
  8. 一種處理器核心,包含:一硬體解碼單元,其用以解碼一多暫存器散布指令,其中該多暫存器散布指令包含一來源運算元以及一目的運算元,其中該來源運算元規定包括複數個來源資料元件之一來源向量暫存器,其中該目的運算元識別第一複數個目的資料元件,其中每一該等目的資料元件規定一目的向量暫存器以及一索引至該目的向量暫存器中;以及一執行引擎單元,其用以執行已解碼之該多暫存器散布指令,用於每一該等第一複數個目的資料元件,以使在該來源向量暫存器中的一位置中之該等來源資料元件之該一者對應該目的資料元件儲存在該目的向量暫存器中由該目的資料元件所規定之該索引上之一位置。
  9. 如申請專利範圍第8項所述之處理器核心,其中該目的運算元規定識別該等第一複數個目的資料元件之一向量暫存器。
  10. 如申請專利範圍第9項所述之處理器核心,其中由該目的運算元所規定之該向量暫存器包括第二複數個目的資料元件,其包括該等第一複數個目的資料元件以及至少一目的資料元件,該至少一目的資料元件指示由於執行該已解碼之多暫存器散布指令,在該來源向量暫存器中的一位置中之該等來源資料元件之該一者對應不儲存在一目的向量暫存器中之該目的資料元件。
  11. 如申請專利範圍第9項所述之處理器核心,其中該來源向量暫存器以及由該目的運算元所規定之該向量暫存器為各512-位元。
  12. 如申請專利範圍第11項所述之處理器核心,其中每一該等第一複數個目的資料元件為32-位元,其中8位元指示一目的向量暫存器以及8位元指示一索引至該目的向量暫存器中。
  13. 如申請專利範圍第8項所述之處理器核心,其中該目的運算元規定識別該等第一複數個目的資料元件之一記憶體位置。
  14. 如申請專利範圍第8項所述之處理器核心,其中該來源向量暫存器為512-位元。
  15. 一種製造的物品,包含:一實體機器可讀儲存媒體,其具有一多暫存器散布指 令儲存於其上,其中該多暫存器散布指令包括一來源運算元以及一目的運算元,其中該來源運算元規定包括複數個來源資料元件之一來源向量暫存器,其中該目的運算元識別第一複數個目的資料元件,其中每一該等目的資料元件規定一目的向量暫存器以及一索引至該目的向量暫存器中;以及其中該多暫存器散布指令包括一運算碼,其指示一機器執行該指令,用於每一該等第一複數個目的資料元件,以使在該來源向量暫存器中的一位置中之該等來源資料元件之該一者對應該目的資料元件儲存在該目的向量暫存器中由該目的資料元件所規定之該索引上之一位置。
  16. 如申請專利範圍第15項所述之製造的物品,其中該目的運算元規定識別該等第一複數個目的資料元件之一向量暫存器。
  17. 如申請專利範圍第16項所述之製造的物品,其中由該目的運算元所規定之該向量暫存器包括第二複數個目的資料元件,其包括該等第一複數個目的資料元件以及至少一目的資料元件,該至少一目的資料元件指示由於執行已解碼之該多暫存器散布指令,在該來源向量暫存器中的一位置中之該等來源資料元件之該一者對應不儲存在一目的向量暫存器中之該目的資料元件。
  18. 如申請專利範圍第16項所述之製造的物品,其中該來源向量暫存器以及由該目的運算元所規定之該向量暫存器為各512-位元。
  19. 如申請專利範圍第18項所述之製造的物品,其中每一該等第一複數個目的資料元件為32-位元,其中8位元指示一目的向量暫存器以及8位元指示一索引至該目的向量暫存器中。
  20. 如申請專利範圍第15項所述之製造的物品,其中該目的運算元規定識別該等第一複數個目的資料元件之一記憶體位置。
TW101147188A 2011-12-23 2012-12-13 多暫存器散布指令 TWI489381B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/067276 WO2013095669A1 (en) 2011-12-23 2011-12-23 Multi-register scatter instruction

Publications (2)

Publication Number Publication Date
TW201346731A TW201346731A (zh) 2013-11-16
TWI489381B true TWI489381B (zh) 2015-06-21

Family

ID=48669307

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101147188A TWI489381B (zh) 2011-12-23 2012-12-13 多暫存器散布指令

Country Status (4)

Country Link
US (1) US10055225B2 (zh)
CN (1) CN104137059B (zh)
TW (1) TWI489381B (zh)
WO (1) WO2013095669A1 (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9189236B2 (en) * 2012-12-21 2015-11-17 Intel Corporation Speculative non-faulting loads and gathers
US10496624B2 (en) * 2013-01-11 2019-12-03 Nec Corporation Index key generating device, index key generating method, and search method
US9639503B2 (en) * 2013-03-15 2017-05-02 Qualcomm Incorporated Vector indirect element vertical addressing mode with horizontal permute
US9880839B2 (en) * 2014-04-24 2018-01-30 Intel Corporation Instruction that performs a scatter write
US10296489B2 (en) 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit shuffle
US9875214B2 (en) * 2015-07-31 2018-01-23 Arm Limited Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
US10467006B2 (en) 2015-12-20 2019-11-05 Intel Corporation Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor
US20170177359A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Scatter Operations
US20170192782A1 (en) * 2015-12-30 2017-07-06 Robert Valentine Systems, Apparatuses, and Methods for Aggregate Gather and Stride
US9921841B2 (en) * 2016-02-24 2018-03-20 Intel Corporation System and method for executing an instruction to permute a mask
US10459843B2 (en) * 2016-12-30 2019-10-29 Texas Instruments Incorporated Streaming engine with separately selectable element and group duplication
IL267998B2 (en) * 2017-02-23 2023-12-01 Advanced Risc Mach Ltd Element by vector operations in a data processing apparatus
EP3428792B1 (en) * 2017-07-10 2022-05-04 Arm Ltd Testing bit values inside vector elements
US11093247B2 (en) * 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
FR3090932B1 (fr) * 2018-12-20 2022-05-27 Kalray Système de multiplication de matrices par blocs
CN111459546B (zh) * 2020-03-30 2023-04-18 芯来智融半导体科技(上海)有限公司 一种实现操作数位宽可变的装置及方法
TW202344987A (zh) * 2022-05-13 2023-11-16 美商賽發馥股份有限公司 具窄資料路徑向量收集

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020007449A1 (en) * 2000-07-12 2002-01-17 Nec Corporation Vector scatter instruction control circuit and vector architecture information processing equipment
US20090172349A1 (en) * 2007-12-26 2009-07-02 Eric Sprangle Methods, apparatus, and instructions for converting vector data
CN102103483A (zh) * 2009-12-22 2011-06-22 英特尔公司 汇聚和散布多个数据元素

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040236920A1 (en) 2003-05-20 2004-11-25 Sheaffer Gad S. Methods and apparatus for gathering and scattering data associated with a single-instruction-multiple-data (SIMD) operation
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
JP5573134B2 (ja) * 2009-12-04 2014-08-20 日本電気株式会社 ベクトル型計算機及びベクトル型計算機の命令制御方法
US8972698B2 (en) * 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020007449A1 (en) * 2000-07-12 2002-01-17 Nec Corporation Vector scatter instruction control circuit and vector architecture information processing equipment
US20090172349A1 (en) * 2007-12-26 2009-07-02 Eric Sprangle Methods, apparatus, and instructions for converting vector data
CN102103483A (zh) * 2009-12-22 2011-06-22 英特尔公司 汇聚和散布多个数据元素
TW201140434A (en) * 2009-12-22 2011-11-16 Intel Corp Gathering and scattering multiple data elements

Also Published As

Publication number Publication date
CN104137059B (zh) 2018-10-09
TW201346731A (zh) 2013-11-16
US20140108769A1 (en) 2014-04-17
CN104137059A (zh) 2014-11-05
WO2013095669A1 (en) 2013-06-27
US10055225B2 (en) 2018-08-21

Similar Documents

Publication Publication Date Title
TWI489381B (zh) 多暫存器散布指令
TWI575448B (zh) 三個來源運算元浮點加法處理器、方法、系統及指令
TWI761367B (zh) 用於融合乘加運算的系統、裝置及方法
KR102354842B1 (ko) 비트 셔플 프로세서, 방법, 시스템, 및 명령어
TWI544411B (zh) 緊縮旋轉處理器、方法、系統與指令
CN107003848B (zh) 用于融合乘法-乘法指令的装置和方法
KR102508075B1 (ko) 인덱스 및 즉치로 벡터 치환을 수행하기 위한 방법 및 장치
TWI502494B (zh) 用以執行絕對差之雙塊總數之方法,製品及裝置
JP6741006B2 (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
JP2016531377A (ja) インデックス付きベクトルメモリアクセス及び算術及び/または論理演算プロセッサ、方法、システム、及び命令
TW201349105A (zh) 點積處理器、方法、系統及指令
KR102310793B1 (ko) Z-오더 곡선에서의 넥스트 포인트의 좌표를 계산하기 위한 벡터 명령어
KR20170099873A (ko) 벡터 비트 셔플을 수행하기 위한 방법 및 장치
KR20170097015A (ko) 마스크를 마스크 값들의 벡터로 확장하기 위한 방법 및 장치
JP2018506094A (ja) 多倍長整数(big integer)の算術演算を実行するための方法および装置
JP2018500629A (ja) 3d座標から3dのz曲線インデックスを計算するための機械レベル命令
TW201810029A (zh) 用於跨步載入的系統、設備及方法
CN107003841B (zh) 用于融合加法-加法指令的装置和方法
JP2017534982A (ja) 4d座標から4dのz曲線インデックスを計算するための機械レベル命令
KR102528073B1 (ko) 벡터 비트 수집을 수행하기 위한 방법 및 장치
KR101826707B1 (ko) 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
TWI610231B (zh) 用於向量水平邏輯指令的裝置及方法
KR20170099864A (ko) 마스크 값을 압축하기 위한 방법 및 장치
TW201810020A (zh) 用於累乘的系統、設備及方法