TW201636831A - 用於向量廣播及互斥或和邏輯指令的設備與方法 - Google Patents

用於向量廣播及互斥或和邏輯指令的設備與方法 Download PDF

Info

Publication number
TW201636831A
TW201636831A TW104138542A TW104138542A TW201636831A TW 201636831 A TW201636831 A TW 201636831A TW 104138542 A TW104138542 A TW 104138542A TW 104138542 A TW104138542 A TW 104138542A TW 201636831 A TW201636831 A TW 201636831A
Authority
TW
Taiwan
Prior art keywords
bit
data
source
instruction
unit
Prior art date
Application number
TW104138542A
Other languages
English (en)
Other versions
TWI610229B (zh
Inventor
艾蒙斯特阿法 歐德亞麥德維爾
羅傑 艾斯帕薩
大衛 吉倫范朵斯
弗 桑契斯
吉勒姆 索羅
Original Assignee
英特爾股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 英特爾股份有限公司 filed Critical 英特爾股份有限公司
Publication of TW201636831A publication Critical patent/TW201636831A/zh
Application granted granted Critical
Publication of TWI610229B publication Critical patent/TWI610229B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

本案描述一種用以執行向量廣播與互斥或和邏輯指令的設備與方法。例如,處理器的一實施例包含:擷取邏輯,用以自記憶體擷取一表示目的緊縮資料運算元、第一源緊縮資料運算元、第二源緊縮資料運算元、及立即運算元的指令;及執行邏輯,用以:根據對應於該立即值的位置,決定在該第二源緊縮資料運算元中的位元;執行該第一源緊縮資料運算元與該所決定位元間的按位元(bitwise)和運算,以產生中間結果;執行該目的緊縮資料運算元與該中間結果間的按位元互斥或運算,以產生最終結果;並儲存該最終結果於該目的緊縮資料運算元所指示的儲存位置中。

Description

用於向量廣播及互斥或和邏輯指令的設備與方法
本發明的實施例大致關係於電腦系統的領域。更明確地說,本發明的實施例關係於用以在電腦處理器內執行向量廣播與互斥或和(XORAND)邏輯指令的設備與方法。
某些類型的應用程式經常需要相同運算被執行於大數量的資料項上(稱為“資料並列”)。單指令多資料(SIMD)表示一類型的指令,其使得處理器對多重資料項執行運算。SIMD技術特別適用於可以將在暫存器中的多數位元邏輯地分割成若干固定大小資料元件的處理器,各個資料元件代表分開的值。例如,在256位元暫存器中的位元可以被指明為予以運算為四個分開的64位元緊縮(packed)資料元件(四-字(Q)大小資料元件)、八個分開的32位元緊縮資料元件(雙字(D)大小資料元件)、十六個分開的16位元緊縮資料元件(字(W)大小資料元件)、或三十二個分開的8位元資料元件(位元 組(B)大小資料元件)的源運算元。此類型的資料被稱為“緊縮”資料類型或“向量”資料類型,及此資料類型的運算元被稱為緊縮資料運算元或向量運算元。換句話說,緊縮資料項或向量表示一順序的緊縮資料元件,及緊縮資料運算元或向量運算元為SIMD指令(也稱為緊縮資料指令或向量指令)的源或目的運算元。
例如為具有包含x86、MMXTM、串流SIMD擴充(SSE)、SSE2、SSE3、SSE4.1與SSE4.2指令的指令集的英特爾®CoreTM處理器所使用的SIMD技術已經在應用程式效能上完成顯著的改良。另一組稱為先進向量擴充(AVX)(AVX1與AVX2)並使用向量擴充(VEX)編碼設計的SIMD擴充已經公開(見,例如2011年十月的英特爾®64與IA-32架構軟體開發者手冊;及見2011年六月的英特爾®先進向量擴充規劃參考書)。這些AVX擴充已經進一步提議使用擴充向量擴充(EVEX)編碼設計,來擴充以支援512位元暫存器(AVX-512)。
在將布林(位元)矩陣乘以布林向量時仍會有挑戰存在。在很多情況下,現行實施方式可能需要對矩陣的元件重覆布林加法(XOR)運算。這浪費大量的處理器循環並且布林矩陣乘法運算也很慢。因此,如果此位元矩陣乘法運算係以減少不必要計算的方式加以實施,則可以獲得效率上的增加。
100‧‧‧處理器管線
102‧‧‧擷取級
104‧‧‧長度解碼級
106‧‧‧解碼級
108‧‧‧配置級
110‧‧‧重命名級
112‧‧‧排序級
114‧‧‧暫存器讀取/記憶體讀取級
116‧‧‧執行級
118‧‧‧寫回/記憶體寫入級
122‧‧‧例外處理級
124‧‧‧確定級
130‧‧‧前端單元
131‧‧‧指令擷取
132‧‧‧分支預測單元
134‧‧‧指令快取單元
136‧‧‧轉譯旁看緩衝器
140‧‧‧解碼單元
150‧‧‧執行引擎單元
151‧‧‧實體暫存器檔案單元
152‧‧‧重命名/配置器單元
154‧‧‧退役單元
156‧‧‧排序單元
160‧‧‧執行叢集
162‧‧‧執行單元
164‧‧‧記憶體存取單元
170‧‧‧記憶體單元
172‧‧‧資料TLB單元
174‧‧‧資料快取單元
176‧‧‧L2快取單元
190‧‧‧核心
200‧‧‧處理器
202A-N‧‧‧核心
204A-N‧‧‧快取單元
206‧‧‧共享快取單元
208‧‧‧特殊用途邏輯
210‧‧‧系統代理單元
212‧‧‧環為主互連單元
214‧‧‧積體記憶體控制器單元
216‧‧‧匯流排控制器單元
300‧‧‧系統
310‧‧‧處理器
315‧‧‧處理器
320‧‧‧控制器集線器
340‧‧‧記憶體
345‧‧‧共處理器
350‧‧‧輸入/輸出集線器
360‧‧‧輸入/輸出裝置
390‧‧‧圖形記憶體控制器集線器
395‧‧‧連接
400‧‧‧多處理器系統
414‧‧‧I/O裝置
415‧‧‧處理器
416‧‧‧匯流排
418‧‧‧匯流排橋接器
420‧‧‧匯流排
422‧‧‧鍵盤/滑鼠
427‧‧‧通訊裝置
428‧‧‧儲存單元
430‧‧‧碼與資料
432‧‧‧記憶體
434‧‧‧記憶體
438‧‧‧共處理器
439‧‧‧高效介面
450‧‧‧P-P介面
452‧‧‧P-P介面
454‧‧‧P-P介面
470‧‧‧處理器
472‧‧‧IMC
476‧‧‧P-P介面
478‧‧‧P-P介面
480‧‧‧處理器
482‧‧‧IMC
486‧‧‧P-P介面
488‧‧‧P-P介面
490‧‧‧晶片組
492‧‧‧介面
494‧‧‧P-P介面
496‧‧‧介面
498‧‧‧P-P介面
500‧‧‧系統
514‧‧‧I/O裝置
515‧‧‧傳統I/O裝置
600‧‧‧系統晶片
602‧‧‧互連單元
610‧‧‧應用處理器
620‧‧‧共處理器
630‧‧‧SRAM單元
632‧‧‧DMA單元
640‧‧‧顯示單元
702‧‧‧高階語言
704‧‧‧x86編譯器
706‧‧‧x86二進制碼
708‧‧‧指令集編譯器
710‧‧‧指令集二進制碼
712‧‧‧指令轉換器
714‧‧‧無x86指令集核心的處理器
716‧‧‧有x86指令集核心的處理器
800‧‧‧系統
802‧‧‧指令
804‧‧‧解碼單元
806‧‧‧執行單元
808‧‧‧立即運算元
810‧‧‧第一源緊縮資料運算元
812‧‧‧第二源緊縮資料運算元
814‧‧‧目的緊縮資料運算元
900‧‧‧邏輯
902‧‧‧暫時向量
908‧‧‧按位元和
910‧‧‧按位元互斥或
1200‧‧‧同屬向量友善指令格式
1205‧‧‧無記憶體存取
1210‧‧‧全捨去控制類型運算
1215‧‧‧資料轉換類型運算
1220‧‧‧記憶體存取
1225‧‧‧記憶體存取時間指令樣板
1230‧‧‧記憶體存取非時間指令樣板
1240‧‧‧格式欄
1242‧‧‧基礎運算欄
1244‧‧‧暫存器索引欄
1246‧‧‧修飾符欄
1250‧‧‧擴增運算欄
1252‧‧‧α欄
1254‧‧‧β欄
1260‧‧‧縮放欄
1262A‧‧‧位移欄
1262B‧‧‧位移因數欄
1268‧‧‧類型欄
1270‧‧‧寫入遮罩欄
1272‧‧‧立即欄
1274‧‧‧全運算碼欄
1256‧‧‧SAE欄
1258‧‧‧捨入運算控制欄
1252A‧‧‧RS欄
1252A.1‧‧‧捨去
1252A.2‧‧‧資料轉換
1254A‧‧‧捨去控制欄
1254B‧‧‧資料轉換欄
1254C‧‧‧資料調處欄
1257A‧‧‧RL欄
1257A.1‧‧‧捨去
1257A.2‧‧‧向量長度
1259A‧‧‧捨去運算控制欄
1259B‧‧‧向量長度欄
1257B‧‧‧廣播欄
1300‧‧‧特定向量友善指令格式
1305‧‧‧REX欄
1315‧‧‧運算碼圖欄
1320‧‧‧EVEX.vvvv
1325‧‧‧前置編碼欄
1330‧‧‧真運算碼欄
1340‧‧‧MODR/M欄
1342‧‧‧MOD欄
1344‧‧‧Reg欄
1346‧‧‧R/M欄
1354‧‧‧SIB.xxx
1356‧‧‧SIB.bbb
1400‧‧‧暫存器架構
1410‧‧‧向量暫存器
1415‧‧‧寫入遮罩暫存器
1425‧‧‧通用暫存器
1445‧‧‧純量浮點堆疊暫存器檔
1450‧‧‧MMX緊縮整數平暫存器欄
1500‧‧‧指令解碼
1502‧‧‧環型網路
1504‧‧‧第2層快取的本地次組
1506‧‧‧L1快取
1508‧‧‧純量單元
1510‧‧‧向量單元
1512‧‧‧純量暫存器
1514‧‧‧向量暫存器
1506A‧‧‧L1資料快取
1520‧‧‧拌和
1522A、B‧‧‧數值轉換
1524‧‧‧複製
1526‧‧‧寫入遮罩暫存器
1528‧‧‧ALU
圖1A為依據本發明實施例之例示有序管線與例示暫存器重命名無序發出/執行管線的方塊圖;圖1B為依據本發明實施例之予以包含在處理器內的有序架構核心與例示暫存器重命名無序發出/執行架構核心的例示實施例的方塊圖;圖2為依據本發明實施例之具有積體記憶體控制器與圖形的單核處理器與多核心處理器的方塊圖;圖3例示依據本發明一實施例之系統的方塊圖;圖4例示依據本發明實施例之第二系統的方塊圖;圖5例示依據本發明實施例之第三系統的方塊圖;圖6例示依據本發明實施例之系統晶片(SoC)的方塊圖;圖7例示依據本發明實施例之對應於軟體指令轉換器的使用的方塊圖,以將在源指令集的二進制指令轉換為目標指令集的二進制指令;圖8例示系統800的方塊圖,其係可操作以執行向量廣播及XORAND邏輯指令的實施例;圖9例示依據本發明的一實施例之執行向量廣播與XORAND邏輯指令的邏輯;圖10為用於系統的方法1000的流程圖,其可操作以執行向量廣播與XORAND邏輯指令的實施例; 圖11例示邏輯的例示虛擬碼,可操作以執行向量廣播與XORAND邏輯指令的實施例;圖12A與12B為方塊圖,例示依據本發明實施例之同屬向量友善指令格式與指令樣板;圖13依據本發明實施例的例示特定向量友善指令格式的方塊圖;圖14依據本發明的一實施例之暫存器架構的方塊圖;及圖15A-B例示更特定例示有序核心架構的方塊圖。
【發明內容與實施方式】 [例示處理器架構]
圖1A為依據本發明實施例之例示有序擷取解碼退役管線與例示暫存器重命名無序發出/執行管線的方塊圖。圖1B為例示予以包含在依據本發明實施例之處理器中之有序擷取解碼退役核心的例示實施例與例示暫存器重命名無序發出/執行架構核心之方塊圖。圖1A-B的實線方塊例示管線與核心的有序部份,同時,選用加入的虛線方塊例示暫存器重命名無序發出/執行管線與核心。
在圖1A中,處理器管線100包含擷取級102、長度解碼級104、解碼級106、配置級108、重命名級110、排序(同時稱為分派或發出)級112、暫存器讀取/記憶體讀取級114、執行級116、寫回/記憶體寫入級 118、例外處理級122及確定級124。
圖1B顯示處理器核心190,包含有:耦接至執行引擎單元150的前端單元130,並且兩者均耦接至記憶體單元170。核心190可以為精簡指令集計算(RISC)核心、複雜指令集計算(CISC)核心、很長指令字(VLIW)核心或混合或交替核心類型。在另一選項中,核心190也可以是特殊用途核心,例如,網路或通訊核心、壓縮引擎、共處理器核心、通用計算圖型處理單元(GPGPU)核心、圖型核心或類似物。
前端單元130包含耦接至指令快取單元134的分支預測單元132,指令快取單元134係耦接至指令轉譯旁看緩衝器(TLB)136、轉譯旁看緩衝器136係耦接至指令擷取單元138,指令擷取單元138耦接至解碼單元140。解碼單元140(或解碼器)可以解碼指令,並產生由原始指令所解碼或反映或推導出的一或更多微運算、微碼輸入項點、微指令、其他指令或其他控制信號作為輸出。解碼單元140可以使用各種不同機制加以實施。適當機制的例子包含但並不限於查看表、硬體實施方式、可程式邏輯陣列(PLA)、微碼唯讀記憶體(ROM)等等。在一實施例中,核心190包含微碼ROM或其他媒體,其儲存用於某些巨指令的微碼(例如,在解碼單元140或前端單元130內)。解碼單元140係耦接至在執行引擎單元150中的重命名/配置器單元152。
執行引擎單元150包含耦接至退役單元154 與一組的一或更多排序單元156的重命名/配置器單元152。排序單元156呈現任意數量的不同排序器,包含保留站、中央指令窗等等。排序單元156係耦接至實體暫存器檔案單元158。各個實體暫存器檔案單元158代表一或更多實體暫存器檔案,不同的實體暫存器檔案儲存一或更多不同資料類型,例如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、狀態(例如,指令指標為下一個予以執行的指令的位址)等等。在一實施例中,實體暫存器檔案單元158包含向量暫存器單元、寫入遮罩暫存器單元及純量暫存器單元。這些暫存器單元可以提供架構向量暫存器、向量遮罩暫存器、及通用暫存器。實體暫存器檔案單元158係為退役單元154所重疊,以例示暫存器重命名及無序執行可以實行的各種方式(例如,使用重排序緩衝器與退役暫存器檔案;使用未來檔案,歷史緩衝器、及退役暫存器檔案;使用暫存器圖與暫存器池;等等)。退役單元154與實體暫存器檔案單元158係被耦接至執行叢集160。執行叢集160包含一組之一或更多執行單元162及一組之一或更多記憶體存取單元164。執行單元162可以執行各種運算(例如,移位、加法、減法、乘法)並針對各種類型之資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)。雖然一些實施例可能包含若干專屬於特定功能或功能組的執行單元,但其他實施例也可以只包含一執行單元或都執行所有功能的多執行單元。排序單元156、實體暫存器檔案單元158、及 執行叢集160係被顯示為可能多數個,因為某些實施例建立用於某些類型資料/運算的分開管線(例如,純量整數管線、純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或記憶體存取管線,其各個具有其本身排序單元、實體暫存器檔案單元、及/或執行叢集-及當在分開記憶體存取管線情況下,某些實施例係被實施為只有此管線的執行叢集具有記憶體存取單元164)。也應了解的是,當使用分開管線時,這些管線的一或更多者可以為無序發出/執行及其他為有序。
該組記憶體存取單元164係被耦接至記憶體單元170,其係包含耦接至資料快取單元174的資料TLB單元172,以及資料快取單元174係耦接至第二層(L2)快取單元176。在例示實施例中,記憶體存取單元164可以包含負載單元、儲存位址單元、及儲存資料單元,其各個係耦接至在記憶體單元170中的資料TLB單元172。指令快取單元134更進一步耦接至在記憶體單元170中的第二層(L2)快取單元176。L2快取單元176係耦接至一或更多其他層的快取並最後耦接至主記憶體。
例如,例示暫存器重命名無序發出/執行核心架構可以如下實施管線100:1)指令擷取138執行擷取與長度解碼級102及104;2)解碼單元140執行解碼級106;3)重命名/配置器單元152執行配置級108與重命名級110;4)排序單元156執行排序級112;5)實體暫存器檔案單元158與記憶體單元170執行暫存器讀取/記 憶體讀取級114;執行叢集160實行執行級116;6)記憶體單元170與實體暫存器檔案單元158執行寫回/記憶體寫入級118;7)各種單元可以涉及於例外處理級122;及8)退役單元154與實體暫存器檔案單元158執行確定級124。
核心190可以支援包含於此所述之指令的一或更多指令集(例如,x86指令集(一些擴充已經加入至新版中);美國加州的Sunnyvale的MIPS科技的MIPS指令集;美國加州的Sunnyvale的ARM控股的ARM指令集(有例如NEON的選用額外擴充)。在一實施例中,核心190包含邏輯,用以支援緊縮資料指令集擴充(例如,AVX1、AVX2及/或如下所述之一些形式之同屬向量友善指令格式(U=0及/或U=1)),藉以允許為很多多媒體應用所使用的運算使用緊縮資料加以實行。
應了解的是,核心可以支援多穿線(執行兩或更多並列組的運算或線程),並且可以以各種方式加以進行,包含時間分割(time sliced)多穿線、同時多穿線(其中單一實體核心提供邏輯核心,用於各個線程,實體核心被同時作多穿線)、或其組合(例如,在英特爾®超穿線(Hyperthreading)技術中的時間分割擷取及解碼及隨後同時多穿線)。
雖然暫存器重命名係以無序執行的脈絡加以描述,但應了解的是,暫存器重命名也可以被用於有序架構中。雖然處理器的例示實施例也包含分開指令與資料快 取單元134/174與共享L2快取單元176,但其他實施例也可以具有用於指令與資料的單一內部快取,例如第一層(L1)內部快取,或多層的內部快取。在一些實施例中,系統也可以包含內部快取及在核心及/或處理器外的外部快取的組合。或者,所有快取也可以在核心及/或處理器的外部。
圖2為處理器200的方塊圖,其可以具有一個以上核心,並可以具有積體記憶體控制器,及可以具有依據本發明實施例之積體圖形。圖2的實線方塊例示處理器200,其具有單一核心202A、系統代理210、一組一或更多的匯流排控制器單元216,同選用加入的虛線方塊則例示另一處理器200,其具有多數核心202A-N、在系統代理單元210中的一組一或更多積體記憶體控制器單元214、及特殊用途邏輯208。
因此,處理器200的不同實施方式可以包含:1)具有被整合有圖形及/或科學(通量)邏輯(其可以包含一或更多核心)的特殊用途邏輯208的CPU,核心202A-N係為一或更多通用核心(例如,通用有序核心、通用無序核心、兩者的組合);2)具有為大量特殊用途核心的核心202A-N的共處理器,其主要用於圖形與/或科學(通量);及3)具有為大量通用有序核心的核心202A-N的共處理器。因此,處理器200可以為通用處理器、共處理器或特殊用途處理器,例如,網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單 元)、高通量多積體核心(MIC)共處理器(包含30或更多核心)、嵌式處理器或類似物。處理器可以實施在一或更多晶片上。處理器200可以使用若干製程技術,例如,Bi-CMOS、CMOS或NMOS之任一而為一或更多基板的一部份及/或可以實施在一或更多基板上。
記憶體階層包含在核心內的一或更多層的快取、一組或一或更多共享快取單元206、及外部記憶體(未示出)耦接至該組積體記憶體控制器單元214。該組共享快取單元206可以包含一或更多中層快取,例如第2層(L2)、第3層(L3)、第4層(L4)或其他層的快取、最後層快取(LLC)及/或其組合。雖然在一實施例中,環為主互連單元212互連該積體圖形邏輯208、該組共享快取單元206及系統代理單元210/積體記憶體控制器單元214,但在其他實施例中也可以使用任意數量的已知技術,用以互連這些單元。在一實施例中,在一或更多快取單元206與核心202A-N間維持住連貫性(coherency)。
在一些實施例中,一或更多核心202A-N係能夠多穿線。系統代理210包含這些元件,用以協調與操作核心202A-N。系統代理單元210可以包含例如電力控制單元(PCU)與顯示單元。PCU可以是或包含用以調節核心202A-N與積體圖形邏輯208的電力狀態所需的邏輯與元件。顯示單元係用以驅動一或更多外部連接顯示器。
核心202A-N以架構指令集看來可以為同質或 異質;即,兩或更多核心202A-N可以執行相同指令集,而其他則可以只執行該指令集的一次組或不同的指令集。在一實施例中,核心202A-N為異質並可以包含如下所述之“小”核心與“大”核心。
圖3至6為例示電腦架構的方塊圖。在膝上型電腦、桌上型電腦、手持PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、開關、嵌式處理器、數位信號處理器(DSP)、圖形裝置、視訊遊戲裝置、機頂盒、微控制器、行動電話、攜帶式媒體播放器、手持裝置及各種其他電子裝置的領域中已知的其他系統設計與架構也是適用的。通常,能夠加入如於此所揭露之處理器及/或其他執行邏輯的各種系統或電子裝置也是適用的。
現參考圖3,顯示依據本發明一實施例之系統300的方塊圖。系統300可以包含一或更多處理器310、315,其係耦接至控制器集線器320。在一實施例中,控制器集線器320包含圖形記憶體控制器集線器(GMCH)390與輸入/輸出集線器(IOH)350(可以是在分開的晶片上);GMCH390包含記憶體與圖形控制器,其上連接有記憶體340與共處理器345;IOH350係將輸入/輸出(I/O)裝置360耦接至GMCH390。或者,記憶體與圖形控制器之一或兩者係被整合在處理器上(如於此所述),記憶體340與共處理器345係被直接耦接至處理器310,及控制器集線器320與IOH350係在單一晶片上。
額外處理器315的選用本質係被以虛線被描繪於圖3中。各個處理器310、315可以包含如此所述之一或更多處理核心並可以為一些版本的處理器200。
記憶體340可以例如為動態隨機存取記憶體(DRAM)、相變記憶體(PCM)、或兩者之組合。對於至少一實施例中,控制器集線器320與處理器310、315透過例如,前側匯流排(FSB)之多投匯流排、例如快路徑(QuickPath)互連(QPI)的點對點介面,或類似連接395進行通訊。
在一實施例中,共處理器345為一特殊用途處理器,例如,高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、GPGPU、嵌式處理器或類似物。在一實施例中,控制器集線器320可以包含積體圖形加速器。
於實體資源310、315間以各種指標度量標準(metrics of rmerit)看來可以有各種不同,包含架構上、微架構上、熱學上、功率消耗特徵等等的不同。
在一實施例中,處理器310執行控制一般類型的資料處理運算的指令。內藏在指令內的可以是共處理器指令。處理器310認出這些共處理器指令為應為附屬共處理器345所執行的類型。因此,處理器310發出這些共處理器指令(或代表共處理器指令的控制信號)於共處理器匯流排或其他互連上,至共處理器345。共處理器345接受並執行所接收的共處理器指令。
現參考圖4,顯示依據本發明一實施例之第一更明確例示系統400的方塊圖。如於圖4所示,多處理器系統400為點對點互連系統,並包含第一處理器470與第二處理器480,其係經由點對點互連450耦接。各個處理器470與480可以為一些版本的處理器200。在本發明之一實施例中,處理器470與480分別為處理器310與315,而共處理器438為共處理器345。在另一實施例中,處理器470與480分別為處理器310與共處理器345。
處理器470與480係被顯示分別包含積體記憶體控制器(IMC)單元472與482。處理器470同時也包含其匯流排控制器單元點對點(P-P)介面476與478作為其一部份;類似地,第二處理器480包含P-P介面486與488。處理器470、480可以使用點對點(P-P)介面電路478與488透過P-P介面450交換資訊。如於圖4所示,IMC472與482將處理器耦接至個別記憶體,即記憶體432與記憶體434,其可以為本地附接至個別處理器的主記憶體的部份。
處理器470、480可以各別使用點對點介面電路476、494、486、498透過個別P-P介面452、454與晶片組490交換資訊。晶片組490可以選用地經由高效介面439與共處理器438交換資訊。在一實施例中,共處理器438為特殊用途處理器,例如,高通量MIC處理器、網路或通訊處理器、壓縮引擎、圖型處理器、GPGPU、嵌式處 理器或類似物。
共享快取(未示出)可以包含在處理器內或兩處理器外,但與處理器經由P-P互連連接,使得如果處理器被置入於低電力模式時,處理器之一或兩者的本地快取資訊可以儲存在共享快取內。
晶片組490可以經由介面496耦接至第一匯流排416。在一實施例,第一匯流排416可以為週邊元件互連(PCI)匯流排,或例如PCI Express匯流排之匯流排或另一第三代I/O互連匯流排,但本發明的範圍並不作此限定。
如於圖4所示,各種I/O裝置414可以耦接至第一匯流排416,及匯流排橋接器418將第一匯流排416耦接至第二匯流排420。在一實施例中,一或更多額外處理器415,例如,共處理器、高通量MIC處理器、GPGPU、加速器(例如圖形加速器或數位信號處理(DSP)單元)、場可程式閘陣列、或任何其他處理器係耦接至第一匯流排416。在一實施例中,第二匯流排420可以為低接腳數(LPC)匯流排。各種可以耦接至第二匯流排420的裝置,包含有例如,鍵盤及/或滑鼠422、通訊裝置427及儲存單元428,例如磁碟機或其他大量儲存裝置,其在一實施例中可以包含指令/碼及資料430。再者,音訊I/O 424可以耦接至第二匯流排420。注意,其他架構也是可能的。例如,除了圖4的點對點架構之外,系統也可以實施多投匯流排或其他此架構。
現參考圖5,顯示依據本發明實施例之第二更特定例示系統500的方塊圖。在圖4及5中的類似元件係有類似元件符號,及圖4的某些態樣已經被由圖5中省略,以避免模糊了圖5的其他態樣。
圖5例示處理器470、480可以分別包含積體記憶體及I/O控制邏輯(CL)472與482。因此,CL 472與482包含積體記憶體控制器單元並包含I/O控制邏輯。圖5例示不但是記憶體432、434耦接至CL 472、482,I/O裝置514也耦接至控制邏輯472、482。傳統I/O裝置515係耦接至晶片組490。
現參考圖6,所示為依據本發明實施例之SoC 600的方塊圖。圖2中的類似元件有類似元件符號。同時,虛線方塊係為在更先進SoC上的選用特性。在圖6中,互連單元602係耦接至:應用處理器610,其包含一組一或更多核心202A-N及共享快取單元206;系統代理單元210;匯流排控制器單元216;積體記憶體控制器單元214;一組或一或更多共處理器620,其可以包含積體圖形邏輯、影像處理器、音訊處理器、及視訊處理器;靜態隨機存取記憶體(SRAM)單元630;直接記憶體存取(DMA)單元632;及顯示單元640,用以耦接至一或更多外部顯示器。在一實施例中,共處理器620包含特殊用途處理器,例如網路或通訊處理器、壓縮引擎、GPGPU、高通量MIC處理器、嵌式處理器或類似物。
於此所揭露之機制的實施例可以被實施於硬 體、軟體、韌體、或此等實施方式方法的組合。本發明之實施例可以被實施為電腦程式或執行於可程式系統上的程式碼,該可程式系統包含至少一處理器、儲存系統(包含揮發與非揮發記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置。
例如圖4所示之碼430的程式碼可以被應用至輸入指令,以執行於此所述之功能並產生輸出資訊。輸出資訊可以被以已知方式應用至一或更多輸出裝置。為了本案的目的,處理系統可以包含具有例如:數位信號處理器(DSP)、微控制器、特定應用積體電路(ASIC)、或微處理器的處理器之任意系統。
程式碼可以實施為高階程序或物件導向程式語言,以與處理系統通訊。如果想要,程式碼也可以實施為組合語言或機器語言。事實上,於此所述之機制並不將範圍限制於任何特定程式語言。任何情況下,語言也可以是編譯或解譯語言。
至少一實施例的一或更多態樣可以為儲存在機器可讀取媒體上的代表指令所實施,其代表在處理器內的各種邏輯,其當為機器所讀取時,使得機器製造邏輯以執行於此所述之技術。此稱為“IP核心”的代表可以被儲存在有形機器可讀取媒體上並被供應至各客戶或製造設施,以載入實際完成該邏輯或處理器的該製造機器。
此機器可讀取儲存媒體可以包含但並不限於非暫態有形配置的機器或裝置製造或形成的物體,包含儲 存媒體,例如硬碟、任何其他類型的碟片,包含軟碟、光碟、光碟唯讀記憶體(CD-ROM)、微型可寫光碟(CD-RW)、及磁光碟、半導體裝置,如唯讀記憶體(ROM)、隨機存取記憶體(RAM),例如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可程式唯讀記憶體(EPROM)、快閃記憶體、電氣可抹除可程式唯讀記憶體(EEPROM)、相變記憶體(PCM)、磁或光卡、或任何其他類型的適用以儲存電子指令的媒體。
因此,本發明之實施例也包含非暫態有形機器可讀取媒體,包含有指令或含有設計資料,例如硬體描述語言(HDL),其界定於此所述之結構、電路、設備、處理器及/或系統特性。此等實施例也可以被稱為程式產品。
在一些情況下,指令轉換器可以被用以將指令由源指令集轉換為目標指令集。例如,指令轉換器可以轉譯(例如,使用靜態二進制轉譯、動態二進制轉譯,包含動態編譯)、變體、仿真、或其他將一指令轉換為一或更多其他予以為核心所處理的指令。指令轉換器可以實施為軟體、硬體、韌體或其組合。指令轉換器可以為在處理器上、處理器外、或一部份在處理器內而一部份在處理器外。
圖7為對比於軟體指令轉換器的使用的方塊圖,依據本發明實施例的將源指令集的二進制指令轉換為 目標指令集的二進制指令。在例示實施例中,指令轉換器為軟體指令轉換器,或者,指令轉換器也可以實施為軟體、韌體、硬體或其各種組合。圖7顯示高階語言702的程式,其可以使用x86編譯器704編譯,以產生x86二進制碼706,其也可以為具有至少一x86指令集核心716的處理器所本地執行。具有至少一x86指令集核心716的處理器代表任何處理器,其可以執行與具有至少一x86指令集核心的英特爾處理器基本相同的功能,藉由相容地執行或處理(1)英特爾x86指令集核心的指令集的大部份或(2)針對執行於具有至少一x86指令集核心的英特爾處理器的應用程式的目標碼版本或其他軟體,以完成與具有至少一x86指令集核心的英特爾處理器基本相同的結果。x86編譯器704代表一編譯器,其可操作以產生x86二進制碼706(例如,目標碼),其可以有或沒有額外鏈結處理益可以被執行於具有至少一x86指令集核心716的處理器上。
同樣地,圖7顯示高階語言702的程式,其可以使用另外指令集編譯器708編譯,以產生另一指令集二進制碼710,其可以為沒有至少一x86指令集核心714的處理器所本地執行(例如,具有執行美國加州Sunnyvale的MIPS科技的MIPS指令集及/或執行美國加州Sunnyvale的ARM控股公司的ARM指令集的核心的處理器)。指令轉換器712係被用以將x86二進制碼706轉換為被沒有x86指令集核心714的處理器所本地執行的 碼。所轉換的碼似乎不會與另一指令集二進制碼710相同,因為能作此的指令轉換器很難完成;然而,所轉換碼將完成一般操作並可以由另一指令集作成指令。因此,指令轉換器712呈現軟體、韌體、硬體或其組合,其可以透過仿真、模擬或任何其他處理,允許沒有x86指令集處理器或核心的處理器或其他電子裝置執行x86二進制碼706。
執行向量廣播與互斥或和邏輯指令的設備與方法
如上所述,將布林(位元)矩陣乘以布林向量可能效率低。因此,想要將布林矩陣乘以向量的更有效率的方法。更明確地說,在一些實施例中,指令係被使用以執行矩陣乘法。該指令執行緊縮資料運算元的按位元和運算,其可以代表位元矩陣的行與被廣播至暫時向量的該位元向量的對應位元值。該位元向量可以為第二緊縮資料運算元所代表。按位元互斥或運算然後可以對此結果值與為第三緊縮資料運算元所表示的目的向量加以執行。當此指令針對該位元矩陣的所有行重覆時,目的向量累積所有運算的結果並呈現矩陣乘法的結果。注意,模組式算術係被用於位元向量與矩陣的矩陣運算,因此,一積運算變成按元位和,及總和運算變成按位元互斥或(即,XOR)。此一指令使一處理器,藉由消除在傳統指令集指令表(repertoire)中的額外邏輯指令的負擔,而有效地處理位元矩陣與位元向量的乘法。
圖8為一方塊圖,其例示可以操作以執行向量廣播與XORAND邏輯指令的實施例的系統800。在一些實施例中,系統800可以為通用處理器(例如在桌上型、膝上型或其他電腦中常用的類型)的一部份。或者,系統800可以為特殊用途處理器。適當特殊用途處理器的例子包含但並不限於加密處理器、網路處理器、通訊處理器、共處理器、圖形處理器、嵌式處理器、數位信號處理器(DSP)、及控制器(例如,微控制器),只提出幾個作為例子。處理器可以為任何各種複雜指令集計算(CISC)處理器、各種精簡指令集計算(RISC)處理器、各種很長指令字(VLIW)處理器、其各種混合或其他類型的處理器。
在運算期間,系統800可以接收向量廣播與XORAND邏輯指令802(以下稱為指令802)的實施例。例如,指令802可以自指令擷取單元、指令佇列或類似物接收。指令802可以代表巨指令、組合語言指令、機器碼指令、或處理器的指令集的其他指令或控制信號。在一些實施例中,指令802可以明確指明(例如,透過一或更多欄位或一組位元),或表示(例如隱含表示)第一源緊縮資料運算元810,並可以明確地指明或表示第二源緊縮資料運算元812。指令802也可以明確地指明或表示目的緊縮資料運算元814,並可以明確地指明或表示立即運算元808。
再次參考圖8,系統800包含解碼單元或解碼 器804。解碼單元可以接收與解碼包含指令802的指令。解碼單元可以輸出一或更多微指令、微運算、微碼輸入點、解碼指令或控制信號,或其他相對較低階指令或控制信號,其反映、表示指令802及/或由指令802導出。該一或更多相對較低階指令或控制信號可以透過一或更多相對較低階(例如電路級或硬體級)操作,實施相對較高階指令802。在一些實施例中,解碼單元804可以包含:一或更多輸入結構(例如,輸入埠、輸入互連、輸入介面等),以接收指令802;耦接至輸入結構的指令辨識邏輯,以接收與辨識指令802;耦接至該辨識邏輯的解碼邏輯,以接收與解碼指令802;及耦接至該解碼邏輯的一或更多輸出結構(例如,輸出埠、輸出互連、輸出介面等),以輸出一或更多對應較低階指令或控制信號。辨識邏輯與解碼邏輯可以使用各種不同機制實施,包含但並不限於微碼唯讀記憶體(ROM)、查看表、硬體實施法、可程式邏輯陣列(PLA)、及用以在本技藝中實施已知解碼單元的其他機制。在一些實施例中,解碼單元804可以與如圖1中所示之解碼單元140相同。
系統800也可以包含一組暫存器。在一些實施例中,暫存器也可以包含通用暫存器,可操作以保持資料。雖然並不必如此,但用語“通用”經常係用以表示可以在暫存器中儲存資料或位址的能力。各個通用暫存器也可以代表晶粒上儲存位置,其可操作以儲存資料。通用暫存器也可以代表可見架構暫存器(例如,架構暫存器檔)。 可見架構或架構暫存器可以為軟體及/或程式員所見及/或為指令所表示以識別運算元的暫存器。在給定微架構中,這些架構暫存器係對比於其他非架構或非可見架構暫存器(例如,暫時暫存器、重排序緩衝器、退役暫存器等等)。暫存器可以使用已知技術以不同方式實施於不同微架構中,並不限定於任何特別類型的電路。各種不同類型的暫存器係適用的。適當類型的暫存器的例子包含但並不限於專屬實體暫存器、使用暫存器重命名的動態配置實體暫存器,或其組合。
在一些實施例中,第一源緊縮資料運算元810可以被儲存在第一通用暫存器中,第二源緊縮資料運算元812可以被儲存在第二通用暫存器中,目的緊縮資料運算元814可以被儲存在第三通用暫存器中。或者,記憶體位置、或其他儲存位置也可以被使用作為一或更多源運算元。例如,在一些實施例中,記憶體操作可能被用作為第二源緊縮資料運算元,但這並不是必然如此。
執行單元806自解碼單元804接收控制信號並執行指令802。執行單元806被指示以接收立即8位元值、第一源儲存位置、第二源儲存位置、及目的儲存位置。這些可以分別為立即運算元808、第一源緊縮資料運算元810、第二源緊縮資料運算元812與目的緊縮資料運算元814所表示。在一些實施例中,儲存位置表示暫存器,例如實體暫存器檔單元158。在一些實施例中,儲存位置表示記憶體位置,例如,在如記憶體單元170之記憶 體單元內的位置。執行單元806的操作與功能可以進一步參考在圖1中之執行引擎單元150加以詳述。
再次參考圖8,執行單元806係耦接至解碼單元804與暫存器。例如,執行單元可以包含算術單元、算術邏輯單元、執行算術與邏輯運算的數位電路、包含乘法器與加法器的數位電路,或類似物。執行單元也接收一或更多解碼或轉換過的指令或控制信號,其代表指令802及/或由指令802所導出。執行單元也可以接收第一源緊縮資料運算元810、第二源緊縮資料運算元812、目的緊縮資料運算元814、及立即運算元808。在一些實施例中,立即運算元具有8位元值。在一些實施例中,第一源緊縮資料運算元810、第二源緊縮資料運算元812、及目的緊縮資料運算元814表示儲存位置,其具有64位元的倍數至512位元的值。執行單元係可回應於及/或由於指令802的結果(例如,回應於來自指令的直接或間接(例如,透過仿真)解碼的一或更多指令或控制信號)加以操作以儲存結果。
在一些實施例中,在第一源緊縮資料運算元810、第二源緊縮資料運算元812及目的緊縮資料運算元814中的緊縮資料元件(位元)為64位元緊縮資料元件(四倍字)。在此一實施例中,執行於各個64位元緊縮資料元件部上的運算係被重覆,及執行單元806可以以平行或串列方式對各個64位元緊縮資料元件部執行運算。在一些實施例中,為緊縮資料運算元所表示的值之長度可 以為長度64的很多倍數,並可以包含多數64位元部。
由於指令802的結果,執行單元使用為立即運算元所表示的值作為索引位置,而決定在為第二源緊縮資料運算元812所表示之各個64位元緊縮資料元件部中的一位元。在一實施例中,立即運算元為8位元值,因此,可以代表由0至63的64索引位置,並可以表示在該第二源緊縮資料運算元之各個64位元緊縮資料元件部中的位元位置。
一旦執行單元806決定在一或更多64位元緊縮資料元件部中的位元,在一些實施例中,該位元然後被廣播給各個64位元緊縮資料元件部的64位元的暫時向量陣列。換句話說,此一位元值係被重覆並被放置於此暫時向量陣列的所有64位元位置中。在一些實施例中,此暫時向量陣列可以為暫時或內部暫存器,其係並不能透過任何至系統的程式語言介面所存取者。
對於各個64位元緊縮資料元件部,執行單元806然後採具有廣播位元的對應暫時向量陣列並執行此暫時向量陣列與為第一源緊縮資料運算元所示的對應64位元緊縮資料元件部的按位元和(AND)運算。換句話說,執行單元806採用所決定的位元並執行它與在第一源緊縮資料運算元中之對應位元值間的按位元和運算。
執行單元806進一步採用此按位元和運算元的所得值(即,中間結果)並執行這些所得值與在目的緊縮資料運算元中之對應緊縮資料元件的按位元互斥或 (XOR)運算。執行單元806然後採用由此按位元XOR運算所決定的值並將這些值儲存於目的緊縮資料運算元中的對應位置。
上述之這些實施例允許系統800使用模組式算術,有效地將一位元矩陣乘以位元向量。在一些實施例中,一些或全部位元矩陣係被儲存於為第一源緊縮資料運算元所表示的儲存位置中,及位元向量係被儲存於第二緊縮資料運算元所表示的儲存位置中。在一些實施例中,位元矩陣係被儲存於列(即,在儲存位置中之位置0儲存該位元矩陣的第一列的第一元件、位置1係儲存該位元陣列的相同第一列的第二元件,等等)。在此安排下,位元矩陣應被轉置,使得在執行上述運算前,其係被以行儲存於儲存位置。當藉由設定在立即運算元與該位元矩陣的所有行中的不同值,執行單元806針對該位元向量的所有值重覆執行上述運算時,儲存在為目的緊縮資料運算元所表示的儲存位置中的值代表該位元矩陣與位元向量的矩陣乘法的結果。注意,在各個運算中之為立即運算元所表示的值應匹配為第一源緊縮資料運算元所表示的位元矩陣的行數,使得位元矩陣中的正確行被乘以在位元向量中的正確值(即,在位元向量中的位置0的值應被乘以在該位元矩陣的位置0的行)。為完成如此,為第一源緊縮資料運算元所表示的儲存位置或儲存位置位址可以針對指令802的每一遞迴加以改變。
在一些實施例中,位元矩陣為64×64位元矩 陣。因為由第一源緊縮資料運算元所表示之儲存位置可能不能儲存位元矩陣的所有64行(例如,如果儲存位置為512位元暫存器),所以不同儲存位置也可以為第一源緊縮資料運算元所表示,以用於指令802的各個遞迴,以完成矩陣乘法運算。
有關於上述實施例的進一步細節將如下參考圖9至11加以描述。
執行單元與/或處理器可以包含特定或特殊邏輯(例如,電晶體、積體電路或其他硬體可能組合韌體(例如儲存在非揮發記憶體中的指令)及/或軟體),其可以操作以執行指令802及/或回應於指令802及/或指令802的結果而儲存結果(例如,回應於由指令802解碼或由指令802推導出的一或更多指令或控制信號)。在一些實施例中,執行單元可以包含:一或更多輸入結構(例如,輸入埠、輸入互連、輸入介面等等),以接收源運算元;耦接至輸入結構以接收並處理源運算元及產生所得運算元的電路或邏輯(例如乘法器及至少一加法器);及耦接電路或邏輯以輸出所得運算元的一或更多輸出結構(例如,輸出埠、輸出互連、輸出介面等等)。
為了避免模糊本說明,相當簡單地系統800已經被顯示並描述。在其他實施例中,系統800可以選用地包含其他已知處理器元件。此等元件的可能例子包含但並不限於指令擷取單元、指令與資料快取、第二或更高層快取、無序執行邏輯、指令排序單元、暫存器重命名單 元、退役單元、匯流排介面單元、指令及資料轉譯旁看緩衝器、預擷取緩衝器、微指令佇列、微指令序向器、其他包含在處理器中之各種元件、及其各種組合。此等元件的各種不同組合與架構也是適用的。實施例並不限於任何已知組合或架構。再者,實施例也可以包含在具有多數核心的處理器、邏輯處理器、或執行引擎中,其中的至少之一包含解碼單元與執行單元以執行指令802的實施例。
圖9例示邏輯900,用以依據本發明的一實施例,執行向量廣播與XORAND邏輯指令。在一些實施例中,執行單元806包含邏輯900以執行指令802。在一些實施例中,指令802指明立即運算元808(IMM8)、第一源緊縮資料運算元810(SRC1)、第二源緊縮資料運算元812(SRC2)、及目的緊縮資料運算元814(DEST)。雖然在邏輯900中描繪的運算元表示特定二進制值,但這些值只包含作例示目的,在其他實施例中,運算元可以包含不同值。
注意為SRC1 810、SRC2 812、與DEST 814所指示的儲存位置可以各個儲存多個緊縮64位元值。在此一情況下,邏輯900表示這些64位元緊縮資料元件部可以各個以類似方式加以處理。在一些實施例中,各個部係與其他部並列處理。各個這些部的長度與區分(demarcation)係為在904的數字所表示。運算元值的總長度係為在906的數字所表示,在一實施例中,包含512位元(即8個64位元緊縮資料元件被儲存在512位元向 量暫存器中)。
在一實施例中,IMM8 808為8位元值,其能指明由0至63的數字。在圖9的例示二進制值中,此值為“4”(即,二進制之100b)。在邏輯900後的執行單元決定在對應於IMM8 808值的位元位置之SRC2 812的值。在圖9的例示值中,此對應於在SRC2 812的第一64位元部中的值“1”,及在SRC2的第二64位元部中的“0”。
執行單元然後複製或廣播SRC2 812的各個選擇值64次至暫時向量B 902。因此,對於SRC2的各個64位元部,具有相同長度的暫時向量B 902中的對應部係被散佈有SRC2 812的選擇值成為使用IMM8 808的索引值所選擇者。例如,在圖9中,第一個64位元部中的SRC2 812的選擇值為“1”。因此,在B 902的對應64位元部中的各個64值係被設定為“1”。在一些實施例中,暫時向量B 902可以為不能透過任何程式介面存取的隱藏式暫存器。在一些實施例中,暫時向量B 902可以被儲存在記憶體(例如,RAM)中、或快取中或其他儲存媒體中。
雖然在圖9中,暫時向量B 902包含對應於SRC2 812的該64位元部的多數64位元部,但在一些實施例中,SRC2的各個64位元部係被依序處理,因此,暫時向量B 902只包含單一64位元部。在其他實施例中,SRC2 812的各個64位元部係被並列但分開處理,因此,一次可能存在暫時向量B 902的多個備份,但卻是彼此分開。
在一些實施例中,當執行單元廣播SRC2 812中的單一選擇值至在暫時向量B 902中的64值時,需要少於64處理器週期或運算,並且,值係被以同時方式被置放於暫時向量B 902中。在一些實施例中,廣播係依據熟習於本技藝者所知的廣播方法加以執行。
執行單元更進一步藉由執行暫時向量B 902的重覆值與SRC1 810的對應值的按位元和(AND)運算,來執行邏輯900。
執行單元更執行邏輯900,以進行以上按位元和運算(在908)的結果與如DEST 814a所示之DEST的原始值的按位元互斥或(XOR)運算。此按位元XOR結果然後被儲存回由DEST 814b所顯示的DEST所表示的儲存位置。例如,在位元位置0(如906所表示),於暫時向量B 902的值“1”與SRC1 810的對應位元位置的值“1”間的按位元和運算為“1”,以及,此所得“1”值與在DEST 814a的對應位元位置中之“0”值間的按位元XOR運算為“1”。此“1”值係被儲存在由DEST所表示的儲存位置的對應位元位置,如所示係在DEST 814b的位元位置0。
在一些情況下,邏輯900可以用以有效地決定於大小64×64的位元矩陣與大小64×1的位元向量間的矩陣乘法的結果。在此一實施例中,位元向量的值係為SRC2 812所表示,及在位元矩陣的一或更多行中的值係為SRC1 810所表示。如果在儲存器中的位元矩陣係原先使用逐列(row by row)格式加以表示,則位元矩陣將首 先被執行單元所轉置為逐行(column by column)格式。對於位元矩陣的矩陣乘法係使用模組式算術加以表現。因此,乘法係為按位元和運算(AND)所表示,及加法係為按位元互斥或(XOR)運算所表示。使用邏輯900以將位元矩陣乘以位元向量的第一步為採用該位元矩陣的第一行並將之乘以在位元向量中的第一值。為此,IMM8係被設定至十進制值“0”,以表示在該位元向量中的第一位元位置,其係為SRC2 812所表示。為64位元長的位元矩陣的第一行也為SRC1 810所表示。然後,進行在暫時向量B 902中的位元向量的第一位元與SRC1 810的值的按位元和(AND)表示該位元矩陣的第一行與該位元向量的第一位元的乘法。如圖9所示,按位元和(AND)運算係在908所示並如上述。
為了適當完成矩陣乘法,上述運算被重覆用於位元矩陣的後續行與在位元向量中的對應位元,其中各個行與位元乘法產生所得64位元值。這些所得64位元值應被總和在一起,以到達單一64位元值。此單一64位元值代表位元矩陣與位元向量的矩陣乘法的結果。在位元矩陣運算中的總和係為按位元XOR運算所代表。因此,在邏輯900中的如910所示的按位元XOR運算將現行位元矩陣行與位元向量位元積加至執行總和,以用於整個乘法運算。
在一些情況下,64×64位元矩陣係以逐行被儲存於記憶體位置中。因此,對於指令的各個執行,為 SRC1 810所表示的儲存位址可以向位元矩陣的下一行移位64位元。在其他情況下,SRC1 810可以改變至在位元矩陣中儲存下一行的不同儲存位置。在一些其他情況下,代表位元向量的SRC2 812的各個64位元部可以由前一64位元部移開(或旋轉)1位元,以及代表位元矩陣的SRC1 810的各個64位元部可以包含相同位元矩陣的連續行。這將允許位元矩陣的連續行被一次處理。在另一情況下,SRC1與SRC2的各個64位元部可以代表不同組的位元矩陣與位元向量結合,允許同時進行多個位元矩陣與位元向量的乘法計算。
雖然以上矩陣乘法例描繪64位元長的位元矩陣與位元向量的乘法,但在其他情況下,位元矩陣與位元向量也可以少於64位元長。
圖10為一種用於可以操作以執行向量廣播與XORAND邏輯指令的實施例的系統的方法1000的流程圖。在各種實施例中,該方法可以為處理器、指令處理設備、或其他數位邏輯裝置所執行。在一些實施例中,圖10的運算及/或方法可以為圖8的處理器所執行及/或在圖8處理器之中執行。於此所述之用於圖8的處理器之組件、特性、及特定選用地應用細節也可以選用於圖10的運算及/或方法中。或者,圖10的運算及/或方法也可以為參考圖1至8所述之處理器或設備的類似或不同處理器或設備所執行及/或在其中。再者,圖8的處理器也可以執行與圖10中所執行的運算及/或方法相同、類似或不同。
方法1000包含在方塊1002,由記憶體擷取表示目的緊縮資料運算元、第一源緊縮資料運算元、第二源緊縮資料運算元與立即運算元的指令。在各種態樣中,該指令可以於處理器、指令處理設備或其一部份(例如,指令擷取單元、解碼單元、匯流排介面單元等等)所擷取及接收。在各種態樣中,指令可以由晶粒外源(例如,由記憶體、互連等)、或由晶粒內源(例如,指令快取、指令佇列等)所接收。
在方塊1004,指令被解碼。在一些實施例中,指令的解碼可以為例如圖8的解碼單元804的解碼單元所執行。
在方塊1006,方法1000包含根據對應於立即運算元的值的位置,決定在第二源緊縮資料運算元中的一位元。在一些實施例中,資料元件的決定係為例如圖8的執行單元806的執行單元所執行。
在方塊1008,方法1000包含儲存結果於為目的緊縮資料運算元所表示的儲存位置,其中結果係由執行目的緊縮資料運算元與中間結果間的按位元XOR運算加以決定,以及,其中該中間結果係由執行於第一源緊縮資料運算元與所決定位元間的按位元AND運算加以決定。
所例示方法涉及架構運算(例如,這些可以由軟體觀點看出)。在其他實施例中,該方法可以任意包含一或更多微架構運算。例如,指令可以被擷取、解碼、無序排序,源運算元可以被存取,執行單元可以執行微架 構運算,以實施該指令,結果可以重新排回到程式順序等等。在一些實施例中,實施該指令的微架構運算可以選用地包含圖1至7與12至15中所述之任一運算。
圖11例示用以可操作執行向量廣播與XORAND邏輯指令的實施例之邏輯的例示虛擬碼。在一些實施例中,此邏輯為邏輯900。在此可以為運算碼“vxorandbcstq”1152所代表的指令802可以指明如在1154-1160所示的各種運算。運算元zmm0 1152指明目的緊縮資料運算元。在一些實施例中,zmm0 1154為DEST 814。在一些實施例中,指令指明寫入遮罩1162,在此例為“k1”。寫入遮罩的值可以表示執行為此虛擬碼所代表的邏輯的執行單元是否將值寫入至為目的緊縮資料運算元所表示的暫存器的指定部份。運算元zmm1 1156指明第一源緊縮資料運算元。在一些實施例中,此為SRC1 810。運算元zmm2 1158指明第二源緊縮資料運算元。在一些實施例中,此為SRC2 812。運算元imm8 1160指明立即運算元。在一些實施例中,imm8 1160為IMM8 808。
線1102表示在一些實施例中,指令係相容於128、256及512的向量長度。K長度表示64緊縮資料元件部的數量,二進制值的對應向量長度可以被分割的數量。如上所述,指令對64個緊縮資料元件部運算。
在一些實施例中,指令的運算元指明表示可以儲存多達512位元的儲存位置的運算元,在此情況下,只有暫存器的一部份被用於指令的執行。在一些實施例 中,一或更多運算元可以表示記憶體儲存位置,而不是暫存器位置。
在圖11中,具有等號符號的冒號符號(:=符號)表示在:=號的右側的值係被指定為在:=號左側的變數。
在線1104,迴路被設定以遞迴等於K長度的迴路次數。例如,如果向量長度為128,則K長度將為2,及迴路將遞迴兩次。在一些實施例中,如圖11所示,迴路變數為“j”。
在線1106,變數i被設定為j乘以64。例如,當j為“2”時,變數i將會是“128”。
在線1108,可以被儲存在內部暫存器的暫時向量B的64位元係被設定為用於暫時向量B的64位元的SRC2[i+IMM8]複製64次的值。在一些實施例中,暫時向量B為暫時向量B 902。SRC2[i+IMM8]代表在SRC2中位置“i+IMM8”的值。
在一些實施例中,值SRC2[i+IMM8]被設定至暫時值“b”,其可以為內部暫存器,及此暫時值b然後被複製或廣播至暫時向量B的值。
在線1112,對於現行被處理的64位元部的為線1104的迴路所表示的DEST的64位元係與先前按位元AND運算的結果作XOR運算,並且,此結果被指定回到DEST的相同64位元。
在一些實施例中,在線1112的運算係被預估 是否指令802指明一寫入遮罩。如果指明一寫入遮罩,則如在線1110所示,在寫入遮罩中之位置j的位元應被設定為予以為執行單元806所執行之在線1112上的運算的值“1”。否則,將執行在線1114-1118的運算。
如果在線1110的條件被決定為“0”或假,則執行線1114。在一些實施例中,在線1114,條件宣告檢查是否致能合併遮罩。在一些實施例中,合併遮罩係為旗標所表示。在一些實施例中,此旗標為“EVEX.z”。在一些實施例中,此旗標為在指令中之運算元(例如,“{z}”)所表示。合併遮罩給執行單元表示保留目的運算元的原始值,而不是以“0”來重寫這些值。如果合併遮罩為導通(on),則在DEST中的正被處理的該組64緊縮資料元件保持不變,如線1116所示。否則,如在線1118所示,這些值被以“0”置換(即,值“0”被儲存在為目的運算元所表示的暫存器的對應位置中)。
在一些實施例中,在線1120,未被處理為指令的一部份的DEST中的剩餘值,即超出向量長度所指定的值被零化(zeroed out)(即,值“0”係被儲存在為目的運算元所表示的暫存器的對應位置中)。
雖然以上實施例係參考512位元寬的暫存器加以描述,但本發明之其他實施例中暫存器並不需為此長度,本發明可以以任何長度的暫存器加以實施。
例示指令格式
於此所述之指令的實施例可以以不同格式加以實施。另外,例示系統、架構及管線係詳述如下。該(等)指令的實施例可以執行在此等系統、架構及管線上,但並不限於在此所詳述者。
向量友善指令格式係為適用於向量指令的指令格式(例如,有幾欄位特定於向量運算)。雖然所述實施例中,可以透過向量友善指令格式而支援向量與純量運算,但其他實施例中也可以只使用向量來運算該向量友善格式。
圖12A-12B為例示依據本發明實施例之同屬向量友善指令格式與其指令樣板的方塊圖。圖12A為一方塊圖,例示依據本發明實施例之同屬向量友善指令格式與其類型A指令樣板;而圖12B為一方塊圖,例示依據本發明實施例之同屬向量友善指令格式及其類型B指令樣板。明確地說,同屬向量友善指令格式1200被界定有類型A與類型B指令樣板,其兩者均不包含記憶體存取1205指令樣板與記憶體存取1220指令樣板。在向量友善指令格式脈絡中的用語“同屬”表示指令格式並不被綁至任何特定指令集。
雖然本發明實施例將以向量友善指令格式支援以下的態樣加以描述,但其他實施例也可以支援具有更多、更少、或不同資料元件寬度(例如128位元(16位元組)資料元件寬度)的更多、更少及/或不同向量運算元大小(例如256位元組向量運算元)的其他實施例。這 些態樣為:具有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位元組向量運算元長度(或大小)。
在圖12A中的類型A指令樣板包含:1)在無記憶體存取1205內的指令樣板中,其中顯示沒有記憶體存取,全捨入控制類型運算1210指令樣板;及無記憶體存取,資料轉換類型運算1215指令樣板;及2)在記憶體存取1220內的指令樣板中,其中顯示記憶體存取,時間1225指令樣板;及記憶體存取非時間1230指令樣板。在圖12B中的類型B指令樣板包含:1)在無記憶體存取1205內的指令樣板中,其中顯示無記憶體存取,寫入遮罩控制部份捨入控制類型運算1212指令樣板;及無記憶體存取,寫入遮罩控制vsize類型運算1217指令樣板;及2)在記憶體存取1220指令樣板內,顯示記憶體存取,寫入遮罩控制1227指令樣板。
同屬向量友善指令格式1200包含在圖12A-12B所列的順序中的下列以下欄位。
格式欄1240-在此欄中之特定值(指令格式識別值)獨特地指明該向量友善指令格式,及在該指令流中的向量友善指令格式中的指令的發生。因此,此欄為選用的,對於只有同屬向量友善指令格式的指令集是不必要的。
基礎運算欄1242-其內容區別不同基礎運算。
暫存器索引欄1244-其內容直接或透過位址產生指明源及目的運算元在暫存器或記憶體中的位置。這些包含足夠數量的位元,以由P×Q(例如,32×512、16×128、32×1024、64×1024)暫存器檔案中選出N個暫存器。雖然在一實施例中,N可以是多達3個源及一個目的暫存器,但其他實施例中,也可以支援更多或更少源與目的暫存器(例如,可以支援多達兩源,其中兩者之一也可以作動為目的地,也可以支援多達三個源,其中之一也可以作動為目的地,也可以支援多達兩個源及一目的地)。
修飾符欄1246-其內容區別在同屬向量指令格式中指明記憶體存取與未指明記憶體存取的指令的發生;即,在無記憶體存取1205指令樣板與記憶體存取1220指令樣板間。記憶體存取運算讀取及/或寫入至記憶體階層(在一些情況下,使用暫存器中的值,指明源與/或目的位址),而無記憶體存取運算則否(例如,源與目的為暫存器)。雖然在一實施例中,此欄也可以於三個不同方式 間作選擇,以執行記憶體位址計算,但在其他實施例中,也可以支援更多、更少或不同方式,以執行記憶體位址計算。
擴增運算欄1250-其內容區分除了基礎運算外,各種不同運算中的哪個將被執行。此欄為上下文特定。在本發明的一實施例中,此欄被分為類型欄1268、α欄1252與β欄1254。擴增運算欄1250允許共同群組內的運算可以於單一指令中執行,而不是分成2、3或4指令執行。
縮放欄1260-其內容允許用於記憶體位址產生(例如,用於使用2縮放*索引+基礎的位址產生)的索引欄的內容縮放。
位移欄1262A-其內容係用以作為記憶體位址產生的一部份(例如,用於使用2縮放*索引+基礎+位移的位址產生)。
位移因數欄1262B(注意,位移欄1262A的直接並列於位移因數欄1262B上表示一或另一個被使用)-其內容係被使用作為位址產生的一部份;其指明一位移因數,其予以縮放記憶體存取的大小(N)-其中N為在記憶體存取中的位元組數量(例如,對於使用2縮放*索引+基礎+縮放位移的位址產生)。冗餘低階位元被忽略,因此,位移因數欄的內容被乘以記憶體運算元總尺寸(N),以產生被用以計算有效位址的最終位移。N的值被處理器硬體根據全運算碼欄1274(於此所述)及資料 調處欄1254C的執行時間加以決定。位移欄1262A與位移因數欄1262B為選用,在意義上,它們並未被用於無記憶體存取1205指令樣板及/或不同實施例也可以只實施兩者之一或都不實施。
資料元件寬度欄1264-其內容區分若干資料元件寬度中之哪一個將被使用(在一些實施例中,全部指令;在其他實施例中,只有部份的指令)。此欄為選用,其意義在於如果只有一資料元件寬度被支援及/或使用部份態樣的運算碼支援資料元件寬度,則其並不需要。
寫入遮罩欄1270-其內容以每資料元件位置為基礎地控制在目的向量運算元中的資料元件位置是否反映基礎運算與擴增運算的結果。類型A指令樣板支援合併寫入遮罩,而類型B指令樣板支援合併與歸零寫入遮罩。當合併時,向量遮罩允許在目的中的任何組元件在任何(為基礎運算與擴增運算所指明的)運算被執行期間被保護不受到更新;在另一實施例中,保留目的的各個元件的舊值,其中對應遮罩位元具有0。相反地,當歸零向量遮罩時,允許任何在目的的任意組元件在任何(為基礎運算與擴增運算所指明的)運算被執行期間被歸零;在一實施例中,當對應遮罩位元具有0值時,目的的元件被設定為0。此功能的一次組為控制被執行的運算的向量長度(即,被修改元件的第一元件至最後元件的元件間隔)的能力;然而,並不必要這些元件被修改為連續。因此,寫入遮罩欄1270允許部份向量運算,包含載入、儲存、算 術、邏輯等等。雖然本發明的實施例係被描述,其中寫入遮罩欄1270內容選擇包含予以使用的寫入遮罩的若干寫入遮罩暫存器之一(因此,寫入遮罩欄1270的內容間接指明予以執行的遮罩),而其他實施例或者或另外地允許遮罩寫入欄1270的內容被直接指明予以執行的遮罩。
立即欄1272-其內容允許立即值的規格。此欄係為選用的,其意義在於其並不會出現在同屬向量友善格式的實施方式中,其並不支援立即值並且也不會出現在不使用立即值的指令中。
類型欄1268-其內容區分不同類型的指令。參考圖12A-B,此欄的內容於類型A與類型B指令間作選擇。在圖12A-B中,圓角方塊係被使用以指明一特定值出現在一欄中(例如,用於類型欄1268的類型A 1268A與類型B 1268B分別在圖12A-B中)。
類型A的指令樣板
於類型A的非記憶體存取1205指令樣板中,α欄1252係被解譯為RS欄1252A,其內容區分不同擴增運算類型(例如,捨入1252A.1與資料轉換1252A.2係分別特定用於無記憶體存取,捨入類型1210與無記憶體存取,資料轉換類型運算1215指令樣板)的哪一個將被執行,而β欄1254區分所指定類型的哪一運算將被執行。在無記憶體存取1205指令樣板中,並未出現縮放欄1260、位移欄1262A、與位移縮放欄1262B。
無記憶體存取指令樣板-全捨入控制類型運算
在無記憶體存取全捨入控制類型運算1210指令樣板中,β欄1254被解譯為捨入控制欄1254A,其內容提供靜態捨入。雖然在本發明所述實施例中,捨入控制欄1254A包含抑制全浮點例外(SAE)欄1256與捨入運算控制欄1258,但其他實施例也可以支援,可以將這些概念編碼至相同欄或只有這些概念/欄之一或另一(例如,可以只有捨入運算控制欄1258)。
SAE欄1256-其內容區分是否去能例外事件報告;當SAE欄1256的內容指示抑制被致能時,給定指令並不報告任何類型的浮點例外旗標並且不會提出任何浮點例外處置器。
捨入運算控制欄1258-其內容區分一群捨入運算中的哪一個被執行(例如,捨進、捨去、捨向零及捨至最近值)。因此,捨入運算控制欄1258允許每一指令為主地改變捨入模式。本發明的一實施例中,其中處理器包含控制暫存器,用以指明捨入模式,捨入運算控制欄1250內容置換該暫存器值。
無記憶體存取指令樣板-資料轉換類型運算
在無記憶體存取資料轉換類型運算1215指令樣板中,β欄1254被解譯為資料轉換欄1254B,其內容區分若干資料轉換中的哪一個將被執行(例如,無資料轉 換、拌和(swizzle)、廣播)。
於類型A的記憶體存取1220指令樣板中,α欄1252係被解譯為驅逐暗示欄1252B,其內容區分該等驅逐暗示中的哪一個被使用(在圖12A中,時間欄1252B.1與非時間欄1252B.2分別指明用於記憶體存取時間1225指令樣板與記憶體存取非時間1230指令樣板),同時,β欄1254係被解譯為資料調處欄1254C,其內容區分若干資料調處運算中之哪一個(也稱為基元)被執行(例如,無調處;廣播;源的上轉換;及目的的下轉換)。記憶體存取1220指令樣板包含縮放欄1260,及選用地位移欄1262A或位移縮放欄1262B。
向量記憶體指令以轉換支援執行來自記憶體的向量載入與向量儲存至記憶體。如同一般向量指令,向量記憶體指令以按資料元件的方式傳送資料進/出記憶體,實際被傳送的元件係為被選擇為寫入遮罩的向量遮罩的內容所表示。
記憶體存取指令樣板-時間
時間資料為似乎將被足夠快再次使用,以由快取獲利的資料。然而,這是一暗示,並且,不同處理器可以將之以不同方式實施,包含整個忽略該暗示。
記憶體存取指令樣板-非時間
非時間資料為資料將不會被足夠快再次使用 以由第一層快取進行快取而獲利並應被給定驅逐用的優先權。然而,這是一暗示,並且,不同處理器可以將之以不同方式實施,包含整個忽略該暗示。
類型B的指令樣板
在類型B的指令樣板中,α欄1252被解譯為寫入遮罩控制(Z)欄1252C,其內容區分是否為寫入遮罩欄1270所控制的寫入遮罩應被合併或歸零。
在類型B的非記憶體存取1205指令樣板中,β欄1254的部份係被解譯為RL欄1257A,其內容區分不同擴增運算類型(例如,捨入1257A.1及向量長度(VSIZE)1257A.2分別指明用於無記憶體存取寫入遮罩控制,部份捨入控制類型運算1212指令樣板與無記憶體存取寫入遮罩控制VSIZE類型運算1217指令樣板)的哪一類型被執行,而β欄1254的其他部份則區分指定類型的運算的哪一個將被執行。在無記憶體存取1205指令樣板中,並未出現縮放欄1260、位移欄1262A、及位移縮放欄1262B。
在無記憶體存取寫入遮罩控制部份捨入控制類型運算1210指令樣板中,β欄1254的剩餘部份被解譯為捨入運算欄1259A及例外事件報告被去能(給定指令並未報告任何類型的浮點例外旗標並且未提出任何浮點例外處置器)。
捨入運算控制欄1259A-如同捨入運算控制欄 1258,其內容區分一群捨入運算中的哪一個被執行(例如,捨進、捨去、捨向零、及捨至最近值)。因此,捨入運算控制欄1259A允許以每指令為基礎地改變捨入模式。在本發明之處理器包含指明捨入模式的控制暫存器的一實施例中,捨入運算控制欄1250的內容置換該暫存器值。
在無記憶體存取寫入遮罩控制VSIZE類型運算1217指令樣板中,β欄1254的剩餘部份被解譯為向量長度欄1259B,其內容區分若干資料向量長度中的哪一個將被執行(例如,128、256、或512位元組)。
在類型B的記憶體存取1220指令樣板中,β欄1254的部份被解譯為廣播欄1257B,其內容區分是否將執行廣播類型資料調處運算,而β欄1254的剩餘部份被解譯為向量長度欄1259B。記憶體存取1220指令樣板包含縮放欄1260,及選用地位移欄1262A或位移縮放欄1262B。
有關同屬向量友善指令格式1200,全運算碼欄1274被顯示為包含格式欄1240、基礎運算欄1242、及資料元件寬度欄1264。雖然一實施例係被顯示,其中全運算碼欄1274包含所有這些欄,但全運算碼欄1274也可以在包含較並不支援全部欄的實施例中的較所有欄為少的欄。全運算碼欄1274提供運算碼(opcode)。
擴增運算欄1250、資料元件寬度欄1264、及寫入遮罩欄1270允許這些特性在同屬向量友善指令格式中,以每指令為基礎地被指明。
寫入遮罩欄與資料元件寬度欄的組合建立分類的指令,其允許該遮罩根據不同資料元件寬度加以應用。
在類型A與類型B內找到的各種指令樣板係有利於不同狀況。在本發明之一些實施例中,不同處理器或在處理器內的不同核心可以只支援類型A、或類型B、或兩者都支援。例如,用於通用計算的高效通用無序核心可以只支援類型B,主要用於圖形及/或科學(通量)計算的核心可以只支援類型A,及用於兩者的核心可以支援兩者(當然,一核心可以具有來自兩類型的樣板與指令的部份混合,但並不是所有來自兩類型的樣板與指令都在本發明的範圍內)。同時,單一處理器可以包含多數核心,所有這些核心支援相同類型或其中不同核心支援不同類型。例如,在具有分開圖形與通用核心的處理器中,主要想要用於圖形及/或科學計算的圖形核心之一可以只支援類型A,而一或更多通用核心可以為高效通用核心,其具有無序執行及暫存器重命名,用於只支援類型B的通用計算。沒有分開圖形核心的另一處理器可以包含一或更多通用有序或無序核心,其支援類型A與類型B兩者。當然,在本發明的不同實施例中,來自一類型的特性也可以實施在其他類型中。以高階語言撰寫的程式將(例如,以時間編譯或靜態編譯)置放為各種不同可執行形式,包含:1)一形式,其只具有用於執行的目標處理器所支援的類型的指令;或2)一形式,其具有使用所有類型的指 令的不同組合所寫的替代常式並具有控制流程碼,其根據現正執行該碼的處理器所支援的指令選擇要執行之常式。
圖13A-D為方塊圖,例示依據本發明實施例之例示特定向量友善指令格式。圖13顯示特定向量友善指令格式1300,其係特定於在其指明欄的位置、大小、解譯、及順序,以及,這些欄的一部份的值。特定向量友善指令格式1300可以用以擴充x86指令集,因此,部份這些欄係類似或相同於在現行x86指令集與其擴充(例如,AVX)所用的欄。此格式保持相容於現行x86指令集與擴充的前置編碼欄、真運算碼位元組欄、MOD R/M欄、SIB欄、位移欄、及立即欄。來自圖12的欄中也顯示有來自圖13的欄。
應了解的是,雖然本發明的實施例係參考以例示目的之同屬向量友善指令格式1200的脈絡中的特定向量友善指令格式1300加以描述,但本發明並不限於該特定向量指令格式1300,除非特別主張之外。例如,同屬向量友善指令格式1200想出用於各欄的各種可能大小,而特定向量友善指令格式1300係被顯示以具有特定大小的欄。例如特定例子中,雖然資料元件寬度欄1264被顯示為在特定向量友善指令格式1300中的一位元欄,但本發明並不作此限定(即,同屬向量友善指令格式1200想要其他大小的資料元件寬度欄1264)。
同屬向量友善指令格式1200包含以下以圖13A所示之順序列出的以下欄。
EVEX前置(位元組0-3)1302-係被編碼為四位元組格式。
格式欄1240(EVEX位元組0,位元[7:0])-第一位元組(EVEX位元組0)為格式欄1240及其包含0x62(用於區分在本發明一實施例中的向量友善指令格式的特有值)。
第二至第四位元組(EVEX位元組1-3)包含提供特定能力的若干位元欄。
REX欄1305(EVEX位元組1,位元[7-5])-由EVEX.R位元欄(EVEX位元組1,位元[7]-R)、EVEX.X位元欄(EVEX位元組1,位元[6]-X)、及1257BEX位元組1,位元[5]-B)構成。EVEX.R、EVEX.X與EVEX.B位元欄提供與對應VEX位元欄相同的功能,並且,使用1的補數格式加以編碼,即ZMM0被編碼為1211B、ZMM15被編碼為0000B。如同於本技藝所知,指令的其他欄編碼暫存器索引的較低三個位元(rrr,xxx與bbb),使得Rrrr、Xxxx、及Bbbb可以藉由加入EVEX.R、EVEX.X與EVEX.B加以形成。
REX’欄1210-此為REX’欄1210的第一部份並為EVEX.R’的位元欄(EVEX位元組1,位元[4]-R’),其係被使用以編碼擴充32暫存器組的上16或下16個。在本發明的一實施例中,此位元以及以下所表示的其他位元係被儲存為位元反轉格式,以區分(已知x86的32位元模式)BOUND指令,其真運算碼位元組為 62,但在MOD R/M欄(下述)中並不接受在MOD欄中的11的值;本發明的其他實施例並不儲存此及反轉格式的以下的其他表示位元。1的值係被用以編碼下16個暫存器。換句話說,R’Rrrr係藉由組合EVEX.R’、EVEX.R與來自其他欄的其他RRR加以形成。
運算碼圖欄1315(EVEX位元組1,位元[3:0]-mmmm)-其內容編碼暗示領前運算碼位元組(0F、0F38或0F3)。
資料元件寬度欄1264(EVEX位元組2,位元[7]-W)-以標記EVEX.W表示。EVEX.W被用以定義資料類型的粒度(大小)(32位元資料元件或64位元資料元件)。
EVEX.vvvv1320(EVEX位元組2,位元[6:3]-vvvv)-EVEX.vvvv的角色可以包含如下:1)EVEX.vvvv編碼以反轉(1的補數)形式指明的第一源暫存器運算元,並對具有2或更多源運算的指令有效;2)EVEX.vvvv編碼為某些向量位移的1的補數所指明的目的暫存器運算元;或3)EVEX.vvvv並不編碼任何運算元,該欄係被保留並應包含1211b。因此,EVEX.vvvv欄1320編碼儲存為反轉(1的補數)格式的第一源暫存器說明符(specifier)的4個低階位元。取決於指令,額外不同EVEX位元欄也可以使用以擴充說明符的大小至32暫存器。
EVEX.U 1268類型欄(EVEX位元組2,位元 [2]-U)-如果EVEX.U=0,它表示類型A或EVEX.U0;如果EVEX.U=1,它表示類型B或EVEX.U1。
前置編碼欄1325(EVEX位元組2,位元[1:0]-pp)-提供額外位元給基礎運算欄。除了提供EVEX前置格式的傳統SSE指令的支援外,此也有利於緊縮SIMD前置(而不必一位元組來表達SIMD前置,EVEX前置只需2位元)。在一實施例中,為了支援使用傳統格式及EVEX前置格式,的SIMD前置(66H,F2H,F3H)的傳統SSE指令,這些傳統SIMD前置係被編碼入SIMD前置編碼欄;及在被提供給解碼器的PLA(使得PLA可以執行這些傳統指令的傳統與EVEX格式,不必修改)之前,這些傳統SIMD前置在執行時間被擴充入傳統SIMD前置。雖然較新的指令可能直接使用EVEX前置編碼欄的內容作為運算碼擴充,但某些實施例中,為了相容性可能以類似方式擴充,但允許這些傳統SIMD前置指明不同意義。其他實施例也可以重新設計PLA以支援2位元SIMD前置編碼,因而不需要擴充。
α欄1252(EVEX位元組3,位元[7]-EH;同時也稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮罩控制,及EVEX.N;同時也被顯示為α)-如前述,此欄為特定上下文。
β欄1254(EVEX位元組3,位元[6:4]-SSS,也稱為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也被顯示為β β β)-如前所 述,此欄為上下文特定。
REX’欄1210-此為REX’欄的剩餘並為EVEX.V’位元欄(EVEX位元組3,位元[3]-V’),其係可以用以編碼擴充32暫存器組的上面16個或下面16個。此位元係儲存為位元反轉格式。1的值係被用以編碼下面16個暫存器。換句話說,V’VVVV係由組合EVEX.V’與EVEX.vvvv所形成。
寫入遮罩欄1270(EVEX位元組3,位元[2:0]-kkk)-其內容指明在如前所述中之寫入遮罩暫存器中的暫存器的索引。在本發明之一實施例中,特定值EVEX.kkk=000具有暗示無寫入遮罩被用於該特定指令的特殊行為(這可以以各種方式加以實施,包含使用寫入遮罩硬體接線至所有硬體或旁路遮罩硬體的硬體)。
真運算碼欄1330(位元組4)也稱為運算碼位元組。運算碼的部份係被指明於此欄中。
MOD R/M欄1340(位元組5)包含MOD欄1342、Reg欄1344、及R/M欄1346。如前所述,MOD欄1342的內容區分記憶體存取與非記憶體存取運算。Reg欄1344的角色可以被總結為兩種情況:編碼目的暫存器運算元或源暫存器運算元,或被處理為運算碼擴充並不被用以編碼任何指令運算元。R/M欄1346的角色可以包含如下:編碼參考記憶體位址的指令運算元,或編碼目的暫存器運算元或源暫存器運算元。
縮放索引基礎(SIB)位元組(位元組6)- 如前所述,縮放欄1250的內容被用以記憶體位址產生。SIB.xxx1354與SIB.bbb 1356-這些欄的內容已經先前參考暫存器索引Xxxx與Bbbb加以表示。
位移欄1262A(位元組7-10)-當MOD欄1342包含10時,位元組7-10為位移欄1262A,其與傳統32位元位移(disp32)一樣地動作並以位元組粒度加以動作。
位移因數欄1262B(位元組7)-當MOD欄1342包含01時,位元組7為位移因數欄1262B。此欄的位置係與傳統x86指令集的8位元位移(disp8)相同,並以位元組粒度動作。因為disp8為帶符號擴充,所以,其也可以只定址於-128及127位元組偏移間;以64位元組快取線看來,disp8使用可以只被設定至四個真實有用值-128、-64、0、及64的8位元;因為經常需要更大範圍,所以,disp32被使用;然而,disp32需要4位元組。不同於disp8與disp32,位移因數欄1262B係為disp8的重新解釋;當使用位移因數欄1262B時,實際位移係為位移因數欄乘以記憶體運算元存取的大小(N)的內容所決定。此類型位移被稱為disp8*N。這降低平均指令長度(單一位元組用於位移,但具有大許多的範圍)。此壓縮位址係根據有效位移係為記憶體存取的粒度的倍數的假設,因此,位址偏移的冗餘低階位元並不需要被編碼。換句話說,位移因數欄1262B替代傳統x86指令集8位元位移。因此,位移因數欄1262B被以與x86指令集8位元位 移(因此,在ModRM/SIB編碼規則中沒有改變),以只有disp8過載至disp8*N的例外的相同方式編碼。換句話說,在編碼規則或編碼長度上並沒有改變,只有在以硬體解釋位移值時有改變(其需要以記憶體運算元的大小來縮放該位移,以取得按位元組位址偏移)。
立即欄1272如同前述操作。
全運算碼欄
圖13B為方塊圖,例示依據本發明實施例之作成全運算碼欄1274的特定向量友善指令格式1300的欄位。明確地說,全運算碼欄1274包含格式欄1240、基礎運算欄1242、及資料元件寬度(W)欄1264。基礎運算欄1242包含前置編碼欄1325、運算碼圖欄1315及真運算碼欄1330。
暫存器索引欄
圖13C為方塊圖,例示依據本發明實施例之作成暫存器索引欄1244的特定向量友善指令格式1300的欄位。明確地說,暫存器索引欄1244包含REX欄1305、REX’欄1310、MODR/M.reg欄1344、MODR/M.r/m欄1346、VVVV欄1320、xxx欄1354、及bbb欄1356。
擴增運算欄
圖13D為方塊圖,例示依據本發明實施例之 作成擴增運算欄1250的特定向量友善指令格式1300的欄位。當類型(U)欄1268包含0時,其表示EVEX.U0(類型A 1268A);當其包含1時,其表示EVEX.U1(類型B 1268B)。當U=0與MOD欄1342包含11時(表示無記憶體存取運算),則α欄1252(EVEX位元組3,位元[7]-EH)被解譯為rs欄1252A。當rs欄1252A包含1(捨入1252A.1),β欄1254(EVEX位元組3,位元[6:4]-SSS)係被解譯為捨入控制欄1254A。捨入控制欄1254A包含一位元SAE欄1256及兩位元捨入運算欄1258。當rs欄1252A包含0(資料轉換1252A.2)時,β欄1254(EVEX位元組3,位元[6:4]-SSS)係被解譯為三位元資料轉換欄1254B。當U=0及MOD欄1342包含00,01或10時(表示記憶體存取運算),則α欄1252(EVEX位元組3,位元[7]-EH)被解譯為驅逐暗示(EH)欄1252B及β欄1254(EVEX位元組3,位元[6:4]-SSS)係被解譯為三位元資料調處欄1254C。
當U=1時,α欄1252(EVEX位元組3,位元[7]-EH)係被解譯為寫入遮罩控制(Z)欄1252C。當U=1及MOD欄1342包含11(表示無記憶體存取運算),則β欄1254的部份(EVEX位元組3,位元[4]-S0)係被解譯為RL欄1257A;當其包含1(捨入1257A.1)時,β欄1254(EVEX位元組3,位元[6-5]-S2-1)的剩餘部份被解譯為捨入運算欄1259A,而當RL欄1257A包含0(VSIZE 1257.A2)時,β欄1254(EVEX 位元組3,位元[6-5]-S2-1)的剩餘部份被解譯為向量長度欄1259B(EVEX位元組3,位元[6-5]-L1-0)。當U=1及MOD欄1342包含00,01或10(表示記憶體存取運算)時,β欄1254(EVEX位元組3,位元[6:4]-SSS)係被解譯為向量長度欄1259B(EVEX位元組3,位元[6-5]-L1-0)及廣播欄1257B(EVEX位元組3,位元[4]-B)。
圖14為依據本發明一實施例之暫存器架構1400的方塊圖。在所示實施例中,其中有512位元寬的32個向量暫存器1410,這些暫存器係被稱為zmm0至zmm31。下16個zmm暫存器的下階256位元被疊於暫存器ymm0-16上。下16個zmm暫存器的下階128位元(ymm暫存器的下階128位元)係被重疊於暫存器xmm0-15上。這些特定向量友善指令格式1300運算於這些重疊暫存器檔,如在下表所示。
換句話說,向量長度欄1259B於最大長度與一或更多其他較短長度間作較選擇,其中各個此較短長度為前一長度的長度之一半;及沒有向量長度欄1259B的指令樣板運算於最大向量長度。再者,在一實施例中,特定向量友善指令格式1300的類型B指令樣板運算於緊縮或純量單/雙倍精度浮點資料及緊縮或純量整數資料。純量運算為在zmm/ymm/xmm暫存器中的最低階資料元件位置上執行的運算;取決於實施例,較高階資料元件位置係被保持與指令之前或歸零之前相同。
寫入遮罩暫存器1415-在所示實施例中,有8個寫入遮罩暫存器(k0至k7),各個大小為64位元。在另一實施例中,寫入遮罩暫存器1415的大小為16位元。如前所述,在本發明之一實施例中,向量遮罩暫存器k0不能被使用作為寫入遮罩;當通常表示k0的編碼被使用為寫入遮罩時,其選擇0xFFFF的硬體接線寫入遮罩,有效地去能用於該指令的寫入遮罩。
通用暫存器1425-在所示的實施例中,有十六個64位元通用暫存器,其被與現行x86定址模式一起使用以定址記憶體運算元。這些暫存器係以名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及R8至R15表示。
純量浮點堆疊暫存器檔(x87堆疊)1445,其上假化MMX緊縮整數平暫存器檔1450-在所示實施例 中,x87堆疊為八元件堆疊,用以使用x87指令集擴充對32/64/80位元浮點資料,執行純量浮點運算;同時,MMX暫存器係被使用以對64位元緊縮整數資料執行運算,及對執行於MMX與XMM暫存器間的一些運算保持運算元。
本發明之其他實施例中也可以使用較寬或較窄暫存器。另外,本發明之其他實施例也可以使用更多、更少或不同暫存器檔與暫存器。
圖15A-B例示更特定例示有序核心架構的方塊圖,該核心可以為在晶片中的(包含相同類型及/或不同類型的其他核心的)幾個邏輯方塊之一。取決於應用而定,邏輯方塊透過高頻寬互連網路(例如,環狀網路)與一些固定功能邏輯、記憶體I/O介面、及其他必要I/O邏輯通訊。
圖15A為依據本發明實施例之單一處理器核心的方塊圖,其連接至晶粒上互連網路1502及該第二層(L2)快取1504的本地次組。在一實施例中,指令解碼器1500支援具有緊縮資料指令集擴充的x86指令集。L1快取1506允許低潛候存取該快取記憶體為該純量與向量單元。雖然在一實施例中(以簡化設計),純量單元1508與向量單元1510使用分開暫存器組(分別為純量暫存器1512與向量暫存器1514)及轉換於其間的資料係被寫入記憶體,然後被由第一層(L1)快取1506讀回,本發明之其他實施例可以使用不同方法(例如,使用單一暫 存器集或包含一通訊路徑,其允許資料被傳送於兩暫存器檔之間,而不必被寫與讀回)。
L2快取1504的本地次組係為全局L2快取的一部份,其被分割為分開的本地次組,每一處理器核心一本地次組。各個處理器核心具有至L2快取1504的本身本地次組的直接存取路徑。為處理器核心所讀取的資料係被儲存於其L2快取次組1504並可以並列於其他處理器核心存取其本身本地L2快取次組作快速地存取。為處理器核心所寫入的資料係被儲存於其本身L2快取次組1504並如果有必要時,被由其他次組清除(flush)。環狀網路確保共享資料的連貫性。環狀網路係為雙向的並允許例如處理器核心的代理、L2快取及其他邏輯方塊彼此在該晶片內通訊。各個環狀資料路徑每方向為1012位元寬。
圖15B為依據本發明實施例之圖15A中的處理器核心的部份放大圖。圖15B包含L1快取1504的L1資料快取1506A部,及有關向量單元1510與向量暫存器1514的更多細節。明確地說,向量單元1510為16寬向量處理單元(VPU)(見16寬ALU 1528),其執行整數、單精度浮點及雙倍精度浮指令之一或多者。VPU支援與拌和單元1520拌和暫存器輸入,以數值轉換單元1522A-B的數值轉換、及在記憶體輸入上以複製單元1524的複製。寫入遮罩暫存器1526允許預測結果向量寫入。
本發明實施例也可以包含各種已經說明過的步驟。該等步驟也可以實施為機器可執行指令,其可以被 用以使通用或特殊用途處理器執行這些步驟。或者,這些步驟也可以為特定硬體組件所執行,該等組件包含用以執行這些步驟的硬體接線邏輯,或者,已程式的電腦組件與客製硬體組件的任意組合。
如此所述,指令可以被表示為例如特定應用積體電路(ASIC)的硬體的特定架構,其被組態以執行某些運算或具有預定功能或儲存被實施於非暫態電腦可讀取媒體中的記憶體中的軟體指令。因此,於圖中所示的技術可以使用儲存於並被執行於一或更多電子裝置(例如,端站、網路元件等)的碼與資料而被實施。此等電子裝置使用電腦機器可讀取媒體儲存及(內部地及/或透過網路與其他電子裝置)互通碼與資料,機器可讀取媒體係例如非暫態電腦機器可讀取儲存媒體(例如,磁碟;光碟;隨機存取記憶體;唯讀記憶體;快閃記憶體裝置;相變記憶體)及暫態電腦機器可讀取通訊媒體(例如,電、光、聲或其他形式的傳遞信號-例如載波、紅外線信號、數位信號等)。另外,此等電子裝置典型包含一組一或更多處理器,耦接至一或更多其他組件,例如,一或更多儲存裝置(非暫態機器可讀取儲存媒體)、使用者輸入/輸出裝置(例如鍵盤、觸控螢幕、及/或顯示器),及網路連接。該組處理器與其他組件的耦接典型係透過一或更多匯流排與橋接器(也稱為匯流排控制器)。儲存裝置與承載網路話務的信號分別代表一或更多機器可讀取儲存媒體及機器可讀取通訊媒體。因此,給定電子裝置的儲存裝置典型儲 存碼及/或資料,用以被執行於該電子裝置的該組一或更多處理器上。當然,本發明之實施例的一或更多部份可以使用軟體、韌體與/或硬體的不同組合加以實施。在此詳細說明中,為了解釋為目的,更多特定細節係被說明,以提供對本發明的完整了解。然而,對於本技藝者明顯地,本發明可以在沒有這些特定細節的一部份下加以實施。在某些例子中,已知結構與功能並未被特別詳細描述,以免模糊了本發明的標的。因此,本發明的範圍與精神係由以下的申請專利範圍所判斷。
本發明之實施例包含具有一處理器,其包含:擷取邏輯,用以自記憶體擷取表示目的緊縮資料運算元、第一源緊縮資料運算元、第二源緊縮資料運算元及立即值的指令;及執行邏輯,以根據對應於立即值的位置,決定在第二源緊縮資料運算元中的位元;執行於第一源緊縮資料運算元與該所決定位元間的按位元和運算,以產生中間結果;執行目的緊縮資料運算元與該中間結果間的按位元互斥或運算,以產生最終結果;及儲存最終結果於目的緊縮資料運算元所表示的儲存位置。
另一實施例包含,其中為了執行於第一源緊縮資料運算元與所決定位元間的按位元和運算,該執行邏輯進一步被組態以執行於第一源緊縮資料運算元與暫時向量間的按位元和運算,其中所決定的位元的值係予以被一或更多次廣播至該暫時向量。
另一實施例包含,其中為目的緊縮資料運算 元、第一源緊縮資料運算元與第二源緊縮資料運算元所表示的儲存位置係予以在分開的64位元部中處理,其中該處理器係予以對各個該64位元部執行相同邏輯。
另一實施例包含,其中該指令更包含寫入遮罩運算元,及其中該執行邏輯用以更進一步反應於決定該寫入遮罩運算元表示寫入遮罩係設定用於目的緊縮資料運算元的該等64位元部之一,而設定為目的緊縮資料運算元所表示的儲存位置中的64位元部中之一的值為零。
另一實施例包含,其中為目的緊縮資料運算元、第一源緊縮資料運算元、及第二源緊縮資料運算元所表示的儲存位置係為暫存器及記憶體位置之至少一者。
另一實施例包含,其中為目的緊縮資料運算元、第一源緊縮資料運算元、及第二源緊縮資料運算元所表示的儲存位置係為512位元長的暫存器。
另一實施例包含,其中立即值為8位元長。
另一實施例包含,其中該指令被使用以執行於位元矩陣與位元向量間的位元矩陣乘法運算,其中該位元矩陣的一或更多行係被儲存在為第一源緊縮資料運算元所表示的儲存位置,及其中該位元向量的值係被儲存在第二源緊縮資料運算元所表示的儲存位置中。
本發明的實施例包含,其中該位元矩陣被轉置,使得該位元矩陣的一或更多行係被逐行地儲存在第一源緊縮資料運算元所表示的儲存位置中。
另一實施例包含,其中為目的緊縮資料運算 元所表示的儲存位置包含當指令被執行為用於該位元矩陣的各個行時的該位元矩陣與該位元向量間的位元矩陣乘法運算的結果,其中各個指令的執行,該立即值指明對應於該位元矩陣的被處理的行數的該位元向量中的位置的值。
本發明實施例包含電腦處理器中之方法,其包含:自記憶體中擷取表示目的緊縮資料運算元、第一源緊縮資料運算元、第二源緊縮資料運算元、及立即值的指令;根據對應於立即值的位置,決定第二源緊縮資料運算元中的位元;執行於第一源緊縮資料運算元與所決定位元間的按位元和運算,以產生中間結果;執行於目的緊縮資料運算元與中間結果間的按位元互斥或運算,以產生最終結果;及儲存最終結果於目的緊縮資料運算元所表示的儲存位置中。
另外實施例包含,其中於第一源緊縮資料運算元與所決定位元間執行按位元和運算更包含執行於第一源緊縮資料運算元與暫時向量間的按位元和運算,其中該所決定位元的值係予以被一次或多次廣播至該暫時向量。
另外實施例包含,其中為目的緊縮資料運算元、第一源緊縮資料運算元、及第二源緊縮資料運算元所表示的儲存位置係被以分開的64位元部處理,其中該處理器對於各個64位元部執行相同邏輯。
另外實施例包含,其中該指令更包含寫入遮罩運算元,及其中該方法更包含回應於決定該寫入遮罩運算元表示寫入遮罩係被設定用於目的緊縮資料運算元中的 64位元部之一,設定為目的緊縮資料運算元所表示的儲存位置中的該64位元部之一的值為零。
另一實施例包含,其中為目的緊縮資料運算元、第一源緊縮資料運算元、及第二源緊縮資料運算元所表示的儲存位置係為暫存器與記憶體位置之至少之一。
另一實施例包含,其中為目的緊縮資料運算元、第一源緊縮資料運算元、及第二源緊縮資料運算元所表示的儲存位置係為512位元長的暫存器。
另一實施例包含,其中立即值為8位元長。
另一實施例包含,其中指令被用以執行於位元矩陣與位元向量間的位元矩陣乘法運算,其中該位元矩陣的一或更多行係被儲存於為第一源緊縮資料運算元所表示的儲存位置中,及其中該位元向量的值係被儲存在第二源緊縮資料運算元所表示的儲存位置中。
本發明的一實施例包含,其中該位元矩陣係被轉置,使得該位元矩陣的一或更多行係逐行地儲存在第一源緊縮資料運算元所表示的儲存位置。
另一實施例包含,其中為目的緊縮資料運算元所表示的儲存位置包含當該指令被執行用於該位元矩陣的各個行時,該位元矩陣與該位元向量間的位元矩陣乘法運算的結果,其中對於指令的各個執行,該立即值指明對應於該位元矩陣中被處理的行數的在該位元向量中的位置之值。
雖然本發明已經以幾個實施例加以描述,熟 習於本技藝者將認知本發明將不限於所述之實施例,也可以實施為在隨附申請專利範圍的精神與範圍內的修改與替換。因此,本說明係視為例示性而非限定性。
808‧‧‧立即運算元
810‧‧‧第一源緊縮資料運算元
812‧‧‧第二源緊縮資料運算元
814‧‧‧目的緊縮資料運算元
900‧‧‧邏輯
902‧‧‧暫時向量
908‧‧‧按位元和
910‧‧‧按位元互斥或

Claims (20)

  1. 一種處理器,包含:擷取邏輯,用以自記憶體擷取表示目的緊縮資料運算元、第一源緊縮資料運算元、第二源緊縮資料運算元、及立即值的指令;及執行邏輯,用以:根據對應於該立即值的位置,決定在該第二源緊縮資料運算元中的位元;執行該第一源緊縮資料運算元與該所決定的位元間的按位元和運算,以產生中間結果;執行該目的緊縮資料運算元與該中間結果間的按位元互斥或運算,以產生最終結果;及儲存該最終結果於為該目的緊縮資料運算元所表示的儲存位置中。
  2. 如申請專利範圍第1項之處理器,其中為了執行於該第一源緊縮資料運算元與該所決定的位元間的該按位元和運算,該執行邏輯更進一步被組態以執行於該第一源緊縮資料運算元與暫時向量間的按位元和運算,其中該所決定位元的值係予以被一次或多次廣播至該暫時向量。
  3. 如申請專利範範圍第1項之處理器,其中為該目的緊縮資料運算元、該第一源緊縮資料運算元、及該第二源緊縮資料運算元所表示的該等儲存位置係予以被處理於分開的64位元部中,其中該處理器係予以對各個該等64位元部執行相同的邏輯。
  4. 如申請專利範圍第3項之處理器,其中該指令更包含寫入遮罩運算元,及其中該執行邏輯更用以回應於決定該寫入遮罩運算元表示寫入遮罩係設定用於該目的緊縮資料運算元中的該等64位元部中之一,而進一步設定為該目的緊縮資料運算元所表示的該儲存位置中的該等64位元部之該一的值為零。
  5. 如申請專利範圍第1項之處理器,其中為該目的緊縮資料運算元、該第一源緊縮資料運算元與該第二源緊縮資料運算元所表示的該等儲存位置係為暫存器與記憶體位置之至少之一。
  6. 如申請專利範圍第5項之處理器,其中為該目的緊縮資料運算元、該第一源緊縮資料運算元與該第二源緊縮資料運算元所表示的該等儲存位置係為512位元長的暫存器。
  7. 如申請專利範圍第5項之處理器,其中該立即值為8位元長。
  8. 如申請專利範圍第1項之處理器,其中該指令係被用以執行於位元矩陣與位元向量間的位元矩陣乘法運算,其中該位元矩陣的一或更多行係被儲存於為該第一源緊縮資料運算元所表示的該儲存位置中,及其中該位元向量的值係被儲存於為該第二源緊縮資料運算元所表示的該儲存位置中。
  9. 如申請專利範圍第8項之處理器,其中該位元矩陣係被轉置,使得該位元矩陣的該一或更多行係被逐行地 儲存於該第一源緊縮資料運算元所表示的該儲存位置中。
  10. 如申請專利範圍第9項之處理器,其中為該目的緊縮資料運算元所表示的該儲存位置包含當該指令係被執行用於該位元矩陣的各個行時,該位元矩陣與該位元向量間的該位元矩陣乘法運算的結果,其中對於該指令的各個執行,該立即值指明一值,其表示該位元向量中對應於該被處理的位元矩陣的行數的位置。
  11. 一種在電腦處理器中的方法,包含:由記憶體擷取表示目的緊縮資料運算元、第一源緊縮資料運算元、第二源緊縮資料運算元與立即運算元的指令;根據對應於該立即值的位置,決定在該第二源緊縮資料運算元中的位元;執行於該第一源緊縮資料運算元與該所決定的位元間的按位元和運算,以產生中間結果;執行於該目的緊縮資料運算元與該中間結果間的按位元互斥或運算,以產生最終結果;及儲存該最終結果於該目的緊縮資料運算元所表示的儲存位置中。
  12. 如申請專利範圍第11項之方法,其中該執行於該第一源緊縮資料運算元與該所決定的位元間的按位元和運算更包含執行該第一源緊縮資料運算元與暫時向量間的按位元和運算,其中該所決定的位元的值係予以被一次或多次廣播至該暫時向量。
  13. 如申請專利範圍第11項之方法,其中為該目的緊縮資料運算元、該第一源緊縮資料運算元與該第二源緊縮資料運算元所表示的該等儲存位置係予以被處理於分開的64位元部中,其中該處理器予以對各個該等64位元部執行相同的邏輯。
  14. 如申請專利範圍第13項之方法,其中該指令更包含寫入遮罩運算元,及其中該方法更包含回應於決定該寫入遮罩運算元表示寫入遮罩係被設定用於該目的緊縮資料運算元中的該等64位元部中之一,設定為該目的緊縮資料運算元所表示的儲存位置中的該等64位元部之該一的值為零。
  15. 如申請專利範圍第11項之方法,其中為該目的緊縮資料運算元、該第一源緊縮資料運算元與該第二源緊縮資料運算元所表示的該等儲存位置係為暫存器與記憶體位置之至少之一。
  16. 如申請專利範圍第15項之方法,其中為該目的緊縮資料運算元、該第一源緊縮資料運算元與該第二源緊縮資料運算元所表示的該等儲存位置係為512位元長的暫存器。
  17. 如申請專利範圍第15項之方法,其中該立即值為8位元長。
  18. 如申請專利範圍第11項之方法,其中該指令係用以執行於位元矩陣與位元向量間的位元矩陣乘法運算,其中該位元矩陣的一或更多行係被儲存於為該第一源緊縮 資料運算元所表示的該儲存位置中,及其中該位元向量的值係被儲存於為該第二源緊縮資料運算元所表示的該儲存位置中。
  19. 如申請專利範圍第18項之方法,其中該位元矩陣係被轉置,使得該位元矩陣的該一或更多行係被逐行地儲存於為該第一源緊縮資料運算元所表示的該儲存位置中。
  20. 如申請專利範圍第19項之方法,其中為該目的緊縮資料運算元所表示之該儲存位置包含當該指令被執行用於該位元矩陣的各個該行時的該位元矩陣與該位元向量間的該位元矩陣乘法運算的結果,其中對於該指令的各個執行,該立即值指明一值,其表示該位元向量中對應於被處理的該位元矩陣的行數的位置。
TW104138542A 2014-12-23 2015-11-20 用於向量廣播及互斥或和邏輯指令的設備與方法 TWI610229B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/582,171 2014-12-23
US14/582,171 US20160179523A1 (en) 2014-12-23 2014-12-23 Apparatus and method for vector broadcast and xorand logical instruction

Publications (2)

Publication Number Publication Date
TW201636831A true TW201636831A (zh) 2016-10-16
TWI610229B TWI610229B (zh) 2018-01-01

Family

ID=56129465

Family Applications (1)

Application Number Title Priority Date Filing Date
TW104138542A TWI610229B (zh) 2014-12-23 2015-11-20 用於向量廣播及互斥或和邏輯指令的設備與方法

Country Status (9)

Country Link
US (1) US20160179523A1 (zh)
EP (1) EP3238041A4 (zh)
JP (1) JP2018500653A (zh)
KR (1) KR20170097018A (zh)
CN (1) CN107003844A (zh)
BR (1) BR112017010985A2 (zh)
SG (1) SG11201704245VA (zh)
TW (1) TWI610229B (zh)
WO (1) WO2016105727A1 (zh)

Families Citing this family (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR3021428B1 (fr) * 2014-05-23 2017-10-13 Kalray Multiplication de matrices de bits utilisant des registres explicites
US10282204B2 (en) * 2016-07-02 2019-05-07 Intel Corporation Systems, apparatuses, and methods for strided load
US10275243B2 (en) * 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US10846087B2 (en) * 2016-12-30 2020-11-24 Intel Corporation Systems, apparatuses, and methods for broadcast arithmetic operations
WO2018154273A1 (en) 2017-02-23 2018-08-30 Arm Limited Element by vector operations in a data processing apparatus
US11567765B2 (en) 2017-03-20 2023-01-31 Intel Corporation Systems, methods, and apparatuses for tile load
US10372456B2 (en) * 2017-05-24 2019-08-06 Microsoft Technology Licensing, Llc Tensor processor instruction set architecture
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10664277B2 (en) 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words
US11074073B2 (en) 2017-09-29 2021-07-27 Intel Corporation Apparatus and method for multiply, add/subtract, and accumulate of packed data elements
US10795677B2 (en) 2017-09-29 2020-10-06 Intel Corporation Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values
US11243765B2 (en) 2017-09-29 2022-02-08 Intel Corporation Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements
US10534838B2 (en) * 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10552154B2 (en) 2017-09-29 2020-02-04 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10795676B2 (en) 2017-09-29 2020-10-06 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10802826B2 (en) 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US20190205131A1 (en) * 2017-12-29 2019-07-04 Intel Corporation Systems, methods, and apparatuses for vector broadcast
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
US11494190B2 (en) * 2021-03-31 2022-11-08 Arm Limited Circuitry and method for controlling a generated association of a physical register with a predicated processing operation based on predicate data state
CN114826278B (zh) * 2022-04-25 2023-04-28 电子科技大学 基于布尔矩阵分解的图数据压缩方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5175862A (en) * 1989-12-29 1992-12-29 Supercomputer Systems Limited Partnership Method and apparatus for a special purpose arithmetic boolean unit
US6925479B2 (en) * 2001-04-30 2005-08-02 Industrial Technology Research Institute General finite-field multiplier and method of the same
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
US7219289B2 (en) * 2005-03-15 2007-05-15 Tandberg Data Corporation Multiply redundant raid system and XOR-efficient method and apparatus for implementing the same
US7873821B2 (en) * 2007-04-11 2011-01-18 American Megatrends, Inc. BIOS configuration and management
CN101706712B (zh) * 2009-11-27 2011-08-31 北京龙芯中科技术服务中心有限公司 浮点向量乘加运算装置和方法
WO2013081587A1 (en) * 2011-11-30 2013-06-06 Intel Corporation Instruction and logic to provide vector horizontal majority voting functionality
CN103959237B (zh) * 2011-11-30 2016-09-28 英特尔公司 用于提供向量横向比较功能的指令和逻辑
US9960917B2 (en) * 2011-12-22 2018-05-01 Intel Corporation Matrix multiply accumulate instruction
CN106775592B (zh) * 2011-12-23 2019-03-12 英特尔公司 处理器、用于计算系统的方法、机器可读介质和计算机系统
US20140223138A1 (en) * 2011-12-23 2014-08-07 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing conversion of a mask register into a vector register.
US9465612B2 (en) * 2011-12-28 2016-10-11 Intel Corporation Systems, apparatuses, and methods for performing delta encoding on packed data elements
CN104025033B (zh) * 2011-12-30 2017-11-21 英特尔公司 利用控制操纵的simd可变移位和循环
US9235417B2 (en) * 2011-12-31 2016-01-12 Intel Corporation Real time instruction tracing compression of RET instructions
US9128698B2 (en) * 2012-09-28 2015-09-08 Intel Corporation Systems, apparatuses, and methods for performing rotate and XOR in response to a single instruction
JP2016517046A (ja) * 2013-04-24 2016-06-09 エヌイーシー ヨーロッパ リミテッドNec Europe Ltd. データを暗号化する方法およびシステム

Also Published As

Publication number Publication date
TWI610229B (zh) 2018-01-01
JP2018500653A (ja) 2018-01-11
BR112017010985A2 (pt) 2018-02-14
WO2016105727A1 (en) 2016-06-30
EP3238041A4 (en) 2018-08-15
SG11201704245VA (en) 2017-07-28
EP3238041A1 (en) 2017-11-01
US20160179523A1 (en) 2016-06-23
KR20170097018A (ko) 2017-08-25
CN107003844A (zh) 2017-08-01

Similar Documents

Publication Publication Date Title
TWI610229B (zh) 用於向量廣播及互斥或和邏輯指令的設備與方法
TWI517039B (zh) 用以對緊縮資料執行差異解碼之系統,設備,及方法
TWI556165B (zh) 位元混洗處理器、方法、系統及指令
TWI524266B (zh) 用以偵測向量暫存器內相等元素之裝置及方法
TWI582690B (zh) 用於滑動視窗資料存取之設備及方法
TW201820125A (zh) 執行複數的熔合乘-加指令的系統與方法
TWI462007B (zh) 用以執行將遮罩暫存器轉換為向量暫存器的系統、裝置及方法
TWI489383B (zh) 遮蔽排列指令的裝置及方法
TWI501147B (zh) 用於從通用暫存器至向量暫存器的廣播之裝置及方法
TWI603263B (zh) 執行置換運算的處理器及具有該處理器的電腦系統
TWI480798B (zh) 用於資料類型之向下轉換的裝置及方法
TWI575451B (zh) 用於遮罩及向量暫存器之間的可變擴充的方法及裝置
TWI556164B (zh) 具有不同讀取及寫入遮罩之多元件指令
TW201344570A (zh) 緊縮旋轉處理器、方法、系統與指令
TWI599952B (zh) 用於執行衝突檢測的方法及裝置
CN107003832B (zh) 用于执行大整数算术操作的方法和装置
TWI644256B (zh) 用以執行向量飽和雙字/四字加法的指令及邏輯
TW201732553A (zh) 用於保留位元的強制執行的裝置及方法
TW201732568A (zh) 用於巷道為主的跨類收集的系統、設備與方法
TW201636828A (zh) 用以從4維座標計算4維z曲線指標的機器階層指令
TWI470541B (zh) 用於滑動視窗資料收集之設備及方法
TW201643696A (zh) 用於熔合累加指令的設備和方法
TWI610231B (zh) 用於向量水平邏輯指令的裝置及方法
TW201730756A (zh) 用於從鏈結結構取回元件的設備和方法
TWI599953B (zh) 用以執行大整數算數運算之方法及裝置

Legal Events

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