TW202223633A - 用於實施16位元浮點矩陣點積指令的裝置、方法及系統 - Google Patents

用於實施16位元浮點矩陣點積指令的裝置、方法及系統 Download PDF

Info

Publication number
TW202223633A
TW202223633A TW110130682A TW110130682A TW202223633A TW 202223633 A TW202223633 A TW 202223633A TW 110130682 A TW110130682 A TW 110130682A TW 110130682 A TW110130682 A TW 110130682A TW 202223633 A TW202223633 A TW 202223633A
Authority
TW
Taiwan
Prior art keywords
matrix
instruction
source
precision
processor
Prior art date
Application number
TW110130682A
Other languages
English (en)
Inventor
亞列山大 海涅克
羅柏 瓦倫泰
馬克 查尼
麥納漢 艾德門
克里斯多夫 休斯
伊凡洛斯 喬加納斯
澤夫 史博柏
亞米特 葛雷斯坦
西蒙 路邦諾維奇
Original Assignee
美商英特爾股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 美商英特爾股份有限公司 filed Critical 美商英特爾股份有限公司
Publication of TW202223633A publication Critical patent/TW202223633A/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Nonlinear Science (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

關於16位元浮點矩陣點積指令之系統、方法與裝置被描述。於一實施例中,處理器包括獲取電路,用以獲取具有欄位的單一指令,該欄位用以指定操作碼與具有單精度元素的M×N目的地矩陣、M×K第一源矩陣和K×N第二源矩陣的位置,該些源矩陣具有各包含一對半精度浮點值之元素,該操作碼用以指示執行電路對於該第一源矩陣之各元素與該第二源矩陣的對應元素,導致該半精度浮點值對單精度值之轉換、來自該對之第一值的經轉換單精度值之乘積以生成第一結果、來自該對之第二值的經轉換單精度值之乘積以生成第二結果、及該第一結果與該第二結果和該目的地矩陣之對應元素的先前內容之累加,解碼電路,用以解碼該所獲取指令,以及該執行電路,用以反應由該操作碼指定之該已解碼指令。

Description

用於實施16位元浮點矩陣點積指令的裝置、方法及系統
本專利申請案主張於2020年9月26日提出申請之美國臨時專利申請案63/083,908號之權益,該申請案名稱「用於實施16-位元浮點矩陣點積指令的裝置、方法及系統」之全部內容以引用方式併入本文中。
本揭露一般關於電腦處理器架構,以及更具體地,關於用於實施16位元浮點矩陣點積指令的系統和方法。
矩陣在許多計算任務中是越來越重要,該計算任務諸如機器學習和其他批量資料處理。深度學習是一類機器學習演算法。深度學習架構(諸如深度神經網路)已經被應用於包括電腦視覺、語音辨識、自然語言處理、音訊識別、社交網路過濾、機器編譯、生物資訊學和藥物設計的領域。
推理和訓練是被用於深度學習的兩種工具,它們趨向於低精度算術。最大化深度學習演算法和計算的通量可以幫助滿足深度學習處理器的需求,例如,在資料中心中實行深度學習的那些處理器。
矩陣-矩陣乘法(又名GEMM或通用矩陣乘法)是現代處理器上常見的計算繁重的運算。用於矩陣乘法(例如,GEMM)的特殊硬體是用於改善某些應用(諸如深度學習)的峰值計算(和能量效率)的好的選項。
只要輸出元素具有足夠的位元(即,多於輸入),這些應用中的一些(包括深度學習)可以對具有相對較少位元的輸入資料元素進行操作而不會損失精確度。
在以下描述中闡述了眾多具體細節。然而,理解的是可以在沒有這些具體細節的情況下實踐實施例。在其它實例中,沒有詳細地示出公知的電路、結構和技術,以免使本描述的理解晦澀難懂。
在說明書中對「一個實施例」、「實施例」、「示例實施例」等的引用指示所描述的實施例可以包括特定特徵、結構或特性,但是可能不是每個實施例都一定包括該特定特徵、結構或特性。此外,這樣的短語不一定指代同一實施例。另外,當與實施例相結合地來描述特定的特徵、結構或特性時,主張的是,結合其它實施例影響這樣的特徵、結構或特性(不論是否明確地描述了)是在本領域技術人員的知識範圍內的。
在許多主流處理器中,處理矩陣是一項困難和/或指令密集型任務。例如,矩陣的列可以被放入多個打包資料(例如,SIMD或向量)暫存器中,然後單獨地對它們進行操作。例如,取決於資料大小,添加兩個8×2矩陣可能需要載入或聚集到四個打包資料暫存器中。然後,實行與來自每個矩陣的第一列相對應的打包資料暫存器的第一添加,並且實行與來自每個矩陣的第二列相對應的打包資料暫存器的第二添加。然後,所得到的打包資料暫存器被往回分散到記憶體。雖然對於小矩陣,這種情境可能是可接受的,但對於較大的矩陣,這通常是不可接受的。 討論
本文中描述的是支援諸如中央處理單元(CPU)、圖形處理單元(GPU)和加速器之類的電腦硬體中的矩陣運算的機制。矩陣運算利用表示記憶體(諸如暫存器)的一個或多個打包區域的二維(2-D)資料結構。遍及本說明書,這些2-D資料結構被稱為圖塊(tile)。注意的是,矩陣可以小於圖塊(使用少於圖塊的全部)或者利用多個圖塊(矩陣大於任何一個圖塊的大小)。遍及說明書,矩陣(圖塊)語言被用來指示使用影響矩陣的圖塊所實行的運算;該矩陣是否大於任何一個圖塊通常並不相關。
每個圖塊可以通過不同的運算(諸如本文中詳述的那些)來起作用,並且包括但不限於:矩陣(圖塊)乘法、圖塊加法、圖塊減法、圖塊對角、圖塊置零、圖塊變換、圖塊點積、圖塊廣播(broadcast)、圖塊列廣播、圖塊行廣播、圖塊乘法、圖塊乘法和累加、圖塊移動等。附加地,對諸如使用縮放(scale)和/或偏差的運算子(operator)的支援可以與這些運算一起使用或者支援未來的非數位應用,例如,OpenCL“本機記憶體”、資料壓縮/解壓縮等。本文中還描述了用於實行矩陣(圖塊)16位元圖塊點積(TILEDPFP16PS)指令的指令。
儲存裝置的部分(諸如記憶體(非易失性和易失性的)、暫存器、快取記憶體等)被佈置成具有不同水平和垂直尺寸的圖塊。例如,圖塊的水平尺寸可以是4(例如,矩陣的四列),並且圖塊的垂直尺寸可以是8(例如,矩陣的8行)。通常,水平尺寸與元素大小(例如,2-、4-、8-、16-、32-、64-、128-位元等)有關。可以支援多種資料類型(單精確度浮點數、雙精度浮點數、整數等)。 配置的圖塊的示例性使用
在一些實施例中,可以配置圖塊參數。例如,給定的圖塊可以被配置成提供圖塊選項。示例性圖塊選項包括但不限於:圖塊的多個列、圖塊的多個行,圖塊是否是有效的(VALID),及/或圖塊是否由相等大小的圖塊的對(PAIR)組成。
圖1A圖示了配置的圖塊的實施例。如所示的,應用記憶體102的4kB具有儲存在其上的4個1kB圖塊—圖塊t0 104、圖塊t1 106、圖塊t2 108和圖塊t3 110。在此示例中,4個圖塊不由對組成,並且每個圖塊具有按列和行佈置的元素。圖塊t0 104和圖塊t1 106具有K列和N行的4位元組元素(例如,單精確度資料),其中K等於8且N=32。圖塊t2 108和圖塊t3 110具有K列和N/2行的8位元組元素(例如,雙精度資料)。由於雙精度運算元是單精確度寬度的兩倍,因此該配置與調色板(palette)一致,被用來提供圖塊選項,從而為至少4 kB的總儲存提供至少4個名稱。在操作中,可以使用載入和儲存操作從記憶體載入圖塊以及將圖塊儲存到記憶體。取決於所使用的指令編碼方案,可用應用記憶體的量以及可用圖塊的大小、數量和配置會有所不同。
圖1B圖示了配置的圖塊的實施例。如所示的,4kB的應用記憶體122具有儲存於其上的2對1kB圖塊,第一對是圖塊t4L 124和圖塊t4R 126,並且第二對是圖塊t5L 128和圖塊t5R 130。如所示的,圖塊對被劃分成左圖塊和右圖塊。在其他實施例中,圖塊對被劃分成偶圖塊和奇圖塊。在該示例中,4個圖塊均具有按列和行佈置的元素。圖塊t4L 124和圖塊t4R 126具有K列和N行的4位元組元素(例如,單精確度浮點數據),其中K等於8且N等於32。圖塊t5L 128和圖塊t5R 130具有K列和N/2行的8位元組元素(例如,雙精度浮點數據)。由於雙精度運算元是單精確度寬度的兩倍,因此該配置與調色板一致,被用來提供圖塊選項,從而為至少4 kB的總儲存提供至少2個名稱。圖1A的四個圖塊使用4個名稱,每個名稱命名1kB圖塊,而圖1B中的2對圖塊可以使用2個名稱來指定配對圖塊。在一些實施例中,圖塊指令接受配對圖塊的名稱作為運算元。在操作中,可以使用載入和儲存操作從記憶體載入圖塊以及將圖塊儲存到記憶體。取決於所使用的指令編碼方案,可用應用記憶體的量以及可用圖塊的大小、數量和配置會有所不同。
在一些實施例中,圖塊參數是可定義的。例如,“調色板”被用來提供圖塊選項。示例性選項包括但不限於:圖塊名稱的數量、儲存的列中的位元組數、圖塊中的列數和行數等。例如,圖塊的最大“高度”(列數)可以被定義為:
圖塊最大列=所架構的儲存/(調色板名稱數*每列的位元組數)。
照此,可以編寫應用程式,使得名稱的固定使用將能夠跨實現方式而利用不同的儲存大小。
使用矩陣(圖塊)配置(“TILECONFIG”)指令來完成圖塊的配置,其中在選定的調色板中定義特定的圖塊使用。該宣告包括:要使用的圖塊名稱的數量、每個名稱(圖塊)所請求的列數和行數,以及在一些實施例中,每個圖塊所請求的資料類型。在一些實施例中,在執行TILECONFIG指令期間實行一致性檢查以確定其匹配調色板條目的限制。 示例性圖塊儲存類型
圖2圖示了矩陣儲存的若干個示例。在(A)中,圖塊被儲存在記憶體中。如所示的,每個“列”由四個打包資料元素組成。要到達下一個“列”,使用步幅值。注意的是,列可以連續儲存在記憶體中。當圖塊儲存並不映射底層記憶體陣列列寬時,跨步式記憶體存取允許存取一個列至然後下一個列。
從記憶體載入圖塊和將圖塊儲存到記憶體通常是從應用記憶體到打包的資料列的跨步式存取。在一些實施例中,示例性TILELOAD和TILESTORE指令或對應用記憶體的其他指令引用(作為載入操作指令中的TILE運算元)是可重新啟動的,以處理(至多)2*分頁錯誤的列、未遮罩的浮點異常,和/或每條指令的中斷。
在(B)中,矩陣被儲存在由多個暫存器組成的圖塊中,該暫存器諸如打包資料暫存器(單指令、多資料(SIMD)或向量暫存器)。在此示例中,圖塊覆蓋在三個物理暫存器上。通常,使用連續的暫存器,然而,不一定是這種情況。
在(C)中,矩陣被儲存在非暫存器儲存中的圖塊中,該儲存可用於圖塊操作中所使用的融合乘積累加(FMA)電路。該儲存可以在FMA的內部或者與其相鄰。附加地,在下面討論的一些實施例中,儲存可以針對資料元素而非整個列或圖塊。
經由CPUID來報告針對TMMA架構的支持參數。在一些實施例中,資訊清單包括最大高度和最大SIMD尺寸。配置TMMA架構需要指定每個圖塊的尺寸、每個圖塊的元素大小和調色板識別字。通過執行TILECONFIG指令來完成此配置。
TILECONFIG指令的成功執行啟用了後續TILE運算子。TILERELEASEALL指令清除了圖塊配置並且禁用了TILE操作(直到下一個TILECONFIG指令執行為止)。在一些實施例中,XSAVE、XSTORE等被用於使用圖塊進行上下文切換。在一些實施例中,在XSAVE中使用2個XCR0位元,一個用於TILECONFIG元資料,並且一個位元對應於實際的圖塊載荷資料。
TILECONFIG不僅配置圖塊使用,還設置了狀態變數,其指示了該程式處於具有已配置圖塊的代碼區域中。實現方式可以列舉對可以與圖塊區域一起使用的其他指令的限制,諸如不使用現有暫存器組等。
退出圖塊區域通常利用TILERELEASEALL指令來完成。它不需要任何參數,並且可以迅速使全部圖塊無效(指示的是資料不再需要任何保存或恢復),並且清除與處於圖塊區域中相對應的內部狀態。
在一些實施例中,圖塊操作將使超出由圖塊配置所指定的尺寸的任何列和任何行置零。例如,在寫入每個列時,圖塊操作將使超出配置的行數(將元素的大小計算在內)的資料置零。例如,在64位元組列和被配置有10列和12行的圖塊的情況下,寫入FP32元素的操作將利用輸出/結果資料來寫入具有12*4位元組的前10列中的每一列,並且將每一列中的剩餘4*4位元組置零。圖塊操作也將前10個配置的列之後的任何列完全置零。當使用具有64位元組的列的1K圖塊時,將有16列,因此在該示例中,最後6列也將被置零。
在一些實施例中,上下文恢復指令(例如,XRSTOR)在載入資料時強制的是,超出為圖塊所配置的列的資料將被維持為零。如果沒有有效配置,則全部列都被置零。圖塊資料的XRSTOR可以在超出所配置的行的行中載入垃圾。XRSTOR應當沒有可能超出所配置的行數來進行清除,因為沒有與圖塊配置相關聯的元素寬度。
上下文保存(例如,XSAVE)在將整個TILE儲存區寫入記憶體時公開該整個TILE儲存區。如果XRSTOR將垃圾資料載入到圖塊的最右邊部分,那麼該資料將由XSAVE保存。XSAVE將為超出為每個圖塊所指定的數量的列寫入零。
在一些實施例中,圖塊指令是可重新啟動的。存取記憶體的操作允許在頁面發生故障之後重新啟動。處理浮點運算的計算指令還允許未遮罩的浮點異常,其中遮罩了由控制和/或狀態暫存器控制的異常。
為了支援在這些事件之後重新啟動指令,指令將資訊儲存在下面詳述的啟動暫存器中。 矩陣 ( 圖塊 ) 作業系統 示例性硬體支援
圖3圖示了利用矩陣(圖塊)運算加速器的系統的實施例。在該圖示中,主處理器/處理系統301將命令311(例如,諸如算術或矩陣操縱操作之類的矩陣操縱操作,或者載入和儲存操作)傳送到矩陣運算加速器307。然而,這僅出於討論目的而以這種方式示出。如之後詳述的,該加速器307可以是處理核心的一部分。通常,作為圖塊操縱運算子指令的命令311將作為暫存器-暫存器(“reg-reg”)或暫存器-記憶體(“reg-mem”)格式來指代圖塊。其他命令(諸如TILESTORE、TILELOAD、TILECONFIG等)不對圖塊實行資料操作。命令可以是經解碼的指令(例如,微操作)或巨集指令以供加速器307來處理。
在該示例中,一致記憶體介面303耦合到主處理器/處理系統301和矩陣運算加速器307,使得它們可以共用記憶體。圖4和5示出了如何使用矩陣運算加速器來共用記憶體的不同實施例。如圖4所示,主處理器401和矩陣運算加速器電路405共用同一記憶體403。圖5圖示了其中主處理器501和矩陣運算加速器505不共用記憶體但可以存取彼此的記憶體的實施例。例如,處理器501可以存取圖塊記憶體507並且照常利用其主記憶體503。類似地,矩陣運算加速器505可以存取主記憶體503,但更典型地使用其自己的記憶體507。注意,這些記憶體可以是屬於不同類型的。
在一些實施例中,使用物理暫存器上的覆蓋(overlay)來支援圖塊。例如,取決於實現方式,圖塊可以利用16個1,024位元暫存器、32個512位元暫存器等。在一些實施例中,矩陣運算利用表示記憶體(諸如暫存器)的一個或多個打包區域的2維(2-D)資料結構。遍及本說明書,這些2-D資料結構被稱為圖塊或圖塊暫存器。
在一些實施例中,矩陣運算加速器307包括耦合到資料緩衝器305的多個FMA 309(在一些實現方式中,這些緩衝器305中的一個或多個被儲存在網格的FMA中,如所示的)。資料緩衝器305緩衝了從記憶體載入的圖塊和/或要儲存到記憶體的圖塊(例如,使用圖塊載入或圖塊儲存指令)。例如,資料緩衝器可以是多個暫存器。通常,這些FMA被佈置為鏈式FMA的網格309,該FMA能夠讀取和寫入圖塊。在該示例中,矩陣運算加速器307要使用圖塊T0、T1和T2來實行矩陣乘法運算。至少一個圖塊被容納在FMA網格309中。在一些實施例中,運算中的全部圖塊被儲存在FMA網格309中。在其他實施例中,僅子集被儲存在FMA網格309中。如所示的,T1被容納,而T0和T2不被容納。注意的是,A、B和C指代這些圖塊的矩陣,它們可以佔據或可以不佔據圖塊的整個空間。
圖6圖示了使用圖塊(“TMMA”)的矩陣乘法累加運算的實施例。
矩陣(圖塊A 601)中的列數與包括計算的等待時間的串列(鏈式)FMA的數量相匹配。一種實現方式可以在具有較小高度的網格上自由再迴圈,而計算保持不變。
源/目的地向量來自於具有N列的圖塊(圖塊C 605),並且FMA的網格611實行N個向量矩陣運算,從而導致了實行圖塊的矩陣乘法的完整指令。圖塊B 603是另一個向量源,並且在每個階段向FMA提供“廣播”項。
在操作中,在一些實施例中,矩陣B的元素(被儲存在圖塊B 603中)遍佈FMA的矩形網格。矩陣B(被儲存在圖塊A 601中)使它的列元素被變換以與FMA的矩形網格的柱狀尺寸相配。在網格中的每個FMA處,將A和B的元素相乘並且添加於傳入的被加數(在圖中從上面),並且傳出的和被傳遞到FMA的下一列(或最終輸出)。
單個步驟的等待時間與K(矩陣B的列高度)成比例,並且從屬的TMMA通常具有足夠的源-目的地列(在單個圖塊中或者跨圖塊)以隱藏該等待時間。一種實現方式還可以跨時間步驟來拆分SIMD(打包資料元素)尺寸M(矩陣A的列高),但是這僅僅改變了K乘以的常數。當程式指定的K小於由TMACC列舉的最大值時,一種實現方式就利用“遮罩”或“早期輸出(early outs)”來自由實現這一點。
整個TMMA的等待時間與N*K成比例。重複率與N成比例。每個TMMA指令的MAC數量是N*K*M。
圖7圖示了鏈式融合乘法累加指令的反覆運算執行的子集的實施例。特別地,這圖示了目的地的一個打包資料元素位置的反覆運算的執行電路。在該實施例中,鏈式融合乘法累加在有符號(signed)源上操作,其中累加器是輸入資料大小的2倍。
第一有符號源(源1 701)和第二有符號源(源2 703)均具有四個打包資料元素。這些打包資料元素中的每一個都儲存諸如浮點數據之類的有符號資料。第三有符號源(源3 709)具有兩個打包資料元素,每個元素都儲存有符號資料。第一和第二有符號源701和703的大小是第三有符號源(初始值或先前結果)709的大小的一半。例如,第一有符號源701和第二有符號源703可以具有32位元打包資料元素(例如,單精確度浮點數),而第三有符號源709可以具有64位元打包資料元素(例如,雙精度浮點數)。
在該圖示中,僅示出了第一有符號源701和第二有符號源703的兩個最高有效打包資料元素位置以及第三有符號源709的最高有效打包資料元素位置。當然,還將處理其他打包資料元素位置。
如圖示的,成對處理打包資料元素。例如,使用乘法器電路705將第一有符號源701和第二有符號源703的最高有效打包資料元素位置的資料相乘,並且使用乘法器電路707將來自第一有符號源701和第二有符號源703的第二最高有效打包資料元素位置的資料相乘。在一些實施例中,這些乘法器電路705和707被重新用於其他打包資料元素位置。在其他實施例中,使用附加的乘法器電路,以使得並行處理打包資料元素。在一些上下文中,使用具有有符號第三源709的大小的通道來完成平行執行。使用加法電路711來將每一個乘法的結果加起來。
將乘法結果的加法結果加到來自有符號源3 709的最高有效打包資料元素位置的資料中(使用不同的加法器713或相同的加法器711)。
最後,第二加法的結果被儲存到打包資料元素位置中的有符號目的地715中,該打包資料元素位置對應於來自有符號第三源709的所使用的打包資料元素位置,或者如果存在下一次反覆運算的話,被傳遞給下一次反覆運算。在一些實施例中,將寫入遮罩應用於該儲存,使得如果設置了對應的寫入遮罩(位元),則發生儲存,而如果未設置,則不發生儲存。
圖8圖示了鏈式融合乘法累加指令的反覆運算執行的子集的實施例。特別地,這圖示了目的地的一個打包資料元素位置的反覆運算的執行電路。在該實施例中,鏈式融合乘法累加在有符號源上操作,其中累加器是輸入資料大小的2倍。
第一有符號源(源1 801)和第二有符號源(源2 803)均具有四個打包資料元素。這些打包資料元素中的每一個都儲存諸如整數資料之類的有符號資料。第三有符號源(源3 809)具有兩個打包資料元素,每個元素都儲存有符號資料。第一有符號源801和第二有符號源803的大小是第三有符號源809的大小的一半。例如,第一有符號源801和第二有符號源803可以具有32位元打包資料元素(例如,單精確度浮點數),並且第三有符號源809可以具有64位元打包資料元素(例如,雙精度浮點數)。
在該圖示中,僅示出了第一有符號源801和第二有符號源803的兩個最高有效打包資料元素位置以及第三有符號源809的最高有效打包資料元素位置。當然,還將處理其他打包資料元素位置。
如圖示的,成對處理打包資料元素。例如,使用乘法器電路805將第一有符號源801和第二有符號源803的最高有效打包資料元素位置的資料相乘,並且使用乘法器電路807將來自第一有符號源801和第二有符號源803的第二最高有效打包資料元素位置的資料相乘。在一些實施例中,乘法器電路805和807在沒有飽和的情況下以無限精度實行乘法,並且使用加法器/飽和電路813來將累加的結果:在溢出的情況下飽和至正或負無窮大,以及在任何下溢的情況下飽和至零。在其他實施例中,乘法器電路805和807自身實行飽和。在一些實施例中,這些乘法器電路805和807被重新用於其他打包資料元素位置。在其他實施例中,使用附加的乘法器電路,以使得並行處理打包資料元素。在一些上下文中,使用具有有符號第三源(初始值或先前反覆運算結果)809的大小的通道來完成並行執行。使用加法/飽和電路813將每一個乘法的結果添加到有符號第三源809。
當加法導致過大的值時,加法/飽和(累加器)電路813保留運算元的符號。特別地,飽和度評估發生在多路添加與寫入目的地或下一次反覆運算之間的無限精度結果上。當累加器813是浮點的並且輸入項是整數時,乘積之和以及浮點累加器輸入值被變為無限精度值(數百個位元的固定點數量),實行乘法結果與第三輸入的加法,並且實行到實際累加器類型的單個捨入。
無符號飽和意味著輸出值被限制成該元素寬度的最大無符號數量(全為1)。有符號飽和意味著一個值被限制成處於針對該元素寬度的最小負數與最大正數之間的範圍內(例如,對於位元組,該範圍是從-128(=-2^7)到127(=2^7-1))。
加法和飽和檢查的結果被儲存到打包資料元素位置中的有符號結果815中,其對應於來自有符號第三源809的所使用的或者如果有下一次反覆運算的話被傳遞到下一次反覆運算的打包資料元素位置。在一些實施例中,將寫入遮罩應用於該儲存,使得如果設置了對應的寫入遮罩(位元),則發生儲存,而如果未設置,則不發生儲存。
圖9圖示了鏈式融合乘法累加指令的反覆運算執行的子集的實施例。特別地,這圖示了目的地的一個打包資料元素位置的反覆運算的執行電路。在該實施例中,鏈式融合乘法累加在有符號源和無符號源上操作,其中累加器是輸入資料大小的4倍。
第一有符號源(源1 901)和第二無符號源(源2 903)均具有四個打包資料元素。這些打包資料元素中的每一個都具有諸如浮點數或整數資料之類的資料。第三有符號源(初始值或結果915)具有儲存有符號資料的打包資料元素。第一源901和和第二源903的大小是第三有符號源915的四分之一。例如,第一源901和第二源903可以具有16位元打包資料元素(例如,字組),並且第三有符號源915可以具有64位元打包資料元素(例如,雙精度浮點數或64位元整數)。
在此示例中,第一源901和第二源903之四最高有效打包資料元素位置與第三有符號源915之最高有效打包資料元素位置被顯示。當然,如果存在任何其他打包資料元素位置,則也將被處理。
如圖示的,按四元組來處理打包資料元素。例如,使用乘法器電路905將第一源901和第二源903的最高有效打包資料元素位置的資料相乘,使用乘法器電路907將來自第一源901和第二源903的第二最高有效打包資料元素位置的資料相乘,使用乘法器電路909將來自第一源901和第二源903的第三最高有效打包資料元素位置的資料相乘,並且使用乘法器電路911將來自第一源901和第二源903的最低有效打包資料元素位置的資料相乘。在一些實施例中,第一源901的有符號打包資料元素被符號擴展,並且第二源903的無符號打包資料元素在乘法之前被零擴展(zero extended)。
在一些實施例中,這些乘法器電路905-911被重新用於其他打包資料元素位置。在其他實施例中,使用附加的乘法器電路,使得並行處理打包資料元素。在一些上下文中,使用具有有符號第三源915的大小的通道來完成並行執行。使用加法電路913來將每一個乘法的結果加起來。
將乘法結果的加法結果加到來自有符號源3 915的最高有效打包資料元素位置的資料中(使用不同的加法器917或相同的加法器913)。
最後,第二加法的結果919或者被儲存到打包資料元素位置中的有符號目的地中,該打包資料元素位置對應於來自有符號第三源915的所使用的打包資料元素位置,或者被傳遞給下一次反覆運算。在一些實施例中,將寫入遮罩應用於該儲存,使得如果設置了對應的寫入遮罩(位元),則發生儲存,而如果未設置,則不發生儲存。
圖10圖示了鏈式融合乘法累加指令的反覆運算執行的子集的實施例。特別地,這圖示了目的地的一個打包資料元素位置的反覆運算的執行電路。在該實施例中,鏈式融合乘法累加在有符號源和無符號源上操作,其中累加器是輸入資料大小的4倍。
第一有符號源1001和第二無符號源1003均具有四個打包資料元素。這些打包資料元素中的每一個都儲存諸如浮點數或整數資料之類的資料。第三有符號源1015(初始的或先前結果)具有儲存有符號資料的打包資料元素。第一源和第二源的大小是第三有符號源1015的四分之一(初始的或先前結果)。例如,第一源和第二源可以具有16位元打包資料元素(例如,字組),並且第三有符號源1015(初始的或先前結果)可以具有64位元打包資料元素(例如,雙精度浮點數或64位元整數)。
在該圖示中,示出了第一有符號源1001和第二無符號源1003的四個最高有效打包資料元素位置和第三有符號源1015的最高有效打包資料元素位置。當然,如果存在任何其他打包資料元素位置,則也將處理它們。
如圖示的,按四元組來處理打包資料元素。例如,使用乘法器電路1005將第一有符號源1001和第二無符號源1003的最高有效打包資料元素位置的資料相乘,使用乘法器電路1007將來自第一有符號源1001和第二無符號源1003的第二最高有效打包資料元素位置的資料相乘,使用乘法器電路1009將來自第一有符號源1001和第二無符號源1003的第三最高有效打包資料元素位置的資料相乘,並且使用乘法器電路1011將來自第一有符號源1001和第二無符號源1003的最低有效打包資料元素位置的資料相乘。在一些實施例中,第一有符號源1001的有符號打包資料元素被符號擴展,並且第二無符號源1003的無符號打包資料元素在乘法之前被零擴展。
在一些實施例中,這些乘法器電路1005-1011被重新用於其他打包資料元素位置。在其他實施例中,使用附加的乘法器電路,以使得並行處理打包資料元素。在一些上下文中,使用具有第三有符號源1015(初始的或先前結果)的大小的通道來完成平行執行。使用加法器/飽和1013電路將乘法結果的加法結果加到來自第三有符號源1015(初始的或先前結果)的最高有效打包資料元素位置的資料中。
當加法導致對於有符號飽和而言過大或過小的值時,加法/飽和(累加器)電路1013保留運算元的符號。特別地,飽和評估發生在多路添加與寫入目的地之間的無限精度結果上。當累加器1013是浮點的並且輸入項是整數時,乘積之和以及浮點累加器輸入值被變為無限精度值(數百個位元的固定點數量),實行乘法結果與第三輸入的加法,並且實行到實際累加器類型的單個捨入。
加法和飽和檢查的結果1019被儲存到打包資料元素位置中的有符號目的地,其對應於來自第三有符號源1015(初始的或先前結果)的所使用的或被傳遞到下一次反覆運算的打包資料元素位置。在一些實施例中,將寫入遮罩應用於該儲存,使得如果設置了對應的寫入遮罩(位元),則發生儲存,而如果未設置,則不發生儲存。
圖11圖示了根據實施例的兩次冪大小的SIMD實現方式,其中累加器使用大於對乘法器的輸入的輸入大小。注意,源(對於乘法器)和累加器值可以是有符號值或無符號值。對於具有2倍輸入大小的累加器(換言之,累加器輸入值的大小是源的打包資料元素大小的兩倍),表1101圖示了不同的配置。對於位元組大小的源,累加器使用16位元大小的字組或半精度浮點(HPFP)值。對於字組大小的源,累加器使用32位元整數或32位元大小的單精確度浮點(SPFP)值。對於SPFP或32位元整數大小的源,累加器使用64位元整數或64位元大小的雙精度浮點(DPFP)值。
對於具有4倍輸入大小的累加器(換言之,累加器輸入值的大小是源的打包資料元素大小的四倍),表1103圖示了不同的配置。對於位元組大小的源,累加器使用32位元整數或32位元大小的單精確度浮點(SPFP)值。對於字組大小的源,在一些實施例中,累加器使用64位元整數或64位元大小的雙精度浮點(DPFP)值。
對於具有8倍輸入大小的累加器(換言之,累加器輸入值的大小是源的打包資料元素大小的八倍),表1105圖示了一種配置。對於位元組大小的源,累加器使用64位元整數。
如先前暗示的,矩陣運算電路可以被包括在核心中,或者作為外部加速器。圖12圖示了利用矩陣運算電路的系統的實施例。在該圖示中,多個實體與環形互連1245耦合。
多個核心—核心0 1201、核心1 1203、核心2 1205和核心N 1207—提供非基於圖塊的指令支援。在一些實施例中,矩陣運算電路1251在核心1203中提供,並且在其他實施例中,矩陣運算電路1211和1213可在環形互連1245上存取。
附加地,提供一個或多個記憶體控制器1223-1225以代表核心和/或矩陣運算電路來與記憶體1233和1231通信。
圖13圖示了支援使用圖塊的矩陣運算的處理器核心管線的實施例。分支預測和解碼電路1303根據儲存在指令儲存1301中的指令來實行指令的分支預測、指令的解碼和/或兩者。例如,本文中詳述的指令可以被儲存在指令儲存中。在一些實現方式中,單獨的電路被用於分支預測,並且在一些實施例中,使用微代碼1305將至少一些指令解碼成一個或多個微操作、微代碼入口點、微指令、其他指令或其他控制信號。可以使用各種不同的機制來實現分支預測和解碼電路1303。適合的機制的示例包括但不限於查閱資料表、硬體實現方式、可程式設計邏輯陣列(PLA)、微代碼唯讀記憶體(ROM)等。
分支預測和解碼電路1303耦合到分配/重命名1307電路,在一些實施例中,該分配/重命名1307電路耦合到調度器電路1309。在一些實施例中,這些電路通過實行下述各項中的一個或多個來提供暫存器重命名、暫存器分配和/或調度功能:1)將邏輯運算元值重命名為物理運算元值(例如,在一些實施例中為暫存器別名表),2)將狀態位元和標記分配給經解碼的指令,以及3)(例如,在一些實施例中,使用保留站)從指令池中調度出經解碼的指令以供在執行電路上執行。
調度器電路1309表示任何數量的不同調度器,包括保留站、中央指令視窗等。調度器電路1309耦合到或包括(一個或多個)物理暫存器檔案1315。該(一個或多個)物理暫存器檔案1315中的每一個表示一個或多個物理暫存器檔案,其中不同的物理暫存器檔案儲存一個或多個不同的資料類型,諸如純量整數、純量浮點、打包整數、打包浮點、向量整數、向量浮點、狀態(例如,作為要執行的下一條指令的位址的指令指標)、圖塊等。在一個實施例中,(一個或多個)物理暫存器檔案1315包括向量暫存器電路、寫入遮罩暫存器電路以及純量暫存器電路。這些暫存器硬體可以提供架構向量暫存器、向量遮罩暫存器以及通用暫存器。(一個或多個)物理暫存器檔案1315被引退電路1317重疊以圖示可以實現暫存器重命名和無序執行的各種方式(例如,使用(一個或多個)重新排序緩衝器和(一個或多個)引退暫存器檔案;使用(一個或多個)未來檔案、(一個或多個)歷史緩衝器以及(一個或多個)引退暫存器檔案;使用暫存器映射和暫存器池等)。引退電路1317和(一個或多個)物理暫存器檔案1315耦合到執行電路1311。
雖然在無序執行的上下文中描述了暫存器重命名,但是應當理解的是,可以在有序架構中使用暫存器重命名。雖然所圖示的處理器的實施例也可以包括單獨的指令和資料快取記憶體單元以及共用L2快取記憶體單元,但是替換的實施例可以具有用於指令和資料兩者的單個內部快取記憶體,諸如例如1級(L1)內部快取記憶體,或多級內部快取記憶體。在一些實施例中,系統可以包括內部快取記憶體和在核心和/或處理器外部的外部快取記憶體的組合。替換地,全部的快取記憶體都可以在核心和/或處理器外部。
執行電路1311是一組一個或多個執行電路,包括純量電路1321、向量/SIMD電路1323和矩陣運算電路1327,以及用以存取快取記憶體1313的記憶體存取電路1325。執行電路在各種類型的資料(例如,純量浮點數、打包整數、打包浮點數、向量整數、向量浮點數)上實行各種操作(例如,移位、加法、減法、乘法)。雖然一些實施例可以包括專用於特定功能或功能集的許多執行單元,但是其他實施例可以包括僅一個執行單元或全部都實行所有功能的多個執行單元。純量電路1321實行純量運算,向量/SIMD電路1323實行向量/SIMD運算,並且矩陣運算電路1327實行本文中詳述的矩陣(圖塊)運算。
作為示例,示例性暫存器重命名無序發佈/執行核心架構可以實現管線如下:1)指令獲取電路實行獲取和長度解碼階段;2)分支和解碼電路1303實行解碼階段;3)分配/重命名1307電路實行分配階段和重命名階段;4)調度器電路1309實行調度階段;5)(一個或多個)物理暫存器檔案(耦合到或被包括在調度器電路1309和分配/重命名1307電路中)和記憶體單元實行暫存器讀取/記憶體讀取階段;執行電路1311實行執行階段;6)記憶體單元和(一個或多個)物理暫存器檔案(一個或多個)單元實行寫回/記憶體寫入階段;7)各個單元可能涉及異常處理階段;以及8)引退單元和(一個或多個)物理暫存器檔案(一個或多個)單元實行提交階段。
核心可以支援一個或多個指令集(例如,x86指令集(具有已經被添加有更新版本的一些擴展);加利福尼亞州森尼維爾市的MIPS科技的MIPS指令集;加利福尼亞州森尼維爾市的ARM控股的ARM指令集(具有諸如NEON之類的可選的附加擴展),包括本文中描述的(一個或多個)指令。在一個實施例中,核心1390包括用以支援打包資料指令集擴展(例如AVX1、AVX2)的邏輯,由此允許使用打包資料來實行被許多多媒體應用使用的操作。
應當理解的是,核心可以支持多執行緒(執行操作或執行緒的兩個或更多個並行集合),並且可以用各種各樣的方式這麼做,該方式包括時間分片多執行緒、同時多執行緒(在單個物理核心為執行緒中的每一個提供邏輯核心的情況下,該物理核心是同時多執行緒的)或它們的組合(例如,時間分片獲取和解碼,以及其後諸如在英特爾®超執行緒技術中的同時多執行緒)。
圖14圖示了支援使用圖塊的矩陣運算的處理器核心管線的實施例。分支預測和解碼電路1403根據儲存在指令儲存1401中的指令來實行指令的分支預測、指令的解碼和/或兩者。例如,本文中詳述的指令可以儲存在指令儲存中。在一些實現方式中,單獨的電路被用於分支預測,並且在一些實施例中,使用微代碼1405將至少一些指令解碼成一個或多個微操作、微代碼入口點、微指令、其他指令或其他控制信號。分支預測和解碼電路1403可以使用各種不同的機制來實現。適合的機制的示例包括但不限於查閱資料表、硬體實現方式、可程式設計邏輯陣列(PLA)、微代碼唯讀記憶體(ROM)等。
分支預測和解碼電路1403耦合到分配/重命名1407電路,在一些實施例中,該分配/重命名1407電路耦合到調度器電路1409。在一些實施例中,這些電路通過實行下述各項中的一個或多個來提供暫存器重命名、暫存器分配和/或調度功能:1)將邏輯運算元值重命名為物理運算元值(例如,在一些實施例中是暫存器別名表),2)將狀態位元和標記分配給經解碼的指令,以及3)(例如,在一些實施例中,使用保留站)從指令池中調度出經解碼的指令以供在執行電路上執行。
調度器電路1409表示任何數量的不同調度器,包括保留站、中央指令視窗等。(一個或多個)調度器單元調度器電路1409耦合到或包括(一個或多個)物理暫存器檔案1415。(一個或多個)物理暫存器檔案1415中的每一個表示一個或多個物理暫存器檔案,其中不同的物理暫存器檔案儲存一個或多個不同的資料類型,諸如純量整數、純量浮點、打包整數、打包浮點、向量整數、向量浮點、狀態(例如,作為要執行的下一條指令的位址的指令指標)、圖塊等。在一個實施例中,(一個或多個)物理暫存器檔案1415包括向量暫存器電路、寫入遮罩暫存器電路以及純量暫存器電路。這些暫存器電路可以提供架構向量暫存器、向量遮罩暫存器以及通用暫存器。(一個或多個)物理暫存器檔案1415被引退電路1417重疊以圖示可以實現暫存器重命名和無序執行的各種方式(例如,使用(一個或多個)重新排序緩衝器和(一個或多個)引退暫存器檔案;使用(一個或多個)未來檔案、(一個或多個)歷史緩衝器以及(一個或多個)引退暫存器檔案;使用暫存器映射和暫存器池等)。引退電路1417和(一個或多個)物理暫存器檔案1415耦合到執行電路1411。
雖然在無序執行的上下文中描述了暫存器重命名,但是應當理解的是,可以在有序架構中使用暫存器重命名。雖然所圖示的處理器的實施例也可以包括單獨的指令和資料快取記憶體單元以及共用L2快取記憶體單元,但是替換的實施例可以具有用於指令和資料兩者的單個內部快取記憶體,諸如例如1級(L1)內部快取記憶體,或多級內部快取記憶體。在一些實施例中,系統可以包括內部快取記憶體和在核心和/或處理器外部的外部快取記憶體的組合。替換地,全部的快取記憶體都可以在核心和/或處理器外部。
執行電路1411包括一組一個或多個執行電路1427和一組一個或多個記憶體存取電路1425以存取快取記憶體1413。執行電路1427實行本文中詳述的矩陣(圖塊)運算。
作為示例,示例性暫存器重命名無序發佈/執行核心架構可以實現管線如下:1)指令獲取電路實行獲取和長度解碼階段;2)分支和解碼電路1403實行解碼階段;3)分配/重命名1407電路實行分配階段和重命名階段;4)調度器電路1409實行調度階段;5)(一個或多個)物理暫存器檔案(耦合到或被包括在調度器電路1409和分配/重命名1407電路中)和記憶體單元實行暫存器讀取/記憶體讀取階段;執行電路1411實行執行階段;6)記憶體單元和(一個或多個)物理暫存器檔案(一個或多個)單元實行寫回/記憶體寫入階段;7)各個單元可能涉及異常處理階段;以及8)引退單元和(一個或多個)物理暫存器檔案(一個或多個)單元實行提交階段。
核心可以支援一個或多個指令集(例如,x86指令集(具有已經被添加有更新版本的一些擴展);加利福尼亞州森尼維爾市的MIPS科技的MIPS指令集;加利福尼亞州森尼維爾市的ARM控股的ARM指令集(具有諸如NEON之類的可選的附加擴展),包括本文中描述的(一個或多個)指令。在一個實施例中,核心1490包括用以支援打包資料指令集擴展(例如AVX1、AVX2)的邏輯,由此允許使用打包資料來實行被許多多媒體應用使用的操作。
應當理解的是,核心可以支持多執行緒(執行操作或執行緒的兩個或更多個並行集合),並且可以用各種各樣的方式這麼做,該方式包括時間分片多執行緒、同時多執行緒(在單個物理核心為執行緒中的每一個提供邏輯核心的情況下,該物理核心是同時多執行緒的)或它們的組合(例如,時間分片獲取和解碼,以及其後諸如在英特爾®超執行緒技術中的同時多執行緒)。 佈局
遍及本說明書,使用列主要資料佈局來表達資料。行主要使用者應當根據其取向來轉換各項。圖15圖示了以列主要格式和行主要格式表達的矩陣的示例。如所示的,矩陣A是2×3矩陣。當該矩陣以列主要格式儲存時,列的資料元素是連續的。當此矩陣以行主要格式儲存時,行的資料元素是連續的。矩陣的一個眾所周知的屬性是 A T*B T=(BA) T,其中上標T意指變換。作為列主要資料來讀取行主要資料導致了矩陣看起來像變換矩陣。
在一些實施例中,在硬體中利用列主要語義,並且行主要資料要交換運算元次序,其具有的結果是矩陣的變換,但是對於後續的來自記憶體的行主要讀取來說,它是正確的非變換矩陣。
例如,如果有兩個行主矩陣要相乘:
Figure 02_image001
輸入矩陣將被儲存在線性記憶體(行主要的)中,如:
Figure 02_image003
作為具有尺寸為2×3和3×2的列主要的來讀取這些矩陣,它們將表現為:
Figure 02_image005
交換次序並且使矩陣相乘:
Figure 02_image007
轉換矩陣出來了,並且然後可以按列主要次序來儲存:
Figure 02_image009
並且在後續的行主要計算中使用,它是正確的未變換矩陣:
Figure 02_image011
示例使用
圖16圖示了矩陣(圖塊)的使用示例。在該示例中,矩陣C 1601包括兩個圖塊,矩陣A 1603包括一個圖塊,並且矩陣B 1605包括兩個圖塊。該圖示出了用以計算矩陣乘法的演算法的內迴圈的示例。在該示例中,來自矩陣C 1601的兩個結果圖塊tmm0和tmm1被用來累加中間結果。來自矩陣A 1603(tmm2)的一個圖塊被重複使用兩次,因為它與來自矩陣B 1605的兩個圖塊相乘。指針要從箭頭指示的方向載入新的A矩陣(圖塊)和兩個新的B矩陣(圖塊)。未示出的外迴圈調整針對C圖塊的指針。
如示出的示例性代碼包括圖塊配置指令的使用,並且被執行以配置圖塊使用,載入圖塊、用以處理圖塊的回路,將圖塊儲存到記憶體以及釋放圖塊使用。
圖17圖示了矩陣(圖塊)的使用實施例。在1701處,配置圖塊使用。例如,執行TILECONFIG指令以配置圖塊使用,包括設置每個圖塊的列數和行數。通常,在1703處從記憶體載入至少一個矩陣(圖塊)。使用矩陣(圖塊)在1705處實行至少一個矩陣(圖塊)運算。在1707處,將至少一個矩陣(圖塊)向外儲存到記憶體中,並且可以在1709處發生上下文切換。 示例性配置 圖塊配置硬體支援
如上面討論的,通常需要在使用之前配置圖塊使用。例如,可能不需要完全使用所有列和行。在一些實施例中,不僅不配置這些列和行節省電力,而且該配置可以被用來確定操作是否將生成錯誤。例如,如果M和L不相同,則形式為(N×M)*(L×N)的矩陣乘法通常不起作用。
在使用利用了圖塊的矩陣之前,在一些實施例中,要配置圖塊支援。例如,配置每個圖塊的列數和行數、要使用的圖塊等。TILECONFIG指令是對電腦本身的改進,因為它提供了對配置電腦以使用矩陣加速器(作為處理器核心的一部分,或者作為外部設備)的支援。特別地,TILECONFIG指令的執行使得要從記憶體中檢索配置並且將其應用於矩陣加速器內的矩陣(圖塊)設置。 圖塊使用配置
圖18圖示了根據實施例的對圖塊使用的配置的支援。記憶體1801包含要支援的矩陣(圖塊)的圖塊描述1803。
處理器/核心1805的指令執行資源1811將圖塊描述1803的各方面儲存到圖塊配置1817中。圖塊配置1817包括調色板表1813以詳述針對調色板的什麼圖塊被配置(每個圖塊中的列數和行數)以及矩陣支援正在使用的標記。特別地,指令執行資源1811被配置成如由圖塊配置1817所指定的那樣來使用圖塊。指令執行資源1811還可以包括機器專用暫存器或配置暫存器以指示圖塊使用。還設置了附加的值,諸如使用中和起始值。圖塊配置1817利用(一個或多個)暫存器1819來儲存圖塊使用和配置資訊。
圖19圖示了要支援的矩陣(圖塊)的描述的實施例。這是在執行STTILECFG指令時要儲存的描述。在此示例中,每個欄位都是一個位元組。在位元組[0]中,儲存了調色板ID 1901。調色板ID被用來索引調色板表1813,該調色板表1813按照調色板ID儲存了圖塊中的位元組數,以及與由該配置所定義的該ID相關聯的圖塊的每列位元組數。
位元組1儲存要儲存在“startRow”暫存器1903中的值,並且位元組2儲存要儲存在暫存器startP1905中的值。為了支援在這些事件之後重新啟動指令,指令儲存這些暫存器的資訊。為了支援在諸如上面詳述的中斷事件之後重新啟動指令,指令將資訊儲存在這些暫存器中。startRow值指示了應該被用於重新啟動的列。startP值指示了當使用對時,在用於儲存操作的列內的位置,並且在一些實施例中,指示了列的下半部分(在一對的下部圖塊中)或列的上半部分(在一對中的較高圖塊中)。通常,不需要列(行)中的位置。
除TILECONFIG和STTILECFG外,成功執行矩陣(圖塊)指令會將startRow和startP二者都設置為零。
在任何時候沒有重新啟動中斷的矩陣(圖塊)指令,軟體都有責任將startRow和startP值置零。例如,未遮罩的浮點例外處理常式可能決定在軟體中完成操作,並且將程式計數器值改到另一指令,通常是下一條指令。在這種情況下,軟體例外處理常式必須將作業系統呈現給它的異常中的startRow和startP值置零,然後才能恢復程式。隨後,作業系統將使用恢復指令來重新載入這些值。
位元組3儲存了圖塊對(每個圖塊1b)的指示1907。
位元組16-17儲存了針對圖塊0的列1913數和行1915數,位元組18-19儲存了針對圖塊1的列數和行數等。換言之,每個2位元組組指定了針對圖塊的列數和行數。如果不將2位元組的組用來指定圖塊參數,則它們的值應當為零。為比實現限制或調色板限制更多的圖塊指定圖塊參數會導致故障。未配置的圖塊被設置成具有0列0行的初始狀態。
最後,記憶體中的配置通常以結束描繪來結束,諸如若干個連續位元組全部為零。 示例性圖塊和圖塊配置儲存
圖20(A)-(D)圖示了(一個或多個)暫存器1819的示例。圖20(A)圖示了多個暫存器1819。如所示的,每個圖塊(TMM0 2001...TMMN 2003)具有單獨的暫存器,其中每個暫存器儲存該特定圖塊的列和行大小。StartP 2011和StartRow 2013被儲存在單獨的暫存器中。設置一個或多個狀態暫存器2015(例如,TILES_CONFIGURED=1)以指示圖塊被配置以供使用。
圖20(B)圖示了多個暫存器1819。如所示的,每個圖塊的列和行都具有單獨的暫存器。例如,TMM0列配置2021、TMM0行配置2023、StartP 2011和StartRow 2013被儲存在單獨的暫存器中。設置一個或多個狀態暫存器2015(例如,TILES_CONFIGURED=1)以指示圖塊被配置以供使用。
圖20(C)圖示了單個暫存器1819。如所示的,該暫存器儲存了圖塊配置(每個圖塊的列和行)2031,StartP 2011和StartRow 2013被儲存在作為打包資料暫存器的單個暫存器中。設置一個或多個狀態暫存器2015(例如,TILES_CONFIGURED=1)以指示圖塊被配置以供使用。
圖20(D)圖示了多個暫存器1819。如所示的,單個暫存器儲存了圖塊配置(每個圖塊的列和行)2031。StartP和StartRow被儲存在單獨的暫存器2011和2013中。設置一個或多個狀態暫存器2015(例如,TILES_CONFIGURED=1)以指示圖塊被配置以供使用。
可以考慮其他組合,諸如將初始暫存器組合成單個暫存器,其中它們被分別示出,等等。 TILEDPFP16PS
如上面提到的,通用矩陣乘法(又稱GEMM)的特殊硬體是改進某些應用(諸如,深度學習)的峰值計算性能(和能量效率)的好選項。只要輸出元素具有足夠的位元(即,多於輸入),這些應用中的一些(包括深度學習)可以對具有相對較少位元的輸入資料元素進行操作而不會損失精確度。
因此,所公開的方法和系統實行16位元浮點矩陣點積運算(TILEDPFP16PS),其採用具有16位元浮點元素的源矩陣(圖塊),實行點積乘法,並且將所得到的乘積與32位元單精確度目的地進行累加。
於一些實施例中,一16位元浮點格式具有符號欄位(1位元寬)、指數欄位(5位元寬)、及尾數(有效精密)欄位(11位元暗示地儲存,即,10位元寬明確地儲存)的16位元寬電機電子工程師學會(IEEE)(例如IEEE754標準)半精確度二進位浮點格式(IEEE浮動16)。於一些實施例中,另一16位元浮點格式為16位元寬、腦浮點格式(bfloat16)具有符號欄位(1位元寬)、指數欄位(8位元寬)、及尾數(有效精密)欄位(8位元暗示地儲存,即,7位元寬明確地儲存)。於一實施例中,尾數(有效精密)欄位係假定以具有值1的明確領導位元,除非指數欄位儲存以所有零。再者,32位元浮點格式可包括二進位32(依據IEEE標準),其有時指「單-精確」或「fp32」,例如具有符號欄位(1位元寬)、指數欄位(8位元寬)、及尾數(有效精密)欄位(24位元暗示地儲存,即,23位元寬明確地儲存)。
於一些實施例中,所公開的TILEDPFP16PS指令要由處理器執行,該處理器包括獲取電路以獲取具有欄位的指令,該欄位用以指定操作碼和具有單精確度元素的M×N目的地矩陣(圖塊)、M×K第一源矩陣(圖塊)和K×N第二源矩陣(圖塊)的位置,指定的第一和第二源矩陣的元素包括一對偶數(例如具有圖21A中該些源的各元素中之(0,1)對中0的一對指數)和奇數(例如具有圖21A中該些源的各元素中之(0,1)對中1的一對指數)16位元浮點值,其中該操作碼要指示執行電路對於指定的目的地矩陣(如圖塊)的每個元素(例如元素之M×N數的各者)而言,將來自指定的第一源矩陣(如圖塊)的列M的K對元素和來自指定的第二源矩陣(如圖塊)的行N的對應的K對元素轉換成單精確度值,將來自兩個指定的源矩陣(如圖塊)的經轉換的偶數元素相乘,並且將來自指定的源矩陣(如圖塊)的經轉換的奇數元素分別相乘,並且然後將那些乘積與元素(M,N)的先前內容分別累加成偶數乘積的一個和以及奇數乘積的一個和。
於一些實施例中,所揭露TILEDPFP16PS指令係用以被處理器執行,處理器包括獲取電路,用以獲取具有欄位的指令,該欄位用以指定操作碼,該操作碼用以指示執行電路對於該第一源矩陣之各元素與該第二源矩陣的對應元素,導致該半精度浮點值對單精度值之轉換、來自該對之第一值的經轉換單精度值之乘積以生成第一結果、來自該對之第二值的經轉換單精度值之乘積以生成第二結果、及該第一結果與該第二結果和該目的地矩陣之對應元素的先前內容之累加。
在一些實施例中,處理器還將包括其他支援硬體,諸如用以解碼所獲取的指令的解碼電路,以及用以如由操作碼指定的那樣回應於經解碼的指令的執行電路,如致使矩陣運算加速器(例如圖3中矩陣運算加速器307)實施TILEDPFP16PS指令之一或多(例如所有)動作。
圖21A是圖示了根據一些實施例的使用TILEDPFP16PS指令來加速矩陣乘法的方塊圖。如所示的,指令2101包括下述欄位,該欄位用以指定操作碼2102(例如,TILEDPFP16PS)和具有單精確度元素的M×N目的地矩陣(如圖塊)2104、M×K第一源矩陣(如圖塊)2106以及K×N第二源矩陣(如圖塊)2108的位置,指定的源矩陣具有包括一對16位元(例如IEEE半精確度)浮點值的元素。根據一些實施例,至少參照圖24、25A-B和26A-D進一步說明和描述TILEDPFP16PS指令的格式。
此處,指定的第一源矩陣(如圖塊)2112A具有M=4乘K=3的尺寸。指定的第二源矩陣(如圖塊)2112B具有K=3乘N=5的尺寸。出於說明性目的,K、M和N被示為具有不同的值,但是在其他實施例中,它們可以是相等的。
在操作的一實施例中,處理器2100要回應於操作碼2102(TILEDPFP16PS),對於指定的目的地矩陣(圖塊)2122的每個元素(M,N),該響應通過使用轉換電路2116A將來自指定的第一源矩陣(如圖塊)2112A的列M的K對元素,以及使用轉換電路2116B將來自指定的第二源矩陣(如圖塊)2112B的行N的K對元素轉換成單精確度的,例如,二進位32單精確度浮點,如由IEEE 794指定的。然後,處理器2100要使用乘法電路2118將K個經轉換的偶數值相乘在一起,並且將K個經轉換的奇數值相乘在一起,並且使用累加電路2120將K個乘積與元素(M,N)的先前內容進行累加。
在這裡說明了TILEDPFP16PS指令的性能,以用於在矩陣(如圖塊)位置處(例如,在C 1,0中(列,行)的索引為(1,0)設置目的地元素。於圖21A中1,“.0”表示一對的第一值且“.1”表示該對的第二值,例如這樣A 1,0.0為儲存於元素A 1,0中的一對值之第一值。於一些實施例中,處理器2100要使用轉換電路2116A和2116B來將來自指定的第一源矩陣(如圖塊)2112A的列M(=1)的K(=3)對元素和來自指定的第二源矩陣(如圖塊)2112B的行N(=0)的K(=3)對元素轉換成單精確度的。於一些實施例中,處理器2100(例如,矩陣運算電路,例如為矩陣運算加速器的部分)接著使用乘法電路2118將來自兩個指定的源矩陣(如圖塊)的經轉換的偶數元素相乘,並且將來自指定的源矩陣(如圖塊)的經轉換的奇數元素分別相乘,並且然後使用累加電路2120來將這些乘積與元素(M,N)的先前內容分別累加成偶數乘積的一個和以及奇數乘積的一個和,該元素(M,N)例如在這範例中所示是來自元素C(1,0)之FP32值。
於一實施例中,轉換電路2116A與2116B之各者首先將半精度值(例如IEEE浮動16格式)轉換為具有符號欄位(1位元寬)之浮動19格式、指數欄位(8位元寬)、及尾數(有效精密)欄位(10位元暗示地儲存,即,11位元寬明確地儲存),且接著由浮動19格式(例如中間的格式)至全精密格式(例如IEEE浮動32格式)(例如藉由附加全精密值之尾數(有效精密)值的第13最低有效位元(LSB)中的0至浮動19值的尾數(有效精密)值)。
如所示的,三個箭頭從指定的第一和第二源矩陣(如圖塊)中的每一個行進,以指示轉換和乘法並行發生。在一些實施例中,處理器通過並行地生成結果並將結果儲存到指定的目的地矩陣(如圖塊)的每個元素中來回應於經解碼的指令。在一些實施例中,生成新值並將其一次一列或一次一行地儲存到目的地中。
所公開的實施例通過允許軟體來實行具有減小的源元素大小的TILEDPFP16PS指令來改進替換的方法,這允許使用更少的記憶體空間和更少的記憶體頻寬,並且改進了某些應用的峰值計算性能(和能量效率)。在一些應用中(諸如深度學習),只要輸出元素具有足夠的位元(即,多於輸入),就可以對具有相對較少位元的輸入資料元素進行操作而不會損失精確度。
圖21B為一些實施例顯示用以執行TILEDPFP16PS (TDPFP16PS)指令之示例執行電路2114(例如矩陣運算電路)。示例執行電路2114包括第一資料寬度資料路徑(例如,16位元寬,例如,根據半精度格式)及更寬的第二資料路徑寬度(例如,32位元寬,例如,根據全精度格式),例如,具有為16位元寬之黑線(例如float16)與為32位元寬之灰線(例如float32)。例如,具有轉換(CVT)半精度(FP16)至全精度(FP32)電路,及全精度(FP32)融合乘積-累加(FMA)電路。例如,使用圖6中的FMA電路。用以執行TILEDPFP16PS指令之系統與方法進一步闡明與描述於至少圖22A-B、23與28A-B。
在某些實施例中,TILEDPFP16PS指令為延伸至ISA之圖塊(如AMX)架構的一部份,包括二維(2D)暫存器(如各圖塊暫存器識別為單一「圖塊暫存器」(如單一圖塊暫存器的單一指示器),例如相比於向量(如ZMM、YMM、或XMM)暫存器),且ISA可包括分離指令以自記憶體載入/儲存2D區塊(如連續位置之跨步集)、用以執行矩陣-矩陣乘法於三暫存器之指令(如矩陣C updated=矩陣A×矩陣B+矩陣C previous)、及/或用以執行元素對元素(elementwise)算術運算於二(或三)來源圖塊。在一實施例中,源矩陣或多源矩陣先載入(如經由主處理器)至快取(如第一階(L1)資料快取)且然後自快取被載入(例如經由圖塊載入指令之執行)至圖塊暫存器(例如矩陣運算加速器),例如,經由圖3中同調記憶體介面303。 示例性執行
圖22A是圖示了根據一些實施例的TILEDPFP16PS指令的示例性執行的虛擬程式碼。如所示的,指令2201包括操作碼2202(例如,TILEDPFP16PS)和(如圖塊)具有單精確度元素的M×N目的地矩陣2204、M×K第一源矩陣2206以及K乘N第二源矩陣2208的位置,指定的源矩陣具有包括一對16位元浮點值的元素。操作碼2202(TILEDPFP16PS)指示處理器要如虛擬程式碼2200所示的那樣,對於指定的目的地矩陣(如圖塊)的每個元素(M,N),將來自指定的第一源矩陣(如圖塊)的列M的K對元素以及來自指定的第二源矩陣(如圖塊)的行N的K對元素轉換成單精確度的,將來自兩個指定的源矩陣(如圖塊)的經轉換的偶數元素相乘,並且將來自兩個指定的源矩陣(如圖塊)的經轉換的奇數元素分別相乘,並且然後將這些乘積與元素(M,N)的先前內容分別累加成偶數乘積的一個和以及奇數乘積的一個和。在其他實施例中,乘法發生在轉換之前。
在一實施例中,架構特定機器暫存器(MSR) (如作為圖13中暫存器1315之一者) (如MXCSR暫存器儲存用於SSE暫存器控制及/或狀態資訊)被讀取(例如作為指令之執行的部分),例如,以判斷例外資訊。DAZ可指「反正規值為0」控制(如於MSR中)。於一些實施例中,半精度(如FP16)值可處理具有反正規/異常值。
在一實施例中,架構特定機器暫存器(MSR) MXCSR暫存器(例如MXCSR暫存器儲存用於SSE暫存器之控制及/或狀態資訊)不被讀取(如不被檢測及/或不更新)(例如作為指令之執行的部分)。在一些實施例中,用於指令之例外資訊於指令中是隱性的,例如,DAZ=1對浮點16(bfloat16)運算(如不諮詢MXCSR)內含及/或DAZ=0對浮點16運算(如不諮詢MXCSR)(如用於TILEDPFP16PS指令)內含。
在操作中,M、K和N要以若干種方式中的一種或多種來指定:作為對TILEDPFP16PS指令的運算元(如此處所示「t」為圖塊暫存器),作為對指定的操作碼的尾碼或首碼(星號在本文中被用作指代那些可選的尾碼和首碼的縮寫),作為被提供有指令的立即數的部分(例如,K、M和N均要被指定為(32位元)立即數中的不同的(例如8)位元),作為由軟體進行程式設計的控制暫存器的部分(例如,XTILECONFIG是由任一矩陣加速器配置指令(諸如TILECFG或XRSTORE*指令)載入的暫存器,並且通過矩陣保存指令(諸如XSAVE*)儲存),或者甚至作為架構預設值。
指令2201進一步指定目的地矩陣(如圖塊)位置2204、第一源矩陣(如圖塊)位置2206和第二源矩陣(如圖塊)位置2208。每個指定的矩陣(如圖塊)位置可以指向記憶體位置、向量暫存器的集合和圖塊暫存器的集合中的任何一個。
圖22B為依據一些實施例使用TILEDPFP16PS指令示例性輔助函數之虛擬程式碼(pseudocode)2220。如所示,虛擬程式碼2220界定make_fp32()函數、 write_row_and_zero()函數、zero_upper_rows()函數及zero_tileconfig_start()函數,其所有可由圖22A之TILEDPFP16PS虛擬程式碼被使用。
TILEDPFP16PS指令之執行係進一步闡明與描述於圖21、22A-B、23、28A-B與29A-B。 TILEDPFP16PS指令之示例格式係進一步闡明與描述於圖24-26D。 示例性 ( 一個或多個 ) 執行方法
圖23顯示了回應於TILEDPFP16PS指令的處理器的方塊流程圖。如流程圖2300所示,在2301處,處理器要使用獲取電路來獲取具有欄位的指令,該欄位用以指定操作碼和具有單精確度元素的M×N目的地矩陣、M×K第一源矩陣和K×N第二源矩陣的位置,指定的源矩陣具有包括一對16位元半精度浮點值的元素。
在使用處理器的物理暫存器檔案(例如,或使用一或更多二維(2D) (例如,AMX)圖塊暫存器,例如,形成自圖3中資料緩衝器的圖塊暫存器,其於某些實施例中與任何純量及/或向量(例如,一維矩陣)暫存器分離)來儲存矩陣(例如圖塊)的實施例中,由於目的地元素是源元素寬度的兩倍,因此在源中具有一對16位元單精度浮點格式值允許進行有效使用,例如當矩陣(例如圖塊)是向量暫存器的集合,具有相同類型的向量暫存器,其是128位元xmm暫存器、256位元ymm暫存器或512位元zmm暫存器。當矩陣被儲存在(例如AMX)圖塊暫存器中時,也可以實現這樣的有效使用。在其他實施例中,具有16位元浮點元素的單個源向量被轉換為儲存在寬度為源向量寬度的一半的目的地向量中的32位元元素。
於一些實施例中,指定的操作碼要指示執行電路對於指定的目的地矩陣的每個元素(M,N),將來自指定的第一源矩陣的列M的k對元素和來自指定的第二源矩陣的行n的k對元素轉換成單精確度的,將來自兩個指定的源矩陣(如圖塊)的經轉換的偶數元素相乘,並且將來自兩個指定的源矩陣(如圖塊)的經轉換的奇數元素分別相乘,並且然後將那些乘積與元素(m,n)的先前內容分別累加成偶數乘積的一個和以及奇數乘積的一個和。
於某些實施例中,指定的操作碼用以指示執行電路對於該第一源矩陣之各元素與該第二源矩陣的對應元素,導致該半精度浮點值對單精度值之轉換、來自該對之第一值的經轉換單精度值之乘積以生成第一結果、來自該對之第二值的經轉換單精度值之乘積以生成第二結果、及該第一結果與該第二結果和該目的地矩陣之對應元素的先前內容之累加。
在2303處,處理器要使用解碼電路來解碼所獲取的指令。例如,由諸如在本文中詳述的解碼電路之類的解碼電路來解碼所獲取的TILEDPFP16PS指令。在圖示系統的上下文中,解碼電路可為至少參照圖13、14和28A-B所說明和描述的解碼電路。
在2305處,(按照需要)對經解碼的指令的執行進行調度,在它可以在不同時間發生或者根本不發生的範圍內,這是可選的(如其虛線邊界指示的)。在2307處,處理器使用執行電路如由操作碼所指定的那樣來響應於經解碼的指令。
在一些實施例中,指令在2309處被提交或退出,在它可以在不同時間發生或者根本不發生的範圍內,這是可選的(如其虛線邊界指示的)。
參照圖3-14進一步說明和描述了執行電路。在一些實施例中,執行電路導致由(如卸載至)矩陣運算加速器之執行,諸如被圖示和描述為加速器307(圖3)的加速器。在一些實施例中,執行電路是矩陣運算電路,諸如矩陣運算電路405(圖4)、505(圖5)或1213(圖12)以及1327(圖13)。 示例性 ( 一個或多個 ) 指令格式
圖24是顯示了根據一些實施例的 TILEDPFP16PS指令的格式的方塊圖。如所示的,TILEDPFP16PS指令2400包括欄位,該欄位用以指定操作碼2402(TILEDPFP16PS*),其指示處理器要對於指定的目的地矩陣的每個元素(M,N)將來自指定的第一源矩陣的列M的K對元素和來自指定的第二源矩陣的行N的K對元素轉換成單精確度的,將來自兩個指定的源矩陣(如圖塊)的經轉換的偶數元素相乘,並且將來自兩個指定的源矩陣(如圖塊)的經轉換的奇數元素分別相乘,並且然後將這些乘積與元素(m,n)的先前內容分別累加成偶數乘積的一個和以及奇數乘積的一個和。
指令2400進一步包括目的地矩陣(如圖塊)位置2404、第一源矩陣(如圖塊)位置2406和第二源矩陣(如圖塊)位置2408。指定的源矩陣位置和目的地矩陣位置中的每一個可以處於記憶體位置、向量暫存器的集合和圖塊暫存器的集合(如AMX)中的任一個中。
TILEDPFP16PS指令2400進一步包括若干個可選參數以控制處理器的行為,該參數包括源元素格式2410、k(遮罩控制)及/或z (歸零控制)2412、M 2414和N 2416。在一些實施例中,N和M均為4、8、16和32中的任一個(如,M或N可以是32、64或更大)。在一些實施例中,N和M均是大於或等於4的整數。
操作碼2402被示出為包括星號,其要傳達的是可以添加附加的首碼和/或尾碼以指定指令行為。可以使用對操作碼2402的首碼或尾碼來指定指令修飾符2410、2412、2414和2416中的一個或多個,例如,指定指令之首碼和/或尾碼係用以被以矩陣運算加速器執行(例如包括FMA網格)。
在一些實施例中,可選指令修飾符2410、2412、2414和2416中的一個或多個被編碼在被可選地包括在指令2400中的立即數欄位(未示出)中。在一些實施例中,經由配置/狀態暫存器(例如,XTILECONFIG)來指定可選指令修飾符2410、2412、2414和2416中的一個或多個。
在一些實施例中,指令修飾符2410包括遮罩{k}208 (例如寫入遮罩)及/或歸零控制{z},例如,以遮罩{k}控制哪個目的地元素待被更新及/或歸零控制{z}以控制是否施加歸零(或合併)至所遮罩目的地元素。
當指令沒有指定任何一個或多個可選修飾符2410、2412、2414和2416時,它們可使用從圖塊架構的其他部分繼承的預設值或隱式參數。 詳細的示例性系統、處理器和模擬
本文中詳述的是用以執行上述指令的硬體、軟體等的示例。例如,下面描述的內容詳述了指令執行的各個方面,包括各種管線階段,諸如獲取、解碼、調度、執行、引退等。 指令集
指令集可以包括一個或多個指令格式。給定的指令格式可以定義各種欄位(例如,位元的數量、位元的位置)以除了其他之外指定了要被實行的操作(例如,操作碼)和要在其上實行操作的(一個或多個)運算元和/或(一個或多個)其他資料欄位(例如,遮罩)。一些指令格式通過指令範本(或子格式)的定義而被進一步分解。例如,具有給定指令格式的指令範本可以被定義為具有指令格式的欄位的不同子集(所包括的欄位通常以相同的次序,但是至少一些具有不同的位元位置,因為所包括的欄位較少)和/或被定義為具有被不同地解釋的給定欄位。因此,ISA的每個指令被使用給定的指令格式(以及如果被定義的話,以具有那個指令格式的一個給定指令範本)來表達,並且包括用於指定操作和運算元的欄位。例如,示例性ADD指令具有特定操作碼和指令格式,該指令格式包括用以指定該操作碼的操作碼欄位以及用以選擇運算元(源1/目的地以及源2)的運算元欄位;並且該ADD指令在指令流中的出現將在運算元欄位中具有選擇特定運算元的特定內容。已經發佈和/或公佈了被稱為高級向量擴展(AVX)(AVX1和AVX2)並使用向量擴展(VEX)編碼方案的一組SIMD擴展(例如,參見英特爾®64和IA-32架構軟體發展人員手冊,2014年9月;以及參見英特爾®高級向量擴展程式設計參考,2014年10月)。 示例性指令格式
本文中描述的(一個或多個)指令的實施例可以採用不同的格式來體現。附加地,以下詳述了示例性系統、架構和管線。可以在這樣的系統、架構和管線上執行(一個或多個)指令的實施例,但是實施例並不限於那些詳述的內容。
通用向量友好指令格式
向量友好指令格式是適合於向量指令的指令格式(例如,存在特定於向量運算的某些欄位)。儘管描述了其中通過向量友好指令格式支援向量和純量運算二者的實施例,但是替換的實施例僅使用向量運算向量友好指令格式。
圖25A-25B顯示了根據實施例的通用向量友好指令格式及其指令範本的方塊圖。圖25A顯示了根據實施例的通用向量友好指令格式及其類別A指令範本的方塊圖;而圖25B顯示了根據實施例的通用向量友好指令格式及其類別B指令範本的方塊圖。具體地,通用向量友好指令格式2500針對其定義了類別A和類別B指令範本,它們二者都不包括記憶體存取2505指令範本和記憶體存取2520指令範本。在向量友好指令格式的上下文中,術語通用指代沒有被綁定於任何特定指令集的指令格式。
將要描述其中向量友好指令格式支援以下內容的實施例:具有32位元(4位元組)或64位元(8位元組)資料元素寬度(或大小)的64位元組向量運算元長度(或大小)(並且因此,64位元組向量由16個雙字大小元素或者替換地8個四字大小的元素組成);具有16位元(2位元組)或8位元(1位元組)資料元素寬度(或大小)的64位元組向量運算元長度(或大小);具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)或8位元(1位元組)資料元素寬度(或大小)的32位元組向量運算元長度(或大小);以及具有32位元(4位元組)、64位元(8位元組)、16位元(2位元組)或8位元(1位元組)資料元素寬度(或大小)的16位元組向量運算元長度(或大小);替換的實施例可以支持具有更多、更少或不同資料元素寬度(例如,128位元(16位元組)資料元素寬度)的更多、更少和/或不同的向量運算元大小(例如,256位元組向量運算元)。
圖25A中的類別A指令範本包括:1)在無記憶體存取2505指令範本內,示出無記憶體存取、完整捨入控制類型運算2510指令範本和無記憶體存取、資料變換類型運算2515指令範本;以及2)在記憶體存取2520指令範本內,示出有記憶體存取、暫時性2525指令範本和記憶體存取、非暫時性2530指令範本。圖25B中的類別B指令範本包括:1)在無記憶體存取2505指令範本內,示出無記憶體存取、寫入遮罩控制、部分捨入控制類型運算2512指令範本和無記憶體存取、寫入遮罩控制、vsize類型運算2517指令範本;以及2)在記憶體存取2520指令範本內,示出有記憶體存取、寫入遮罩控制2527指令範本。
通用向量友好指令格式2500以圖25A-25B中圖示的次序包括了下面列出的以下欄位。
格式欄位2540—該欄位中的特定值(指令格式識別字值)唯一地標識向量友好指令格式,並且因此唯一地標識在指令流中的採用向量友好指令格式的指令的出現。如此,該欄位在以下意義上是可選的,即該欄位對於僅具有通用向量友好指令格式的指令集是不需要的。
基本操作欄位2542—其內容區分不同的基本操作。
暫存器索引欄位2544—其內容直接地或通過位址生成來指定源運算元和目的地運算元的位置,無論它們是在暫存器中還是在記憶體中。這些包括足夠數量的位元以從PxQ(例如,32x512、16x128、32x1024、64x1024)暫存器檔案中選擇N個暫存器。雖然一個實施例支持多達三個源和一個目的地暫存器,但是替換的實施例可以支持更多或更少個源和目的地暫存器(例如,可以支援多達兩個源,其中這些源之一還充當目的地;可以支援多達三個源,其中這些源之一還充當目的地;可以支持多達兩個源和一個目的地)。
修飾符欄位2546—其內容將指定了記憶體存取的採用通用向量指令格式的指令的出現與不指定記憶體存取的採用通用向量指令格式的指令的出現區分開來;即,在無記憶體存取2505指令範本與記憶體存取2520指令範本之間進行區分。記憶體存取操作讀取和/或寫入記憶體層級結構(在一些情況下,使用暫存器中的值來指定源和/或目的地位址),而非記憶體存取操作不這樣做(例如,源和目的地是暫存器)。儘管在一個實施例中,該欄位還在三種不同的方式之間進行選擇以實行記憶體位址計算,但是替換的實施例可以支持更多、更少或不同的方式來實行記憶體位址計算。
擴充操作欄位2550—除了基本操作之外,其內容還區分要實行各種各樣不同操作中的哪一個操作。該欄位是上下文特定的。在一個實施例中,該欄位被劃分成類別欄位2568、阿爾法(alpha)欄位2552和貝塔(beta)欄位2554。擴充操作欄位2550允許在單個指令而不是在2、3或4個指令中實行公共操作群組。
縮放欄位2560—其內容允許對用於記憶體位址生成(例如,用於使用2 scale*索引+基址的位址生成)的索引欄位的內容進行縮放。
位移欄位2562A—其內容被用作記憶體位址生成的部分(例如,用於使用2 scale*索引+基址+位移的位址生成)。
位移因數欄位2562B(注意,位移欄位2562A直接在位移因數欄位2562B之上的並置指示了一個或另一個被使用)——其內容被用作位址生成的部分;其指定了要通過記憶體存取(N)的大小進行縮放的位移因數—其中N是記憶體存取中的位元組數(例如,用於使用2 scale*索引+基址+經縮放的位移的位址生成)。忽略冗餘的低階位,並且因此位移因數欄位的內容被乘以記憶體運算元總大小(N),以便生成要在計算有效位址中使用的最終位移。由處理器硬體在執行時間基於完整操作碼欄位2574(在本文中稍後描述)和資料操縱欄位2554C來確定N的值。位移欄位2562A和位移因數欄位2562B在以下意義上是可選的,即它們沒有被用於無記憶體存取2505指令範本和/或不同的實施例可以僅實現兩個中的一個或者兩個都不實現。
資料元素寬度欄位2564—其內容區分出要使用多個資料元素寬度中的哪一個(在一些實施例中針對全部指令;在其他實施例中僅針對一些指令)。該欄位在以下意義上是可選的,即如果僅支持一個資料元素寬度和/或使用操作碼的某個方面來支持資料元素寬度,則並不需要該欄位。
寫入遮罩欄位2570—其內容逐資料元素位置地控制目的地向量運算元中的該資料元素位置是否反映基本操作和擴充操作的結果。類別A指令範本支援合併-寫入遮罩,而類別B指令範本支援合併-寫入遮罩和置零-寫入遮罩兩者。當合併時,向量遮罩允許在執行(由基本操作和擴充操作指定的)任何操作期間保護目的地中的任何元素集免於更新;在另外一個實施例中,保留其中對應的遮罩位元具有0的目的地的每個元素的舊值。與之相對,當置零時,向量遮罩允許在執行(由基本操作和擴充操作指定的)任何操作期間將目的地中的任何元素集置零;在一個實施例中,當對應的遮罩位具有0值時,將目的地的元素設置成0。該功能的子集是用以控制正被實行的操作的向量長度的能力(即,從第一個到最後一個,元素的跨度被修改);然而,沒有必要使被修改的元素是連續的。因此,寫入遮罩欄位2570允許部分向量操作,包括載入、儲存、算術、邏輯等。雖然描述了其中寫入遮罩欄位2570的內容選擇了包含要被使用的寫入遮罩的多個寫入遮罩暫存器中的一個(並且因此寫入遮罩欄位2570的內容間接標識要被實行的遮罩)的實施例,但是替換實施例代替地或附加地允許遮罩寫入欄位2570的內容直接指定要被實行的遮罩。
立即數欄位2572—其內容允許立即數的規範。該欄位在以下意義上是可選的,即它在不支持立即數的具有通用向量友好格式的實現方式中是不存在的,並且它在不使用立即數的指令中是不存在的。
類別欄位2568—其內容在不同類別的指令之間進行區分。參照圖25A-B,該欄位的內容在類別A與類別B指令之間進行選擇。在圖25A-B中,圓角方塊被用來指示特定值在一欄位中存在(例如,在圖25A-B中分別是針對類別欄位2568的類別A 2568A和類別B 2568B)。 類別 A 的指令範本
在類別A的非記憶體存取2505指令範本的情況下,阿爾法欄位2552被解釋為RS欄位2552A,其內容區分要實行不同擴充操作類型中的哪一個(例如,針對無記憶體存取、捨入類型運算2510和無記憶體存取、資料變換類型運算2515指令範本來分別指定捨入2552A.1和資料變換2552A.2),而貝塔欄位2554區分要實行所指定類型的運算中的哪一個。在無記憶體存取2505指令範本中,縮放欄位2560、位移欄位2562A和位移縮放欄位2562B不存在。 無記憶體存取指令範本-完整捨入控制類型運算
在無記憶體存取完整捨入控制類型運算2510指令範本中,貝塔欄位2554被解釋為捨入控制欄位2554A,其(一個或多個)內容提供靜態捨入。儘管在所描述的實施例中,捨入控制欄位2554A包括:抑制所有浮點異常(SAE)欄位2556和捨入運算控制欄位2558,但是替換的實施例可以支援可以將這些概念都編碼到同一欄位中,或者僅具有這些概念/欄位中的一個或另一個(例如,可以僅具有捨入運算控制欄位2558)。
SAE欄位2556—其內容區分是否要禁用異常事件報告;當SAE欄位2556的內容指示抑制被啟用時,給定的指令不報告任何種類的浮點異常標記,並且不引發任何浮點例外處理常式。
捨入運算控制欄位2558—其內容區分要實行捨入運算群組中的哪一個(例如,向上捨入、向下捨入、捨入到零和捨入到最接近)。因此,捨入運算控制欄位2558允許逐指令地改變捨入模式。在其中處理器包括用於指定捨入模式的控制暫存器的一個實施例中,捨入運算控制欄位2550的內容覆蓋該暫存器值。 無記憶體存取指令範本—資料變換類型運算
在無記憶體存取資料變換類型運算2515指令範本中,貝塔欄位2554被解釋為資料變換欄位2554B,其內容區分要實行多個資料變換中的哪一個(例如,無資料變換、調配(swizzle)、廣播)。
在類別A的記憶體存取2520指令範本的情況下,阿爾法欄位2552被解釋為驅逐提示欄位2552B,其內容區分要使用驅逐提示中的哪一個(在圖25A中,針對記憶體存取、暫時性2525指令範本和記憶體存取、非暫時性2530指令範本來分別指定暫時性2552B.1和非暫時性2552B.2),而貝塔欄位2554被解釋為資料操縱欄位2554C,其內容區分要實行多個資料操縱操作(也被稱為基元)中的哪一個(例如,無操縱;廣播;源的上轉換;以及目的地的下轉換)。記憶體存取2520指令範本包括縮放欄位2560,以及可選地包括位移欄位2562A或位移縮放欄位2562B。
向量記憶體指令利用轉換支援來實行從記憶體載入向量以及將向量儲存到記憶體。與利用常規向量指令一樣,向量記憶體指令以資料元素的方式從記憶體傳遞資料/向記憶體傳遞資料,其中實際傳遞的元素由被選為寫入遮罩的向量遮罩的內容來指定。 記憶體存取指令範本—暫時性
暫時性資料是有可能被足夠快地重新使用以受益於高速存取的資料。然而,這是一個提示,並且不同的處理器可以用不同的方式來實現它,該方式包括完全忽略該提示。 記憶體存取指令範本—非暫時性
非暫時性資料是不太可能被足夠快地重新使用以受益於一級快取記憶體中的高速存取的資料,並且應該被給予驅逐的優先權。然而,這是一個提示,並且不同的處理器可以用不同的方式來實現它,該方式包括完全忽略該提示。 類別 B 的指令範本
在類別B的指令範本的情況下,阿爾法欄位2552被解釋為寫入遮罩控制(Z)欄位2552C,其內容區分由寫入遮罩欄位2570控制的寫入遮罩應該是合併還是置零。
在類別B的非記憶體存取2505指令範本的情況下,貝塔欄位2554的部分被解釋為RL欄位2557A,其內容區分要實行不同擴充操作類型中的哪一個(例如,針對無記憶體存取、寫入遮罩控制、部分捨入控制類型運算2512指令範本和無記憶體存取、寫入遮罩控制、VSIZE類型運算2517指令範本來分別指定捨入2557A.1和向量長度(VSIZE)2557A.2),而貝塔欄位2554的其餘部分區分要實行指定類型的操作中哪一個操作。在無記憶體存取2505指令範本中,縮放欄位2560、位移欄位2562A和位移縮放欄位2562B不存在。
在無記憶體存取、寫入遮罩控制、部分捨入控制類型運算2510指令範本中,貝塔欄位2554的其餘部分被解釋為捨入運算欄位2559A,並且異常事件報告被禁用(給定指令不報告任何種類的浮點異常標誌,並且不引發任何浮點例外處理常式)。
捨入運算控制欄位2559A—就像捨入運算控制欄位2558一樣,其內容區分要實行捨入運算群組中的哪一個(例如,向上捨入、向下捨入、捨入到零和捨入到最接近)。因此,捨入運算控制欄位2559A允許逐指令地改變捨入模式。在其中處理器包括用於指定捨入模式的控制暫存器的一個實施例中,捨入運算控制欄位2550的內容覆蓋該暫存器值。
在無記憶體存取、寫入遮罩控制、VSIZE類型運算2517指令範本中,貝塔欄位2554的其餘部分被解釋為向量長度欄位2559B,其內容區分要對其實行多個資料向量長度中的哪一個(例如,128、256或512位元組)。
在類別B的記憶體存取2520指令範本的情況下,貝塔欄位2554的部分被解釋為廣播欄位2557B,其內容區分是否要實行廣播類型資料操縱操作,而貝塔欄位2554的其餘部分被解釋為向量長度欄位2559B。記憶體存取2520指令範本包括縮放欄位2560,以及可選地包括位移欄位2562A或位移縮放欄位2562B。
關於通用向量友好指令格式2500,示出了包括格式欄位2540、基本操作欄位2542和資料元素寬度欄位2564的完整操作碼欄位2574。雖然示出了其中完整操作碼欄位2574包括全部這些欄位的一個實施例,但是在不支援全部這些欄位的實施例中,完整操作碼欄位2574包括少於全部這些欄位。完整操作碼欄位2574提供操作代碼(操作碼)。
擴充操作欄位2550、資料元素寬度欄位2564和寫入遮罩欄位2570允許以通用向量友好指令格式逐指令地來指定這些特徵。
寫入遮罩欄位和資料元素寬度欄位的組合創建了定類型的指令,因為它們允許基於不同的資料元素寬度來應用遮罩。
在類別A和類別B中找到的各種指令範本在不同情形中是有益的。在一些實施例中,不同處理器或處理器內的不同核心可以僅支援類別A、僅支援類別B或支持兩個類別。例如,意圖用於通用計算的高性能通用無序核心可以僅支援類別B,主要意圖用於圖形和/或科學(通量)計算的核心可以僅支援類別A,而意圖用於兩者的核心可以支援兩者(當然,具有來自兩個類別的範本和指令的某個混合的核心在本發明的範圍內,而不是來自兩個類別的所有範本和指令都在本發明的範圍內)。而且,單個處理器可以包括多個核心,其全部都支援相同的類別或者其中不同的核心支持不同的類別。例如,在具有單獨圖形部件和通用核心的處理器中,主要意圖用於圖形和/或科學計算的圖形核心之一可以僅支援類別A,而一個或多個通用核心可以是具有意圖用於通用計算的無序執行和暫存器重命名的高性能通用核心,它們僅支援類別B。另一個沒有單獨圖形核心的處理器可以包括多一個通用有序或無序核心,它們支持類別A和類別B兩者。當然,來自一個類別的特徵也可以在不同實施例中以另一個類別來實現。以高階語言編寫的程式將被放進(例如,僅即時編譯或靜態編譯)各種各樣不同的可執行形式,包括:1)僅具有由目標處理器支援以供執行的(一個或多個)類別的指令的形式;或者2)具有使用全部類別的指令的不同組合編寫的替換常式且具有控制流程代碼的形式,該控制流程代碼基於由當前正執行代碼的處理器所支援的指令來選擇要執行的常式。 示例性特定向量友好指令格式
圖26A是圖示了根據實施例的示例性特定向量友好指令格式的方塊圖。圖26A示出了特定向量友好指令格式2600,其在以下意義上是特定的,即該特定向量友好指令格式指定位置、大小、解釋和欄位次序,以及針對那些欄位中的一些欄位的值。特定向量友好指令格式2600可以被用來擴展x86指令集,並且因此一些欄位與現有的x86指令集及其擴展(例如,AVX)中所使用的那些欄位相似或相同。此格式與具有擴展的現有x86指令集的首碼編碼欄位、實際操作碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位和立即數欄位保持一致。圖示了來自圖25的欄位,其中來自圖26A的欄位映射成來自圖25的欄位。
應該理解的是,儘管出於說明性目的,在通用向量友好指令格式2500的上下文中參照特定向量友好指令格式2600描述了實施例,但是除了所要求保護的地方以外,本發明不限於該特定向量友好指令格式2600。例如,雖然特定向量友好指令格式2600被示為具有特定大小的欄位,但是通用向量友好指令格式2500設想了針對各種欄位的各種各樣可能的大小。作為特定示例,雖然在特定向量友好指令格式2600中,資料元素寬度欄位2564被圖示為一位元欄位,但是本發明不限於此(即,通用向量友好指令格式2500設想了其他大小的資料元素寬度欄位2564)。
通用向量友好指令格式2500包括在下面按照圖26A中圖示的次序列出的以下欄位。
EVEX首碼2602(位元組0-3)—以四位元組形式進行編碼。
格式欄位2540(EVEX位元組0,位元[7:0])—第一位元組(EVEX位元組0)是格式欄位2540,並且它包含0x62(在一個實施例中是被用於區分向量友好指令格式的唯一值)。
第二-第四位元組(EVEX位元組1-3)包括提供特定性能的多個位元欄位。
REX欄位2605(EVEX位元組1,位元[7-5])—由EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)和2557BEX位元組1,位元[5]-B)組成。EVEX.R、EVEX.X和EVEX.B位元欄位提供了與對應的VEX位元欄位相同的功能,並且使用1s補數形式來編碼,即,ZMM0被編碼為1111B,ZMM15被編碼為0000B。指令的其它欄位如本領域中已知的那樣來編碼暫存器索引的三個較低位元(rrr、xxx和bbb),使得可以通過添加EVEX.R、EVEX.X和EVEX.B來形成Rrrr、Xxxx和Bbbb。
REX'欄位2510—這是REX'欄位2510的第一部分,並且是被用來對擴展的32暫存器集的較高16個或較低16個進行編碼的EVEX.R'位元欄位(EVEX位元組1,位元[4]-R')。在一個實施例中,這一位元連同如下面指示的其他位元一起以位元反轉的格式被儲存,以(在公知的x86 32位元模式中)與BOUND指令進行區分,BOUND指令的真實操作碼位元組為62,但是在MOD R/M欄位(如下所述)中不接受MOD欄位中的值11;替換的實施例不儲存這個和下面以反轉格式指示的其他位元。值1被用來對較低的16個暫存器進行編碼。換言之,R'Rrrr通過組合EVEX.R'、EVEX.R和來自其他欄位的其他RRR來形成。
操作碼映射欄位2615(EVEX位元組1,位元[3:0]-mmmm)—其內容對隱含式前導操作碼位元組(0F、0F 38或0F 3)進行編碼。
資料元素寬度欄位2564(EVEX位元組2,位元[7]-W)—由符號EVEX.W表示。EVEX.W被用來定義資料類型(32位元資料元素或64位元資料元素)的細微性(大小)。
EVEX.vvvv 2620(EVEX位元組2,位元[6:3]-vvvv)—EVEX.vvvv的角色可以包括以下內容:1) EVEX.vvvv對第一源暫存器運算元進行編碼,以反轉(1s補數)形式指定,並且對具有2個或更多個源運算元的指令有效;2)EVEX.vvvv對目的地暫存器運算元進行編碼,以1s補數形式指定以用於某些向量移位;或者3)EVEX.vvvv不對任何運算元進行編碼,該欄位被保留,並且應該包含1111b。因此,EVEX.vvvv欄位2620對以反轉(1s補數)形式儲存的第一源暫存器指定符的4個低階位元進行編碼。取決於指令,額外不同的EVEX位元欄位被用來將指定符大小擴展到32個暫存器。
EVEX.U 2568類別欄位(EVEX位元組2,位元[2]-U)—如果EVEX.U=0,則其指示類別A或EVEX.U0;如果EVEX.U=1,則其指示類別B或EVEX.U1。
首碼編碼欄位2625(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首碼編碼,並且因此不需要擴展。
阿爾法欄位2552(EVEX位元組3,位元[7]-EH;也被稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮罩控制以及EVEX.N;也用α來圖示)—如前所述,該欄位是上下文特定的。
貝塔欄位2554(EVEX位元組3,位元[6:4]-SSS,也被稱為EVEX.s 2-0、EVEX.r 2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ來圖示)—如前所述,該欄位是上下文特定的。
REX'欄位2510—這是REX'欄位的剩餘部分,並且是可以被用來對擴展的32個暫存器集的較高16個或較低16個進行編碼的EVEX.V'位元欄位(EVEX位元組3,位元[3]-V')。以位元反轉的格式來儲存該位元。值1被用來對較低16個暫存器進行編碼。換言之,V'VVVV是通過組合EVEX.V'、EVEX.vvvv形成的。
寫入遮罩欄位2570(EVEX位元組3,位元[2:0]-kkk)—其內容如前所述指定了寫入遮罩暫存器中的暫存器的索引。在一個實施例中,特定值EVEX.kkk=000具有特殊行為,這意味著沒有寫入遮罩被用於該特定指令(這可以用各種各樣的方式來實現,該方式包括使用硬連線到全部1的寫入遮罩或者繞過遮罩硬體的硬體)。
真實操作碼欄位2630(位元組4)也被稱為操作碼位元組。在此欄位中指定操作碼的部分。
MOD R/M欄位2640(位元組5)包括MOD欄位2642、Reg欄位2644和R/M欄位2646。如前所述,MOD欄位2642的內容在記憶體存取與非記憶體存取操作之間進行區分。Reg欄位2644的角色可以被總結為兩種情形:對目的地暫存器運算元或源暫存器運算元進行編碼,或者被視為操作碼擴展並且不被用來對任何指令運算元進行編碼。R/M欄位2646的角色可以包括以下內容:對引用記憶體位址的指令運算元進行編碼或者對目的地暫存器運算元或源暫存器運算元進行編碼。
縮放、索引、基本(SIB)位元組(位元組6)—如前所述,SIB 2650的內容被用於記憶體位址生成。SIB.xxx 2654和SIB.bbb 2656—先前已經關於暫存器索引Xxxx和Bbbb提及了這些欄位的內容。
位移欄位2562A(位元組7-10)—當MOD欄位2642包含10時,位元組7-10是位移欄位2562A,並且它與舊有32位元位移(disp32)一樣工作並且以位元組細微性工作。
位移因數欄位2562B(位元組7)—當MOD欄位2642包含01時,位元組7是位移因數欄位2562B。該欄位的位置與舊有x86指令集8位元位移(disp8)(其以位元組細微性工作)的位置相同。由於disp8是符號擴展的,它只能處理(address)-128和+127位元組之間的偏移;就64位元組快取記憶體行而言,disp8使用8位元,其只能被設置成4個真正有用的值-128、-64、0和64;因為經常需要更大的範圍,所以使用disp32;然而,disp32需要4個位元組。與disp8和disp32相反,位移因數欄位2562B是disp8的重新解釋;當使用位移因數欄位2562B時,實際位移由位移因數欄位的內容乘以記憶體運算元存取(N)的大小來確定。這種類型的位移被稱為disp8*N。這減少了平均指令長度(單個位元組被用於位移,但是具有大得多的範圍)。這樣的經壓縮的位移假設有效位移是記憶體存取的細微性的倍數,並且因此不需要對位址偏移的冗餘低階位元進行編碼。換言之,位移因數欄位2562B替代舊有x86指令集的8位元位移。因此,以與x86指令集8位元位移相同的方式對位移因數欄位2562B的位移進行編碼(因此在ModRM/SIB編碼規則中沒有變化),唯一的例外是disp8被超載為disp8*N。換言之,編碼規則或編碼長度方面沒有變化,而是僅在由硬體解釋位移值方面有變化(其需要按照記憶體運算元的大小來縮放位移以獲得按位元組的位址偏移)。立即數欄位2572如先前描述的那樣進行操作。 完整操作碼欄位
圖26B是圖示了根據一個實施例的構成完整操作碼欄位2574的特定向量友好指令格式2600的欄位的方塊圖。具體地,完整操作碼欄位2574包括格式欄位2540、基本操作欄位2542和資料元素寬度(W)欄位2564。基本操作欄位2542包括首碼編碼欄位2625、操作碼映射欄位2615和真實操作碼欄位2630。
暫存器索引欄位
圖26C是圖示了根據一個實施例的構成暫存器索引欄位2544的特定向量友好指令格式2600的欄位的方塊圖。具體地,暫存器索引欄位2544包括REX欄位2605、REX'欄位2610、MODR/M.reg欄位2644、MODR/M.r/m欄位2646、VVVV欄位2620、xxx欄位2654以及bbb欄位2656。 擴充操作欄位
圖26D是圖示了根據一個實施例的構成擴充操作欄位2550的特定向量友好指令格式2600的欄位的方塊圖。當類別(U)欄位2568包含0時,它表示EVEX.U0(類別A 2568A);當它包含1時,它表示EVEX.U1(類別B 2568B)。當U=0且MOD欄位2642包含11(表示無記憶體存取操作)時,阿爾法欄位2552(EVEX位元組3,位元[7]-EH)被解釋為rs欄位2552A。當rs欄位2552A包含1(捨入2552A.1)時,貝塔欄位2554(EVEX位元組3,位元[6:4]-SSS)被解釋為捨入控制欄位2554A。捨入控制欄位2554A包括一位元SAE欄位2556和兩位元捨入運算欄位2558。當rs欄位2552A包含0(資料變換2552A.2)時,貝塔欄位2554(EVEX位元組3,位元[6:4]-SSS)被解釋為三位元資料變換欄位2554B。當U=0且MOD欄位2642包含00、01或10(表示記憶體存取操作)時,貝塔欄位2552(EVEX位元組3,位元[7]-EH)被解釋為驅逐提示(EH)欄位2552B,並且貝塔欄位2554(EVEX位元組3,位元[6:4]-SSS)被解釋為三位元資料操縱欄位2554C。
當U=1時,阿爾法欄位2552(EVEX位元組3,位元[7]-EH)被解釋為寫入遮罩控制(Z)欄位2552C。當U=1且MOD欄位2642包含11(表示無記憶體存取操作)時,貝塔欄位2554(EVEX位元組3,位元[4]-S 0)的部分被解釋為RL欄位2557A;當它包含1(捨入2557A.1)時,貝塔欄位2554的其餘部分(EVEX位元組3,位元[6-5]-S 2-1)被解釋為捨入運算欄位2559A,而當RL欄位2557A包含0(VSIZE 2557A.2)時,貝塔欄位2554(EVEX位元組3,位元 [6-5]-S 2-1)的其餘部分被解釋為向量長度欄位2559B(EVEX位元組3,位元[6-5]-L 1-0)。當U=1且MOD欄位2642包含00、01或10(表示記憶體存取操作)時,貝塔欄位2554 (EVEX位元組3,位元[6:4]-SSS)被解釋為向量長度欄位2559B(EVEX位元組3,位元[6-5]-L 1-0)和廣播欄位2557B (EVEX位元組3,位元[4]-B)。 示例性暫存器架構
圖27是根據一個實施例的暫存器架構2700的方塊圖。在圖示的實施例中,有32個512位元寬的向量暫存器2710;這些暫存器被引用為zmm0至zmm31。將較低16個zmm暫存器的低階256位元覆蓋在暫存器ymm0-16上。將較低16個zmm暫存器的低階128位元(ymm暫存器的低階128位元)覆蓋在暫存器xmm0-15上。特定向量友好指令格式2600在這些疊覆的暫存器檔案上進行操作,如下表圖示的。
可調向量長度 類別 操作 暫存器
不包括向量長度欄位2559B的指令模板 A( 25A;U=0) 2510, 2515, 2525, 2530 zmm暫存器(向量長度為64位元組)
B( 25B;U=1) 2512 zmm 暫存器(向量長度為64位元組)
包括向量長度欄位2559B的指令模板 B( 25B;U=1) 2517, 2527 zmm, ymm, 或xmm暫存器(向量長度為64位元組,32位元組,或16位元組)取決於向量長度欄位2559B
換言之,向量長度欄位2559B在最大長度與一個或多個其他較短長度之間進行選擇,其中每個這樣的較短長度是前一長度的一半;並且沒有向量長度欄位2559B的指令範本在最大向量長度上進行操作。另外,在一個實施例中,特定向量友好指令格式2600的類別B指令範本在打包或純量單/雙精度浮點數據以及打包或純量整數資料上進行操作。純量運算是對zmm/ymm/xmm暫存器中的最低階資料元素位置實行的運算;取決於實施例,較高階資料元素位置保持與指令之前相同或被置零。
寫入遮罩暫存器2715—在圖示的實施例中,有8個寫入遮罩暫存器(k0至k7),每個的大小為64位元。在替換的實施例中,寫入遮罩暫存器2715的大小為16位元。如前所述,在一個實施例中,向量遮罩暫存器k0不能被用作寫入遮罩;當通常指示k0的編碼被用於寫入遮罩時,它選擇0xFFFF的硬連線寫入遮罩,從而有效地禁用對該指令進行寫入遮罩。
通用暫存器2725—在所圖示的實施例中,有十六個64位元通用暫存器,它們與現有x86定址模式一起使用以對記憶體運算元進行定址。這些暫存器通過名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15來引用。
純量浮點堆疊暫存器檔案(x87堆疊)2745,在其上對MMX打包整數平坦暫存器檔案2750進行別名—在所圖示的實施例中,x87堆疊是被用來使用x87指令集擴展在32/64/80位元浮點數據上實行純量浮點運算的8元素堆疊;而MMX暫存器被用來對64位元打包整數資料實行操作,以及保存MMX與XMM暫存器之間實行的某些操作的運算元。
替換的實施例可以使用更寬或更窄的暫存器。附加地,替換的實施例可以包括更多、更少或不同的暫存器檔案和暫存器。
示例性核心架構、處理器和電腦架構
可以用不同的方式、出於不同的目的以及在不同的處理器中實現處理器核心。例如,這樣的核心的實現方式可以包括:1)意圖用於通用計算的通用有序核心;2)意圖用於通用計算的高性能通用無序核心;3)主要意圖用於圖形和/或科學(通量)計算的專用核心。不同處理器的實現方式可以包括:1)包括意圖用於通用計算的一個或多個通用有序核心和/或意圖用於通用計算的一個或多個通用無序核心的CPU;以及2)包括主要意圖用於圖形和/或科學(通量)的一個或多個專用核心的輔助處理器。這樣的不同處理器導致不同的電腦系統架構,其可以包括:1)輔助處理器在與CPU分開的晶片上;2)輔助處理器在與CPU相同的封裝中的單獨晶粒上;3)輔助處理器在與CPU相同的晶粒上(在這種情況下,這樣的輔助處理器有時被稱為專用邏輯(諸如集成圖形和/或科學(通量)邏輯),或者被稱為專用核心);以及4)晶片上系統,其可以在同一晶粒上包括所描述的CPU(有時被稱為(一個或多個)應用核心或(一個或多個)應用處理器)、上述輔助處理器以及附加功能。接下來描述示例性核心架構,隨後描述示例性處理器和電腦架構。 示例性核心架構 有序和無序核心方塊圖
圖28A是圖示了根據實施例的示例性有序管線和示例性暫存器重命名、無序發佈/執行管線二者的方塊圖。圖28B是圖示了根據實施例的要被包括在處理器中的有序架構核心的示例性實施例和示例性暫存器重命名、無序發佈/執行架構核心二者的方塊圖。圖28A-B中的實線塊圖示了有序管線和有序核心,而虛線塊的可選添加圖示了暫存器重命名、無序發佈/執行管線和核心。考慮到有序方面是無序方面的子集,將對無序方面進行描述。
在圖28A中,處理器管線2800包括獲取階段2802、長度解碼階段2804、解碼階段2806、分配階段2808、重命名階段2810、調度(也被稱為分派或發佈)階段2812、暫存器讀取/記憶體讀取階段2814、執行階段2816、寫回/記憶體寫入階段2818、異常處理階段2822和提交階段2824。
圖28B示出了包括耦合到執行引擎單元2850的前端單元2830的處理器核心2890,並且二者都耦合到記憶體單元2870。核心2890可以是精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、超長指令字(VLIW)核心或者是混合的或替換的核心類型。作為又另一個選項,核心2890可以是專用核心,諸如例如網路或通信核心、壓縮引擎、輔助處理器核心、通用計算圖形處理單元(GPGPU)核心、圖形核心等等。
前端單元2830包括耦合到指令快取記憶體單元2834的分支預測單元2832,該指令快取記憶體單元2834耦合到指令轉換後備緩衝器(TLB)2836,該指令轉換後備緩衝器(TLB)2836耦合到指令獲取單元2838,該指令獲取單元2838耦合到解碼單元2840。解碼單元2840(或解碼器)可以對指令進行解碼,並且生成作為輸出的一個或多個微操作、微代碼入口點、微指令、其他指令或其他控制信號,其從原始指令解碼、或者其以其他方式反映原始指令或源自原始指令。解碼單元2840可以使用各種不同的機制來實現。合適機制的示例包括但不限於查閱資料表、硬體實現方式、可程式設計邏輯陣列(PLA)、微代碼唯讀記憶體(ROM)等。在一個實施例中,核心2890包括微代碼ROM或者儲存用於某些巨集指令的微代碼的其他媒體(例如,在解碼單元2840中或者以其它方式在前端單元2830內)。解碼單元2840耦合到執行引擎單元2850中的重命名/分配器單元2852。
執行引擎單元2850包括耦合到引退單元2854和一組一個或多個調度器單元2856的重命名/分配器單元2852。(一個或多個)調度器單元2856表示任何數量的不同調度器,包括保留站、中央指令視窗等。(一個或多個)調度器單元2856耦合到(一個或多個)物理暫存器檔案(一個或多個)單元2858。每一個(一個或多個)物理暫存器檔案單元2858表示一個或多個物理暫存器檔案,其中不同的物理暫存器檔案儲存一個或多個不同的資料類型,諸如純量整數、純量浮點、打包整數、打包浮點、向量整數、向量浮點、狀態(例如,作為要執行的下一條指令的位址的指令指標)等。在一個實施例中,(一個或多個)物理暫存器檔案單元2858包括向量暫存器單元、寫入遮罩暫存器單元和純量暫存器單元。這些暫存器單元可以提供架構向量暫存器、向量遮罩暫存器和通用暫存器。(一個或多個)物理暫存器檔案(一個或多個)單元2858被引退單元2854重疊以圖示可以實現暫存器重命名和無序執行的各種方式(例如,使用(一個或多個)重新排序緩衝器和(一個或多個)引退暫存器檔案;使用(一個或多個)未來檔案、(一個或多個)歷史緩衝器和(一個或多個)引退暫存器檔案;使用暫存器映射和暫存器池等)。引退單元2854和(一個或多個)物理暫存器檔案(一個或多個)單元2858耦合到(一個或多個)執行集群2860。(一個或多個)執行集群2860包括一組一個或多個執行單元2862和一組一個或多個記憶體存取單元2864。執行單元2862可以實行各種運算(例如移位、加法、減法、乘法)以及在各種類型的資料(例如,純量浮點、打包整數、打包浮點、向量整數、向量浮點)上實行。雖然一些實施例可以包括專用於特定功能或功能集的許多執行單元,但是其他實施例可以包括僅一個執行單元或全部都實行所有功能的多個執行單元。(一個或多個)調度器單元2856、(一個或多個)物理暫存器檔案(一個或多個)單元2858和(一個或多個)執行集群2860被示為可能是複數的,因為某些實施例為某些類型的資料/運算創建單獨的管線(例如,純量整數管線、純量浮點/打包整數/打包浮點/向量整數/向量浮點管線,和/或均具有它們自己的調度器單元、(一個或多個)物理暫存器檔案單元和/或執行集群的記憶體存取管線,並且在單獨的記憶體存取管線的情況下,實現其中僅此管線的執行集群具有(一個或多個)記憶體存取單元2864的某些實施例)。還應當理解的是,在使用單獨的管線的情況下,這些管線中的一個或多個可以是無序發佈/執行,而其餘的是有序的。
記憶體存取單元2864的集合耦合到記憶體單元2870,該記憶體單元2870包括耦合到資料快取記憶體單元2874的資料TLB單元2872,該資料快取記憶體單元2874耦合到2級(L2)快取記憶體單元2876。在一個示例性實施例中,記憶體存取單元2864可以包括載入單元、儲存位址單元和儲存資料單元,其中的每一個耦合到記憶體單元2870中的資料TLB單元2872。指令快取記憶體單元2834進一步耦合到記憶體單元2870中的2級(L2)快取記憶體單元2876。L2快取記憶體單元2876耦合到一個或多個其它級快取記憶體並且最終耦合到主記憶體。
作為示例,示例性暫存器重命名、無序發佈/執行核心架構可以實現管線2800如下:1)指令獲取2838實行獲取和長度解碼階段2802和2804;2)解碼單元2840實行解碼階段2806;3)重命名/分配器單元2852實行分配階段2808和重命名階段2810;4)(一個或多個)調度器單元2856實行調度階段2812;5)(一個或多個)物理暫存器檔案(一個或多個)單元2858和記憶體單元2870實行暫存器讀取/記憶體讀取階段2814;執行集群2860實行執行階段2816;6)記憶體單元2870和(一個或多個)物理暫存器檔案(一個或多個)單元2858實行寫回/記憶體寫入階段2818;7)各個單元可能涉及異常處理階段2822;以及8)引退單元2854和(一個或多個)物理暫存器檔案(一個或多個)單元2858實行提交階段2824。
核心2890可以支援一個或多個指令集(例如,x86指令集(具有已經被添加有更新版本的一些擴展);加利福尼亞州森尼維爾市的MIPS科技的MIPS指令集;加利福尼亞州森尼維爾市的ARM控股的ARM指令集(具有諸如NEON之類的可選的附加擴展)),包括本文中描述的(一個或多個)指令。在一個實施例中,核心2890包括用以支援打包資料指令集擴展(例如AVX1、AVX2)的邏輯,由此允許使用打包資料來實行被許多多媒體應用使用的操作。
應當理解的是,核心可以支持多執行緒(執行操作或執行緒的兩個或更多個並行集合),並且可以用各種各樣的方式這麼做,該方式包括時間分片多執行緒、同時多執行緒(在單個物理核心為執行緒中的每一個提供邏輯核心的情況下,該物理核心是同時多執行緒的)或它們的組合(例如,時間分片獲取和解碼,以及其後諸如在英特爾®超執行緒技術中的同時多執行緒)。
雖然在無序執行的上下文中描述了暫存器重命名,但是應當理解的是,可以在有序架構中使用暫存器重命名。儘管所圖示的處理器的實施例還包括單獨的指令和資料快取記憶體單元2834/2874和共用L2快取記憶體單元2876,但是替換的實施例可以具有用於指令和資料兩者的單個內部快取記憶體,諸如例如1級(L1)內部快取記憶體或多級內部快取記憶體。在一些實施例中,系統可以包括內部快取記憶體和在核心和/或處理器外部的外部快取記憶體的組合。替換地,全部的快取記憶體都可以在核心和/或處理器外部。 特定示例性有序核心架構
圖29A-B圖示了更特定的示例性有序核心架構的方塊圖,該核心為晶片中的若干個邏輯塊(包括相同類型和/或不同類型的其他核心)中的一個。取決於應用,邏輯塊通過高頻寬互連網路(例如,環狀網路)來與一些固定功能邏輯、記憶體I/O介面以及其他必要的I/O邏輯進行通信。
圖29A是根據實施例的單個處理器核心,以及其到晶粒上互連網路2902的連接並且與其2級(L2)快取記憶體的本地子集2904的連接的方塊圖。在一個實施例中,指令解碼器2900支援具有打包資料指令集擴展的x86指令集。L1快取記憶體2906允許低等待時間存取快取記憶體到純量和向量單元中。儘管在一個實施例中(為了簡化設計),純量單元2908和向量單元2910使用單獨的暫存器集(分別是純量暫存器2912和向量暫存器2914),並且在它們之間傳遞的資料被寫入到記憶體,並且然後從1級(L1)快取記憶體2906中被讀回,但是替換的實施例可以使用不同的方法(例如,使用單個暫存器集或者包括允許資料在兩個暫存器檔案之間傳遞而不被寫入和讀回的通信路徑)。
L2快取記憶體的本地子集2904是全域L2快取記憶體的部分,該全域L2快取記憶體被劃分為單獨的本地子集,每個處理器核心一個。每個處理器核心具有到它自己的L2快取記憶體的本地子集2904的直接存取路徑。由處理器核心讀取的資料被儲存在其L2快取記憶體子集2904中並且可以被快速存取,與其它處理器核心存取它們自己的本地L2快取記憶體子集並行地進行。由處理器核心寫入的資料被儲存在其自己的L2快取記憶體子集2904中,並且如果必要的話被從其它子集中清除。環狀網路確保了共用資料的一致性。該環狀網路是雙向的以允許諸如處理器核心、L2快取記憶體以及其它邏輯塊之類的代理在晶片內與彼此通信。每個環形資料路徑在每個方向上都是1012位元寬的。
圖29B是根據實施例的圖29A中的處理器核心的部分的展開圖。圖29B包括L1快取記憶體2904的L1資料快取記憶體2906A部分,以及關於向量單元2910和向量暫存器2914的更多細節。具體地,向量單元2910是16倍寬向量處理單元(VPU)(參見16倍寬ALU 2928),其執行整數、單精確度浮動指令以及雙精度浮動指令中的一個或多個。VPU支援利用調配單元2920來調配暫存器輸入、利用數值轉換單元2922A-B進行數值轉換,並且利用複製單元2924對記憶體輸入進行複製。寫入遮罩暫存器2926允許預測所得到的向量寫入。
圖30是根據實施例的可以具有多於一個核心、可以具有集成記憶體控制器以及可以具有集成圖形部件的處理器3000的方塊圖。圖30中的實線塊圖示了具有單個核心3002A、系統代理3010、一組一個或多個匯流排控制器單元3016的處理器3000,而虛線塊的可選添加圖示了具有多個核心3002A-N、系統代理單元3010中的一組一個或多個集成記憶體控制器單元3014以及專用邏輯3008的替換處理器3000。
因此,處理器3000的不同實現方式可以包括:1)具有專用邏輯3008的CPU,該專用邏輯是集成圖形和/或科學(通量)邏輯(其可以包括一個或多個核心),並且核心3002A-N是一個或多個通用核心(例如,通用有序核心、通用無序核心、兩者的組合);2)具有核心3002A-N的輔助處理器,該核心是主要意圖用於圖形和/或科學(通量)的大量專用核心;以及3)具有核心3002A-N的輔助處理器,該核心是大量通用有序核心。因此,處理器3000可以是通用處理器、輔助處理器或專用處理器,諸如例如,網路或通信處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高通量多集成核心(MIC)輔助處理器(包括30或更多個核心)、嵌入式處理器等等。可以在一個或多個晶片上實現處理器。處理器3000可以是一個或多個基板的一部分,和/或可以使用多種工藝技術(諸如例如,BiCMOS、CMOS或NMOS)中的任何技術將處理器3000實現在一個或多個基板上。
記憶體層級結構包括核心內的一級或多級快取記憶體、一組一個或多個共用快取記憶體單元3006和耦合到集成記憶體控制器單元3014的集合的外部記憶體(未示出)。共用快取記憶體單元3006的集合可以包括一個或多個中級快取記憶體,諸如2級(L2)、3級(L3)、4級(L4)或其它級的快取記憶體、末級快取記憶體(LLC)和/或其組合。雖然在一個實施例中,基於環形的互連單元3012將專用邏輯3008(集成圖形邏輯是專用邏輯的示例並且在本文中也被稱為專用邏輯)、共用快取記憶體單元3006的集合和系統代理單元3010/(一個或多個)集成記憶體控制器單元3014進行互連,但是替換的實施例可以使用用於互連這樣的單元的任何數量的公知技術。在一個實施例中,在一個或多個快取記憶體單元3006與核心3002A-N之間維持一致性。
在一些實施例中,核心3002A-N中的一個或多個核心有多執行緒的能力。系統代理3010包括協調和操作核心3002A-N的那些組件。系統代理單元3010可以包括例如電源控制單元(PCU)和顯示單元。該PCU可以是或可以包括調節核心3002A-N和專用邏輯3008的功率狀態所需要的元件和邏輯。顯示單元用於驅動一個或多個外部連接的顯示器。
就架構指令集而言,核心3002A-N可以是同類的或是異類的;即,核心3002A-N中的兩個或更多個可能能夠執行相同的指令集,而其它核心可能僅能夠執行該指令集的子集或者執行不同的指令集。 示例性電腦架構
圖31-34是示例性電腦架構的方塊圖。用於膝上型電腦、桌上型電腦、掌上型PC、個人數位助理、工程工作站、伺服器、網路設備、網路集線器、交換機、嵌入式處理器、數位訊號處理器(DSP)、圖形設備、視頻遊戲裝置、機上盒、微控制器、行動電話、可攜式媒體播放機、掌上型設備以及各種其他電子設備的本領域已知的其他系統設計和配置也是適合的。一般來說,能夠併入如本文中公開的處理器和/或其它執行邏輯的大量的各種各樣的系統或電子設備一般都是合適的。
現在參考圖31,示出的是根據本發明的一個實施例的系統3100的方塊圖。系統3100可以包括耦合到控制器中樞3120的一個或多個處理器3110、3115。在一個實施例中,控制器中樞3120包括圖形記憶體控制器中樞(GMCH)3190和輸入/輸出中樞(IOH)3150(它們可以處於單獨的晶片上);GMCH 3190包括記憶體和圖形控制器,記憶體3140和輔助處理器3145耦合到它們;IOH 3150將輸入/輸出(I/O)設備3160耦合到GMCH 3190。替換地,記憶體和圖形控制器中的一個或兩個被集成到處理器中(如本文中描述的),記憶體3140和輔助處理器3145被直接耦合到處理器3110,並且控制器中樞3120在單個晶片中與IOH 3150直接耦合。記憶體3140可包括矩陣加速碼3140A,例如,其儲存碼當被執行時導致處理器執行本揭露之任一方法。
在圖31中利用虛線表示了附加處理器3115的可選性質。每個處理器3110、3115可以包括本文中描述的處理核心中的一個或多個,並且可以是某個版本的處理器3000。
記憶體3140可以是例如動態隨機存取記憶體(DRAM)、相變記憶體(PCM)或二者的組合。對於至少一個實施例,控制器中樞3120經由諸如前端匯流排(FSB)之類的多點匯流排、諸如快速通道互連(QPI)之類的點對點介面或類似的連接3195來與(一個或多個)處理器3110、3115通信。
在一個實施例中,輔助處理器3145是專用處理器,諸如例如高通量MIC處理器、網路或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器等等。在一個實施例中,控制器中樞3120可以包括集成圖形加速器。
就包括架構特性、微架構特性、熱特性、功率消耗特性等等的一系列的價值指標而言,物理資源3110、3115之間可以存在各種各樣的差異。
在一個實施例中,處理器3110執行控制一般類型的資料處理操作的指令。嵌入到指令中的可以是輔助處理器指令。處理器3110將這些輔助處理器指令識別為應當由附接的輔助處理器3145來執行的類型。因此,處理器3110在輔助處理器匯流排或其它互連上將這些輔助處理器指令(或表示輔助處理器指令的控制信號)發佈給輔助處理器3145。(一個或多個)輔助處理器3145接受並執行接收到的輔助處理器指令。
現在參考圖32,示出的是根據本發明實施例的第一個更具體的示例性系統3200的方塊圖。如圖32所示,多處理器系統3200是點對點互連系統,並且包括經由點對點互連3250耦合的第一處理器3270和第二處理器3280。處理器3270和3280中的每一個可以是某個版本的處理器3000。在一個實施例中,處理器3270和3280分別是處理器3110和3115,而輔助處理器3238是輔助處理器3145。在另一實施例中,處理器3270和3280分別是處理器3110、輔助處理器3145。
處理器3270和3280被示為分別包括集成記憶體控制器(IMC)單元3272和3282。處理器3270還包括作為其匯流排控制器單元的一部分的點對點(P-P)介面3276和3278;類似地,第二處理器3280包括P-P介面3286和3288。處理器3270、3280可以經由點對點(P-P)介面3250、使用P-P介面電路3278、3288來交換資訊。如圖32所示,IMC 3272和3282將處理器耦合到相應的記憶體,即記憶體3232和記憶體3234,這些記憶體可以是本地附接到相應處理器的主記憶體的部分。
處理器3270、3280均可以使用點對點介面電路3276、3294、3286、3298、經由單個P-P介面3252、3254來與晶片組3290交換資訊。晶片組3290可以經由高性能介面3292與輔助處理器3238可選地交換資訊。在一個實施例中,輔助處理器3238是專用處理器,諸如例如,高通量MIC處理器、網路或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器等等。
共用快取記憶體(未示出)可以被包括在任一處理器中,或者在兩個處理器之外但尚且經由P-P互連與處理器連接,以使得如果將處理器置於低功率模式中,可以將任一或兩個處理器的本地快取記憶體資訊儲存在共用快取記憶體中。
晶片組3290可以經由介面3296耦合到第一匯流排3216。在一個實施例中,第一匯流排3216可以是週邊部件互連(PCI)匯流排,或者是諸如PCI快速匯流排或另一第三代I/O互連匯流排之類的匯流排,雖然本發明的範圍不如此受限。
如在圖32中示出的,各種I/O設備3214可以耦合到第一匯流排3216,連同將第一匯流排3216耦合到第二匯流排3220的匯流排橋3218一起。在一個實施例中,諸如輔助處理器、高通量MIC處理器、GPGPU、加速器(諸如例如,圖形加速器或數位信號處理(DSP)單元)、現場可程式設計閘陣列或任何其他處理器之類的一個或多個附加的處理器3215耦合到第一匯流排3216。在一個實施例中,第二匯流排3220可以是低引腳數(LPC)匯流排。在一個實施例中,各種設備可以耦合到第二匯流排3220,該設備包括例如,鍵盤和/或滑鼠3222、通信設備3227以及諸如磁片驅動或其它大型存放區設備之類的儲存單元3228,其可以包括指令/代碼和資料3230。另外,音訊I/O 3224可以耦合到第二匯流排3220。注意的是,其它架構也是可能的。例如,代替圖32的點對點架構,系統可以實現多點匯流排或其它這樣的架構。
現在參考圖33,示出的是根據本發明實施例的第二個更具體的示例性系統3300的方塊圖。圖32和33中的相似元件擁有相似的附圖標記,並且已經從圖33中省略了圖32的某些方面,以免使圖33的其他方面晦澀難懂。
圖33圖示了處理器3270、3280可以分別包括集成記憶體和I/O控制邏輯(“CL”)3372和3382。因此,CL 3372、3382包括集成記憶體控制器單元並且包括I/O控制邏輯。圖33圖示了不僅記憶體3232、3234耦合到CL 3372、3382,而且I/O設備3314也耦合到控制邏輯3372、3382。舊有I/O設備3315耦合到晶片組3290。
現在參考圖34,示出的是根據本發明實施例的SoC 3400的方塊圖。圖30中的類似元件擁有相似的附圖標記。而且,虛線塊是更高級的SoC上的可選特徵。在圖34中,(一個或多個)互連單元3402被耦合到:應用處理器3410,其包括一組一個或多個核心3002A-N(其包括快取記憶體單元3004A-N)和(一個或多個)共用快取記憶體單元3006;系統代理單元3010;(一個或多個)匯流排控制器單元3016;(一個或多個)集成記憶體控制器單元3014;一組一個或多個輔助處理器3420,其可以包括集成圖形邏輯、影像處理器、音訊處理器和視頻處理器;靜態隨機存取記憶體(SRAM)單元3430;直接記憶體存取(DMA)單元3432;以及用於耦合到一個或多個外部顯示器的顯示單元3440。在一個實施例中,(一個或多個)輔助處理器3420包括:專用處理器,諸如例如網路或通信處理器、壓縮引擎、GPGPU、高通量MIC處理器、嵌入式處理器等等。
可以用硬體、軟體、韌體或這樣的實現方法的組合來實現本文中公開的機制的實施例。實施例可以被實現為在可程式設計系統上執行的電腦程式或程式碼,該可程式設計系統包括至少一個處理器、儲存系統(包括易失性和非易失性記憶體和/或儲存單元)、至少一個輸入裝置以及至少一個輸出設備。
可以將諸如圖32中圖示的代碼3230之類的程式碼應用於輸入指令來實行本文中描述的功能並且生成輸出資訊。可以以已知方式將輸出資訊應用於一個或多個輸出設備。出於本申請的目的,處理系統包括具有處理器的任何系統,該處理器諸如例如:數位訊號處理器(DSP)、微控制器、專用積體電路(ASIC)或微處理器。
程式碼可以採用高階程序或物件導向的程式設計語言來實現,以與處理系統進行通信。如果期望的話,還可以採用組合語言或機器語言來實現程式碼。事實上,本文中描述的機制在範圍上不限於任何特定的程式設計語言。在任何情況下,語言可以是編譯語言或解釋語言。
至少一個實施例的一個或多個方面可以通過機器可讀媒體上儲存的、表示處理器內的各種邏輯的代表指令來實現,其在由機器讀取時使機器製作用來實行本文所述技術的邏輯。被稱作“IP核心”的這樣的表示可以儲存在有形機器可讀媒體上,並且被提供給各種客戶或製造設施,以載入到實際製成邏輯或處理器的製造機器中。
這樣的機器可讀儲存媒體可以包括而不限於由機器或設備製造或形成的物品的非暫時性有形佈置,其包括:諸如硬碟、任何其他類型的磁片的儲存媒體,該磁片包括軟碟、光碟、壓縮磁碟唯讀記憶體(CD-ROM)、可重寫式壓縮磁碟(CD-RW)和磁光碟;半導體設備,諸如唯讀記憶體(ROM)、隨機存取記憶體(RAM)(諸如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM))、可擦除可程式設計唯讀記憶體(EPROM)、快閃記憶體、電可擦除可程式設計唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁卡或光卡,或用於儲存電子指令的任何其他類型的媒體。
因此,實施例還包括包含指令或包含設計資料(諸如硬體描述語言(HDL))的非暫時性有形機器可讀媒體,其限定本文中描述的結構、電路、裝置、處理器和/或系統特徵。這樣的實施例還可以被稱為程式產品。 模擬 ( 包括二進位編譯、代碼變形等 )
在一些情況下,指令轉換器可以被用來將指令從源指令集轉換到目標指令集。例如,指令轉換器可以編譯(例如,使用靜態二進位編譯、包括動態編譯的動態二進位編譯)、變形、模擬或以其他方式將指令轉換成要由核心處理的一個或多個其他指令。指令轉換器可以用軟體、硬體、韌體或它們的組合來實現。指令轉換器可以是在處理器上、在處理器下、或者部分在處理器上而部分在處理器下。
圖35是圖示了根據實施例的對比使用軟體指令轉換器來將源指令集中的二進位指令轉換成目標指令集中的二進位指令的方塊圖。在圖示的實施例中,指令轉換器是軟體指令轉換器,儘管替換地可以用軟體、韌體、硬體或它們的各種組合來實現指令轉換器。圖35示出了採用高階語言3502的程式可以使用x86編譯器3504來編譯,以生成x86二進位碼3506,該x86二進位碼3506可以由具有至少一個x86指令集核心的處理器3516本機地執行。該具有至少一個x86指令集核心的處理器3516表示可以實行與具有至少一個x86指令集核心的英特爾處理器基本上相同的功能的任何處理器,所通過的方式是相容地執行或以其他方式處理(1)英特爾x86指令集核心的指令集的很大一部分或者(2)目標為在具有至少一個x86指令集核心的英特爾處理器上運行的目標代碼版本的應用或其他軟體,以便實現與具有至少一個x86指令集核心的英特爾處理器基本上相同的結果。x86編譯器3504表示可操作以生成x86二進位碼3506(例如,目標代碼)的編譯器,該x86二進位碼3506可以在具有或沒有附加的連結處理的情況下在具有至少一個x86指令集核心3516的處理器上執行。類似地,圖35示出了可以使用替換的指令集編譯器3508來編譯採用高階語言3502的程式,以生成替換的指令集二進位碼3510,該指令集二進位碼3510可以由不具有至少一個x86指令集核心的處理器3514(例如,具有執行加利福尼亞州森尼維爾市的MIPS科技的MIPS指令集和/或執行加利福尼亞州森尼維爾市的ARM控股的ARM指令集的核心的處理器)本機地執行。指令轉換器3512被用來將x86二進位碼3506轉換成可以由不具有x86指令集核心的處理器3514本機地執行的代碼。該經轉換的代碼有可能不與替換指令集二進位碼3510相同,因為能夠這樣做的指令轉換器難以製成;然而,經轉換的代碼將完成一般運算並且由來自替換指令集的指令構成。因此,指令轉換器3512表示允許不具有x86指令集處理器或核心的處理器或其他電子設備通過模擬、類比或任何其他過程來執行x86二進位碼3506的軟體、韌體、硬體或它們的組合。 另外的示例
揭露技術之至少一些實施例可基於下行範例被描述: 範例1. 一種裝置,包含: 獲取電路,用以獲取具有欄位的單一指令,該欄位用以指定操作碼與具有單精度元素的M×N目的地矩陣、M×K第一源矩陣和K×N第二源矩陣的位置,該些源矩陣具有各包含一對半精度浮點值之元素,該操作碼用以指示執行電路對於該第一源矩陣之各元素與該第二源矩陣的對應元素,導致該半精度浮點值對單精度值之轉換、來自該對之第一值的經轉換單精度值之乘積以生成第一結果、來自該對之第二值的經轉換單精度值之乘積以生成第二結果、及該第一結果與該第二結果和該目的地矩陣之對應元素的先前內容之累加; 解碼電路,用以解碼該所獲取指令;以及 該執行電路,用以反應由該操作碼指定之該已解碼指令。 範例2. 如範例1之裝置,其中該半精度浮點格式是由該單一指令之該操作碼指定。 範例3. 如範例1之裝置,其中M、N及K是由該單一指令指定。 範例4. 如範例1之裝置,其中該執行電路係用以導致矩陣運算加速器以至少執行該乘積與該累加。 範例5. 如範例4之裝置,其中在執行該單一指令前藉由矩陣加速器組態指令之執行,M、N及K是由待被編程之該矩陣運算加速器的組態所指定。 範例6. 如範例1之裝置,其中該執行電路在必要時進一步導致執行結果飽和。 範例7. 如範例1之裝置,其中該單一指令進一步指定包含M×N位元的寫入遮罩,各位元用以控制是否屏蔽該目的地矩陣之對應元素。 範例8. 如範例1之裝置,其中該執行電路進一步於故障條件發生時生成故障,該故障條件可選擇自:具有比該第一源矩陣的列數較少之列數的該目的地矩陣;以及 具有比該第二源矩陣的行數較少之行數的該目的地矩陣。 範例9. 一種方法,包含: 使用處理器之獲取電路獲取具有欄位的單一指令,該欄位用以指定操作碼與具有單精度元素的M×N目的地矩陣、M×K第一源矩陣和K×N第二源矩陣的位置,該些源矩陣具有各包含一對半精度浮點值之元素,對該第一源矩陣之各元素與該第二源矩陣的對應元素而言,該操作碼用以指示執行電路以導致該半精度浮點值對單精度值之轉換、來自該對之第一值的經轉換單精度值之乘積以生成第一結果、來自該對之第二值的經轉換單精度值之乘積以生成第二結果、及該第一結果與該第二結果和該目的地矩陣之對應元素的先前內容之累加; 使用該處理器之解碼電路解碼該所獲取指令至所解碼單一指令;以及 使用該處理器之該執行電路依據該操作碼執行該所解碼單一指令。 範例10. 如範例9之方法,其中該半精度浮點格式是由該單一指令之該操作碼指定。 範例11. 如範例9之方法,其中M、N及K是由該單一指令指定。 範例12. 如範例9之方法,其中該執行電路使矩陣運算加速器以至少執行該乘積與該累加。 範例13. 如範例12之方法,更包含在執行該單一指令前,藉由該處理器之該執行電路執行矩陣加速器組態指令,其編程指定M、N及K的該矩陣運算加速器的組態。 範例14. 如範例9之方法,其中該執行包含使該執行結果飽和。 範例15. 如範例9之方法,其中該單一指令進一步指定包含M×N位元的寫入遮罩,各位元控制是否屏蔽該目的地矩陣之對應元素。 範例16. 如範例9之方法,其中該執行於故障條件發生時生成故障,該故障條件可選擇自: 具有比該第一源矩陣的列數較少之列數的該目的地矩陣;以及 具有比該第二源矩陣的行數較少之行數的該目的地矩陣。 範例17. 一種儲存有程式碼的非暫態機器可讀取媒體,該程式碼在被機器執行時使該機器實行一方法包含: 使用處理器之獲取電路獲取具有欄位的單一指令,該欄位用以指定操作碼與具有單精度元素的M×N目的地矩陣、M×K第一源矩陣和K×N第二源矩陣的位置,該些源矩陣具有各包含一對半精度浮點值之元素,該操作碼用以指示執行電路對於該第一源矩陣之各元素與該第二源矩陣的對應元素,導致該半精度浮點值對單精度值之轉換、來自該對之第一值的經轉換單精度值之乘積以生成第一結果、來自該對之第二值的經轉換單精度值之乘積以生成第二結果、及該第一結果與該第二結果和該目的地矩陣之對應元素的先前內容之累加; 使用該處理器之解碼電路解碼該所獲取指令至所解碼單一指令;以及 使用該處理器之該執行電路依據該操作碼執行該所解碼單一指令。 範例18. 如範例17之非暫態機器可讀取媒體,其中該半精度浮點格式是由該單一指令之該操作碼指定。 範例19. 如範例17之非暫態機器可讀取媒體,其中M、N及K是由該單一指令指定。 範例20. 如範例17之非暫態機器可讀取媒體,其中該執行包含該執行電路使矩陣運算加速器至少執行該乘積與該累加。 範例21. 如範例20之非暫態機器可讀取媒體,其中該方法更包含在執行該單一指令前,藉由該處理器之該執行電路執行矩陣加速器組態指令,其編程指定M、N及K的該矩陣運算加速器的組態。 範例22. 如範例17之非暫態機器可讀取媒體,其中該執行包含使該執行結果飽和。 範例23. 如範例17之非暫態機器可讀取媒體,其中該單一指令進一步指定包含M×N位元的寫入遮罩,各位元控制是否屏蔽該目的地矩陣之對應元素。 範例24. 如範例17之非暫態機器可讀取媒體,其中該執行於故障條件發生時生成故障,該故障條件可選擇自: 具有比該第一源矩陣的列數較少之列數的該目的地矩陣;以及 具有比該第二源矩陣的行數較少之行數的該目的地矩陣。
102:應用記憶體 104:圖塊t0 106:圖塊t1 108:圖塊t2 110:圖塊t3 122:應用記憶體 124:圖塊t4L 126:圖塊t4R 128:圖塊t5L 130:圖塊t5R 301:主處理器/處理系統 303:一致記憶體介面 305:資料緩衝器 307:矩陣運算加速器 309:FMA的網格 311:命令 401:主處理器 403:記憶體 405:矩陣運算電路 501:主處理器 503:主記憶體 505:矩陣運算加速器 507:記憶體 701:第一有符號源 703:第二有符號源 705:乘法器電路 707:乘法器電路 709:有符號第三源 711:加法電路 713:加法器 801:第一有符號源 803:第二有符號源 805:乘法器電路 807:乘法器電路 809:有符號第三源 813:加法/飽和電路 815:有符號結果 901:第一有符號源 903:第二無符號源 905:乘法器電路 907:乘法器電路 909:乘法器電路 911:乘法器電路 913:加法電路 915:有符號第三源 917:加法器 919:結果 1001:第一有符號源 1003:第二無符號源 1005:乘法器電路 1007:乘法器電路 1009:乘法器電路 1011:乘法器電路 1013:加法/飽和電路 1015:第三有符號源 1019:結果 1101:表 1103:表 1105:表 1201:核心0 1203:核心1 1205:核心2 1207:核心N 1211:矩陣運算電路 1213:矩陣運算電路 1223:記憶體控制器 1231:記憶體 1233:記憶體 1245:環形互連 1251:矩陣運算電路 1301:指令儲存 1303:分支預測和解碼電路 1305:微代碼 1307:分配/重命名電路 1309:調度器電路 1311:執行電路 1313:快取記憶體 1315:物理暫存器檔案 1317:引退電路 1321:純量電路 1323:向量/SIMD電路 1325:記憶體存取電路 1327:矩陣運算電路 1390:核心 1401:指令儲存 1403:分支預測和解碼電路 1405:微代碼 1407:分配/重命名電路 1409:調度器電路 1411:執行電路 1413:快取記憶體 1415:物理暫存器檔案 1417:引退電路 1425:記憶體存取電路 1427:執行電路 1490:核心 1601:矩陣C 1603:矩陣A 1605:矩陣B 1701:方塊 1703:方塊 1705:方塊 1707:方塊 1709:方塊 1801:記憶體 1803:圖塊描述 1805:處理器/核心 1811:指令執行資源 1813:調色板表 1817:圖塊配置 1819:暫存器 1901:調色板ID 1903:暫存器 1905:暫存器 1907:圖塊 1913:列 1915:行 2001:圖塊 2003:圖塊 2011:暫存器 2013:暫存器 2015:狀態暫存器 2021:TMM0列配置 2023:TMM0行配置 2031:圖塊配置 2100:處理器 2101:指令 2102:操作碼 2104:目的地矩陣 2106:第一源矩陣 2108:第二源矩陣 2112A:第一源矩陣 2112B:第二源矩陣 2114:執行電路 2116A:轉換電路 2116B:轉換電路 2118:乘法電路 2120:累加電路 2122:目的地矩陣 2201:指令 2202:操作碼 2204:目的地矩陣 2206:第一源矩陣 2208:第二源矩陣 2220:虛擬程式碼 2300:流程圖 2301:步驟 2303:步驟 2305:步驟 2307:步驟 2309:步驟 2400:16位元點積指令 2402:操作碼 2404:目的地矩陣位置 2406:第一源矩陣位置 2408:第二源矩陣位置 2410:源元素格式 2505:無記憶體存取 2510:無記憶體存取、完整捨入控制類型運算 2515:無記憶體存取、資料變換類型運算 2520:記憶體存取 2525:記憶體存取、暫時性 2540:格式欄位 2542:基本操作欄位 2544:暫存器索引欄位 2546:修飾符欄位 2546A:無記憶體存取 2546B:記憶體存取 2568:類別欄位 2568A:類別A 2552:阿爾法欄位 2552A:RS欄位 2552A.1:捨入 2552A.2:資料變換 2552B:驅逐提示欄位 2552B.1:暫時性 2552B.2:非暫時性 2550:捨入運算控制欄位 2554:貝塔欄位 2554A:捨入控制欄位 2554B:資料變換欄位 2554C:資料操縱欄位 2556:浮點異常欄位 2558:捨入運算控制欄位 2560:縮放欄位 2562A:位移欄位 2562B:位移縮放欄位 2564:資料元素寬度欄位 2570:寫入遮罩欄位 2572:立即數欄位 2574:完整操作碼欄位 2500:通用向量友好指令格式 2527:記憶體存取、寫入遮罩控制 2512:無記憶體存取、寫入遮罩控制、部分捨入控制類型運算 2517:無記憶體存取、寫入遮罩控制、VSIZE類型運算 2600:特定向量友好指令格式 2602:EVEX首碼 2615:操作碼映射欄位 2620:EVEX.vvvv欄位 2630:真實操作碼欄位 2564:資料元素寬度欄位 2568:類別欄位 2554:貝塔欄位 2562A:位移欄位 2574:完整操作碼欄位 2625:首碼編碼欄位 2552C:寫入遮罩控制欄位 2642:MOD欄位 2559A:捨入運算欄位 2559B:向量長度欄位 2642:MOD欄位 2700:暫存器架構 2710:向量暫存器 2715:寫入遮罩暫存器 2725:通用暫存器 2745:純量浮點堆疊暫存器檔案 2750:整數平坦暫存器檔案 2800:處理器管線 2802:獲取階段 2804:長度解碼階段 2806:解碼階段 2808:分配階段 2810:重命名階段 2812:調度階段 2814:暫存器讀取/記憶體讀取階段 2816:執行階段 2818:寫回/記憶體寫階段 2822:異常處理階段 2824:提交階段 2830:前端單元 2832:分支預測單元 2834:指令快取記憶體單元 2836:指令轉換後備緩衝器 2838:指令獲取單元 2840:解碼單元 2850:執行引擎單元 2852:重命名/分配器單元 2854:引退單元 2856:調度器單元 2858:物理暫存器檔案單元 2860:執行集群 2862:執行單元 2864:記憶體存取單元 2870:記憶體單元 2872:資料TLB單元 2874:資料快取記憶體單元 2876:2級(L2)快取記憶體單元 2890:核心 2900:指令解碼器 2902:互連網路 2904:2級(L2)快取記憶體的本地子集 2906:L1快取記憶體 2908:純量單元 2910:向量單元 2912:純量暫存器 2914:向量暫存器 2906A:L1資料快取記憶體 2920:調配單元 2924:複製單元 2926:寫入遮罩暫存器 2928:16-寬ALU 2922A:數值轉換單元 2922B:數值轉換單元 3000:處理器 3002A:核心 3002N:核心 3004A:快取記憶體單元 3004N:快取記憶體單元 3006:共用快取記憶體單元 3008:專用邏輯 3010:系統代理單元 3012:互連單元 3014:集成記憶體控制器單元 3016:匯流排控制器單元 3100:系統 3110:處理器 3115:處理器 3120:控制器中樞 3140:記憶體 3140A:矩陣加速代碼 3145:輔助處理器 3150:輸入/輸出中樞 3160:輸入/輸出設備 3190:圖形記憶體控制器中樞 3195:類似的連接 3200:系統 3232:記憶體 3234:記憶體 3270:第一處理器 3280:第二處理器 3238:輔助處理器 3290:晶片組 3218:匯流排橋 3214:I/O設備 3224:音訊I/O 3215:附加的處理器 3222:鍵盤/滑鼠 3227:通信設備 3228:儲存單元 3230:指令/代碼和資料 3300:系統 3314:I/O設備 3315:舊有I/O設備 3400:系統晶片 3410:應用處理器 3420:輔助處理器 3430:靜態隨機存取記憶體單元 3432:直接記憶體存取單元 3440:顯示單元 3502:高階語言 3504:x86編譯器 3506:x86二進位碼 3508:替換的指令集編譯器 3510:替換的指令集二進位碼 3512:指令轉換器 3514:不具有至少一個x86指令集核心的處理器 3516:具有至少一個x86指令集核心的處理器
作為示例而非限制在附圖的各圖中圖示了本發明,在附圖中,相同的附圖標記指示相似的元素,並且在附圖中:
[圖1A]圖示了配置的圖塊的實施例;
[圖1B]圖示了配置的圖塊的實施例;
[圖2]圖示了矩陣儲存的若干個示例;
[圖3]圖示了利用矩陣(圖塊)運算加速器的系統的實施例;
[圖4和5]示出了如何使用矩陣運算加速器來共用記憶體的不同實施例;
[圖6]圖示了使用圖塊(“TMMA”)的矩陣乘法累加運算的實施例;
[圖7]圖示了鏈式融合乘法累加指令的反覆運算執行的子集的實施例;
[圖8]圖示了鏈式融合乘法累加指令的反覆運算執行的子集的實施例;
[圖9]圖示了鏈式融合乘法累加指令的反覆運算執行的子集的實施例;
[圖10]圖示了鏈式融合乘法累加指令的反覆運算執行的子集的實施例;
[圖11]圖示了根據實施例的兩次冪大小的SIMD實現方式,其中累加器使用大於對乘法器的輸入的輸入大小;
[圖12]圖示了利用矩陣運算電路的系統的實施例;
[圖13]圖示了支援使用圖塊的矩陣運算的處理器核心管線的實施例;
[圖14]圖示了支援使用圖塊的矩陣運算的處理器核心管線的實施例;
[圖15]圖示了以列主要格式和行主要格式表達的矩陣的示例;
[圖16]圖示了矩陣(圖塊)的使用示例;
[圖17]圖示了矩陣(圖塊)的使用方法的實施例;
[圖18]圖示了根據實施例的對圖塊使用的配置的支援;
[圖19]圖示了要支持的矩陣(圖塊)的描述的實施例;
[圖20(A)-(D)]圖示了(一個或多個)暫存器的示例;
[圖21A]是圖示了根據一些實施例的使用TILEDPFP16PS指令來加速矩陣乘法的方塊圖;
[圖21B]是圖示了根據一些實施例顯示用以執行TILEDPFP16PS指令之示例執行電路的方塊圖;
[圖22A]是圖示了根據一些實施例的TILEDPFP16PS指令的示例性執行的虛擬程式碼;
[圖22B]是圖示了根據一些實施例的使用圖22A虛擬程式碼示例性輔助函數之虛擬程式碼;
[圖23]圖示了處理器執行流程以處理TILEDPFP16PS指令的實施例;
[圖24]是圖示了根據一些實施例的TILEDPFP16PS指令的格式的方塊圖;
[圖25A-25B]圖示了根據實施例的通用向量友好指令格式及其指令範本的方塊圖;
[圖25A]圖示了根據實施例的通用向量友好指令格式及其類別A指令範本的方塊圖;
[圖25B]圖示了根據實施例的通用向量友好指令格式及其類別B指令範本的方塊圖;
[圖26A]是圖示了根據實施例的示例性特定向量友好指令格式的方塊圖;
[圖26B]是圖示了根據一個實施例的構成完整操作碼欄位的特定向量友好指令格式的欄位的方塊圖;
[圖26C]是圖示了根據一個實施例的構成暫存器索引欄位的特定向量友好指令格式的欄位的方塊圖;
[圖26D]是圖示了根據一個實施例的構成擴充操作欄位的特定向量友好指令格式的欄位的方塊圖;
[圖27]是根據一個實施例的暫存器架構的方塊圖;
[圖28A]是圖示了根據實施例的示例性有序管線和示例性暫存器重命名、無序發佈/執行管線二者的方塊圖;
[圖28B]是圖示了根據實施例的要被包括在處理器中的有序架構核心的示例性實施例和示例性暫存器重命名、無序發佈/執行架構核心二者的方塊圖;
[圖29A-B]圖示了更具體的示例性有序核心架構的方塊圖,該核心為晶片中的若干個邏輯塊(包括相同類型和/或不同類型的其他核心)中的一個;
[圖29A]是根據實施例的單個處理器核心,以及其到晶粒上互連網路的連接並且與其2級(L2)快取記憶體的本地子集的連接的方塊圖;
[圖29B]是根據實施例的圖29A中的處理器核心的部分的展開圖;
[圖30]是根據實施例的可以具有多於一個核心、可以具有集成記憶體控制器以及可以具有集成圖形部件的處理器的方塊圖;
[圖31-34]是示例性電腦架構的方塊圖;
[圖31]示出的是根據本發明一實施例的系統的方塊圖;
[圖32]是根據本發明一實施例的第一個更具體的示例性系統的方塊圖;
[圖33]是根據本發明一實施例的第二個更具體的示例性系統的方塊圖;
[圖34]是根據本發明實施例的系統晶片(SoC)的方塊圖;以及
[圖35]是根據實施例的對比使用軟體指令轉換器來將源指令集中的二進位指令轉換成目標指令集中的二進位指令的方塊圖。
301:主處理器/處理系統
303:一致記憶體介面
305:資料緩衝器
307:矩陣運算加速器
309:FMA的網格
311:命令

Claims (24)

  1. 一種裝置,包含: 獲取電路,用以獲取具有欄位的單一指令,該欄位用以指定操作碼與具有單精度元素的M×N目的地矩陣、M×K第一源矩陣和K×N第二源矩陣的位置,該些源矩陣具有各包含一對半精度浮點值之元素,該操作碼用以指示執行電路對於該第一源矩陣之各元素與該第二源矩陣的對應元素,導致該半精度浮點值對單精度值之轉換、來自該對之第一值的經轉換單精度值之乘積以生成第一結果、來自該對之第二值的經轉換單精度值之乘積以生成第二結果、及該第一結果與該第二結果和該目的地矩陣之對應元素的先前內容之累加; 解碼電路,用以解碼該所獲取指令;以及 該執行電路,用以反應由該操作碼指定之該已解碼指令。
  2. 如請求項1之裝置,其中該半精度浮點格式是由該單一指令之該操作碼指定。
  3. 如請求項1之裝置,其中M、N及K是由該單一指令指定。
  4. 如請求項1之裝置,其中該執行電路係用以導致矩陣運算加速器以至少執行該乘積與該累加。
  5. 如請求項4之裝置,其中在執行該單一指令前藉由矩陣加速器組態指令之執行,M、N及K是由待被編程之該矩陣運算加速器的組態所指定。
  6. 如請求項1之裝置,其中該執行電路在必要時進一步導致執行結果飽和。
  7. 如請求項1之裝置,其中該單一指令進一步指定包含M×N位元的寫入遮罩,各位元用以控制是否屏蔽該目的地矩陣之對應元素。
  8. 如請求項1至7中任一項之裝置,其中該執行電路進一步於故障條件發生時生成故障,該故障條件可選擇自: 具有比該第一源矩陣的列數較少之列數的該目的地矩陣;以及 具有比該第二源矩陣的行數較少之行數的該目的地矩陣。
  9. 一種方法,包含: 使用處理器之獲取電路獲取具有欄位的單一指令,該欄位用以指定操作碼與具有單精度元素的M×N目的地矩陣、M×K第一源矩陣和K×N第二源矩陣的位置,該些源矩陣具有各包含一對半精度浮點值之元素,對該第一源矩陣之各元素與該第二源矩陣的對應元素而言,該操作碼用以指示執行電路以導致該半精度浮點值對單精度值之轉換、來自該對之第一值的經轉換單精度值之乘積以生成第一結果、來自該對之第二值的經轉換單精度值之乘積以生成第二結果、及該第一結果與該第二結果和該目的地矩陣之對應元素的先前內容之累加; 使用該處理器之解碼電路解碼該所獲取指令至所解碼單一指令;以及 使用該處理器之該執行電路依據該操作碼執行該所解碼單一指令。
  10. 如請求項9之方法,其中該半精度浮點格式是由該單一指令之該操作碼指定。
  11. 如請求項9之方法,其中M、N及K是由該單一指令指定。
  12. 如請求項9之方法,其中該執行電路使矩陣運算加速器以至少執行該乘積與該累加。
  13. 如請求項12之方法,更包含在執行該單一指令前,藉由該處理器之該執行電路執行矩陣加速器組態指令,其編程指定M、N及K的該矩陣運算加速器的組態。
  14. 如請求項9之方法,其中該執行包含使該執行結果飽和。
  15. 如請求項9之方法,其中該單一指令進一步指定包含M×N位元的寫入遮罩,各位元控制是否屏蔽該目的地矩陣之對應元素。
  16. 如請求項9至15中任一項之方法,其中該執行於故障條件發生時生成故障,該故障條件可選擇自: 具有比該第一源矩陣的列數較少之列數的該目的地矩陣;以及 具有比該第二源矩陣的行數較少之行數的該目的地矩陣。
  17. 一種儲存有程式碼的非暫態機器可讀取媒體,該程式碼在被機器執行時使該機器實行一方法包含: 使用處理器之獲取電路獲取具有欄位的單一指令,該欄位用以指定操作碼與具有單精度元素的M×N目的地矩陣、M×K第一源矩陣和K×N第二源矩陣的位置,該些源矩陣具有各包含一對半精度浮點值之元素,該操作碼用以指示執行電路對於該第一源矩陣之各元素與該第二源矩陣的對應元素,導致該半精度浮點值對單精度值之轉換、來自該對之第一值的經轉換單精度值之乘積以生成第一結果、來自該對之第二值的經轉換單精度值之乘積以生成第二結果、及該第一結果與該第二結果和該目的地矩陣之對應元素的先前內容之累加; 使用該處理器之解碼電路解碼該所獲取指令至所解碼單一指令;以及 使用該處理器之該執行電路依據該操作碼執行該所解碼單一指令。
  18. 如請求項17之非暫態機器可讀取媒體,其中該半精度浮點格式是由該單一指令之該操作碼指定。
  19. 如請求項17之非暫態機器可讀取媒體,其中M、N及K是由該單一指令指定。
  20. 如請求項17之非暫態機器可讀取媒體,其中該執行包含該執行電路使矩陣運算加速器至少執行該乘積與該累加。
  21. 如請求項20之非暫態機器可讀取媒體,其中該方法更包含在執行該單一指令前,藉由該處理器之該執行電路執行矩陣加速器組態指令,其編程指定M、N及K的該矩陣運算加速器的組態。
  22. 如請求項17之非暫態機器可讀取媒體,其中該執行包含使該執行結果飽和。
  23. 如請求項17之非暫態機器可讀取媒體,其中該單一指令進一步指定包含M×N位元的寫入遮罩,各位元控制是否屏蔽該目的地矩陣之對應元素。
  24. 如請求項17至23中任一項之非暫態機器可讀取媒體,其中該執行於故障條件發生時生成故障,該故障條件可選擇自: 具有比該第一源矩陣的列數較少之列數的該目的地矩陣;以及 具有比該第二源矩陣的行數較少之行數的該目的地矩陣。
TW110130682A 2020-09-26 2021-08-19 用於實施16位元浮點矩陣點積指令的裝置、方法及系統 TW202223633A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063083908P 2020-09-26 2020-09-26
US63/083,908 2020-09-26
US17/134,008 2020-12-24
US17/134,008 US11941395B2 (en) 2020-09-26 2020-12-24 Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions

Publications (1)

Publication Number Publication Date
TW202223633A true TW202223633A (zh) 2022-06-16

Family

ID=80822524

Family Applications (1)

Application Number Title Priority Date Filing Date
TW110130682A TW202223633A (zh) 2020-09-26 2021-08-19 用於實施16位元浮點矩陣點積指令的裝置、方法及系統

Country Status (4)

Country Link
US (1) US11941395B2 (zh)
CN (1) CN116097212A (zh)
TW (1) TW202223633A (zh)
WO (1) WO2022066356A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11663000B2 (en) 2020-01-07 2023-05-30 SK Hynix Inc. Multiplication and accumulation(MAC) operator and processing-in-memory (PIM) device including the MAC operator

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247632A (en) 1989-01-23 1993-09-21 Eastman Kodak Company Virtual memory management arrangement for addressing multi-dimensional arrays in a digital data processing system
US5475822A (en) 1993-11-15 1995-12-12 Motorola, Inc. Data processing system for resuming instruction execution after an interrupt and method therefor
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6161219A (en) 1997-07-03 2000-12-12 The University Of Iowa Research Foundation System and method for providing checkpointing with precompile directives and supporting software to produce checkpoints, independent of environment constraints
US6282634B1 (en) 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
FR2787233B1 (fr) 1998-12-11 2001-02-16 St Microelectronics Sa Procede pour verifier l'integrite des circuits de decodage d'une memoire
US6901422B1 (en) 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US7725521B2 (en) 2001-10-29 2010-05-25 Intel Corporation Method and apparatus for computing matrix transformations
US6877020B1 (en) 2001-12-31 2005-04-05 Apple Computer, Inc. Method and apparatus for matrix transposition
US7003542B2 (en) 2002-01-02 2006-02-21 Intel Corporation Apparatus and method for inverting a 4×4 matrix
US7209939B2 (en) 2002-07-11 2007-04-24 Sun Microsystems, Inc. Precision improvement method for the Strassen/Winograd matrix multiplication method
US6944747B2 (en) 2002-12-09 2005-09-13 Gemtech Systems, Llc Apparatus and method for matrix data processing
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US20060190517A1 (en) 2005-02-02 2006-08-24 Guerrero Miguel A Techniques for transposition of a matrix arranged in a memory as multiple items per word
US20070186210A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US7912889B1 (en) 2006-06-16 2011-03-22 Nvidia Corporation Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication
US7792895B1 (en) 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8122078B2 (en) 2006-10-06 2012-02-21 Calos Fund, LLC Processor with enhanced combined-arithmetic capability
US7797362B2 (en) 2007-02-23 2010-09-14 Texas Instruments Incorporated Parallel architecture for matrix transposition
US8392487B1 (en) 2007-03-29 2013-03-05 Compass Electro-Optical Systems Ltd Programmable matrix processor
US8028015B2 (en) 2007-08-10 2011-09-27 Inside Contactless S.A. Method and system for large number multiplication
US8923510B2 (en) 2007-12-28 2014-12-30 Intel Corporation Method and apparatus for efficiently implementing the advanced encryption standard
US8533251B2 (en) 2008-05-23 2013-09-10 International Business Machines Corporation Optimized corner turns for local storage and bandwidth reduction
US8250130B2 (en) 2008-05-30 2012-08-21 International Business Machines Corporation Reducing bandwidth requirements for matrix multiplication
US8060730B2 (en) 2008-05-30 2011-11-15 Freescale Semiconductor, Inc. Selective MISR data accumulation during exception processing
US8539201B2 (en) 2009-11-04 2013-09-17 International Business Machines Corporation Transposing array data on SIMD multi-core processor architectures
US8984043B2 (en) 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
US8478969B2 (en) 2010-09-24 2013-07-02 Intel Corporation Performing a multiply-multiply-accumulate instruction
US20120113133A1 (en) 2010-11-04 2012-05-10 Shpigelblat Shai System, device, and method for multiplying multi-dimensional data arrays
US9727471B2 (en) 2010-11-29 2017-08-08 Intel Corporation Method and apparatus for stream buffer management instructions
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US20130305020A1 (en) 2011-04-01 2013-11-14 Robert C. Valentine Vector friendly instruction format and execution thereof
US9503741B2 (en) 2011-06-08 2016-11-22 Vixs Systems, Inc. Video decoder with multi-format vector processor and methods for use therewith
US20140149480A1 (en) 2012-11-28 2014-05-29 Nvidia Corporation System, method, and computer program product for transposing a matrix
US9442723B2 (en) 2012-12-28 2016-09-13 Intel Corporation Method and apparatus for integral image computation instructions
US9286216B2 (en) 2014-01-16 2016-03-15 Carnegie Mellon University 3DIC memory chips including computational logic-in-memory for performing accelerated data processing
US9798519B2 (en) 2014-07-02 2017-10-24 Via Alliance Semiconductor Co., Ltd. Standard format intermediate result
US20160179523A1 (en) 2014-12-23 2016-06-23 Intel Corporation Apparatus and method for vector broadcast and xorand logical instruction
US10535114B2 (en) 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
US11216720B2 (en) * 2015-10-08 2022-01-04 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that manages power consumption based on memory accesses per period
US10146535B2 (en) 2016-10-20 2018-12-04 Intel Corporatoin Systems, apparatuses, and methods for chained fused multiply add
KR20190093568A (ko) 2016-12-31 2019-08-09 인텔 코포레이션 이종 컴퓨팅을 위한 시스템들, 방법들, 및 장치들
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions

Also Published As

Publication number Publication date
WO2022066356A1 (en) 2022-03-31
US20220100502A1 (en) 2022-03-31
CN116097212A (zh) 2023-05-09
US11941395B2 (en) 2024-03-26

Similar Documents

Publication Publication Date Title
US11893389B2 (en) Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11507376B2 (en) Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10963256B2 (en) Systems and methods for performing instructions to transform matrices into row-interleaved format
CN110955453A (zh) 用于执行矩阵压缩和解压缩指令的***和方法
TWI761367B (zh) 用於融合乘加運算的系統、裝置及方法
JP2024038122A (ja) 行列演算アクセラレータの命令のための装置、方法、およびシステム
US11269630B2 (en) Interleaved pipeline of floating-point adders
CN113849224A (zh) 用于移动数据的指令的装置、方法和***
CN112148251A (zh) 跳过无意义的矩阵运算的***和方法
US20230315450A1 (en) Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
CN114675883A (zh) 用于对齐矩阵操作加速器瓦片的指令的装置、方法和***
US11016731B2 (en) Using Fuzzy-Jbit location of floating-point multiply-accumulate results
TW202223633A (zh) 用於實施16位元浮點矩陣點積指令的裝置、方法及系統
US20210406012A1 (en) Loading and storing matrix data with datatype conversion
CN114675888A (zh) 用于加载矩阵操作加速器瓦片的指令的装置、方法和***
CN112149050A (zh) 用于增强的矩阵乘法器架构的装置、方法和***
CN110826722A (zh) 用于通过排序来生成索引并基于排序对元素进行重新排序的***、装置和方法
EP4398097A2 (en) Apparatuses, methods, and systems for 8-bit floating-point matrix dot product instructions
TW202418114A (zh) 用於矩陣運算加速器之指令的裝置,方法和系統