TWI842911B - 用於存取矩陣運算元的多變數跨步讀取操作 - Google Patents
用於存取矩陣運算元的多變數跨步讀取操作 Download PDFInfo
- Publication number
- TWI842911B TWI842911B TW109120606A TW109120606A TWI842911B TW I842911 B TWI842911 B TW I842911B TW 109120606 A TW109120606 A TW 109120606A TW 109120606 A TW109120606 A TW 109120606A TW I842911 B TWI842911 B TW I842911B
- Authority
- TW
- Taiwan
- Prior art keywords
- memory
- matrix
- read
- instruction
- processor
- Prior art date
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 360
- 230000015654 memory Effects 0.000 claims abstract description 647
- 238000012545 processing Methods 0.000 claims description 33
- 238000003860 storage Methods 0.000 claims description 33
- 238000000034 method Methods 0.000 claims description 21
- 230000001052 transient effect Effects 0.000 claims description 4
- 239000013598 vector Substances 0.000 description 90
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 77
- 238000006073 displacement reaction Methods 0.000 description 36
- 238000010586 diagram Methods 0.000 description 29
- 238000007667 floating Methods 0.000 description 24
- 238000006243 chemical reaction Methods 0.000 description 17
- 238000004891 communication Methods 0.000 description 11
- 238000013528 artificial neural network Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 10
- 238000004519 manufacturing process Methods 0.000 description 10
- 239000003795 chemical substances by application Substances 0.000 description 8
- 238000013519 translation Methods 0.000 description 8
- 239000000872 buffer Substances 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 230000002195 synergetic effect Effects 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000036961 partial effect Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 239000003607 modifier Substances 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000005304 joining Methods 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
在一個實施例中,一種矩陣處理器包含記憶體,用於儲存矩陣運算元和跨步讀取序列,其中:所述矩陣運算元係在所述記憶體中亂序儲存;以及所述跨步讀取序列包含讀取操作的序列,以從所述記憶體以正確的順序讀取所述矩陣運算元。所述矩陣處理器還包含電路,用以:接收將要由所述矩陣處理器執行的第一指令,其中所述第一指令係用以指示所述矩陣處理器對所述矩陣運算元執行第一操作;基於所述跨步讀取序列從所述記憶體讀取所述矩陣運算元;以及透過對所述矩陣運算元執行所述第一操作來執行所述第一指令。
Description
本發明一般涉及矩陣處理系統領域,並且更特別是(但不是排他地)涉及用於從記憶體提取矩陣運算元的多變數跨步讀取操作。
訓練人工神經網路和/或使用神經網路執行推理通常需要許多計算密集型運算,其涉及複雜矩陣算術,如矩陣乘法和大量、多維矩陣運算元的卷積。這些矩陣運算元的記憶體佈局對於神經網路的整體效能至關重要。在一些情況下,例如,在記憶體中以特定格式儲存的矩陣運算元可能需要被提取和/或轉換成不同的格式,以對於基礎矩陣元件執行某些操作。例如,為了執行某些神經網路操作,可能需要對矩陣運算元的維度進行混洗或重新排序,或者可能需要提取、切片、修整和/或重新排序矩陣運算元的某些部分。在許多計算架構中,這要求從記憶體中整體讀取原始矩陣運算元,將其轉換為適當的格式或順序,作為新的矩陣運算元儲存回記憶體中,接著進行操作。這種方法效率極低,因為它會增加處理延遲、記憶體存取延遲和記憶體利用率。
與
以下揭露提供了用於實現本發明的不同特徵的許多不同的實施例或範例。以下描述元件和佈置的特定範例以簡化本發明。當然,這些僅是範例,並不意於進行限制。此外,本發明可能在各個範例中重複參照符號和/或字母。所述重複是出於簡化和清楚的目的,並且其本身並不指示所討論的各種實施例和/或配置之間的關係。不同的實施例可以具有不同的優點,並且任何實施例都不必然需要特定的優點。用於提取矩陣運算元的多變數跨步讀取操作
圖1顯示利用多變數跨步讀取操作從記憶體中提取矩陣運算元的矩陣處理系統100的範例實施例。在某些情況下,例如,可能需要提取以特定格式儲存在記憶體中的矩陣運算元和/或將其轉換為不同格式,以便執行特定矩陣運算。因此,在圖示的實施例中,多變數跨步讀取操作可以被執行,以直接從記憶體提取所述特定矩陣運算所需要的適當格式或順序的矩陣運算元,如下面進一步描述的。
在所示的實施例中,矩陣處理系統100包含經由通訊介面或匯流排130通訊地耦接到主機計算裝置120的矩陣處理器110。在一些實施例中,例如,矩陣處理器110可以是設計為代表主機計算裝置120加速人工智慧(AI)、機器學習(ML)和/或深度學習(DL)功能的硬體加速器和/或神經網路處理器(NNP),所述主機計算裝置120可以是運行人工智慧應用程式的通用計算平台(例如,英特爾Xeon平台)。舉例來說,在一些情況下,所述矩陣處理器110可以被用來訓練人工神經網路和/或執行代表主機計算裝置120的推理,這通常需要使用複雜的矩陣運算來執行許多計算密集的操作,如許多大型、多維矩陣運算元的矩陣乘法和卷積。
這些矩陣運算元或張量的記憶體佈局對於神經網路的整體效能至關重要。在一些情況下,例如,在記憶體中以特定格式儲存的矩陣運算元可能需要被提取和/或被轉換成不同的格式,以對於基礎矩陣元件執行某些操作。例如,為了執行某些神經網路操作,可能需要對矩陣運算元的維度進行混洗或重新排序,或者可能需要提取、切片、修整和/或重新排序矩陣運算元的某些部分。
在所示的實施例中,例如,可以使用直接記憶體存取(DMA)(例如,透過PCIe介面130)以特定格式將多維矩陣運算元102從主機計算裝置120轉移到矩陣處理器110,但是矩陣處理器110隨後可能需要將矩陣運算元102轉換為另一種格式104,以便執行某些操作。
作為一個範例,對於神經網路的卷積層,用於表示影像資料的矩陣運算元可以被組織為基礎記憶體佈局中CHW x N量級的維度,其中:
C=通道深度(例如,每個輸入影像中的通道數);
H=高度(例如,每個輸入影像的高度);
W=寬度(例如,每個輸入影像的寬度);以及
N=輸入影像的數量(例如,小批量大小)。
然而,基於層描述和要執行的數學,矩陣處理器110經常需要在對矩陣運算元進行操作之前對矩陣運算元的維度進行混洗或重新排序。例如,如果矩陣運算元以CHW x N格式在記憶體中駐留,矩陣處理器110可能需要執行維度混洗,以將運算元轉換到神經網路的特定層的NHW x C格式。
作為另一個範例,用於表示卷積濾波器集合的矩陣運算元可以被組織為基礎記憶體佈局中CRS x K量級的維度,其中:
C=通道深度;
R=濾波器高度;
S=濾波器寬度;以及
K=濾波器數。
在某些情況下,矩陣處理器110可能需要將以CRS x K格式儲存在記憶體中的卷積濾波器的某些部分提取、切片、修整和/或重新排序為另一種格式。
在許多計算架構中,對修改後的矩陣運算元執行操作需要從記憶體中整體讀取的原始矩陣運算元,將其轉換為適當的格式或順序、作為新的矩陣運算元儲存回記憶體中,接著進行操作。此程序效率極低,因為它會增加處理延遲、記憶體存取延遲和記憶體利用率。
因此,在所示的實施例中,矩陣處理系統100能夠以更加靈活和有效的方式以變化的格式對矩陣運算元進行操作。特別是,矩陣處理器110可執行多變數跨步(MVS)讀取操作,以直接從記憶體以適當格式或順序來提取特定矩陣操作所需的矩陣運算元104。如此,可以使用MVS讀取操作將在記憶體中亂序儲存的矩陣運算元102提取和/或轉換為正確的格式或順序104。
在一些實施例中,例如,MVS操作可以使用軟體可程式化的跨步讀取序列從記憶體讀取矩陣運算元。特別是,跨步讀取序列可以利用跨步讀取操作(如跨步和帶操作,其被設計成從記憶體以適當的格式或順序讀取所述矩陣運算元)的序列被程式化。
例如,跨步操作可用於在相對於基底記憶體位址的指定跨步或偏移讀取記憶體,如從先前讀取的記憶體位址+n
個跨步:
跨步+n=
讀取記憶體[先前位址+n
]
帶操作可用於在相對於基底記憶體位址的指定數量的序向記憶體位址處讀取記憶體,如先前讀取的記憶體位址之後的n
個序向記憶體位址:
帶+n
=讀取記憶體[先前位址+1]
讀取記憶體[先前位址+2]
讀取記憶體[先前位址+…]
讀取記憶體[先前位址+n
]
如此,可以用適當的跨步和帶操作序列來程式化跨步讀取序列,以便以所需的格式或順序從記憶體中讀取矩陣運算元。此軟體可程式化方法提供了一種以非常有效率的方式以許多不同的格式從記憶體提取矩陣運算元的具有極大靈活性應用。
在所示的實施例中,例如,矩陣處理器110包含控制器112、矩陣元件儲存和切片(MES)引擎114以及執行引擎118。控制器112從主機計算裝置120接收指令,使那些指令由矩陣處理器110執行。
矩陣元件儲存和切片(MES)引擎114處置所述指令所使用的矩陣運算元的儲存和提取。特別是,所述MES引擎114包含運算元記憶體115和序列記憶體116。運算元記憶體115係用於儲存矩陣資料和運算元,而序列記憶體116係用於儲存跨步讀取序列以從運算元記憶體115提取矩陣運算元。在一些實施例中,例如,運算元記憶體115可以包含封裝上的DRAM(例如,高頻寬記憶體(HBM))和/或晶載的SRAM(例如,特定計算集群的記憶體資源塊(MRB)),以及其它範例。
執行引擎118處置指令的執行。在一些實施例中,例如,執行引擎118可以包含一或多個矩陣處理單元(MPU),其設計為對於矩陣運算元執行矩陣算術,如矩陣乘法、卷積、逐元件算術和邏輯(例如,加法(+)、減法(-)、乘法(*)、除法(/)、逐元件邏輯(AND、OR、XOR、左/右移位)、比較(>、<、>=、<=、==、!=)),以及逐行、逐列和矩陣範圍的運算(例如,求和、最大值、最小值),以及其它範例。
在一些實施例中,為了使矩陣處理器110執行對多變數(MV)矩陣運算元(例如,將使用MVS讀取操作存取的矩陣運算元)進行運算的指令,以下步驟是執行的前提條件:(i)所述MV運算元是以矩陣處理器110暫存;以及(ii)存取MV運算元所需的跨步讀取序列係程式化到序列記憶體116中。在一些實施例中,例如,矩陣處理器110可支援用於執行這些步驟(例如,其中主機計算裝置120可發給矩陣處理器110)的某些指令,諸如暫存多變數運算元指令(REGOP_MV)和序列記憶體寫入指令(SEQMEM_WRITE)。
例如,暫存多變數運算元指令(REGOP_MV)可以指定共同識別和/或定義MV運算元的各種參數,如處置識別符(ID)、起始記憶體位址(例如,基底記憶體位址+運算元記憶體115中的偏移)、維度、數字元件類型(例如,BFLOAT16或SP32)和各種跨步存取參數(例如,序列記憶體116中的跨步讀取序列的位址、讀取操作大小、循環大小、超跨步),以及其它範例。基於這些參數,矩陣處理器110將指定的處置ID分配給MV運算元,這使得隨後的指令能夠透過參照其分配的處置ID對於MV運算元進行操作。
此外,序列記憶體寫入指令(SEQMEM_WRITE)可以用於將針對MV運算元的跨步讀取序列程式化到序列記憶體116中。
接著,可以透過參照適當的處置ID來執行對MV運算元進行操作的後續指令。在一些實施例中,例如,在接收到參照分配給MV運算元的處置ID的指令時,基於在REGOP_MV指令中指定的先前暫存的參數和程式化到序列記憶體116中的對應跨步讀取序列從運算元記憶體115中檢索MV運算元,接著對MV運算元執行適當的操作。
結合其餘附圖還描述與多變數跨步讀取操作有關的額外的功能和實施例。因此,應當理解,圖1的矩陣處理系統100可以利用貫穿本發明描述的功能和實施例的任何態樣來實現。矩陣運算元的暫存和儲存
在一些實施例中,圖1的矩陣處理器110可被設計成執行對二維(2D)矩陣運算元進行操作的指令,這些運算元均由對應的「處置」識別。處置用作指向記憶體中特定2D矩陣運算元的指標。此外,可以透過將原始維度組織為兩個子集(每個子集被視為一個維度)的維度來支援具有兩個以上維度的矩陣運算元(例如,三維(3D)和四維(4D)運算元)。例如,維度為C x H x W x N(影像的通道、高度、寬度、數量)的4D矩陣運算元可以組織為2D矩陣運算元,如CHW x N,其中維度C、H和W共同被視為第一維度,而維度N被視為第二維度。
此外,在一些實施例中,矩陣處理器110可以支援用於表示矩陣運算元的基礎元件的多種數值格式,如16位元腦浮點格式(BFLOAT16或BF16)或32位元單精確度浮點格式(SP32),以及其它範例。
在一些實施例中,在要對矩陣運算元進行操作的任何指令發送給矩陣處理器110之前,透過軟體暫存這些矩陣運算元的處置。例如,在主機計算裝置120上執行的軟體可以透過向矩陣處理器110發出暫存器運算元指令來暫存用於矩陣運算元的處置。
此外,在一些實施例中,所述矩陣處理器110可以支援多變數的暫存器運算元指令,其取決於特定矩陣運算元如何被儲存在記憶體中。例如,REGOP指令可用於暫存在記憶體中按順序或循序儲存的普通矩陣運算元,而REGOP_MV指令可用於暫存在記憶體中亂序儲存的多變數(MV)跨步矩陣運算元。
舉例來說,對於在記憶體中按順序或循序儲存的普通矩陣運算元,REGOP指令可以包含被用於暫存矩陣運算元的各種參數,如處置ID、維度(例如,x和y維度的大小)、起始記憶體位址和數字元件類型(例如BFLOAT16或SP32):
REGOP handleID(sizex, sizey)位址ntype
接著,已暫存的處置ID用作指向記憶體中的矩陣運算元的指標。例如,基於REGOP指令中指定的參數,處置識別符handleID
以硬體暫存,以指向儲存在特定起始記憶體位址(addr
)中的記憶體中的矩陣,所述矩陣的維度為sizex
乘以sizey
,並且包含sizex
乘以sizey
個總元件的類型ntype
(例如,BFLOAT16或SP32)。
圖2-3顯示根據某些實施例的使用REGOP指令暫存的各種矩陣運算元的記憶體佈局的範例。例如,在一些實施例中,用於儲存矩陣運算元的記憶體可以具有特定的深度和寬度,如4,000的深度和512位元(或64位元組)的寬度。透過這種方式,記憶體最多可以儲存4,000列矩陣元件,每列最多包含BFLOAT16格式的32個元件(每列512b/每個元件16b=每列32個元件)或SP32格式的16個元件(每列512b/每個元件32b=每列16個元件)。此外,在一些實施例中,矩陣運算元可以儲存在特定大小的記憶體塊中,如2千位元組(kB)塊,每個塊包含32列的記憶體(例如,32列*每列512位元=16,384位元=2048位元組≈2kB)。
圖2顯示用於矩陣運算元的記憶體佈局的範例200,所述記憶體佈局以71×71的維度和BFLOAT16類型的元件暫存。在一些實施例中,例如,可以使用上述的REGOP指令來暫存範例200中的矩陣運算元。
在所示的範例中,矩陣運算元210的邏輯視圖和對應的記憶體佈局220被顯示。具體而言,矩陣運算元210在邏輯上排列為BFLOAT16類型的71列和71行(71x71)元件。此外,針對在記憶體220中儲存矩陣運算元210的目的,矩陣運算元210被劃分成邏輯塊(A-I),其各含有高達32列和32行的元件(32×32)。由於矩陣運算元210包含的元件不足以完全填充右側和底部邊緣上的邏輯塊,因此這些塊小於32x32的最大邏輯塊大小。例如,雖然邏輯塊A、B、D和E的大小均為32x32,但是邏輯塊C、F、G、H和I較小,因為它們位於矩陣運算元210的右邊緣和下邊緣。
此外,矩陣運算元210的各個邏輯塊(A-I)被順序儲存在記憶體220的固定大小的塊中。例如,在所示的實施例中,每個記憶體塊的大小為2kB,並且包含32列寬度為512位元(或64位元組)的記憶體220,這意味著每一列具有儲存多達32個BFLOAT16類型的元件的能力。因此,實體記憶體塊的大小相當於邏輯塊的最大大小(例如,32列元件,每列32個元件的)。此外,每個邏輯塊(A-I)被儲存在單獨的實體記憶體塊中,而與邏輯塊是否完全填充整個記憶體塊無關。例如,雖然邏輯塊A、B、D和E各自填充了整個32x32記憶體塊,而邏輯塊C、F、G、H和I的大小較小,因此它們每個都僅部分填充了32x32記憶體塊。
圖3顯示用於矩陣運算元的記憶體佈局的範例300,所述記憶體佈局以33×33的維度和SP32類型的元件暫存。在一些實施例中,例如,可以使用上述的REGOP指令來暫存範例300中的矩陣運算元。
在所示的範例中,顯示矩陣運算元310的邏輯視圖和對應的記憶體佈局320。特別是,矩陣運算元310在邏輯上被佈置成33列和33行(33x33)的SP32類型的元件。此外,出於將矩陣運算元310儲存在記憶體320中的目的,矩陣運算元310被劃分成邏輯塊(A-D),每個邏輯塊包含多達32列和32行的元件(32×32)。由於矩陣運算元310不包含足夠的元件來完全填充右側邊緣和底部邊緣上的邏輯塊,因此這些塊小於最大邏輯塊的大小32x32。例如,儘管邏輯塊A的具有最大的大小32×32,邏輯塊B、C、和D是較小的,因為它們落在矩陣運算元310的右邊緣和下邊緣。
此外,矩陣運算元310的各個邏輯塊(A-D)順序地儲存在記憶體320的固定大小的塊中。在所示的實施例中,例如,每個記憶體塊的大小為2kB,並且包含32列寬度為512位元(或64位元組)的記憶體320,這意味著每列具有儲存多達16個SP32類型的元件(例如32×16)的能力。因此,實體記憶體塊的大小是邏輯塊的最大大小的一半,因為實體記憶體塊的大小是32x16,而邏輯塊的最大大小是32x32。因此,某些邏輯塊將大於單一實體記憶體塊,這意味著它們將必須被劃分並且跨兩個實體記憶體塊儲存。因此,每個邏輯塊(A-D)被儲存在兩個實體記憶體塊中,而不管邏輯塊是否完全填充那些記憶體塊。
例如,邏輯塊A的最大大小為32x32,這意味著它將完全填充兩個實體記憶體塊。因此,邏輯塊A被劃分為大小為32×16的左和右邏輯塊AL
和AR
,它們分別儲存在單獨的實體記憶體塊中。
邏輯塊B的大小為32x1,這意味著它可以容納在單一實體記憶體塊中。然而,邏輯塊B仍使用兩個記憶體塊儲存在記憶體320中,這意味著第一記憶體塊被邏輯塊B部分填充,而第二記憶體塊為空。
邏輯塊C的大小為1x32,這意味著它太寬而無法容納在單一實體記憶體塊中,因為邏輯塊C的寬度為32個元件,而實體記憶體塊的寬度為16個元件。因此,邏輯塊C被劃分成大小為1x16的左和右邏輯塊CL
和CR
,它們分別儲存在僅被部分填充的單獨實體記憶體塊中。
邏輯塊D的大小為1x1,這意味著它可以容納在單一實體記憶體塊中。然而,邏輯塊D仍使用兩個記憶體塊儲存在記憶體320中,這意味著第一記憶體塊被邏輯塊D部分填充,而第二記憶體塊為空。多變數跨步矩陣運算元
如上所述,在一些情況下,在記憶體中以特定格式或順序儲存的矩陣運算元可能需要被提取和/或轉換成不同的格式或順序,以執行特定矩陣運算。因此,在一些實施例中,矩陣處理器110可支援「暫存多變數運算元」指令(REGOP_MV),以暫存在記憶體中被亂序和/或不連續地儲存的多變數(MV)運算元的處置ID。如此,後續指令可以透過簡單地參照其分配的處置ID來對MV運算元進行操作。例如,在接收到參照了分配給MV運算元的處置ID的後續指令時,矩陣處理器110使用多變數跨步(MVS)讀取操作以適當的格式或順序從記憶體中自動提取MV運算元,並且接著對MV運算元執行與接收到的指令對應的適當操作。
在某些實施例中,例如,用於暫存MV運算元的REGOP_MV指令可包含以下欄位和/或參數:
REGOP_MV handleID(sizex,sizey,讀取偏移,操作大小,序列記憶體偏移,超跨步,循環大小)基底位址ntype
一旦執行了REGOP_MV指令,暫存的處置ID便成為指向記憶體中的MV矩陣運算元的指標,並還指示應以跨步方式(例如,基於在REGOP_MV指令和對應的軟體可程式化跨步讀取序列中指定的參數)從記憶體中讀取運算元)。
例如,基於REGOP_MV指令中指定的參數,處置識別符「handleID」已以硬體暫存,並指向儲存在記憶體中的矩陣,所述矩陣從特定的起始記憶體位址(基底位址+讀取偏移)開始,其具有維度「sizex」乘「sizey」,並包含「ntype」類型(例如,BFLOAT16或SP32)的元件。所暫存的「handleID」還指示所述矩陣是應使用MVS讀取操作存取的多變數(MV)運算元,因為矩陣可能亂序儲存和/或不連續儲存在記憶體中。
用於存取MV運算元的特定MVS讀取操作涉及指定數量的基礎讀取操作(操作大小),這些操作是透過使特定大小(循環大小)的跨步讀取序列循環、執行跨步讀取序列中的跨步和/或帶的讀取操作,以及施加跨步讀取序列的每個迭代之間的「超跨步」(例如,直到已經執行了指定數量的基礎讀取操作(操作大小))來執行。此外,從序列記憶體以指定的偏移(序列記憶體偏移)檢索在MVS讀取操作中使用的特定跨步讀取序列,所述指定的偏移事先透過軟體(例如,使用SEQMEM_WRITE指令)程式化到序列記憶體中。
如此,REGOP_MV指令使軟體能夠通知硬體,應透過軟體規定的特定跨步讀取序列,以跨步方式從記憶體中提取某些矩陣運算元(例如,因此允許軟體選擇哪些列和/或行,以什麼順序讀取儲存在記憶體中的邏輯張量)。
在一些實施例中,例如,序列記憶體用於儲存可用於從記憶體提取MV運算元的跨步讀取序列。例如,序列記憶體中的特定跨步讀取序列可以包含跨步和/或帶指令的序列。跨步指令用於在特定跨步偏移n
執行單一讀取操作,而帶指令用於執行n
個序向讀取操作。
在一些實施例中,序列記憶體具有256個條目的深度(例如,記憶體位址)和9個位元的寬度(256個條目x 9b)。此外,序列記憶體的每個條目或位址都能夠儲存用於特定跨步讀取序列的單一指令,如跨步指令或帶指令。例如,序列記憶體中條目的最高有效位元(MSB)可以指示特定指令是跨步指令還是帶指令,而其餘位元可以指示特定跨步或帶指令的值(例如,跨步操作的偏移n
,或帶操作的數個序向讀取n
)。
REGOP_MV指令的欄位的更詳細說明在下面的表1和以下各節中提供。
在一些實施例中,例如,當接收到參照多變數(MV)矩陣運算元的已暫存的「handleID」的指令(例如,透過REGOP_MV指令暫存的運算元)時,所述MV運算元將自動使用多變數跨步(MVS)讀取操作(例如,基於REGOP_MV指令中指定的欄位以及序列記憶體中對應的跨步讀取序列)以適當的格式或順序從記憶體中提取資料。
例如,特定MV運算元的MVS讀取操作在REGOP_MV指令的「基底位址」+「讀取偏移」欄位所指示的記憶體位址處執行記憶體的首次讀取。接下來發生什麼取決於序列記憶體的內容。特別是,特定MV運算元的跨步讀取序列被程式化到在REGOP_MV指令的「序列記憶體偏移」欄位中指定的偏移的序列記憶體中,並且在該跨步讀取序列中的指令數目在「循環大小」欄位中規定。
因此,硬體將在由「序列記憶體偏移」給定的位址首先讀取序列記憶體。如果MSB[b8]=1,則這是帶指令,它指示應對序向記憶體位置執行的額外的讀取次數。如果MSB[b8]=0,則這是跨步指令,它指示應添加到當前記憶體位址的偏移,以查找下一個要讀取的所需記憶體位置。
硬體將透過讀取接下來序列記憶體位置並施加與之前相同的規則繼續此程序。如果之前的序列記憶體指令是跨步指令,則直接施加下一個序列儲存指令。然而,如果之前的序列記憶體指令是帶指令,則下一個序列記憶體指令只有在指定數量的帶狀讀取操作已完成時才施加。因此,如果跨步指令之後是帶指令,第一讀取操作是在由所述跨步偏移指示的記憶體位址執行,接著在緊隨其後的序向記憶體位址進行指定數量的帶狀讀取操作。例如,一條跨步+n
指令後跟一條帶+3指令將從4個序向記憶體位置讀取:一個是由於跨步跳轉到偏移+n
處的記憶體位址,接著的其它三個是由於緊隨其後的記憶體位址的帶狀讀取。然而,允許任何跨步和/或帶指令的序列。例如,可以有一或多個連續的跨步指令和/或一或多個連續的帶指令(儘管多個背對背帶指令效率低下,因為它們可以很容易地組合成單一帶指令)。
在為MV運算元執行的每個記憶體讀取操作(例如,讀取包含MV運算元的元件的記憶體位址)之後,與REGOP_MV指令的「操作大小」欄位相關的計數器遞增1。類似地,在每次讀取序列記憶體中的指令(例如,跨步或帶指令)之後,與REGOP_MV指令的「循環大小」欄位相關的計數器將遞增1。此程序一直持續直到檢測下列兩個事件之一:達到「循環大小」或「操作大小」。
如果達到「循環大小」,則已經發生超跨步事件。這意味著超跨步被添加到起始記憶體位址(例如,基底位址+讀取偏移+超跨步),並隨後在新的起始記憶體位址執行讀取操作。此讀取完成後,引擎將再次重複序列記憶體循環。它透過再次讀取第一序列記憶體指令(例如,位於序列記憶體中的「序列記憶體偏移」處)開始,並像之前一樣施加它。繼續讀取相同的序列記憶體指令,直到第二次達到「循環大小」或第一次達到「操作大小」。如果在「操作大小」之前達到「循環大小」,則程序在透過施加另一超跨步計算的新起始記憶體位址(例如,基底位址+讀取偏移+2*超跨步)重複。一旦達到「操作大小」,則MVS讀取操作完成,並且已從記憶體中讀取了MV運算元。
此外,在一些實施例中,MVS讀取操作可以有多種變化或模式:直接和旋轉。兩種變體的計算用於從記憶體讀取MV運算元的記憶體位址的方法都是相同的。所不同的是旋轉記憶體選擇是否被施加到從記憶體中讀取的列(例如,基於「rd_width」欄位)。例如,在直接模式下,將從記憶體中讀取的列視為所得MV運算元中的一列。然而,在旋轉模式下,將從記憶體讀取的列旋轉或轉置為所得MV運算元中的一行。
如上所述,序列記憶體的內容通知硬體用於存取特定MV運算元的對應跨步讀取序列。序列記憶體可以透過軟體經由序列記憶體寫入(SEQMEM_WRITE)指令進行程式化。下表2中提供了SEQMEM_WRITE指令的欄位的描述。
在某些情況下,這種多變數矩陣運算元的概念可用於執行維度混洗操作。例如,通常需要以下基元來支援對於多維度張量的每一個可能的維度混洗操作:
基元1:AB x C -> BA x C
基元2:AB x C -> AC x B
基元3:AB x C -> C x AB
然而,在所描述的實施例中,可以使用MVS讀取操作直接執行維度混洗操作(例如,AB x C -> BC x A)。例如,可以使用各種參數和跨步讀取序列透過REGOP_MV指令暫存多變數矩陣運算元,這些參數和跨步讀取序列被設計為對儲存在記憶體中的矩陣運算元的維度進行混洗或重新排序。
圖4顯示MVS讀取操作400的範例。具體地,所示範例顯示儲存在記憶體410中的矩陣運算元的佈局,以及被程式化到序列記憶體420中的跨步讀取序列的指令(在此範例中其僅包含跨步指令)。
此外,所示範例顯示MVS讀取操作400如何基於(i)在REGOP_MV指令中指定的各種欄位和(ii)序列記憶體420中的對應跨步讀取序列從記憶體410讀取MV運算元。特別是,所示範例描繪了由MVS讀取操作400讀取的記憶體410的列,其包含MV運算元的元件。
例如,以下偽碼說明了MVS讀取操作400如何從記憶體410讀取MV運算元:
//讀取總共8行記憶體(「操作大小」=8)
//在起始記憶體位址處讀取記憶體的第一行(基底位址+讀取偏移)
讀取記憶體[基底位址+讀取偏移]
//從序列記憶體讀取跨步讀取序列:從「序列記憶體偏移」開始的3條指令(「循環大小」)
讀取序列記憶體[序列記憶體偏移] //跨步+x指令
讀取序列記憶體[序列記憶體偏移+1] //跨步+y指令
讀取序列記憶體[序列記憶體偏移+2] //跨步+z指令
//執行相對於起始記憶體位址的跨步讀取序列
讀取記憶體[基底位址+讀取偏移+x] //跨步+x
讀取記憶體[基底位址+讀取偏移+x+y] //跨步+y
讀取記憶體[基底位址+讀取偏移+x+y+z] //跨步+z
//將「超跨步」施加到起始記憶體位址
讀取記憶體[基底位址+讀取偏移+超跨步]
//相對於新的起始記憶體位址重複跨步讀取序列
讀取記憶體[基底位址+讀取偏移+超跨步+x]
讀取記憶體[基底位址+讀取偏移+超跨步+x+z]
讀取記憶體[基底位址+讀取偏移+超跨步+x+y+z]
圖5顯示MVS讀取操作500的另一範例。在所示範例中,被程式化到序列記憶體520中的跨步讀取序列包含跨步指令和帶指令。
以下偽碼說明了MVS讀取操作500如何從記憶體510讀取MV運算元:
//讀取總共24行記憶體(「操作大小」=24)
//在起始記憶體位址處讀取記憶體的第一行
讀取記憶體[基底位址+讀取偏移]
//從序列記憶體讀取跨步讀取序列:從「序列記憶體偏移」開始的3條指令(「循環大小」)
讀取序列記憶體[序列記憶體偏移] //帶+7指令
讀取序列記憶體[序列記憶體偏移+1] //跨步+20指令
讀取序列記憶體[序列記憶體偏移+2] //帶+3指令
//執行相對於起始記憶體位址的跨步讀取序列
讀取記憶體[基底位址+讀取偏移+1]至記憶體[基底位址+讀取偏移+7]
讀取記憶體[基底位址+讀取偏移+7+20]
讀取記憶體[基底位址+讀取偏移+7+20+1]至記憶體[基底位址+讀取偏移+7+20+3]
//將「超跨步」施加到起始記憶體位址
讀取記憶體[基底位址+讀取偏移+超跨步]
//重複跨步讀取序列和超跨步,直到已讀取總共24行記憶體(「操作大小」=24)
圖6A-B顯示MVS讀取操作600的另一範例。在所示範例中,MVS讀取操作600用於提取以CRS × K格式儲存在記憶體610中的3D卷積濾波器605的一部分。因此,使用以下參數透過REGOP_MV指令來暫存MV運算元:
i. 基底記憶體位址=在圖中顯示;
ii. 記憶體偏移=7;
iii. 操作大小=36(例如,讀取操作的總數=每列中的像素數*列數(3*12=36));
iv. 序列記憶體偏移=在圖中顯示;
v. 循環大小=7(#序列記憶體指令的數量,其確定每個濾波器的讀取次數);以及
vi. 超跨步=R*S。
基於這些參數,連同程式化到序列記憶體620中的跨步存取序列,MVS讀取操作600將執行三個迭代的讀取操作,以從記憶體610讀取MV運算元:
36次總讀取(操作大小)/每次迭代12次讀取(1次初始讀取+11次跨步存取序列的讀取)=3次迭代。
迭代次數(3)對應於通道的數目(C)。
圖7顯示多變數跨步(MVS)讀取操作的範例實施例的流程圖700。在一些實施例中,例如,流程圖700可以使用圖1的矩陣處理系統100來實現。
流程圖從方塊702開始,其中接收指令以暫存用於儲存在記憶體中的多變數跨步矩陣運算元的處置(例如,REGOP_MV指令)。例如,REGOP_MV指令可以包含可以被用於從記憶體提取矩陣運算元的各種欄位,如處置識別符(ID)、基底記憶體位址、記憶體偏移、維度、數值元件類型(例如,BFLOAT16或SP32)、操作大小、序列記憶體偏移、循環大小和/或超跨步等。基於這些欄位,將指定的處置ID分配給矩陣運算元,這使後續指令可以透過參照其分配的處置ID對矩陣運算元進行操作。
接著,流程圖進行到方塊704,其中用於存取矩陣運算元的跨步讀取序列被程式化到序列記憶體中。在一些實施例中,例如,可以接收一或多個序列記憶體寫入指令(SEQMEM_WRITE)以將跨步讀取序列程式化到序列記憶體中。跨步讀取序列可以包含跨步讀取操作和/或帶狀讀取操作的序列,其可以用由REGOP_MV指令的「序列記憶體偏移」欄位指定的偏移被程式化到序列記憶體中。此外,在跨步讀取序列中的指令總數可以對應於REGOP_MV指令的「循環大小」欄位。
接著,流程圖進行到方塊706,其中接收指令以對跨步矩陣運算元執行操作,如矩陣乘法、卷積或記憶體複製操作,還有其他範例。例如,指令可以參照矩陣運算元的處置ID。因此,為了執行指令所需的特定操作,將使用MVS讀取操作以適當的格式或順序從記憶體中提取矩陣運算元(例如,基於REGOP_MV指令中指定的欄位和序列記憶體中的對應跨步讀取序列)。
例如,MVS讀取操作讀取包含矩陣運算元的元件的記憶體的特定行數(例如,基於「操作大小」欄位),其透過循環特定大小的跨步讀取序列讀取(基於「循環大小」欄位),在跨步讀取序列中執行跨步讀取和/或帶狀讀取操作,並在跨步讀取序列的每次迭代之間施加「超跨步」(例如,直到「操作大小」欄位所需的記憶體行數已從記憶體被讀取)。
因此,流程圖前進到方塊708,以從序列記憶體中檢索矩陣運算元的跨步讀取序列。例如,從序列記憶體以REGOP_MV指令的「序列記憶體偏移」欄位指示的偏移讀取特定數量的條目。從序列記憶體讀取的條目數量對應於REGOP_MV指令的「循環大小」欄位,並且每個條目可以包含用以執行跨步讀取操作或帶狀讀取操作任一者的指令。
接著,流程圖進行到方塊710,其中執行讀取操作的迭代。例如,在第一次迭代中,在對應於REGOP_MV指令的「基底記憶體位址」+「記憶體偏移」欄位的起始記憶體位址處讀取記憶體的第一行。跨步讀取序列(例如,在方塊708處從序列記憶體中檢索的)接著被執行,以讀取相對於當前迭代的起始記憶體位址的記憶體的一或多個額外行。例如,跨步讀取序列中的一或多個跨步讀取操作和/或帶狀讀取操作可以被執行。
接著,流程圖進行到方塊712,以確定MVS讀取操作是否完成。例如,如果已讀取的記憶體的總行數等於REGOP_MV指令的「操作大小」欄位中的值,則MVS讀取操作完成,否則MVS讀取操作的一或多個額外迭代需要讀取記憶體的剩餘行。
例如,如果在方塊712處確定MVS讀取操作尚未完成,則流程圖進行到方塊714,其中將超跨步施加於來自先前迭代的起始記憶體位址,以便計算下一個迭代的新起始記憶體位址。
接著,流程圖回到方塊710,以執行相對於新起始記憶體位址的讀取操作的另一迭代。例如,在新起始記憶體位址處讀取記憶體的一行,接著透過相對於新起始記憶體位址重複跨步讀取序列來讀取記憶體的一或多條額外行。
以這種方式重複所述程序,直到已讀取的記憶體總行數等於REGOP_MV指令的「操作大小」欄位中的值。
一旦在方塊712中確定MVS讀取操作完成後,流程圖隨後前進至方塊716,其中接著對矩陣運算元執行適當的操作(例如,在方塊706中所接收指令需要的操作)。
至此,流程圖可能已完成。然而,在一些實施例中,流程圖可以重新開始和/或可以重複某些方塊。例如,在一些實施例中,流程圖可以在方塊702處重新開始,以繼續暫存用以存取跨步矩陣運算元的處置。範例計算架構
貫穿以下各節描述的圖式說明了可以根據本文揭露實施例使用的計算系統、架構和/或環境的範例實現。此外,在一些實施例中,貫穿本發明描述的某些硬體元件和/或指令可以被仿真或實現為軟體模組(例如,以下面描述的方式)。
示範性的指令格式
指令集可包括一或多個指令格式。給定的指令格式可定義各種欄位(例如,位元數、位元位置)以指定除其它事項外,要執行的運算(例如,運算碼)和所述運算將要執行的運算元和/或其它資料欄位(例如,遮罩)。有些指令格式透過指令樣板(或子格式)的定義進一步細分。例如,給定的指令格式的指令樣板可被定義為具有指令格式的欄位的不同子集(包括的欄位通常有相同的順序,但至少有一些因為包含較少欄位而具有不同的位元位置,)和/或定義為具有不同解釋的給定欄位。因此,ISA的每個指令用給定的指令格式來表示(並且,如果已定義在所述指令格式中給定的一個指令樣板),並且包括用於指定運算和運算元的欄位。例如,示例性的ADD指令具有特定的運算碼以及包括運算碼欄位以指定運算碼和運算元欄位以選擇運算元(來源1/目的地和來源2)的指令格式;並在指令流中此ADD指令的出現將具有在選擇特定運算元的運算元欄位中的具體內容。一組SIMD擴展涉及進階向量擴展(AVX) (AVX1和AVX2),並使用向量擴展(VEX)編碼方式,一直以來,已經發布和/或公開(例如,參見英特爾®
64和IA-32架構軟體開發者手冊,2014年9月,並參見英特爾®
進階向量擴展程式參照資料,2014年10月)。
本文所描述的指令的實施例可以用不同的格式體現。在一些實施例中,例如,指令可以用「通用向量親合指令格式」來體現,如下文進一步詳述的。在其它實施例中,沒有使用這種格式,而是使用了另一種指令格式,然而,以下對於寫入遮罩暫存器、各種資料轉換(混合、廣播等)、定址等的描述通常適用於任何潛在的指令格式。此外,示範性系統、架構和管線詳述如下。指令的實施例可以在這樣的系統、架構和管線執行,但並不限於這些詳細描述。
通用向量親合指令格式
一種向量親合指令格式係適合向量指令的指令格式(例如,有特定於向量運算的某些欄位)。雖然實施例描述了向量和純量運算都透過向量親合指令格式支援,替代實施例中只透過向量親合指令格式使用向量運算。
圖8A-B係顯示根據本發明實施例的通用向量親合指令格式和其指令樣板的方塊圖。圖8A係顯示根據本發明實施例的通用向量親合指令格式和其A類指令樣板的方塊圖;而圖8B係顯示根據本發明實施例的通用向量親合指令格式和其B類指令樣板的方塊圖。具體地,對於定義A類和B類指令樣板的通用向量親合指令格式800,這兩者都包括無記憶體存取805指令樣板和記憶體存取820指令樣板。用語「通用」在向量親合指令格式的上下文中係指所述指令格式不取決於任何特定的指令集。
雖然本發明的實施例將以支援以下功能的向量親合指令格式被描述: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位元組)的資料元的寬度)。
圖8A中的A類指令樣板包括:1)無記憶體存取805指令樣板之內,其中顯示無記憶體存取、全捨入控制類型運算810指令樣板以及無記憶體存取、資料轉換類型運算815指令樣板;和2)記憶體存取820指令樣板之內,其中顯示記憶體存取、暫時的825指令樣板和記憶體存取、非暫時的830指令樣板。在圖8B的B類指令樣板包括:1)無記憶體存取805指令樣板之內,其中顯示無記憶體存取、寫入遮罩控制、部分捨入控制類型運算812指令樣板以及無記憶體存取、寫入遮罩控制、VSIZE類型運算817指令樣板;和2)記憶體存取820指令樣板之內,其中顯示記憶體存取、寫入遮罩控制827指令樣板。
通用向量親和指令格式800包括在圖8A-B顯示下面循序列出的以下欄位。
格式欄位840-在此欄位中的特定值(指令格式識別符值)唯一地識別所述向量親合指令格式,因而在指令流中的向量親合指令格式的指令出現。因此,所述欄位係可選的,因為它不需要僅具有通用向量親合指令格式的指令集。
基底運算欄位842-其內容區分不同的基底運算。
暫存器索引欄位844-其內容,直接或透過位址產生,指定來源和目的地運算元位置,無論是在暫存器或記憶體中。這些包括足夠數目位元以從P×Q個(例如32x512、16x128、32x1024、64x1024)暫存器檔案選擇N個暫存器。雖然在一種實施例中,N可以是多達三個來源和一個目的地暫存器,替代的實施例可支援更多或更少的來源和目的地暫存器(例如,可以支援多達兩個來源,其中這些來源之一也作為目的地、可以支援多達到三個來源,其中這些來源之一也作為目的地、可支援多達兩個來源和一個目的地)。
修飾符欄位846-其內容區分指明記憶體存取與那些不指定記憶體存取的在通用向量指令格式中的指令的出現;也就是說,介於無記憶體存取805指令樣板和記憶體存取820指令樣板之間。記憶體存取運算讀取和/或寫入到記憶體階層(在某些情況下,使用暫存器中的值來指定來源和/或目的地位址),而非記憶體存取運算則不是(例如,來源和目的地係暫存器)。雖然在實施例中此欄位還選擇三種不同的方式來執行記憶體位址計算,替代的實施例可以支援更多、更少或不同的方式來執行記憶體位址計算。
增強運算欄位850-其內容區分以執行除了基本運算之外的各種不同的運算。此欄位係上下文關聯。在本發明的實施例中,所述欄位被分割成類型欄位868、alpha欄位852和beta欄位854。增強運算欄位850允許共同組的運算在單一指令中被執行,而不是用2、3或4個指令來執行。
縮放欄位860-其內容允許用於記憶體位址產生的索引欄位內容縮放(例如,對於位址產生其使用2縮放*索引+基底)。
位移欄位862A-其內容作為記憶體位址產生的一部分(例如,對於位址產生其使用2縮放*索引+基底+位移)。
位移因子欄位862B(注意,位移欄位862A的併列直接超過位移因子欄位862B表示一個或其它被使用)-其內容作為位址產生的一部分;它指定位移因子其透過記憶體存取的大小(N)進行縮放-其中N係記憶體存取中位元組的數目(例如,對於位址產生其使用2縮放*索引+基底+縮放的位移)。冗餘低階位元被忽略,因此,位移因子欄位的內容乘以記憶體運算元總大小(N)產生最終的位移,以使用於計算有效位址。N的值係基於完整運算碼欄位874 (後述)和資料處理欄位854C,由運行時處理器硬體來判斷。位移欄位862A和位移因子欄位862B係可選的,它們不被用於無記憶體存取805指令樣板和/或不同的實施例可能僅實現一個或者兩者都不實現。
資料元寬度欄位864-其內容區分要使用的若干資料元的寬度(在一些實施例中對於所有的指令;在其它實施例中僅一些指令)。此欄位係可選的,並不是必須的,如果只有一個資料元寬度被支援和/或資料元的寬度使用某些態樣的運算碼被支援。
寫入遮罩欄位870-其內容在每個資料元位置基礎上控制,無論在目的地向量運算元中的資料元位置是否反映了基底運算和增強運算的結果。A類指令樣板支援合併遮蔽寫入,而B類指令樣板支援合併遮蔽寫入和歸零遮蔽寫入。當合併時,向量遮罩允許目的地中的任何一組元件在任何運算的執行過程中避免被更新(由基底運算和增強運算指定);在另一實施例中,當對應的遮罩位元為0時,保留在目的地中的每個元件的舊值。與此相反,歸零向量遮罩在任何運算的執行期間,允許目的地中的任何一組元件被歸零(由基底運算和增強運算指定);在一種實施例中,當對應的遮罩位元有一個0值時,目的地的元件被設為0。此功能的子集係控制運算的向量長度被執行的能力(即,元件的跨度被修改,從第一個到最後一個);然而,這不是必要的,被修改的元件係連續的。因此,寫入遮罩欄位870允許局部向量運算,包括載入、儲存、算術、邏輯等。雖然本發明的實施例被描述,其中,寫入遮罩欄位870的內容選擇包含將要使用的寫入遮罩的若干寫入遮罩暫存器其中之一(從而寫入遮罩欄位870的內容間接識別遮罩將被執行),替代實施例中代替或附加允許遮罩寫入欄位870的內容直接指定要執行的遮罩。
立即欄位872-其內容允許直接的規範。此欄位係可選的,它不存在於不支援直接的通用向量親合格式的實現及它不存在於不使用直接的指令。
類型欄位868-其內容區分不同類型的指令。參照圖8A-B,所述欄位的內容在A類和B類的指令之間進行選擇。在圖8A-B中,圓角正方形用於指示存在於欄位中的特定值(例如,類型欄位868在圖8A-B中,分別為A類868A和B類868B)。
A類的指令樣板
在A類的無記憶體存取805指令樣板的情況下,alpha欄位852被解釋為RS欄位852A,其內容區分將被執行的不同增強運算類型之一(例如,捨入852A.1和資料轉換852A.2分別為無記憶體存取、捨入類型運算810和無記憶體存取、資料轉換類型運算815指令樣板指定的),而beta欄位854區分將被執行的指定類型運算。在無記憶體存取805指令樣板中,縮放欄位860、位移欄位862A和位移縮放欄位862B不存在。
無記憶體存取指令樣板-全捨入控制類型運算
在無記憶體存取全捨入控制類型運算810指令樣板,所述beta欄位854被解釋為捨入控制欄位854A,其內容提供靜態捨入。雖然在本發明實施例所述的捨入控制欄位854A包括抑制所有浮點異常(SAE)欄位856和捨入運算控制欄位858,替代的實施例可以支援和/或編碼這兩個概念到相同欄位或只有這些概念/欄位的其中一個或另一個(例如,可以僅具有捨入運算控制欄位858)。
SAE欄位856-其內容區分是否禁用異常事件報告;當SAE欄位856的內容表明抑制為致能,給定的指令沒有報告任何種類的浮點異常旗標並沒有提出任何浮點異常處理程序。
捨入運算控制欄位858-其內容區分一組將要執行的捨入運算其中之一(如向上捨入、向下捨入、朝零捨入以及捨入至最接近的值)。因此,所述捨入運算控制欄位858允許在每個指令基礎上的捨入模式改變。在本發明的實施例中,其中處理器包括用於指定捨入模式的控制暫存器,所述捨入運算控制欄位850的內容覆寫所述暫存器的值。
無記憶體存取指令樣板-資料轉換類型運算
在無記憶體存取資料轉換類型運算815指令樣板、beta欄位854被解釋為資料轉換欄位854B,其內容區分若干將要執行的資料其中之一(例如,沒有資料轉換、混合、播送)。
在A類的記憶體存取820指令樣板的情況下,alpha欄位852被解釋為驅逐隱含欄位852B,其內容區分出將被使用的驅逐隱含其中之一(圖8A中,暫時852B.1和非暫時852B.2用於記憶體存取,分別指定為暫時825指令樣板和記憶體存取、非暫時830指令樣板),beta欄位854被解釋為資料處理欄位854C,其內容區分將被執行的若干資料處理運算(也稱為基元)其中之一(例如,無處理;播送;來源的向上轉變;以及目的地的向下轉變)。記憶體存取820指令樣板包括縮放欄位860,和可選的位移欄位862A或位移縮放欄位862B。
向量記憶體指令具有轉換支援,執行從記憶體載入向量和儲存向量至記憶體。如同利用常規的向量指令,向量記憶體指令以資料元分段方式,傳輸資料從/到記憶體中,實際傳輸的元件係透過被選擇作為寫入遮罩的向量遮罩內容決定。
記憶體存取指令樣板-暫時
暫時資料係可能很快要被再次使用的資料,且能從高速存取中受益。然而,提示以及不同的處理器可以用不同的方式,包括完全無視提示實現它。
記憶體存取指令樣板-非暫時
非暫時資料係不可能很快要被再次使用的資料,且不能從第一階高速存取中受益,且應優先考慮驅逐。然而,提示以及不同的處理器可以用不同的方式,包括完全無視提示實現它。
B類指令樣板
在B類的指令樣板的情況下,alpha欄位852被解釋為寫入遮罩控制(Z)欄位852C,其內容區分由寫入遮罩欄位870控制的寫入遮蔽是否應該為合併或歸零。
在B類中的無記憶體存取805指令樣板的情況下,beta欄位854的一部分被解釋為RL欄位857A,其內容區分將被執行的不同增強運算類型之一(例如,捨入857A.1和向量長度(VSIZE)857A.2分別指定用於無記憶體存取、寫入遮罩控制、部分捨入控制類型運算812指令樣板以及無記憶體存取、寫入遮罩控制、VSIZE類型運算817指令樣板)而beta欄位854的其餘部分區分哪些指定類型的運算將被執行。在無記憶體存取805指令樣板中,縮放欄位860、位移欄位862A和位移縮放欄位862B不存在。
在無記憶體存取中,寫入遮罩控制、部分捨入控制類型運算810指令樣板、beta欄位854的其餘部分被解釋為捨入運算欄位859A且異常事件報告被禁用(給定的指令沒有報告任何類型的浮點異常旗標並且沒有提出任何浮點異常處理程序)。
捨入運算控制欄位859A-如同捨入運算控制欄位858,其內容區分一組用以執行捨入運算的其中之一(如向上捨入、向下捨入、朝零捨入以及捨入至最接近的值)。因此,所述捨入運算控制欄位859A允許在每個指令基礎上的捨入模式改變。在本發明的實施例中,其中處理器包括用於指定捨入模式的控制暫存器,所述捨入運算控制欄位850的內容覆寫所述暫存器的值。
在無記憶體存取、寫入遮罩控制、VSIZE類型運算817指令樣板,beta欄位854的其餘部分被解釋為向量長度欄位859B,其內容區分將要在其上執行的若干資料向量長度其中之一(例如,128、256或512位元組)。
在B類的記憶體存取820指令樣板的情況下,所述beta欄位854的一部分被解釋為廣播欄位857B,其內容區分廣播類型資料處理運算是否將被執行,而在其餘beta欄位854被解釋為向量長度欄位859B。記憶體存取820指令樣板包括縮放欄位860,和可選的位移欄位862A或位移縮放欄位862B。
關於通用向量親合指令格式800,完整運算碼欄位874顯示包括格式欄位840、基底運算欄位842、資料元寬度欄位864。同時實施例顯示其中完整運算碼欄位874包括所有這些欄位,完整運算碼欄位874包括實施例中不支援所有這些欄位的少於所有這些欄位。完整運算碼欄位874提供了運算碼(opcode)。
所述增強運算欄位850、所述資料元寬度欄位864,和寫入遮罩欄位870允許這些特性將在每個指令基礎上以通用向量親和指令格式指定。
寫入遮罩欄位和資料元寬度欄位的組合建立了,允許基於不同資料元寬度施加遮罩的類型指令。
在A類和B類中發現的各種指令樣板有利於不同的情況。在本發明的一些實施例中,不同的處理器或處理器中的不同核心可能僅支援A類、僅B類或同時這兩個類型。例如,高效能的通用亂序核心用於通用計算可能僅支援B類、主要用於圖形和/或科學(生產量)計算的核心可能僅支援A類,以及用於兩者的核心可同時支援(當然,具有來自兩個類型的一些混合樣板及指令而不是來自兩個類型的所有樣板及指令的核心是在本發明的範圍之內)。此外,單一處理器可包括多個核心,所有這些核心都支援相同的類型或其中不同的核心支援不同的類型。例如,在具有獨立的圖形和通用核心的處理器中,主要用於圖形和/或科學計算的圖形核心之一可能僅支援A類,同時一或多個的通用核心可以是具有亂序執行的高效能通用和用於通用計算的暫存器更名,其僅支援B類的核心。不具有獨立的圖形核心的另一個處理器,可包括同時支援A類和B類的一或多個通用循序或亂序核心。當然,來自一個類型的功能,也可以在本發明的不同實施例以其它類型實現。以高階語言寫成的程式將被轉換成(例如,及時編譯或靜態編譯)各種不同的可執行格式,包括:1)具有由用於執行的目的地處理器所支援類型的唯一指令的格式;或2)具有使用所有類型指令的不同組合的替代常式寫入以及具有基於透過當前正在執行編碼的處理器所支援的指令,選擇所述常式來執行的控制流編碼的格式。
示範性特定向量親合指令格式
圖9係顯示根據本發明實施例的示範性特定向量親合指令格式的方塊圖。圖9顯示特定向量親合指令格式900,其特定於指定位置、大小、解釋和欄位的順序,以及用於那些欄位的值。特定向量親合指令格式900可以被用於擴展x86指令集,並且因此某些欄位係相似或相同於那些在現有的x86指令集和其延伸部分(例如,AVX)使用的。此格式保持與前置編碼欄位、真實運算碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位以及現有具有擴展的x86指令集的立即欄位一致。從圖8的欄位映射到圖9的欄位係被顯示。
應當理解的是,儘管本發明的實施例用於說明目的,在通用向量親合指令格式800的上下文中以參照的方式描述特定向量親合指令格式900,但除非聲稱,本發明並不限於特定向量親合指令格式900。例如,通用向量親合指令格式800涵蓋了各種可能大小的各種欄位,而特定向量親合指令格式900被顯示為具有特定大小的欄位。透過具體示例的方式,同時資料元寬度欄位864在特定向量親合指令格式900中係被顯示為一位元欄位,本發明並不如此侷限(即,通用向量親合指令格式800設想資料元寬度欄位864的其它大小)。
通用向量親合指令格式800包括在圖9A所示的下面次序列出的以下欄位。
EVEX前置(位元組0-3)902-以四位元組的格式被編碼。
格式欄位840(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)係格式欄位840,其包含0x62 (在本發明的實施例中用於區分向量親合指令格式的獨特價值)。
第二至四位元組(EVEX位元組1-3)包括提供具體能力的若干位元欄位。
REX欄位905(EVEX位元組1,位元[7-5])-由EVEX.R位元欄位組成(EVEX位元組1,位元[7]-R),EVEX.X位元欄位(EVEX位元組1,位元[6]-X),以及857BEX位元組1,位元[5]-B)。EVEX.R、EVEX.X和EVEX.B位元欄位提供相同的功能的相應VEX位元欄位,並使用1的補數格式編碼,即ZMM0編碼為1111B,ZMM15被編碼為0000B。指令的其它欄位編碼暫存器索引的較低三位元如所述領域已知的(rrr、xxx和bbb),以便Rrrr、Xxxx和Bbbb可透過加入EVEX.R、EVEX.X和EVEX.B形成。
REX'欄位810-這是REX'欄位810的第一部分,且是EVEX.R'位元欄位(EVEX位元組1,位元[4]-R'),其用於編碼擴展32暫存器組的較高16或較低16。在本發明的實施例中,所述位元,連同如下面所示其它的,被儲存在位元反轉格式以與BOUND指令區分(以眾所周知的x86 32位元模式),其真實運算碼位元組是62,但在MOD R/M欄位(在下面描述)中不接受MOD欄位中11的值;本發明的替代實施例不儲存此和其它以下所指示的反轉格式位元。值1用於編碼較低16暫存器。換句話說,R'Rrrr係透過結合EVEX.R'、EVEX.R和其它RRR形成其它欄位。
運算碼映射欄位915(EVEX位元組1,位元[3:0]-mmmm)-其內容編碼隱含主導運算碼位元組(0F,0F 38或0F 3)。
資料元寬度欄位864(EVEX位元組2,位元[7]-W)-由符號EVEX.W.代表。EVEX.W用於定義資料類型的粒度(大小)(32位元資料元或64位元資料元)。
EVEX.vvvv 920(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv的作用可包括以下內容:1)EVEX.vvvv編碼所述第一來源暫存器運算元,指定在反轉(1的補數)格式且對2個或多個來源運算元指令有效;2)EVEX.vvvv編碼所述目的地暫存器運算元,指定某些向量移位為1的補數格式;或3)EVEX.vvvv不編碼任何運算元,所述欄位係保留並且應包含1111b。因此,EVEX.vvvv欄位920編碼以反轉(1的補數)格式儲存的第一來源暫存器說明符的4低序位元。根據指令,額外不同的EVEX位元欄位被用於擴展所述指定符大小至32個暫存器。
EVEX.U 868類型欄位(EVEX位元組2,位元[2]-U)-如果EVEX.U=0,則表明A類或EVEX.U0;如果EVEX.U=1時,則表示B類或EVEX.U1。
前置編碼欄位925(EVEX位元組2,位元[1:0] -pp)-提供了用於基底運算欄位的額外位元。除了對於具有EVEX前置格式的舊有SSE指令提供支援之外,這也有壓縮SIMD前置的好處(而不是需要位元組來表達SIMD前置,所述EVEX前置僅需要2位元)。在一種實施例中,以舊有格式以及用EVEX前置格式兩者,支援使用SIMD前置(66H、F2H、F3H)的舊有SSE指令,這些舊有的SIMD前置被編碼到SIMD前置編碼欄位;並且在運行時在被提供給解碼器的PLA之前,被擴展到舊有的SIMD前置(所以PLA可以既執行舊有指令以及這些舊有指令的EVEX格式而無需修改)。雖然較新的指令可以直接使用EVEX前置編碼欄位的內容作為運算碼的擴展,某些實施例以類似的方式展開以求一致性,但允許透過這些舊有的SIMD前置指定不同的含義。替代實施例可重新設計PLA以支援2位元SIMD前置編碼,並且因此不需要擴展。
alpha欄位852(EVEX位元組3,位元[7]-EH;也稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write遮罩控制以及EVEX.N;還顯示為α)-如先前所描述此欄位係上下文特定的。
beta欄位854(EVEX位元組3,位元[6:4]-SSS,也稱為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;還顯示為βββ)-如先前所描述此欄位係上下文特定的。
REX'欄位810-其為REX'的餘數欄位且是EVEX.V'位元欄位(EVEX位元組3,位元[3]-V')可用於編碼擴展32暫存器組的較高16或較低16。位元以位元反轉格式被儲存。為1的值被用於對較低16個暫存器進行編碼。換句話說,V'VVVV透過組合EVEX.V'、EVEX.vvvv形成。
寫入遮罩欄位870(EVEX位元組3,位元[2:0] -kkk)-其內容指定在如前述的寫入遮罩暫存器中的暫存器的索引。在本發明的實施例中,指定值EVEX.kkk=000具有隱含無寫入遮罩被用於特定指令的特殊行為(其可用各種方式,包括使用寫入遮罩硬連線至繞過所述遮蔽硬體的全部或其一硬體來實現)。
真實運算碼欄位930(位元組4)也被稱為運算碼位元組。運算碼的一部分被指定在所述欄位中。
MOD R/M欄位940(位元組5)包括MOD欄位942、Reg欄位944以及R/M欄位946。如前述,MOD欄位942的內容區分記憶體存取和非記憶體存取運算。Reg欄位944的作用可以概括兩種情況:編碼目的地暫存器運算元或來源暫存器運算元,或被視為運算碼的擴展而不是用來編碼任何指令運算元。R/M欄位946的作用可包括以下內容:編碼參照記憶體位址或編碼目的地暫存器運算元或來源暫存器運算元的指令運算元。
縮放、索引、基底(SIB)位元組(位元組6)-如先前所描述的,縮放欄位860、952的內容被用於記憶體位址產生。SIB.xxx 954和SIB.bbb 956-這些欄位的內容已被預先提及關於暫存器索引Xxxx和Bbbb。
位移欄位862A(位元組7-10)-當MOD欄位942包含10,位元組7-10係位移欄位862A,其運作如同舊有的32位元位移(disp32)且運作在位元組的粒度。
位移因子欄位862B(位元組7)-當MOD欄位942包含01,位元組7係位移因子欄位862B。欄位的位置係與舊有x86指令集8位元位移(disp8)相同,其運作在位元組粒度。由於disp8被符號擴展,其只能在-128和127位元組之間的偏移定址;在64位元組快取記憶體行上,disp8使用可以被設置為僅4個真正有用的值-128、-64、0和64的8位元;由於更大範圍通常需要disp32被使用;然而,disp32需要4個位元組。而相比之下,disp8和disp32,位移因子欄位862B係disp8的重新解釋;當使用位移因子欄位862B時,實際的位移由位移因子欄位的內容乘以的記憶體運算元存取的大小(N)來決定。這種類型的位移稱為disp8*N。這減少平均指令長度(用於位移但具有更大範圍的單一位元組)。這樣緊縮的位移係基於有效位移係多個記憶體存取粒度的假設,因此,位址的冗餘低階位元偏移不需要被編碼。換句話說,位移因子欄位862B替代了舊有的x86指令集的8位元位移。因此,位移因子欄位862B的編碼方式與x86指令集的8位元位移相同(於是ModRM/SIB編碼規則沒有變化)具有disp8過載到disp8*N的唯一例外。換句話說,在編碼規則或編碼長度沒有變化,而只在由硬體解釋的位移值(這需要由記憶體運算元大小縮放所述位移,而獲得逐位元組位址偏移)。立即欄位872如先前所描述進行運算。
完整運算碼欄位
圖9B係顯示根據本發明的一種實施例之構成完整運算碼欄位874的特定向量親合指令格式900的欄位的方塊圖。具體地,完整運算碼欄位874包括格式欄位840、基底運算欄位842以及資料元寬度(W)欄位864。基底運算欄位842包括前置編碼欄位925、運算碼映射欄位915以及真實運算碼欄位930。
暫存器索引欄位
圖9C係根據本發明的一種實施例顯示構成暫存器索引欄位844的特定向量親合指令格式900的欄位的方塊圖。具體來說,暫存器索引欄位844包括REX欄位905、REX'欄位910、MODR/M.reg欄位944、MODR/M.r/m欄位946、VVVV欄位920、xxx欄位954以及bbb欄位956。
增強運算欄位
圖9D係根據本發明的一種實施例顯示構成增強運算欄位850的特定向量親合指令格式900的欄位的方塊圖。當類型(U)欄位868包含0,其表示EVEX.U0(A類868A);當它包含1時,其表示EVEX.U1(B類868B)。當U=0且MOD欄位942包含11(表示無記憶體存取運算),所述alpha欄位852(EVEX位元組3,位元[7]-EH)被解釋為rs欄位852A。當所述rs欄位852A包含1(捨入852A.1),所述beta欄位854(EVEX位元組3,位元[6:4]-SSS)被解釋為捨入控制欄位854A。捨入控制欄位854A包括一位元SAE欄位856和兩位元捨入運算欄位858。當所述rs欄位852A包含0(資料轉換852A.2),所述beta欄位854(EVEX位元組3,位元[6:4]-SSS)被解釋為3位元的資料變換欄位854B。當U=0且MOD欄位942包含00、01或10(表示記憶體存取運算),alpha欄位852(EVEX位元組3,位元[7]-EH)被解釋為驅逐隱含(EH)欄位852B和beta欄位854(EVEX位元組3,位元[6:4]-SSS)被解釋為3位元的資料處理欄位854C。
當U=1,alpha欄位852(EVEX位元組3,位元[7]-EH)被解釋為寫入遮罩控制(Z)欄位852C。當U=1且MOD欄位942包含11(表示無記憶體存取運算),beta欄位854的一部分(EVEX位元組3,位元[4]-S0)被解釋為RL欄位857A;當它包含1(捨入857A.1),所述beta欄位854的其餘部分(EVEX位元組3,位元[6-5]-S2-1)被解釋為捨入運算欄位859A,而當RL欄位857A包含0(VSIZE 857.A2)所述beta欄位854的其餘部分(EVEX位元組3,位元[6-5]-S2-1)被解釋為向量長度欄位859B(EVEX位元組3,位元[6-5]-L1-0)。當U=1且MOD欄位942包含00、01或10(表示記憶體存取運算),beta欄位854(EVEX位元組3,位元[6:4]-SSS)被解釋為向量長度欄位859B (EVEX位元組3,位元[6-5]-L1-0)和廣播欄位857B(EVEX位元組3,位元[4]-B)。
示範的暫存器架構
圖10係根據本發明的一種實施例的暫存器架構1000的方塊圖。在所示實施例中,有32個512位元寬的向量暫存器1010;這些暫存器被參照為zmm0至zmm31。較低16 zmm暫存器的低階256位元覆蓋在暫存器ymm0-16。較低16 zmm暫存器的低階128位元(ymm暫存器的低階128位元)覆蓋在暫存器xmm0-15。特定向量親合指令格式900對這些覆蓋的暫存器檔案進行如下表中顯示的運算。
換句話說,向量長度欄位859B選擇介於最大長度和一或多個其它較短長度,其中每個這樣的較短長度係前長度的一半長度;以及沒有向量長度欄位859B的指令樣板以最大向量長度運算。此外,在一種實施例中,特定向量親合指令格式900的B類指令樣板運算於緊縮或純量單/雙精確度浮點資料和緊縮或純量整數資料。純量運算係在zmm/ymm/xmm暫存器中最低階的資料元位置進行運算;較高階資料元位置係與左邊的相同,因為他們是在之前的指令或取決於實施例歸零。
寫入遮罩暫存器1015-在所示實施例中,有8個寫入遮罩暫存器(k0至k7),各為64位元的大小。在替代實施例中,寫入遮罩暫存器1015係16位元的大小。如先前所描述的,在本發明的一種實施例中,向量遮罩暫存器k0不能用來作為寫入遮罩;當將通常會指示k0編碼用於寫入遮罩時,其選擇0xFFFF的硬連線寫入遮罩,有效地禁用寫入遮罩用於所述指令。
通用暫存器1025-在所示實施例中,有16個 64位元通用暫存器,其被用來連同現有的x86定址模式來定址記憶體運算元。這些暫存器透過名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15被參照。
純量浮點堆疊暫存器檔案(x87堆疊)1045,在其上化名MMX緊縮整數平面暫存器檔案1050-在所示實施例中,所述x87堆疊係用於執行在使用x87指令集擴充的32/64/80位元浮點資料之上的純量浮點運算的八元件堆疊;而MMX暫存器被用來執行在64位元緊縮整數資料的運算,以及保持用於在MMX和XMM暫存器之間執行的若干運算的運算元。
本發明的替代實施例可使用更寬或更窄的暫存器。另外,本發明的替代實施例可使用更多、更少或不同的暫存器檔案和暫存器。
示範的核心架構、處理器和電腦架構
處理器核心可以用不同的方式來實現,用於不同的目的,以及在不同的處理器。例如,這種核心的實現可以包括:1)用於一般用途計算的一般用途循序核心;2)用於一般用途計算的高效能的一般用途亂序核心;3)主要用於圖形和/或科學(生產量)計算的特殊用途核心。不同處理器的實現方式可以包括:1)中央處理器包括一或多個用於一般用途計算的一般用途循序核心和/或一或多個用於一般用途計算的一般用途亂序核心;和2)協同處理器包括一或多個主要用於圖形和/或科學(生產量)的特殊用途核心。這樣不同的處理器導致不同的電腦系統架構,其可包括:1)在從中央處理器獨立的晶片上的協同處理器;2)在與中央處理器相同封裝的獨立晶粒上的協同處理器;3)在與中央處理器相同晶粒上的協同處理器(在此情況下,這樣一個協同處理器時有時被稱為特殊用途邏輯,諸如積體圖形和/或科學(生產量)邏輯,或者作為特殊用途核心);及4)系統單晶片,其可以在同一晶粒包括所述中央處理器(有時被稱為應用核心或應用處理器)、上述協同處理器以及額外的功能。示範性的核心架構將接著描述,再接著示範性的處理器和電腦架構的描述。
循序和亂序核心方塊圖
圖11A是顯示根據本發明的實施例的示範性的循序管線和示範性的暫存器重命名、亂序發送/執行管線的方塊圖。圖11B是顯示根據本發明的實施例的循序架構核心和示範性的暫存器重命名、被包括在處理器中的亂序發送/執行架構核心的方塊圖。在圖11A-B中的實線框顯示所述循序管線和循序核心,而可選的加入虛線框顯示暫存器重命名、亂序發送/執行管線和核心。鑑於所述循序態樣是所述亂序態樣的一個子集,將進行說明所述亂序態樣。
在圖11A中,處理器管線1100包括提取階段1102、長度解碼階段1104、解碼階段1106、分配階段1108、重命名階段1110、排程(也稱為調度或發送)階段1112、暫存器讀取/記憶體讀取階段1114、執行階段1116、回寫/記憶體寫入階段1118、異常處理階段1122和提交階段1124。
圖11B顯示了包括耦接到執行引擎單元1150的前端單元1130和皆耦接到記憶體單元1170的處理器核心1190。核心1190可以是精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、超長指令字組(VLIW)核心、或混合的或替代的核心類型。作為另一種選擇,核心1190可以是特殊用途的核心,例如,如網路或通訊核心、壓縮引擎、協同處理器核心、通用計算圖形處理單元(GPGPU)核心、圖形核心或類似物。
前端單元1130包括耦接到指令快取記憶體單元1134的分支預測單元1132,其耦接到指令轉譯後備緩衝區(TLB)1136,其耦接到指令提取單元1138,其耦接到解碼單元1140。解碼單元1140(或解碼器)可以解碼指令並產生作為輸出的一或多個微運算、微編碼登錄點、微指令、其它指令或其它控制信號,其從所述原始指令解碼,或反映所述原始指令或源自所述原始指令。解碼單元1140可使用各種不同的機制來實現。合適機制的例子包括但不限於查找表、硬體實現、可程式邏輯陣列(PLA)、微編碼唯讀記憶體(ROM)等。在一種實施例中,所述核心1190包括微編碼ROM或其它媒體,其儲存用於某些巨集指令的微編碼(例如,在解碼單元1140或在前端單元1130)。解碼單元1140被耦接到在執行引擎單元1150中的重命名/分配器單元1152。
執行引擎單元1150包括耦接到失效單元1154和一組一或多個排程器單元1156的重命名/分配器單元1152。排程器單元1156表示任何數目的不同排程器,包括保留站、中央指令窗口等。排程器單元1156係耦接到實體暫存器檔案單元1158。各實體暫存器檔案單元1158代表一或多個實體暫存器檔案,其中不同的實體暫存器檔案儲存一或多個不同的資料類型,如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,指令指標是下一個將被執行指令的位址)等。在一種實施例中,實體暫存器檔案單元1158包括向量暫存器單元、寫入遮罩暫存器單元和純量暫存器單元。這些暫存器單元可以提供架構向量暫存器、向量遮罩暫存器和一般用途暫存器。實體暫存器檔案單元1158被失效單元1154重疊以說明暫存器重命名和亂序執行可以被實現的各種方式(例如,利用重排序緩衝器和失效暫存器檔案;利用未來檔案、歷史緩衝器和失效暫存器檔案;利用暫存器映射和暫存器池;等)。失效單元1154和實體暫存器檔案單元1158耦接到執行群集1160,執行群集1160包括一組一或多個執行單元1162和一組一或多個記憶體存取單元1164。執行單元1162可以執行各種運算(例如,移位、加、減、乘)且對於不同類型的資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。而一些實施例可以包括專用於特定功能或功能組的若干執行單元,其它實施例可僅包括一個執行單元或皆執行所有功能的複數執行單元。排程器單元1156、實體暫存器檔案單元1158及執行群集1160顯示可能為複數,因為某些實施例中對某些類型的資料/運算建立單獨的管線(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線和/或記憶體存取管線,其各自具有排程器單元、實體暫存器檔案單元和/或執行群集,並在一個單獨的記憶體存取管線的情況下,某些實施例中被實現,其中只有所述管線的執行群集具有記憶體存取單元1164)。還應該理解的是,其中單獨的管線被使用,一或多個這些管線可以是亂序發送/執行而其餘是循序的。
所述組記憶體存取單元1164耦接到記憶體單元1170,其包括耦接到資料快取記憶體單元1174的資料轉譯後備緩衝區單元1172,資料快取記憶體單元1174耦接到第2階(L2)快取記憶體單元1176。在一個示範性的實施例中,記憶體存取單元1164可以包括負載單元、儲存位址單元和儲存資料單元,其中各耦接到在記憶體單元1170中的資料轉譯後備緩衝區單元1172。指令快取記憶體單元1134更耦接到在記憶體單元1170中的第2階(L2)快取記憶體單元1176,L2快取記憶體單元1176耦接到一或多個其它階層的快取記憶體且最後到主記憶體。
舉例而言,示範性的暫存器重命名、亂序發送/執行核心架構可實現所述管線1100如下:1)所述指令提取1138執行提取與長度解碼階段1102和1104;2)所述解碼單元1140執行解碼階段1106;3)所述重命名/分配器單元1152執行所述分配階段1108和重命名階段1110;4)所述排程器單元1156執行所述排程階段1112;5)所述實體暫存器檔案單元1158和所述記憶體單元1170執行所述暫存器讀取/記憶體讀取階段1114;所述執行群集1160執行所述執行階段1116;6)所述記憶體單元1170和所述實體暫存器檔案單元1158執行所述回寫/記憶體寫入階段1118;7)各種單元可能參與所述異常處理階段1122;8)所述失效單元1154和所述實體暫存器檔案單元1158執行提交階段1124。
核心1190可以支援一或多個指令集(例如,x86指令集(具有新版本已經加入的一些擴充);加州桑尼維爾的MIPS科技的MIPS指令集;加州桑尼維爾的ARM控股的ARM指令集(具有可選的如NEON額外擴充),其包括本文所述的指令。在一種實施例中,核心1190包括支援緊縮資料指令集擴充(例如,AVX1、AVX2)的邏輯,由此容許被使用緊縮資料執行的多數多媒體應用程式使用的運算。
應當理解的是,所述核心可以支援多執行緒(執行兩個以上平行運算集或執行緒),並且可用多種方式這樣做,其包括分時多執行緒、同步多執行緒(其中單一實體核心為實體核心為同步多執行緒的各執行緒提供邏輯核心),或者其組合(例如,分時提取和解碼和此後的同步多執行緒,如英特爾®
超執行緒技術)。
而暫存器重命名是在亂序執行的內容中描述,應當理解的是,暫存器重命名可以被使用在循序架構中。儘管所示的處理器的實施例還包括分離指令和資料快取記憶體單元1134/1174和共享L2快取記憶體單元1176,可替換實施例可以具有用於指令和資料兩者的單一內部快取記憶體,例如,如第1階(L1)內部快取記憶體,或多階內部快取記憶體。在一些實施例中,所述系統可以包括內部快取記憶體和所述核心和/或所述處理器外部的外部快取記憶體的組合。可替代地,所有的快取記憶體可以是在核心和/或處理器之外部。
具體示範性的循序核心架構
圖12A-B顯示循序核心架構更具體示例的方塊圖,其核心將是在晶片中數個邏輯方塊之一(包括相同類型和/或不同類型的其它核心)。邏輯方塊透過高頻寬互連網路(例如,環形網路)與某些固定功能邏輯、記憶體I/O介面和其它取決於應用必要的I/O邏輯通訊。
圖12A是根據本發明的實施例的單一處理器核心,連同其連接到晶粒上的互連網路1202與其第2階(L2)快取記憶體的區域子集1204的方塊圖。在一種實施例中,指令解碼器1200支援具有緊縮資料指令集擴充的x86指令集。L1快取記憶體1206容許低延遲時間存取快取記憶體內純量和向量單元。雖然在一種實施例中(為了簡化設計),純量單元1208和向量單元1210使用單獨的暫存器組(分別為純量暫存器1212和向量暫存器1214)和在它們之間傳輸的資料被寫入到記憶體中,然後從第1階(L1)快取記憶體1206讀回,本發明的替代實施例可使用不同的方法(例如,使用單一暫存器組或包括容許資料在兩個暫存器檔案之間傳送而不會被寫入和讀回的通訊路徑)。
L2快取記憶體的區域子集1204是整體L2快取記憶體的一部分,其被分割成單獨的區域子集(各處理器核心一個)。各處理器核心具有至它自己的L2快取記憶體的區域子集1204的直接存取路徑。被處理器核心讀取的資料被儲存在其L2快取記憶體子集1204中,並且可以迅速地被存取,平行地與其它處理器核心存取他們自己的區域L2快取記憶體子集。被處理器核心寫入的資料被儲存在它自己的L2快取記憶體子集1204且如果需要的話將從其它子集被清除。環形網路確保共享資料的一致性。環形網路是雙向的以容許代理,如處理器核心、L2快取記憶體和其它邏輯方塊在所述晶片內彼此通訊。各環形資料路徑是每個方向1012位元寬。
圖12B是根據本發明實施例,圖12A中所述處理器核心的一部分的展開圖。圖12B包括所述L1快取記憶體1204的L1資料快取記憶體1206A部分,以及更詳細的有關所述向量單元1210和所述向量暫存器1214。具體地,所述向量單元1210是16位元寬向量處理單元(VPU)(見16位元寬ALU 1228),其執行一或多個整數、單精度浮點和雙精度浮點指令。VPU支援以混合單元1220混合暫存器輸入、以數值轉換單元1222A-B進行數值轉換,並且以複製單元1224對於記憶體輸入進行複製。寫入遮罩暫存器1226容許預測結果向量寫入。
圖13係根據本發明的實施例可具有一或多個核心、可具有積體記憶體控制器且可具有積體圖形的處理器1300的方塊圖。圖13中的實線框顯示了處理器1300具有單一核心1302A(和對應的快取記憶體單元1304A)、系統代理1310、一組一或多個匯流排控制器單元1316,而可選的加入虛線框顯示了具有多個核心1302A-N的替代處理器1300(和對應的快取記憶體單元1304A-N)、系統代理單元1310中的一組一或多個積體記憶體控制單元1314以及特殊用途邏輯1308。
因此,所述處理器1300的不同實現可以包括:1)中央處理器,其具有特殊用途邏輯1308其為積體圖形和/或科學(生產量)邏輯(其可以包括一或多個核心)以及核心1302A-N是一或多個通用核心(例如,通用循序核心、通用亂序核心、這兩者的組合);2)協同處理器,其具有主要用於圖形和/或科學(生產量)的大量特殊用途核心的核心1302A-N;和3)協同處理器,其具有大量通用循序核心的核心1302A-N。因此,所述處理器1300可以是通用處理器、協同處理器或特殊用途處理器,例如,如網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高生產量多積體核心(MIC)協同處理器(包括30個或更多的核心)、嵌入式處理器或類似物。處理器可以在一或多個晶片上被實現。處理器1300可以為使用任意數量的製程技術(例如,如BiCMOS、CMOS或NMOS)的一或多個基板的一部分和/或可以在所述基板上實現。
所述記憶體階層包括在所述核心內的一或多個階層的快取記憶體、一組或一或多個共享快取記憶體單元1306和耦接到一組積體記憶體控制器單元1314的外部記憶體(未圖示)。所述組共享快取記憶體單元1306可以包括一或多個中間階層快取記憶體,諸如第2階(L2)、第3階(L3)、第4階(L4)或其它階層的快取記憶體、末階快取記憶體(LLC)和/或其組合。雖然在一種實施例中,環型互連單元1312將所述積體圖形邏輯1308、所述組共享快取記憶體單元1306以及所述系統代理單元1310/積體記憶體控制器單元1314互連,可選的實施例可使用任何數量的眾所皆知的技術來將這些單元互連。在一種實施例中,一致性在一個或一或多個快取記憶體單元1306和核心1302A-N之間被維持。
在一些實施例中,一或多個核心1302A-N能夠多緒執行。系統代理1310包括這些協調和操作核心1302A-N的元件。系統代理單元1310可以包括例如功率控制單元(PCU)和顯示單元。PCU可以是或包括需要調節核心1302A-N和所述積體圖形邏輯1308的功率狀態的邏輯和元件,所述顯示單元是用於驅動一或多個外部連接顯示器。
所述核心1302A-N可以是就架構指令集而言是同質或異質;即兩個以上的核心1302A-N可以能夠執行相同的指令集,而其它可能只能夠執行所述指令集的一個子集或不同的指令集。
示範性的電腦架構
圖14-17是示範性的電腦架構的方塊圖。在本領域已知的其它系統設計和組態為筆記型電腦、桌上電腦、手持電腦、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換機、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、視訊遊戲裝置、機上盒、微控制器、蜂巢式電話、可攜式媒體播放器、手持裝置以及各種其它電子裝置,也是適用的。在一般情況下,能夠結合如本文所揭露的處理器和/或其它執行邏輯的各種各樣的系統或電子裝置通常是適用的。
現在參照圖14,其顯示根據本發明一種實施例的系統1400的方塊圖。系統1400可以包括一或多個處理器1410、1415,其耦接到控制器集線器1420。在一種實施例中,所述控制器集線器1420包括圖形記憶體控制器集線器(GMCH)1490和輸入/輸出集線器(IOH)1450(其可能是在單獨的晶片上);所述GMCH 1490包括記憶體和耦接到記憶體1440和協同處理器1445的圖形控制器;所述IOH 1450係耦接輸入/輸出(I/O)裝置1460到所述GMCH 1490。可替換地,所述記憶體和圖形控制器之一或兩者都整合在處理器內(如本文所述),所述記憶體1440和所述協同處理器1445直接耦接到所述處理器1410以及所述控制器集線器1420在具有所述IOH 1450的單一晶片中。
額外的處理器1415的可選性質在圖14中以虛線表示。各處理器1410、1415可以包括一或多個在此描述的處理核心且可以是所述處理器1300的一些版本。
所述記憶體1440可以例如是,動態隨機存取記憶體(DRAM)、相變記憶體(PCM),或者是兩者的組合。至少一種實施例中,所述控制器集線器1420與所述處理器1410、1415經由多點匯流排,諸如前端匯流排(FSB)、點對點介面,諸如快速路徑互連(QPI)或類似的連接1495通訊。
在一種實施例中,協同處理器1445是特殊用途處理器,例如,如高生產量的MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器或類似物。在一種實施例中,控制器集線器1420可以包括積體圖形加速器。
就包括架構、微架構、熱力,功率消耗特性等指標的指標度量的範圍而言,所述實體資源1410、1415之間可以有各種的差異。
在一種實施例中,所述處理器1410執行控制一般類型的資料處理運算的指令。嵌入所述指令的可能是協同處理器指令。處理器1410識別應該由附加的協同處理器1445執行的類型的這些協同處理器指令。於是所述處理器1410在協同處理器匯流排或其它互連上發出這些協同處理器指令(或表示協同處理器指令的控制信號)至協同處理器1445。協同處理器1445接受並執行接收到的所述協同處理器指令。
現在參照圖15,其顯示的是根據本發明的實施例的第一更具體的示範性系統1500的方塊圖。如圖15所示,多處理器系統1500是點對點互連系統,並且包括經由點對點互連1550耦接的第一處理器1570和第二處理器1580,處理器1570和1580各自可以是處理器1300的一些版本。在本發明的一種實施例中,處理器1570和1580分別為處理器1410和1415,而協同處理器1538為協同處理器1445,在另一實施例中,處理器1570和1580分別為處理器1410和協同處理器1445。
處理器1570和1580被顯示為分別包括積體記憶體控制器(IMC)單元1572和1582。處理器1570還包括作為其匯流排控制器單元點對點(P-P)介面1576和1578的一部分;類似地,第二處理器1580包括P-P介面1586和1588。處理器1570、1580可以利用P-P介面電路1578、1588經由點對點(P-P)界面1550交換資訊。如圖15所示,IMCs 1572和1582耦接所述處理器到各自的記憶體,即記憶體1532和記憶體1534,其可以是區域地附加到各自的處理器的主記憶體的部分。
處理器1570、1580可以各自利用點對點介面電路1576、1594、1586、1598經由個別的點對點介面1552、1554與晶片組1590交換資訊。晶片組1590可以選擇性地經由高效能介面1592、1539與所述協同處理器1538交換資訊。在一種實施例中,所述協同處理器1538是特殊用途處理器,例如,如高生產量的MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器或類似物。
共享快取記憶體(未圖示)可以包括在任一個處理器內或兩個處理器的外部,但經由P-P互連與所述處理器連接,使得如果處理器被置入低功率模式時,任一個或兩個處理器的區域快取記憶體的資訊可被儲存在共享快取記憶體中。
晶片組1590可以經由介面1596耦接到第一匯流排1516。在一種實施例中,第一匯流排1516可以是周邊元件互連(PCI)匯流排,或諸如快速週邊組件互連(PCI Express)匯流排或另一種第三代I/O互連匯流排的匯流排,儘管本發明的範圍並不如此侷限。
如圖15所示,各種I/O裝置1514可以耦接到第一匯流排1516,連同耦接第一匯流排1516的匯流排橋1518到第二匯流排1520。在一種實施例中,一或多個額外處理器1515,諸如協同處理器、高生產量的MIC處理器、GPGPU的、加速器(例如,如圖形加速器或數位信號處理(DSP)單元)、場效可程式化邏輯陣列或任何其它的處理器,耦接到第一匯流排1516。在一種實施例中,第二匯流排1520可以是低接腳數(LPC)匯流排。在一種實施例中,各種裝置可以耦接到第二匯流排1520包括,例如鍵盤和/或滑鼠1522、通訊裝置1527和儲存單元1528,如磁碟機或其它大容量儲存裝置,其可以包括指令/編碼和資料1530,在一實施例中。此外,音訊I/O 1524可耦接到所述第二匯流排1520。須注意的是,其它架構也是可能的。例如,代替圖15的點對點架構,系統可以實現多點匯流排或其它這種架構。
現在參照圖16,顯示根據本發明實施例的第二更具體的示範性系統1600的方塊圖。在圖15和圖16中相似的元件具有相似的參考符號,圖15的某些態樣已經從圖16中被刪去,以避免模糊圖16的其它態樣。
圖16顯示所述處理器1570、1580可以分別包括積體記憶體和I/O控制邏輯(「CL」)1572和1582。因此,所述CL 1572、1582包括積體記憶體控制器單元且包括I/O控制邏輯。圖16顯示,不僅是所述記憶體1532、1534耦接到所述CL 1572、1582,I/O裝置1614也耦接到控制邏輯1572、1582。舊有I/O裝置1615耦接到晶片組1590。
現在參照圖17,顯示根據本發明實施例的系統晶片1700的方塊圖。在圖13中相似的元件具有相似的參考符號。另外,虛線框是更進階的系統晶片上的可選特性。在圖17中,互連單元1702被耦接到:應用處理器1710,其包括一組一或多個核心202A-N和共享快取記憶體單元1306;系統代理單元1310;匯流排控制器單元1316;積體記憶體控制器單元1314;一組或一或多個協同處理器1720其可包括積體圖形邏輯、圖像處理器、音訊處理器和視訊處理器;靜態隨機存取記憶體(SRAM)單元1730;直接記憶體存取(DMA)單元1732;及用於耦接到一或多個外部顯示器的顯示單元1740。在一種實施例中,所述協同處理器1720包括特殊用途處理器,例如,如網路或通訊處理器、壓縮引擎、GPGPU、高生產量MIC處理器、嵌入式處理器或類似物。
本文揭露的機制的實施例可以用硬體、軟體、韌體或這些實現方式的組合來實現。本發明的實施例可以被實現為電腦程式或在包括至少一個處理器、儲存系統(包括揮發性和非揮發性記憶體和/或儲存元件)、至少一個輸入裝置以及至少一個輸出裝置的可程式化系統上執行的程式編碼。
程式編碼,諸如在圖15所顯示的編碼1530,可以應用到輸入指令,以執行本文所述的功能並產生輸出資訊。輸出資訊可以用已知的方式應用於一或多個輸出裝置。針對本申請的目的,處理系統包括具有處理器的任何系統,例如,如數位信號處理器(DSP)、微控制器、特殊用途積體電路(ASIC)或微處理器。
所述程式編碼可以用高階程序或物件導向程式語言來實現,以與處理系統進行通訊。如果需要的話,所述程式編碼還可以用組合或機器語言來實現。事實上,本文中描述的機制並不限於在任何特定的程式語言的範圍。在任何情況下,所述語言可以已編譯或已直譯的語言。
至少一種實施例中的一或多個態樣可以由儲存在代表處理器中各種邏輯的機器可讀媒體上的代表性指令被實現,其中,當由機器讀取,使所述機器製造邏輯以執行本文所描述的技術。這樣的表示,被稱為「IP核心」可以被儲存在實體的機器可讀媒體並且供給到各種客戶或生產設施以加載到實際上構成所述邏輯或處理器的製造機器。
這樣的機器可讀儲存媒體可以包括(但不限於)由機器或裝置製造或形成的物件的非暫態的、實體的安排,包括儲存媒體,諸如硬碟、任何其它類型的磁碟包括軟碟、光碟、唯讀光碟(CD-ROM)、可抹寫光碟(CD-RW)和光磁碟、半導體裝置,諸如唯讀記憶體(ROM)、隨機存取記憶體(RAM),如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可程式化唯讀記憶體(EPROM)、快閃記憶體、電子可抹除可程式化唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁卡或光卡,或者任何其它適於儲存電子指令的媒體類型。
因此,本發明的實施例還包括非暫態的、實體的機器可讀媒體,其包含指令或包含設計資料,如硬體描述語言(HDL),其定義本文中所述的架構、電路、裝置,處理器和/或系統特徵。此類實施例也可以關於程式產品。
仿真(包括二進制轉譯、編碼變形等)
在某些情況下,指令轉換器可用於將指令從來源指令集轉換至目標指令集。例如,所述指令轉換器可以轉譯(例如,使用靜態二進制轉譯、包括動態編譯的動態二進制轉譯)、變形、模擬或轉換指令至一或多個由核心處理的其它指令。指令轉換器可以用軟體、硬體、韌體或其組合來實現。指令轉換器可以是在處理器上、不在處理器上或部分在處理器上和部分不在處理器上。
圖18是根據本發明實施例對比用以將來源指令集中的二進制指令轉換至目標指令集中的二進制指令的軟體指令轉換器的使用的方塊圖。在所示實施例中,所述指令轉換器是軟體指令轉換器,雖然可替代地,所述指令轉換器可以用軟體、韌體、硬體或其各種組合來實現。圖18顯示高階語言1802的程式可以使用x86編譯器1804被編譯,以產生x86的二進制編碼1806,其可被具有至少一個x86指令集核心的處理器1816本機地執行。所述具有至少一個x86指令集核心的處理器1816代表任何處理器,其可透過相容地執行或處理(1)英特爾x86指令集核心的指令集的重要部分或(2)應用程式的目標編碼版本或目標為在具有至少一個x86指令集核心的英特爾處理器上運行的其它軟體,執行如具有至少一個x86指令集核心的英特爾處理器大致上相同的功能,以實現如具有至少一個x86指令集核心的英特爾處理器大致上相同的結果。x86編譯器1804代表可運算以產生x86二進制編碼1806(例如,目標碼)的編譯器,其可具有或不具有額外的關聯處理,在具有至少一個x86指令集核心的處理器1816上執行。類似地,圖18顯示高階語言1802中的程式可以使用替代指令集編譯器1808被編譯,以產生替代性的指令集二進制編碼1810,其可由不具有至少一個x86指令集核心的處理器1814本機地執行(例如,具有執行加州桑尼維爾的MIPS科技的MIPS指令集和/或執行加州桑尼維爾的ARM控股公司的ARM指令集的核心的處理器)。指令轉換器1812被用來將所述x86二進制編碼1806轉換至可由不具有x86指令集核心的處理器1814本機地執行的編碼。這種轉換後的編碼不太可能與所述替代指令集二進制編碼1810一樣,因為能夠這樣的指令轉換器很難製造;然而,所述轉換後的編碼將完成一般運算並組成來自替代指令集的指令。因此,所述指令轉換器1812代表軟體、韌體、硬體或其組合,透過仿真、模擬或任何其它程序,容許處理器或其它不具有x86指令集的處理器或核心的電子裝置來執行x86二進制編碼1806。
本領域技術人員可以確定許多其它改變、替換、變化、變更和修改,並且本發明意於涵蓋落入所附請求項的範圍內的所有此類改變、替換、變化、變更和修改。範例實現
以下範例涉及貫穿本發明描述的實施例。
一或多個實施例可以包含一種矩陣處理器,包含:記憶體,用於儲存矩陣運算元和跨步讀取序列,其中:所述矩陣運算元係在所述記憶體中亂序儲存;以及所述跨步讀取序列包含讀取操作的序列,以從所述記憶體以正確的順序讀取所述矩陣運算元;控制電路,用以接收將要由所述矩陣處理器執行的第一指令,其中所述第一指令係用以指示所述矩陣處理器對所述矩陣運算元執行第一操作;讀取電路,用以基於所述跨步讀取序列從所述記憶體讀取所述矩陣運算元;以及執行電路,用以透過對所述矩陣運算元執行所述第一操作來執行所述第一指令。
在矩陣處理器的一個範例實施例中,所述讀取操作的序列包含下列中的一或多者:跨步讀取操作,用以在跨步記憶體位址讀取所述記憶體,其中所述跨步記憶體位址與前一個記憶體位址偏移一跨步偏移;或者帶狀讀取操作,用以在所述前一個記憶體位址之後的一或多個序向記憶體位址處讀取所述記憶體。
在矩陣處理器的一個範例實施例中,用以基於所述跨步讀取序列從所述記憶體讀取所述矩陣運算元的所述讀取電路還包含:透過讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元,其中:讀取操作的每次迭代都從所述記憶體的對應起始記憶體位址開始;所述跨步讀取序列至少部分地在讀取操作的每次迭代中執行;以及在所述讀取操作的複數個迭代之間,所述對應起始記憶體位址增加一超跨步偏移。
在矩陣處理器的一個範例實施例中,用以透過所述讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元的所述讀取電路還用以:連續地執行所述讀取操作的複數個迭代,直到預定數目的讀取操作已被執行。
在矩陣處理器的一個範例實施例中:所述控制電路還用以接收將要由所述矩陣處理器執行的第二指令,其中:所述第二指令將在所述第一指令之前接收;以及所述第二指令係用以指示所述矩陣處理器為所述矩陣運算元暫存一識別符,其中所述識別符將基於指示所述矩陣運算元在所述記憶體中的記憶體佔用量的一或多個參數進行暫存,以及其中所述識別符係用以使在後續指令中要識別的所述矩陣運算元致能;以及所述第一指令包含指示所述矩陣運算元的所述識別符的第一參數。
在矩陣處理器的一個範例實施例中,所述控制電路還用以接收要由所述矩陣處理器執行的第二指令,其中所述第二指令將在所述第一指令之前被接收,以及其中所述第二指令係用以指示所述矩陣處理器將所述跨步讀取序列程式化到所述記憶體中。
在矩陣處理器的一個範例實施例中:所述矩陣運算元包含以第一順序排列的複數個維度;所述複數個維度係以不同於所述第一順序的第二順序在所述記憶體中排列;以及所述跨步讀取序列係程式化以執行維度混洗操作,以將所述複數個維度從所述第二順序重新排列為所述第一順序。
在矩陣處理器的一個範例實施例中:在所述記憶體中,所述矩陣運算元係儲存在複數個非連續記憶體位址;以及所述跨步讀取序列係程式化以執行切片操作,以從所述記憶體提取在所述複數個非連續記憶體位址的所述矩陣運算元。
在矩陣處理器的一個範例實施例中,所述記憶體包含:第一記憶體,用以儲存所述矩陣運算元;以及第二記憶體,用以儲存所述跨步讀取序列。
一或多個實施例可以包含至少一種其上儲存有指令的非暫態機器可存取儲存媒體,其中當所述指令在機器上執行時,使所述機器用以:接收將要由矩陣處理器執行的第一指令,其中所述第一指令係用以指示所述矩陣處理器對矩陣運算元執行第一操作,其中所述矩陣運算元係在所述矩陣處理器的記憶體中亂序儲存;存取儲存在所述記憶體中的跨步讀取序列,其中所述跨步讀取序列包含讀取操作的序列,以從所述記憶體以正確的順序讀取所述矩陣運算元;基於所述跨步讀取序列從所述記憶體讀取所述矩陣運算元;以及使所述第一指令由所述矩陣處理器執行,其中透過對所述矩陣運算元執行所述第一操作來執行所述第一指令。
在儲存媒體的一個範例實施例中,所述讀取操作的序列包含下列中的一或多者:跨步讀取操作,用以在跨步記憶體位址讀取所述記憶體,其中所述跨步記憶體位址與前一個記憶體位址偏移一跨步偏移;或者帶狀讀取操作,用以在所述前一個記憶體位址之後的一或多個序向記憶體位址處讀取所述記憶體。
在儲存媒體的一個範例實施例中,致使所述機器基於所述跨步讀取序列從所述記憶體讀取所述矩陣運算元的所述指令還致使所述機器用以:透過讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元,其中:讀取操作的每次迭代都從所述記憶體的對應起始記憶體位址開始;所述跨步讀取序列至少部分地在讀取操作的每次迭代中執行;以及在所述讀取操作的複數個迭代之間,所述對應起始記憶體位址增加一超跨步偏移。
在儲存媒體的一個範例實施例中,致使所述機器透過讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元的所述指令還致使所述機器用以:連續地執行所述讀取操作的複數個迭代,直到預定數目的讀取操作已被執行。
在儲存媒體的一個範例實施例中:所述指令還致使所述機器接收將要由所述矩陣處理器執行的第二指令,其中:所述第二指令將在所述第一指令之前接收;以及所述第二指令係用以指示所述矩陣處理器為所述矩陣運算元暫存一識別符,其中所述識別符將基於指示所述矩陣運算元在所述記憶體中的記憶體佔用量的一或多個參數進行暫存,以及其中所述識別符係用以使在後續指令中要識別的所述矩陣運算元致能;以及所述第一指令包含指示所述矩陣運算元的所述識別符的第一參數。
在儲存媒體的一個範例實施例中,所述指令還致使所述機器接收要由所述矩陣處理器執行的第二指令,其中所述第二指令將在所述第一指令之前被接收,以及其中所述第二指令係用以指示所述矩陣處理器將所述跨步讀取序列程式化到所述記憶體中。
在儲存媒體的一個範例實施例中:所述矩陣運算元包含以第一順序排列的複數個維度;所述複數個維度係以不同於所述第一順序的第二順序在所述記憶體中排列;以及所述跨步讀取序列係程式化以執行維度混洗操作,以將所述複數個維度從所述第二順序重新排列為所述第一順序。
在儲存媒體的一個範例實施例中:在所述記憶體中,所述矩陣運算元係儲存在複數個非連續記憶體位址;以及所述跨步讀取序列係程式化以執行切片操作,以從所述記憶體提取在所述複數個非連續記憶體位址的所述矩陣運算元。
在儲存媒體的一個範例實施例中,所述記憶體包含:第一記憶體,用以儲存所述矩陣運算元;以及第二記憶體,用以儲存所述跨步讀取序列。
一或多個實施例可以包含一種方法,包含:接收將要由矩陣處理器執行的第一指令,其中所述第一指令係用以指示所述矩陣處理器對矩陣運算元執行第一操作,其中所述矩陣運算元係在所述矩陣處理器的記憶體中亂序儲存;存取儲存在所述記憶體中的跨步讀取序列,其中所述跨步讀取序列包含讀取操作的序列,以從所述記憶體以正確的順序讀取所述矩陣運算元;基於所述跨步讀取序列從所述記憶體讀取所述矩陣運算元;以及使所述第一指令由所述矩陣處理器執行,其中透過對所述矩陣運算元執行所述第一操作來執行所述第一指令。
在方法的一個範例實施例中,其中所述讀取操作的序列包含下列中的一或多者:跨步讀取操作,用以在跨步記憶體位址讀取所述記憶體,其中所述跨步記憶體位址與前一個記憶體位址偏移一跨步偏移;或者帶狀讀取操作,用以在所述前一個記憶體位址之後的一或多個序向記憶體位址處讀取所述記憶體。
在方法的一個範例實施例中,基於所述跨步讀取序列從所述記憶體讀取所述矩陣運算元包含:透過讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元,其中:讀取操作的每次迭代都從所述記憶體的對應起始記憶體位址開始;所述跨步讀取序列至少部分地在讀取操作的每次迭代中執行;以及在所述讀取操作的複數個迭代之間,所述對應起始記憶體位址增加一超跨步偏移。
在方法的一個範例實施例中,所述方法還包含:接收將要由所述矩陣處理器執行的第二指令,其中:所述第二指令將在所述第一指令之前接收;以及所述第二指令係用以指示所述矩陣處理器為所述矩陣運算元暫存一識別符,其中所述識別符將基於指示所述矩陣運算元在所述記憶體中的記憶體佔用量的一或多個參數進行暫存,以及其中所述識別符係用以使在後續指令中要識別的所述矩陣運算元致能;以及其中所述第一指令包含指示所述矩陣運算元的所述識別符的第一參數。
一或多個實施例可以包含一種系統,包含:主處理器;以及矩陣處理器,包含:記憶體,用於儲存矩陣運算元和跨步讀取序列,其中:所述矩陣運算元係在所述記憶體中亂序儲存;以及所述跨步讀取序列包含讀取操作的序列,以從所述記憶體以正確的順序讀取所述矩陣運算元;控制電路,用以接收將要由所述矩陣處理器執行的第一指令,其中所述第一指令係用以指示所述矩陣處理器對所述矩陣運算元執行第一操作,以及其中所述第一指令將從所述主處理器接收;讀取電路,用以基於所述跨步讀取序列從所述記憶體讀取所述矩陣運算元;以及執行電路,用以透過對所述矩陣運算元執行所述第一操作來執行所述第一指令。
在系統的一個範例實施例中,所述讀取操作的序列包含下列中的一或多者:跨步讀取操作,用以在跨步記憶體位址讀取所述記憶體,其中所述跨步記憶體位址與前一個記憶體位址偏移一跨步偏移;或者帶狀讀取操作,用以在所述前一個記憶體位址之後的一或多個序向記憶體位址處讀取所述記憶體。
在系統的一個範例實施例中,用以基於所述跨步讀取序列從所述記憶體讀取所述矩陣運算元的所述讀取電路還包含:透過讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元,其中:讀取操作的每次迭代都從所述記憶體的對應起始記憶體位址開始;所述跨步讀取序列至少部分地在讀取操作的每次迭代中執行;以及在所述讀取操作的複數個迭代之間,所述對應起始記憶體位址增加一超跨步偏移。
100:矩陣處理系統
102:矩陣運算元
104:矩陣運算元
110:矩陣處理器
112:控制器
114:矩陣元件儲存和切片(MES)引擎
115:運算元記憶體
116:序列記憶體
118:執行引擎
120:主機計算裝置
130:通訊介面或匯流排
200:範例
210:矩陣運算元
220:記憶體
300:範例
310:矩陣運算元
320:記憶體佈局
400:MVS讀取操作
410:記憶體
420:序列記憶體
500:MVS讀取操作
510:記憶體
520:序列記憶體
600:MVS讀取操作
605:3D卷積濾波器
610:記憶體
620:序列記憶體
700:流程圖
702:方塊
704:方塊
706:方塊
708:方塊
710:方塊
712:方塊
714:方塊
716:方塊
800:通用向量親合指令格式
805:無記憶體存取
810:無記憶體存取、全捨入控制類型運算
812:無記憶體存取、寫入遮罩控制、部分捨入控制類型運算
815:無記憶體存取、資料轉換類型運算
817:無記憶體存取、寫入遮罩控制、VSIZE類型運算
820:記憶體存取
825:記憶體存取、暫時的
827:記憶體存取、寫入遮罩控制
830:記憶體存取、非暫時的
840:格式欄位
842:基底運算欄位
844:暫存器索引欄位
846:修飾符欄位
846A:無記憶體存取
846B:記憶體存取
850:增強運算欄位
852:alpha欄位
852A:RS欄位
852A.1:捨入
852A.2:資料轉換
852B:驅逐隱含欄位
852B.1:暫時
852B.2:非暫時
852C:寫入遮罩控制(Z)欄位
854:beta欄位
854A:捨入控制欄位
854B:資料轉換欄位
854C:資料處理欄位
856:抑制所有浮點異常(SAE)欄位
857A:RL欄位
857A.1:捨入
857A.2:向量長度(VSIZE)
857B:廣播欄位
858:捨入運算控制欄位
859A:捨入運算欄位
859B:向量長度欄位
860:縮放欄位
862A:位移欄位
862B:位移因子欄位
864:資料元寬度欄位
868:類型欄位
868A:A類
868B:B類
870:寫入遮罩欄位
872:立即欄位
874:完整運算碼欄位
900:特定向量親合指令格式
902:EVEX前置
905:REX欄位
910:REX'欄位
915:運算碼映射欄位
920:VVVV欄位
925:前置編碼欄位
930:真實運算碼欄位
940:MOD R/M欄位
942:MOD欄位
944:Reg欄位
946:R/M欄位
954:xxx欄位
956:bbb欄位
1000:暫存器架構
1010:向量暫存器
1015:寫入遮罩暫存器
1025:通用暫存器
1045:純量浮點堆疊暫存器檔案
1050:MMX緊縮整數平面暫存器檔案
1100:管線
1102:提取階段
1104:長度解碼階段
1106:解碼階段
1108:分配階段
1110:重命名階段
1112:排程階段
1114:暫存器讀取/記憶體讀取階段
1116:執行階段
1118:回寫/記憶體寫入階段
1122:異常處理階段
1124:提交階段
1130:前端單元
1132:分支預測單元
1134:指令快取記憶體單元
1136:指令轉譯後備緩衝區
1138:指令提取單元
1140:解碼單元
1150:執行引擎單元
1152:重命名/分配器單元
1154:失效單元
1156:排程器單元
1158:實體暫存器檔案單元
1160:執行群集
1162:執行單元
1164:記憶體存取單元
1170:記憶體單元
1172:資料轉譯後備緩衝區單元
1174:資料快取記憶體單元
1176:L2快取記憶體單元
1190:核心
1200:指令解碼器
1202:互連網路
1204:L2快取記憶體的區域子集
1206:L1快取記憶體
1206A:L1資料快取記憶體
1208:純量單元
1210:向量單元
1212:純量暫存器
1214:向量暫存器
1220:混合單元
1222A:數值轉換單元
1222B:數值轉換單元
1224:複製單元
1226:寫入遮罩暫存器
1228:16位元寬算術邏輯單元
1300:處理器
1302A:核心
1302N:核心
1304A:快取記憶體單元
1304N:快取記憶體單元
1306:共享快取記憶體單元
1308:特殊用途邏輯
1310:系統代理單元
1312:環型互連單元
1314:積體記憶體控制器單元
1316:匯流排控制器單元
1400:系統
1410:處理器
1415:處理器
1420:控制器集線器
1440:記憶體
1445:協同處理器
1450:輸入/輸出集線器
1460:輸入/輸出(I/O)裝置
1490:圖形記憶體控制器集線器
1495:連接
1500:系統
1514:輸入/輸出裝置
1515:處理器
1516:第一匯流排
1518:匯流排橋
1520:第二匯流排
1522:鍵盤和/或滑鼠
1524:音訊I/O
1527:通訊裝置
1528:儲存單元
1530:指令/編碼和資料
1532:記憶體
1534:記憶體
1538:協同處理器
1539:高效能介面
1550:點對點介面
1552:個別的點對點介面
1554:個別的點對點介面
1570:處理器
1572:積體記憶體控制器(IMC)單元
1576:點對點介面電路
1578:點對點介面電路
1580:處理器
1582:積體記憶體控制器(IMC)單元
1586:點對點介面電路
1588:點對點介面電路
1590:晶片組
1592:介面
1594:點對點介面電路
1596:介面
1598:點對點介面電路
1600:系統
1614:I/O裝置
1615:舊有I/O裝置
1700:系統晶片
1702:互連單元
1710:應用處理器
1720:協同處理器
1730:靜態隨機存取記憶體(SRAM)單元
1732:直接記憶體存取(DMA)單元
1740:顯示單元
1802:高階語言
1804:x86編譯器
1806:x86二進制編碼
1808:替代指令集編譯器
1810:替代指令集二進制編碼
1812:指令轉換器
1814:不具有x86指令集核心的處理器
1816:具有至少一個x86指令集核心的處理器
當結合附圖閱讀時,從以下詳細描述中將最好地理解本發明。要強調的是,基於行業中的標準實踐,各種特徵不一定按比例繪製,並且僅用於說明目的。其中比例尺係明確地或隱含地顯示,僅提供一個說明性範例。在其它實施例中,為了討論的清楚起見,可以任意增加或減少各種特徵的維度。
[圖1]顯示利用多變數跨步讀取操作從記憶體中提取矩陣運算元的矩陣處理系統的範例實施例。
[圖2]顯示用於矩陣運算元的記憶體佈局的範例,所述記憶體佈局以71×71的維度和BFLOAT16類型的元件暫存。
[圖3]顯示用於矩陣運算元的記憶體佈局的範例,所述記憶體佈局以33×33的維度和SP32類型的元件暫存。
[圖4、5和6A-B]顯示多變數跨步讀取操作的範例。
[圖7]顯示多變數跨步讀取操作的範例實施例的流程圖。
[圖8A-B]係顯示根據本發明實施例的通用向量親合指令格式和其指令樣板的方塊圖。
[圖9A-D]係顯示根據本發明實施例的示範性特定向量親合指令格式的方塊圖。
[圖10]係根據本發明實施例的暫存器架構的方塊圖。
[圖11A]係顯示根據本發明實施例的示範性循序管線和示範性暫存器重命名、亂序問題/執行管線兩者的方塊圖。
[圖11B]係顯示根據本發明實施例的將被包括在處理器中的循序架構核心和示範性暫存器重命名、亂序問題/執行架構核心的示範性實施例兩者的方塊圖。
[圖12A-B]顯示更具體示範性循序核心架構的方塊圖,其核心將是在晶片中數個邏輯方塊之一(包括相同類型和/或不同類型的其它核心)。
[圖13]係根據本發明實施例可具有一個以上的核心、可具有積體記憶體控制器且可具有整合圖形的處理器的方塊圖。
[圖14、15、16和17]係示範性電腦架構的方塊圖。
[圖18]係對比根據本發明實施例利用軟體指令轉換器以轉換來源指令集中的二進制指令至目標指令集中的二進制指令的方塊圖。
100:矩陣處理系統
102:矩陣運算元
104:矩陣運算元
110:矩陣處理器
112:控制器
114:矩陣元件儲存和切片(MES)引擎
115:運算元記憶體
116:序列記憶體
118:執行引擎
120:主機計算裝置
130:通訊介面或匯流排
Claims (25)
- 一種矩陣處理器,包含:記憶體,用於儲存矩陣運算元和與所述矩陣運算元相關的跨步讀取序列,其中:所述矩陣運算元係在所述記憶體中亂序儲存;以及所述跨步讀取序列表示讀取操作的序列,以從所述記憶體以正確的順序讀取所述矩陣運算元;控制電路,用以接收將要由所述矩陣處理器執行的第一指令,其中所述第一指令係用以指示所述矩陣處理器對所述矩陣運算元執行第一操作,其中所述第一指令包含運算碼和運算元識別符,其中所述運算碼係用以識別所述第一操作,以及其中所述運算元識別符係用以識別所述矩陣運算元的起始記憶體位址和所述跨步讀取序列;讀取電路,用以基於接收所述第一指令:從所述記憶體讀取透過所述運算元識別符所識別的所述跨步讀取序列;以及從所述記憶體讀取所述矩陣運算元,其中所述矩陣運算元係基於所述起始記憶體位址和透過所述運算元識別符所識別的所述跨步讀取序列從所述記憶體讀取;以及執行電路,用以透過對所述矩陣運算元執行所述第一操作來執行所述第一指令。
- 如請求項1的矩陣處理器,其中所述讀取操作的序列包含下列中的一或多者: 跨步讀取操作,用以在跨步記憶體位址讀取所述記憶體,其中所述跨步記憶體位址與前一個記憶體位址偏移一跨步偏移;或者帶狀讀取操作,用以在所述前一個記憶體位址之後的一或多個序向記憶體位址處讀取所述記憶體。
- 如請求項1的矩陣處理器,其中用以從所述記憶體讀取所述矩陣運算元的所述讀取電路還包含:透過讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元,其中:讀取操作的每次迭代都從所述記憶體的對應起始記憶體位址開始;所述跨步讀取序列至少部分地在讀取操作的每次迭代中執行;以及在所述讀取操作的複數個迭代之間,所述對應起始記憶體位址增加一超跨步偏移。
- 如請求項3的矩陣處理器,其中用以透過所述讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元的所述讀取電路還用以:連續地執行所述讀取操作的複數個迭代,直到預定數目的讀取操作已被執行。
- 如請求項1的矩陣處理器,其中:所述控制電路還用以接收將要由所述矩陣處理器執行的第二指令,其中:所述第二指令將在所述第一指令之前接收;以及 所述第二指令係用以指示所述矩陣處理器為所述矩陣運算元暫存所述運算元識別符,其中所述識別符將基於指示所述矩陣運算元在所述記憶體中的記憶體佔用量的一或多個參數進行暫存,以及其中所述運算元識別符係用以使在後續指令中要識別的所述矩陣運算元致能。
- 如請求項1的矩陣處理器,其中所述控制電路還用以接收要由所述矩陣處理器執行的第二指令,其中所述第二指令將在所述第一指令之前被接收,以及其中所述第二指令係用以指示所述矩陣處理器將所述跨步讀取序列程式化到所述記憶體中。
- 如請求項6的矩陣處理器,其中:所述矩陣運算元包含以第一順序排列的複數個維度;所述複數個維度係以不同於所述第一順序的第二順序在所述記憶體中排列;以及所述跨步讀取序列係程式化以執行維度混洗操作,以將所述複數個維度從所述第二順序重新排列為所述第一順序。
- 如請求項6的矩陣處理器,其中:在所述記憶體中,所述矩陣運算元係儲存在複數個非連續記憶體位址;以及所述跨步讀取序列係程式化以執行切片操作,以從所述記憶體提取在所述複數個非連續記憶體位址的所述矩陣運算元。
- 如請求項1的矩陣處理器,其中所述記憶 體包含:第一記憶體,用以儲存所述矩陣運算元;以及第二記憶體,用以儲存所述跨步讀取序列。
- 一種其上儲存有指令的非暫態機器可存取儲存媒體,其中當所述指令在機器上執行時,使所述機器用以:接收將要由矩陣處理器執行的第一指令,其中所述第一指令係用以指示所述矩陣處理器對矩陣運算元執行第一操作,其中所述第一指令包含運算碼和運算元識別符,其中所述運算碼係用以識別所述第一操作,以及其中所述運算元識別符係用以識別:所述矩陣運算元的起始記憶體位址,其中所述矩陣運算元係在所述矩陣處理器的記憶體中亂序儲存;以及與所述矩陣運算元相關的跨步讀取序列,其中所述跨步讀取序列係儲存在所述記憶體中,以及其中所述跨步讀取序列表示讀取操作的序列,以從所述記憶體以正確的順序讀取所述矩陣運算元;存取儲存在所述記憶體中的所述跨步讀取序列;從所述記憶體讀取所述矩陣運算元,其中所述矩陣運算元係基於所述起始記憶體位址和所述跨步讀取序列從所述記憶體讀取;以及使所述第一指令由所述矩陣處理器執行,其中透過對所述矩陣運算元執行所述第一操作來執行所述第一指令。
- 如請求項10的儲存媒體,其中所述讀取 操作的序列包含下列中的一或多者:跨步讀取操作,用以在跨步記憶體位址讀取所述記憶體,其中所述跨步記憶體位址與前一個記憶體位址偏移一跨步偏移;或者帶狀讀取操作,用以在所述前一個記憶體位址之後的一或多個序向記憶體位址處讀取所述記憶體。
- 如請求項10的儲存媒體,其中致使所述機器從所述記憶體讀取所述矩陣運算元的所述指令還致使所述機器用以:透過讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元,其中:讀取操作的每次迭代都從所述記憶體的對應起始記憶體位址開始;所述跨步讀取序列至少部分地在讀取操作的每次迭代中執行;以及在所述讀取操作的複數個迭代之間,所述對應起始記憶體位址增加一超跨步偏移。
- 如請求項12的儲存媒體,其中致使所述機器透過讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元的所述指令還致使所述機器用以:連續地執行所述讀取操作的複數個迭代,直到預定數目的讀取操作已被執行。
- 如請求項10的儲存媒體,其中:所述指令還致使所述機器接收將要由所述矩陣處理器 執行的第二指令,其中:所述第二指令將在所述第一指令之前接收;以及所述第二指令係用以指示所述矩陣處理器為所述矩陣運算元暫存所述運算元識別符,其中所述運算元識別符將基於指示所述矩陣運算元在所述記憶體中的記憶體佔用量的一或多個參數進行暫存,以及其中所述運算元識別符係用以使在後續指令中要識別的所述矩陣運算元致能。
- 如請求項10的儲存媒體,其中所述指令還致使所述機器接收要由所述矩陣處理器執行的第二指令,其中所述第二指令將在所述第一指令之前被接收,以及其中所述第二指令係用以指示所述矩陣處理器將所述跨步讀取序列程式化到所述記憶體中。
- 如請求項15的儲存媒體,其中:所述矩陣運算元包含以第一順序排列的複數個維度;所述複數個維度係以不同於所述第一順序的第二順序在所述記憶體中排列;以及所述跨步讀取序列係程式化以執行維度混洗操作,以將所述複數個維度從所述第二順序重新排列為所述第一順序。
- 如請求項15的儲存媒體,其中:在所述記憶體中,所述矩陣運算元係儲存在複數個非連續記憶體位址;以及所述跨步讀取序列係程式化以執行切片操作,以從所述記憶體提取在所述複數個非連續記憶體位址的所述矩陣 運算元。
- 如請求項10的儲存媒體,其中所述記憶體包含:第一記憶體,用以儲存所述矩陣運算元;以及第二記憶體,用以儲存所述跨步讀取序列。
- 一種用於矩陣處理的方法,包含:接收將要由矩陣處理器執行的第一指令,其中所述第一指令係用以指示所述矩陣處理器對矩陣運算元執行第一操作,其中所述第一指令包含運算碼和運算元識別符,其中所述運算碼係用以識別所述第一操作,以及其中所述運算元識別符係用以識別:所述矩陣運算元的起始記憶體位址,其中所述矩陣運算元係在所述矩陣處理器的記憶體中亂序儲存;以及與所述矩陣運算元相關的跨步讀取序列,其中所述跨步讀取序列係儲存在所述記憶體中,以及其中所述跨步讀取序列表示讀取操作的序列,以從所述記憶體以正確的順序讀取所述矩陣運算元;存取儲存在所述記憶體中的所述跨步讀取序列;從所述記憶體讀取所述矩陣運算元,其中所述矩陣運算元係基於所述起始記憶體位址和所述跨步讀取序列從所述記憶體讀取;以及使所述第一指令由所述矩陣處理器執行,其中透過對所述矩陣運算元執行所述第一操作來執行所述第一指令。
- 如請求項19的方法,其中所述讀取操作 的序列包含下列中的一或多者:跨步讀取操作,用以在跨步記憶體位址讀取所述記憶體,其中所述跨步記憶體位址與前一個記憶體位址偏移一跨步偏移;或者帶狀讀取操作,用以在所述前一個記憶體位址之後的一或多個序向記憶體位址處讀取所述記憶體。
- 如請求項19的方法,其中從所述記憶體讀取所述矩陣運算元包含:透過讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元,其中:讀取操作的每次迭代都從所述記憶體的對應起始記憶體位址開始;所述跨步讀取序列至少部分地在讀取操作的每次迭代中執行;以及在所述讀取操作的複數個迭代之間,所述對應起始記憶體位址增加一超跨步偏移。
- 如請求項19的方法,還包含:接收將要由所述矩陣處理器執行的第二指令,其中:所述第二指令將在所述第一指令之前接收;以及所述第二指令係用以指示所述矩陣處理器為所述矩陣運算元暫存所述運算元識別符,其中所述運算元識別符將基於指示所述矩陣運算元在所述記憶體中的記憶體佔用量的一或多個參數進行暫存,以及其中所述運算元識別符係用以使在後續指令中要識別的所述矩陣運算元致能。
- 一種用於矩陣處理的系統,包含:主處理器;記憶體,用於儲存矩陣運算元和跨步讀取序列,其中:所述矩陣運算元係在所述記憶體中亂序儲存;以及所述跨步讀取序列表示讀取操作的序列,以從所述記憶體以正確的順序讀取所述矩陣運算元;以及矩陣處理器,包含:控制電路,用以從所述主處理器接收將要由所述矩陣處理器執行的第一指令,其中所述第一指令係用以指示所述矩陣處理器對所述矩陣運算元執行第一操作,其中所述第一指令包含運算碼和運算元識別符,其中所述運算碼係用以識別所述第一操作,以及其中所述運算元識別符係用以識別所述矩陣運算元的起始記憶體位址和所述跨步讀取序列;讀取電路,用以基於接收所述第一指令:從所述記憶體讀取透過所述運算元識別符所識別的所述跨步讀取序列;以及從所述記憶體讀取所述矩陣運算元,其中所述矩陣運算元係基於所述起始記憶體位址和透過所述運算元識別符所識別的所述跨步讀取序列從所述記憶體讀取;以及執行電路,用以透過對所述矩陣運算元執行所述 第一操作來執行所述第一指令。
- 如請求項23的系統,其中所述讀取操作的序列包含下列中的一或多者:跨步讀取操作,用以在跨步記憶體位址讀取所述記憶體,其中所述跨步記憶體位址與前一個記憶體位址偏移一跨步偏移;或者帶狀讀取操作,用以在所述前一個記憶體位址之後的一或多個序向記憶體位址處讀取所述記憶體。
- 如請求項23的系統,其中用以從所述記憶體讀取所述矩陣運算元的所述讀取電路還包含:透過讀取操作的複數個迭代從所述記憶體讀取所述矩陣運算元,其中:讀取操作的每次迭代都從所述記憶體的對應起始記憶體位址開始;所述跨步讀取序列至少部分地在讀取操作的每次迭代中執行;以及在所述讀取操作的複數個迭代之間,所述對應起始記憶體位址增加一超跨步偏移。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/556,223 US11687341B2 (en) | 2019-08-29 | 2019-08-29 | Multi-variate strided read operations for accessing matrix operands |
US16/556,223 | 2019-08-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202127242A TW202127242A (zh) | 2021-07-16 |
TWI842911B true TWI842911B (zh) | 2024-05-21 |
Family
ID=68981065
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW109120606A TWI842911B (zh) | 2019-08-29 | 2020-06-18 | 用於存取矩陣運算元的多變數跨步讀取操作 |
TW113106272A TW202424738A (zh) | 2019-08-29 | 2020-06-18 | 用於存取矩陣運算元的多變數跨步讀取操作 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW113106272A TW202424738A (zh) | 2019-08-29 | 2020-06-18 | 用於存取矩陣運算元的多變數跨步讀取操作 |
Country Status (5)
Country | Link |
---|---|
US (2) | US11687341B2 (zh) |
EP (1) | EP3786785A1 (zh) |
KR (1) | KR20210027065A (zh) |
CN (1) | CN112445526A (zh) |
TW (2) | TWI842911B (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11841792B1 (en) * | 2019-12-09 | 2023-12-12 | Amazon Technologies, Inc. | Instructions with multiple memory access modes |
US11334358B2 (en) * | 2019-12-09 | 2022-05-17 | Amazon Technologies, Inc. | Hardware accelerator having reconfigurable instruction set and reconfigurable decoder |
US11887647B2 (en) | 2020-04-09 | 2024-01-30 | Micron Technology, Inc. | Deep learning accelerator and random access memory with separate memory access connections |
US11874897B2 (en) | 2020-04-09 | 2024-01-16 | Micron Technology, Inc. | Integrated circuit device with deep learning accelerator and random access memory |
US11355175B2 (en) | 2020-04-09 | 2022-06-07 | Micron Technology, Inc. | Deep learning accelerator and random access memory with a camera interface |
US11461651B2 (en) * | 2020-04-09 | 2022-10-04 | Micron Technology, Inc. | System on a chip with deep learning accelerator and random access memory |
US11726784B2 (en) | 2020-04-09 | 2023-08-15 | Micron Technology, Inc. | Patient monitoring using edge servers having deep learning accelerator and random access memory |
US11500680B2 (en) * | 2020-04-24 | 2022-11-15 | Alibaba Group Holding Limited | Systolic array-friendly data placement and control based on masked write |
US20220197653A1 (en) * | 2020-12-22 | 2022-06-23 | Intel Corporation | Processors, methods, systems, and instructions to select and store data elements from strided data element positions in a first dimension from three source two-dimensional arrays in a result two-dimensional array |
KR102682630B1 (ko) * | 2021-03-04 | 2024-07-09 | 삼성전자주식회사 | 뉴럴 네트워크 연산 장치 및 방법 |
US11366783B1 (en) | 2021-03-29 | 2022-06-21 | SambaNova Systems, Inc. | Multi-headed multi-buffer for buffering data for processing |
US11204889B1 (en) * | 2021-03-29 | 2021-12-21 | SambaNova Systems, Inc. | Tensor partitioning and partition access order |
US20220342590A1 (en) * | 2021-04-27 | 2022-10-27 | Microchip Technology Inc. | Method and Apparatus for Gather/Scatter Operations in a Vector Processor |
CN113722269B (zh) * | 2021-08-26 | 2023-01-24 | 北京大学 | 一种基于昇腾ai处理器的跨步切片算子处理方法及装置 |
CN113626769B (zh) * | 2021-10-12 | 2022-01-21 | 中国人民解放军国防科技大学 | 面向向量处理器的低位宽数据矩阵向量化转置方法及系统 |
US11709611B2 (en) | 2021-10-26 | 2023-07-25 | SambaNova Systems, Inc. | Determining and using memory unit partitioning solutions for reconfigurable dataflow computing systems |
CN114138342B (zh) * | 2022-01-25 | 2022-04-26 | 北京大学 | Rocc协处理器接口模型及其自动生成工具和实现方法 |
US20230259282A1 (en) * | 2022-02-14 | 2023-08-17 | Memryx Incorporated | Core group memory processsing unit architectures and configurations |
CN114546488B (zh) * | 2022-04-25 | 2022-07-29 | 超验信息科技(长沙)有限公司 | 一种向量跨步指令的实现方法、装置、设备及存储介质 |
CN116016397B (zh) * | 2023-03-28 | 2023-05-30 | 湖南毂梁微电子有限公司 | 一种报文传输缓冲区快速检索方法和电路 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170097884A1 (en) * | 2015-10-05 | 2017-04-06 | Intel Corporation | Pipelined convolutional operations for processing clusters |
TW201810029A (zh) * | 2016-07-02 | 2018-03-16 | 美商英特爾股份有限公司 | 用於跨步載入的系統、設備及方法 |
US20180189227A1 (en) * | 2016-12-30 | 2018-07-05 | Intel Corporation | Dimension shuffling using matrix processors |
TW201905768A (zh) * | 2017-05-17 | 2019-02-01 | 美商谷歌有限責任公司 | 執行硬體中之矩陣乘法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9886418B2 (en) * | 2015-04-28 | 2018-02-06 | Intel Corporation | Matrix operands for linear algebra operations |
US20190392297A1 (en) * | 2016-12-30 | 2019-12-26 | Intel Corporation | Deep learning hardware |
US10372456B2 (en) * | 2017-05-24 | 2019-08-06 | Microsoft Technology Licensing, Llc | Tensor processor instruction set architecture |
-
2019
- 2019-08-29 US US16/556,223 patent/US11687341B2/en active Active
-
2020
- 2020-06-18 TW TW109120606A patent/TWI842911B/zh active
- 2020-06-18 TW TW113106272A patent/TW202424738A/zh unknown
- 2020-06-18 EP EP20180668.4A patent/EP3786785A1/en active Pending
- 2020-06-24 CN CN202010589581.2A patent/CN112445526A/zh active Pending
- 2020-06-26 KR KR1020200078233A patent/KR20210027065A/ko active Search and Examination
-
2023
- 2023-05-19 US US18/199,771 patent/US20230333855A1/en active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170097884A1 (en) * | 2015-10-05 | 2017-04-06 | Intel Corporation | Pipelined convolutional operations for processing clusters |
TW201810029A (zh) * | 2016-07-02 | 2018-03-16 | 美商英特爾股份有限公司 | 用於跨步載入的系統、設備及方法 |
US20180189227A1 (en) * | 2016-12-30 | 2018-07-05 | Intel Corporation | Dimension shuffling using matrix processors |
TW201905768A (zh) * | 2017-05-17 | 2019-02-01 | 美商谷歌有限責任公司 | 執行硬體中之矩陣乘法 |
Also Published As
Publication number | Publication date |
---|---|
US20230333855A1 (en) | 2023-10-19 |
US11687341B2 (en) | 2023-06-27 |
TW202424738A (zh) | 2024-06-16 |
US20190391811A1 (en) | 2019-12-26 |
KR20210027065A (ko) | 2021-03-10 |
TW202127242A (zh) | 2021-07-16 |
CN112445526A (zh) | 2021-03-05 |
EP3786785A1 (en) | 2021-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI842911B (zh) | 用於存取矩陣運算元的多變數跨步讀取操作 | |
US20160179523A1 (en) | Apparatus and method for vector broadcast and xorand logical instruction | |
US20180253308A1 (en) | Packed rotate processors, methods, systems, and instructions | |
TWI499976B (zh) | 用以產生整數序列的方法、設備、系統及製造物品 | |
US20180081689A1 (en) | Apparatus and method of improved extract instructions | |
TWI647613B (zh) | 用於產生按數字順序的連續整數序列之處理器、方法、系統及指令(三) | |
TWI599950B (zh) | 用於摩頓座標調整之處理器,方法,系統,及製造物件 | |
TWI564795B (zh) | 四維摩頓座標轉換處理器、方法、系統及指令 | |
US9733935B2 (en) | Super multiply add (super madd) instruction | |
KR20170033890A (ko) | 비트 셔플 프로세서, 방법, 시스템, 및 명령어 | |
US20170300326A1 (en) | Efficient zero-based decompression | |
US10459728B2 (en) | Apparatus and method of improved insert instructions | |
US20200134225A1 (en) | Instruction execution that broadcasts and masks data values at different levels of granularity | |
TWI582692B (zh) | 三維摩頓座標轉換處理器,方法,系統,及指令 | |
TWI493449B (zh) | 用於使用遮罩以執行向量緊縮一元解碼的系統、裝置及方法 | |
CN108292228B (zh) | 用于基于通道的步进收集的系统、设备和方法 | |
TW201741868A (zh) | 將來源緊縮資料劃分為巷道的處理器、方法、系統及指令 | |
US10521226B2 (en) | Efficient implementation of complex vector fused multiply add and complex vector multiply | |
WO2016077335A1 (en) | Machine level instructions to compute a 3d z-curve index from 3d coordinates | |
US20160139924A1 (en) | Machine Level Instructions to Compute a 4D Z-Curve Index from 4D Coordinates | |
US20170192783A1 (en) | Systems, Apparatuses, and Methods for Stride Load | |
TWI517032B (zh) | 用以執行兩向量暫存器之對應填充資料元件間絕對差計算之系統、裝置及方法 | |
TW201810020A (zh) | 用於累乘的系統、設備及方法 |