[go: up one dir, main page]

TW201344566A - 有條件的傳播在單一指令多重資料/向量執行中之評估值的裝置與方法 - Google Patents

有條件的傳播在單一指令多重資料/向量執行中之評估值的裝置與方法 Download PDF

Info

Publication number
TW201344566A
TW201344566A TW101148087A TW101148087A TW201344566A TW 201344566 A TW201344566 A TW 201344566A TW 101148087 A TW101148087 A TW 101148087A TW 101148087 A TW101148087 A TW 101148087A TW 201344566 A TW201344566 A TW 201344566A
Authority
TW
Taiwan
Prior art keywords
value
input mask
register
mask register
read
Prior art date
Application number
TW101148087A
Other languages
English (en)
Other versions
TWI517041B (zh
Inventor
Jayashankar Bharadwaj
Nalini Vasudevan
Victor Lee
Dae-Hyun Kim
Albert Hartono
Sara Baghsorkhi
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of TW201344566A publication Critical patent/TW201344566A/zh
Application granted granted Critical
Publication of TWI517041B publication Critical patent/TWI517041B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor

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)

Abstract

本發明揭示了一種有條件地傳播評估值之裝置及方法。例如,根據一實施例的一方法包含下列步驟:讀取一輸入遮罩暫存器中所含的每一值,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對自該輸入遮罩暫存器讀取的每一真值,產生其中包含該真值的位元位置之一第一結果;針對在該第一真值之後自該輸入遮罩暫存器讀取的每一假值,將該輸入遮罩暫存器之向量長度加到自該輸入遮罩暫存器讀取的上一真值之位元位置,而產生一第二結果;以及將該等第一結果及第二結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。

Description

有條件的傳播在單一指令多重資料/向量執行中之評估值的裝置與方法
本發明之實施例係大致有關電腦系統之領域。更具體而言,本發明之實施例係有關一種有條件地傳播單一指令多重資料/向量執行中之評估值的裝置與方法。
指令集或指令集架構(Instruction Set Architecture;簡稱ISA)是與程式設計有關的電腦架構之一部分,且可包括原生資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷及異常處置、以及外部輸入及輸出(Input and Output;簡稱I/O)。在本發明中,術語指令通常參照到巨集指令(macro-instruction),巨集指令是為了執行而被提供給處理器(或指令轉換器,該指令轉換器轉換(諸如使用靜態二進制轉譯(binary translation)、其中包括動態編譯之動態二進制轉譯)、轉譯(morph)、仿真(emulate)、或其他方式轉換一指令為將要被該處理器處理的一或多個其他指令)之指令;而不是參照到係為處理器的將巨集指令解碼的結果之微指令(micro-instruction)或微操作(micro-operations;micro-ops)。
ISA與係為用來執行指令集的處理器之內部設計有所區別。具有不同微架構的一些處理器可共用一共同的指令集。例如,Intel® Pentium 4處理器、Intel® CoreTM處理器、以及Advanced Micro Devices,Inc.(位於Sunnyvale CA)供應之處理器實施幾乎相同版本的x86指令集(且具有在較新版本中被加入的某些延伸),但是有不同的內部設計。例如,可使用一些習知技術在不同的微架構中以不同的方式實施ISA之相同的暫存器架構,該等習知技術包括專用的實體暫存器、使用一暫存器重命名(register renaming)機制(例如,使用暫存器別名表(Register Alias Table;簡稱RAT)、一重排序緩衝器(Reorder Buffer;簡稱ROB)、及一引退暫存器檔案(retirement register file);使用多個映射表(map)及一集用場(pool)的暫存器)之一或多個動態分配的實體暫存器等的習知技術。除非另有指定,否則本發明將使用詞語"暫存器架構"、"暫存器檔案"、及"暫存器"參照到軟體/程式設計師可看見的該等詞語以及指令指定暫存器的方式。當需要明確性時,形容詞"邏輯的"、"架構的"、或"軟體可見的"將被用來指示暫存器架構中之暫存器/檔案,而不同的形容詞將被用來指定特定微架構(例如,實體暫存器、重新排序緩衝區、引退暫存器、暫存器集區)中之暫存器。
指令集包括一或多種指令格式。特定的指令格式界定各種欄位(位元的數目、位元的位置),以便尤其指定將要被執行的運算(運算碼)以及將被執行運算的一或多個運算元。利用指令範本(instruction template)(或子格式)進一步分解某些指令格式。例如,可將特定指令格式之指令範本界定成具有該指令格式的各欄位之不同的子集 (所包含的該等欄位通常係按照相同的順序,但是至少某些欄位具有不同的位元位置,這是因為有較少的欄位被包含),且/或定成具有以不同的方式解譯之特定欄位。因此,使用一特定指令格式(且在指令範本被界定之情形下,使用該指令格式的該等指令範本中之一特定指令範本)表示一ISA的每一指令,且每一指令包括用來指定運算及運算元之欄位。例如,一例示ADD指令具有一特定運算碼以及一指令格式,該指令格式包括用來指定該運算碼之一運算碼欄位、以及用來選擇運算元(來源1/目標、及來源2)之一運算元欄位;以及在一指令流中發生該ADD指令時,在用來選擇特定運算元之運算元欄位中將有特定的內容。
科學、金融、自動向量化(auto-vectorized)一般用途、辨識、探勘及合成(Recognition,Mining,and Synthesis;簡稱RMS)、以及視覺及多媒體應用(例如,二維/三維(2D/3D)圖形、影像處理、視訊壓縮/解壓縮、語音辨識演算法、及音訊調處)通常需要對大量的資料項執行相同的操作(被稱為"資料並行性")。單一指令多重資料(Single Instruction Multiple Data;簡稱SIMD)參照到一種使處理器對多個資料項執行一操作之指令。SIMD技術尤其適用於可將一暫存器中之位元在邏輯上分割成一些固定大小的資料單元之處理器,其中每一資料單元代表一各別的值。例如,256位元暫存器中之位元可被指定為以四個各別的64位元緊縮資料單元(四字 (quad-word)(Q)大小的資料單元、八個各別的32位元緊縮資料單元(雙字(double word)(D)大小的資料單元、十六個各別的16位元緊縮資料單元(字(W)大小的資料單元、或三十二個各別的8位元縮資料單元(位元組(B)大小的資料單元之方式操作之一來源運算元。此種資料類型被稱為緊縮資料類型(packed data type)或向量資料類型,且該資料類型之運算元被稱為緊縮資料運算元或向量運算元。換言之,緊縮資料項或向量參照到一序列的緊縮資料單元,且緊縮資料運算元或向量運算元是SIMD指令(也被稱為緊縮資料指令或向量指令)之來源或目標運算元。
舉例而言,一種類型的SIMD指令指定以垂直方式對兩個來源向量運算元執行的單一向量運算,該單一向量運算產生具有相同大小及相同數目的資料單元且按照相同的資料單元順序之一目標向量運算元(也被稱為結果向量運算元)。來源向量運算元中之資料單元被稱為來源資料單元,而目標向量運算元中之資料單元被稱為目標或結果資料單元。這些來源向量運算元具有相同的大小,且含有相同寬度的資料單元,因而這些來源向量運算元含有相同數目的資料單元。兩個來源向量運算元中之相同位元位置上的來源資料單元構成一些對的資料單元(也被稱為對應的資料單元;亦即,每一來源運算元的資料單元位置0上的資料單元對應於每一來源運算元的資料單元位置1上的資料單元,其他依此類推)。對這些對的來源資料單元中之 每一對的來源資料單元各別地執行該SIMD指令指定的運算,而產生一匹配數目的結果資料單元,且每一對的來源資料單元因而有一對應的結果資料單元。因為該運算是垂直的,且因為結果向量運算元因大小相同而具有相同數目的資料單元,而且因為按照與來源向量運算元相同的資料單元順序儲存結果資料單元,所以該等結果資料單元是在該結果向量運算元中之與該等來源向量運算元的對應對的來源資料單元相同之位元位置上。除了該例示類型的SIMD指令之外,還有各種其他類型的SIMD指令(例如,只有一個或有兩個以上的來源向量運算元之SIMD指令、以水平方式操作之SIMD指令、產生具有不同的大小的結果向量運算元之SIMD指令、具有不同大小的資料單元之SIMD指令、及/或具有不同的資料單元順序之SIMD指令)。我們應可了解:術語"目標向量運算元"(或"目標運算元")被定義為執行一指令指定的操作之直接結果,其中包括將該目標運算元儲存在一位置(該位置可以是一暫存器或該指令指定的一記憶體位址上),因而另一指令(藉由該另一指令指定該相同的位置)可將該目標運算元存取為一來源運算元。
諸如具有其中包括x86、MMXTM、數據流SIMD延伸(Streaming SIMD Extensions;簡稱SSE)、SSE2、SSE3、SSE4.1、及SSE4.2指令的指令集之Intel® CoreTM處理器採用的SIMD技術等的SIMD技術能夠使應用效能有顯著的改善。已經釋出且/或發佈了被稱為先進向量延 伸集(Advanced Vector Extensions;簡稱AVX)(AVX1及AVX2)且使用向量延伸(Vector Extensions;簡稱VEX)編碼方案(coding scheme)之一額外的SIMD延伸指令集(例如,請參閱2011年10月發佈的"Intel® 64 and IA-32 Architectures Software Developers Manual";且請參閱2011年6月發佈的"Intel® Advanced Vector Extensions Programming Reference")。
與本發明的實施例有關之背景
SIMD架構依賴針對效能而將迴圈向量化之編譯器。在一般用途應用程式及系統軟體中採用的迴圈中,通常有條件地界定一變數,且無條件地或在一不同條件的控制下讀取該變數。此種方式導致妨礙此種迴圈的向量化之迴圈承載相依性(loop carried dependence)。本說明書所述的本發明之實施例將使編譯器能夠將具有某些迴圈承載相依性的迴圈向量化之一些指令加入一SIMD指令集架構(ISA)。
本發明揭示了一種有條件地傳播評估值之裝置及方法。例如,根據一實施例的一方法包含下列步驟:讀取一輸入遮罩暫存器(input mask register)中所含的每一值,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對自該輸入遮罩暫存器讀取的每一真值,產生其 中包含該真值的位元位置之一第一結果;針對在該第一真值之後自該輸入遮罩暫存器讀取的每一假值,將該輸入遮罩暫存器之向量長度加到自該輸入遮罩暫存器讀取的上一真值之位元位置,而產生一第二結果;以及將該等第一結果及第二結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
例示處理器架構及資料類型
第1A圖是根據本發明的一實施例的一例示循序管線及一例示暫存器重命名亂序發出/執行管線之一方塊圖。第1B圖是將被包含在根據本發明的實施例的一處理器之一循序架構核心實施例及一例示暫存器重命名亂序發出/執行架構核心之一方塊圖。第1A-B圖中之實線框示出該循序管線及循序執行核心,而以可供選擇採用之方式加入的虛線框示出該暫存器重命名亂序發出/執行管線及核心。由於循序執行層面是亂序執行層面的一子集,所以將說明亂序執行層面。
在第1A圖中,一處理器管線100包含一提取階段102、一長度解碼階段104、一解碼階段106、一分配階段108、一重命名階段110、一排程(也被稱為派發或發出)階段112、一暫存器讀取/記憶體讀取階段114、一執行階段116、一寫回/記憶體寫入階段118、一異常處置階段122、以及一提交階段124。
第1B圖示出包含被耦合到一執行引擎單元150的一前端單元130之處理器核心190,而該前端單元130及該執行引擎單元150都被耦合到一記憶體單元170。該核心190可以是一精簡指令集計算(Reduced Instruction Set Computing;簡稱RISC)核心、一複雜指令集計算(Complex Instruction Set Computing;簡稱CISC)、一極長指令集(Very Long Instruction Word;簡稱VLIW)核心、或一混合或替代核心類型。作為又一選項,該核心190可以是諸如網路或通訊核心、壓縮引擎、共處理器核心、通用計算圖形處理單元(General Purpose computing Graphics Processing Unit;簡稱GPGPU)核心、或圖形核心等的特殊用途核心。
前端單元130包含被耦合到一指令快取記憶體單元134之一分支預測單元132,該指令快取記憶體單元134被耦合到一指令轉譯後備緩衝區(Translation Lookaside Buffer;簡稱TLB)136,該指令TLB 136被耦合到一指令提取單元138,該指令提取單元138被耦合到一解碼單元140。解碼單元140(或解碼器)可將指令解碼,且產生自原始指令解碼的、或以其他方式反映原始指令的、或自原始指令衍生的一或多個微操作、微碼入口點(entry point)、微指令、其他指令、或其他控制信號,作為一輸出。可使用各種不同的機制實施解碼單元140。適當的機制之例子包括(但不限於)查詢表、硬體實施方式、可程式邏輯陣列(Programmable Logic Array;簡稱PLA)、 及微碼唯讀記憶體(Read Only Memory;簡稱ROM)等的機制。在一實施例中,核心190包含一微碼ROM或用來儲存某些巨集指令的微碼之其他媒體(例如,在解碼單元140中或在前端單元130內的其他部分)。解碼單元140被耦合到執行引擎單元150中之一重命名/分配器單元152。
執行引擎單元150包含被耦合到一指令引退單元154及一組的一或多個排程器單元156之重命名/分配器單元152。該一或多個排程器單元156代表其中包括保留站(reservation station)及中央指令視窗(central instruction window)等的任何數目之不同的排程器。該一或多個排程器單元156被耦合到一或多個實體暫存器檔案單元158。該一或多個實體暫存器檔案單元158中之每一實體暫存器檔案單元代表一或多個實體暫存器檔案,該等實體暫存器檔案中之不同的實體暫存器檔案儲存諸如純量整數、純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點、或狀態(例如,係為將要被執行的下一指令的位址之指令指標)等的一或多個不同的資料類型。在一實施例中,該一或多個實體暫存器檔案單元158包含一向量暫存器單元、一寫入遮罩(write mask)暫存器單元、以及一純量暫存器單元。這些暫存器單元可提供架構向量暫存器、向量遮罩暫存器(vector mask register)、以及一般用途暫存器。該一或多個實體暫存器檔案單元158被指令引退單元154重疊,而示出可實施暫存器重命名及亂序執 行的各種方式(例如,使用一或多個重排序緩衝器以及一或多個指令引退暫存器檔案;使用一或多個未來檔案(future file)、一或多個歷史緩衝器(history buffer)、以及一或多個指令引退暫存器檔案;使用一暫存器對照表(register map)以及一集區的暫存器等的方式)。該指令引退單元154及該一或多個實體暫存器檔案單元158被耦合到一或多個執行叢集160。該一或多個執行叢集160包含一組的一或多個執行單元162及一組的一或多個記憶體存取單元164。該等執行單元162可執行各種操作(例如,移位、加法、減法、乘法),且可對各種類型的資料(例如,純量浮點、緊縮整數、緊縮浮點、向量整數、向量浮點)執行操作。雖然某些實施例可包含專用於一些特定功能或一些特定組的功能之一些執行單元,但是其他實施例可以只包含全都被用來執行所有功能的一個執行單元或多個執行單元。所示之排程器單元156、實體暫存器檔案單元158、及執行叢集160可能是複數個,這是因為某些實施例為某些類型的資料/操作創建個別的管線(例如,分別有其自己的排程器單元、實體暫存器檔案單元、及/或執行叢集之一純量整數管線、一純量浮點/緊縮整數/緊縮浮點/向量整數/向量浮點管線、及/或一記憶體存取管線;且在一個別的記憶體存取管線之情形中,實施只有該管線的執行叢集具有記憶體存取單元164之某些實施例)。我們亦應可了解:當使用個別的管線時,這些管線中之一或多個管線可以是亂序發出/執 行,且其餘的管線可以是循序執行。
該組記憶體存取單元164被耦合到記憶體單元170,記憶體單元170包含被耦合到一資料快取記憶體單元174之一資料TLB單元172,且資料快取記憶體單元174被耦合到一第2階(L2)快取記憶體單元176。在一實施例中,該等記憶體存取單元164可包含分別被耦合到記憶體單元170中之資料TLB單元172的一載入單元、一儲存位址單元、及一儲存資料單元。指令快取記憶體單元134被進一步耦合到記憶體單元170中之第2階(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指令集(且具有在較新版本中被加 入的某些延伸);MIPS Technologies(位於Sunnyvale,CA)的MIPS指令集;ARM Holdings(位於Sunnyvale,CA)的ARM指令集(且具有諸如NEON等的一些可供選擇採用的延伸)。在一實施例中,核心190包含用來支援緊縮資料指令集延伸(例如,AVX1、AVX2、及/或將於下文中說明之某些形式的一般向量親和指令格式(U=0及/或U=1))之邏輯,因而可使用緊縮資料執行許多多媒體應用程式使用的操作。
我們應可了解:該核心可支援多緒執行(multithreading)(執行兩個或更多個平行組的操作或執行緒),且可以其中包括時間切割(time sliced)多緒執行、同時多緒執行(當一單一實體核心將一邏輯核心提供給每一執行緒時,該實體核心是同時多緒執行)、或以上兩者的一組合(例如,諸如在Intel®超執行緒(Hyperthreading)技術中之時間切割式提取及解碼以及後續的同時多緒執行)之各種方式支援多緒執行。
雖然是在亂序執行的情境中說明暫存器重命名,但是我們應可了解:可將暫存器重命名用於循序架構。雖然該處理器的所示實施例也包含個別的指令及資料快取記憶體單元134/174以及一共用的L2快取記憶體單元176,但是替代實施例可具有用於指令及資料之諸如一第1階(L1)內部快取記憶體等的一單一內部快取記憶體、或多階的內部快取記憶體。在某些實施例中,該系統可包含一內部快取記憶體及在核心及/或處理器外部的一外部快取記憶體 之一組合。在替代實施例中,所有該等快取記憶體都可以是在核心及/或處理器的外部。
第2圖是根據本發明的實施例而可具有一個以上的核心、可具有一整合式記憶體控制器、且可具有整合式圖形之一處理器200之一方塊圖。第2圖中之實線框示出具有一單一核心202A、一系統代理單元210、及一組的一或多個匯流排控制器單元216之一處理器200,而以可供選擇採用之方式加入的虛線框示出示出具有多個核心202A~N、系統代理單元210中之一組的一或多個整合式記憶體控制器單元214、及特殊用途邏輯208之一替代處理器200。
因此,處理器200之不同的實施例可包括:(1)具有係為整合式圖形及/或科學(執行率)邏輯的特殊用途邏輯208(可包括一或多個核心)及係為一或多個一般用途核心的核心202A~N(例如,一般用途循序執行核心、一般用途亂序執行核心、以上兩者的一組合)之一CPU;(2)具有係為主要適用於圖形及/或科學(執行率)的大量特殊用途核心的核心202A~N之一共處理器;以及(3)具有係為大量一般用途循序執行核心的核心202A~N之一共處理器。因此,處理器200可以是一般用途處理器、諸如網路或通訊處理器、壓縮引擎、圖形處理器、通用圖形處理單元(GPGPU)、高執行率的多重整合核心(Many Integrated Core;簡稱MIC)共處理器(包含30個或更多個核心)等的共處理器或特殊用途處理器、或嵌 入式處理器等的處理器。可在一或多個晶片上實施該處理器。處理器200可以是使用諸如雙載子互補金屬氧化物半導體(BiCMOS)互補金屬氧化物半導體(CMOS)或N型金屬氧化物半導體(NMOS)等的的任何數目的製程技術之一或多個基材的一部分,且/或可在該一或多個基材上實施處理器200。
記憶體階層包括該等核心內之一或多階的快取記憶體、一組的一或多個共用快取記憶體單元206、以及被耦合到該組的整合式記憶體控制器單元214之外部記憶體(圖中未示出)。該組的共用快取記憶體單元206可包括諸如第2階(L2)、第3階(L3)、第4階(L4)、或其他階的快取記憶體等的一或多個中階快取記憶體、最後一階快取記憶體(Last Level Cache;簡稱LLC)、及/或以上各項之組合。雖然在一實施例中,一環狀互連單元212將整合式圖形邏輯208、該組共用快取記憶體單元206、以及系統代理單元210/整合式記憶體控制器單元214互連,但是替代實施例可將任何數目的習知技術用來將這些單元互連。在一實施例中,於一或多個快取記憶體單元206與核心202A~N之間維持一致性。
在某些實施例中,該等核心202A~N中之一或多個核心能夠進行多緒執行。系統代理單元210包含用來協調及操作核心202A~N之那些組件。系統代理單元210可包含諸如一功率控制單元(Power Control Unit;簡稱PCU)及一顯示單元。該PCU可以是或包括用來管制核心 202A~N及整合式圖形邏輯208的電源狀態所需之邏輯及組件。該顯示單元被用來驅動一或多個外部連接的顯示器。
核心202A~N在架構指令集方面可以是同質的或異質的;亦即,核心202A~N中之兩個或更多個核心能夠執行相同的指令集,而其他核心只能夠執行該指令集的一子集、或一不同的指令集。
第3-6圖是一些例示電腦架構之方塊圖。膝上型電腦、桌上型電腦、手持個人電腦(PC)、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位信號處理器(DSP)、圖形裝置、視訊遊戲裝置、機上盒、微控制器、細胞式電話、可攜式媒體播放器、手持裝置、及各種其他電子裝置的技術中習知之其他系統設計及組態也是適用的。一般而言,能夠包含本發明述及的處理器及/或其他執行邏輯之極多種的系統或電子裝置也是普遍適用的。
現在請參閱第3圖,圖中示出根據本發明的一實施例的一系統300之一方塊圖。系統300可包含被耦合到一控制中心320之一或多個處理器310、315。在一實施例中,控制中心320包括一圖形及記憶體控制中心(Graphics and Memory Controller Hub;簡稱GMCH)390及一輸入/輸出控制中心(Input/Output Hub;簡稱IOH)350(該等兩個控制中心可在各別的晶片上);該GMCH 390包括被耦合到記憶體340及一共處理器345之記憶體及圖形控 制器;IOH 350將一些輸入/輸出(Input/Output;簡稱I/O)裝置360耦合到GMCH 390。在替代實施例中,一或兩個記憶體及圖形控制器被整合在該處理器內(如本發明所述),記憶體340及共處理器345被直接耦合到處理器310,且控制中心320及IOH 350是在一單晶片中。
第3圖中以折線表示額外的處理器315之可供選擇採用的本質。每一處理器310、315可包含一或多個本發明述及的處理核心,且可以是處理器200的某一版本。
記憶體340可以是諸如動態隨機存取記憶體(Dynamic Random Access Memory;簡稱DRAM)、相位變化記憶體(Phase Change Memory;簡稱PCM)、或以上兩者的組合。對於至少一實施例而言,控制中心320經由諸如一前端匯流排(Front Side Bus;簡稱FSB)等的一多點傳輸匯流排、諸如快速路徑互連(QuickPath Interconnect;簡稱QPI)等的點對點介面、或類似的連接395而與處理器310、315通訊。
在一實施例中,共處理器345是諸如高執行率MIC處理器、網路或通訊處理器、壓縮引擎、圖形處理器、通用圖形處理單元(GPGPU)、或嵌入式處理器等的一特殊用途處理器。在一實施例中,控制中心320可包括一整合式圖形加速器。
實體資源310、315在其中包括架構、微架構、熱特性、及功率消耗特性等的優點衡量項目上可能有各種差異。
在一實施例中,處理器310執行用來控制一般類型的資料處理操作之指令。共處理器指令可被嵌入該等指令內。處理器310將這些共處理器指令辨識為應被附屬的共處理器345執行的類型之指令。因此,處理器310經由一共處理器匯流排或其他互連而將這些共處理器指令(或代表共處理器指令之控制信號)發出到共處理器345。一或多個共處理器345接受且執行該等被接收之共處理器指令。
現在請參閱第4圖,圖中示出根據本發明的一實施例的一第一更特定之例示系統400之一方塊圖。如第4圖所示,多處理器系統400是一點對點互連系統,且包含經由一點對點互連450而被耦合之一第一處理器470及一第二處理器480。處理器470及480中之每一處理器可以是處理器200的某一版本。在本發明的一實施例中,處理器470及480分別是處理器310及315,而共處理器438是共處理器345。在另一實施例中,處理器470及480分別是處理器310及共處理器345。
處理器470及480被示出分別包含整合式記憶體控制器(Integrated Memory Controller;簡稱IMC)單元472及482。處理器470也包含點對點(Point-to-Point;簡稱P-P)介面476及478作為其匯流排控制器單元的一部分;同樣地,第二處理器480包含P-P介面486及488。處理器470、480可使用P-P介面電路478、488而經由點對點介面450交換資訊。如第4圖所示,IMC 472及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可以是一周邊組件互連(Peripheral Component Interconnect;簡稱PCI)匯流排、或諸如一周邊組件高速互連(PCI Express)匯流排或另一第三代I/O互連匯流排等的一匯流排,但是本發明之範圍不限於此。
如第4圖所示,各種I/O裝置414以及一匯流排橋接器418可被耦合到第一匯流排416,該匯流排橋接器418 將第一匯流排416耦合到一第二匯流排420。在一實施例中,諸如共處理器、高執行率MIC處理器、通用圖形處理單元(GPGPU)、加速器(例如,圖形加速器或數位信號處理(Digital Signal Processing;簡稱DSP)單元)、現場可程式閘陣列、或任何其他處理器等的一或多個額外的處理器415被耦合到第一匯流排416。在一實施例中,第二匯流排420可以是一低接腳數(Low Pin Count;簡稱LPC)匯流排。在一實施例中,其中包括諸如一鍵盤及/或滑鼠422、一些通訊裝置427、諸如磁碟機或可包含指令/程式碼及資料430之其他大量儲存裝置等的儲存單元428之各種裝置可被耦合到第二匯流排420。此外,一音訊I/O 424可被耦合到第二匯流排420。請注意,其他的架構也是可能的。例如,一系統可不實施第4圖所示之點對點架構,而替代地實施多點傳輸匯流排或其他的此類架構。
現在請參閱第5圖,圖中示出根據本發明的一實施例的一第二更特定之例示系統500之一方塊圖。第4及5圖中之類似元件具有類似的參考編號,且第5圖中已省略了第4圖之某些觀點,以避免模糊了第5圖之其他觀點。
第5圖示出處理器470、480可分別包含整合式記憶體及I/O控制邏輯(Control Logic;簡稱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,該應用處理器610包含一組的一或多個核心202A~N及一或多個共用快取記憶體單元206;一系統代理單元210;一匯流排控制器單元216;一整合式記憶體控制器單元214;一組或一或多個共處理器620,該等共處理器620可包括整合式圖形邏輯邏輯、一影像處理器、一音訊處理器、及一視訊處理器;一靜態機存取記憶體(Static Random Access Memory;簡稱SRAM)單元630;一直接記憶體存取(Direct Memory Access;簡稱DMA)單元632;以及用於耦合到一或多個外部顯示器之一顯示單元640。在一實施例中,該一或多個共處理器620包括諸如網路或通訊處理器、壓縮引擎、通用圖形處理單元(GPGPU)、高執行率MIC處理器、或嵌入式處理器等的一特殊用途處理器。
可以硬體、軟體、韌體、或這些實施方式的一組合實施本發明揭示的該等機制之實施例。可將本發明之實施例實施為在包含至少一處理器、一儲存系統(包括揮發性及非揮發性記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置的可程式系統上執行之電腦程式或程式 碼。
可施加諸如第4圖所示之程式碼430等的程式碼而輸入用來執行本發明述及的功能且產生輸出資訊之指令。可以習知之方式將該輸出資訊施加到一或多個輸出裝置。為了便於說明本申請案,處理系統包括具有諸如一數位信號處理器(DSP)、一微控制器、一特定應用積體電路(Application Specific Integrated Circuit;簡稱ASIC)、或一微處理器等的一處理器之任何系統。
可以高階程序或物件導向程式語言實施該程式碼,以便與一處理系統通訊。如有需要,亦可以組合語言或機器語言實施該程式碼。事實上,本發明述及的該等機制在範圍上不限於任何特定程式語言。無論如何,該語言可以是一編譯式或直譯式語言。
可以機器可讀取的媒體中儲存之代表性指令實施至少一實施例之一或多個觀點,該等代表性指令代表處理器內之各種邏輯,且該等代表性指令被一機器讀取時,將使該機器製造用來執行本發明述及的該等技術之邏輯。被稱為"智慧財產權核心"("IP core")之此種表示法可被儲存在一實體之機器可讀取的媒體,且被供應到各客戶或製造設施,以便載入可實際製造出該邏輯或處理器之製造機器。
此種機器可讀取的媒體可包括(但不限於)由機器或裝置製造或形成的非短暫性實體物品配置,其中包括諸如硬碟等的儲存媒體、包括軟碟、光碟、唯讀光碟(Compact Disk Read Only Memory;簡稱CD-ROM)、可 複寫式光碟(Compact Disk Rewritable;簡稱CD-RW)、及及磁光碟之任何其他類型的磁碟或光碟、諸如唯讀記憶體(Read Only Memory;簡稱ROM)、動態隨機存取記憶體(Dynamic Random Access Memory;簡稱DRAM)、靜態機存取記憶體(SRAM)等的隨機存取記憶體(Random Access Memory;簡稱RAM)、可抹除可程式唯讀記憶體(Erasable Programmable Read-Only Memory;簡稱EPROM)、快閃記憶體、電氣可抹除可程式唯讀記憶體(Electrically Erasable Programmable ROM;簡稱EEPROM)、相變化記憶體(PCM)等的半導體裝置、磁卡或光學卡、或適於儲存電子指令之任何其他類型的媒體。
因此,本發明之實施例也包括含有指令或含有諸如硬體描述語言(Hardware Description Language;簡稱HDL)等的設計資料之非短暫性實體機器可讀取的媒體,其中該HDL界定了本發明述及的結構、電路、設備、處理器、及/或系統特徵。此類實施例亦可被稱為程式產品。
在某些例子中,一指令轉換器可被用來將指令自一來源指令集轉換為一目標指令集。例如,該指令轉換器可(諸如使用靜態二進制轉譯、其中包括動態編譯之動態二進制轉譯、轉譯、仿真、或其他方式)將一指令轉換為將要被該核心處理的一或多個其他指令。可以軟體、硬體、韌體、或以上各項之一組合實施該指令轉換器。該指令轉 換器可設於處理器中,可設於處理器之外,或可部分地設於處理器中且部分地設於處理器之外。
第7圖是根據本發明的實施例而使用一軟體指令轉換器將一來源指令集中之二進制指令轉換為一目標指令集中之二進制指令的一對照方塊圖。在該所示之實施例中,該指令轉換器是一軟體指令轉換器,但是可替代地以軟體、韌體、硬體、或以上各項的各種組合實施該指令轉換器。第7圖示出:可使用一x86編譯器704編譯以一高階語言702撰寫的一程式,而產生可由具有至少一x86指令集核心之處理器716以原生方式執行之x86二進制碼706。具有至少一x86指令集核心之處理器716代表可以相容之方式執行或以其他方式處理下列項目以便得到與具有至少一x86指令集核心之Intel處理器實質上相同的結果因而實質上執行與具有至少一x86指令集核心之Intel處理器相同的功能之任何處理器:(1)Intel x86指令集核心的指令集之很大一部分;或(2)目標在具有至少一x86指令集核心之Intel處理器上運行的應用程式或其他軟體之目標碼(object code)版本。該x86編譯器704代表可操作而產生可以在具有或不具有額外鏈接處理之情形下在具有至少一x86指令集核心之處理器716上執行的x86二進制碼706(例如,目標碼)之編譯器。同樣地,第7圖示出:可使用一替代指令集編譯器708編譯以該高階語言702撰寫的程式,而產生可由不具有x86指令集核心之處理器714(例如,具有用來執行MIPS Technologies(位於 Sunnyvale,CA)的MIPS指令集及/或用來執行ARM Holdings(位於Sunnyvale,CA)的ARM指令集的核心之處理器)以原生方式執行之替代指令集二進制碼710。指令轉換器712被用來將x86二進制碼706轉換為可由不具有x86指令集核心之處理器714的處理器以原生方式執行之碼。該被轉換的碼不可能相同於替代指令集二進制碼710,這是因為難以製造如此可行的指令轉換器;然而,該被轉換的碼將完成一般的操作,且將構成來自該替代指令集之指令。因此,指令轉換器712代表利用仿真、模擬、或任何其他程序而可讓不具有x86指令集處理器或核心之處理器或其他電子裝置可執行x86二進制碼706的軟體、韌體、硬體、或以上各項的組合。
有條件地傳播在單一指令多重資料(SIMD)/向量執行中之評估值的本發明之實施例
下文所述之本發明之實施例包括可讓一值之表式自一變數被界定的疊代傳播到可能並未界定該變數或可能在界定該變數之前即使用該變數的在該疊代之後那些疊代之一組SIMD/向量指令。這些實施例使編譯器能夠執行迴圈向量化所需之純量的陣列擴充。在下列的例子中,編譯器無法將該迴圈向量化,這是因為沒有表示SIMD ISA中之變數z與陣列B間之資料相依性的良好方式:
如果N=8,且A[i]含有{0,11,12,0,0,15,16,0},則代表條件(a[i]>0)之述詞遮罩(predicate mask)將是{0,1,1,0,0,1,1,0},且在執行該迴圈之後,B應含有{18,11,12,12,12,15,16,16}。請注意,當述詞是0,且z及B[i]含有來自先前疊代的z值時,則在述詞是1的第一SIMD元素之前,其將在該SIMD疊代的條目上還有純量值。請注意,可以兩個向量的元素的排列之方式計算z的向量版本或向量B,該等兩個向量是向量A以及以該SIMD疊代的條目上存在有z之純量值初始化之一向量。在上例中假定SIMD的向量長度為8,則排列索引(permutation index)向量將是{8,1,2,2,2,5,6,6},其中索引值0至7選擇A的一元素,且索引值8選擇以該SIMD疊代的條目上存在有z之純量值初始化之該向量之一元素。
因為某些指令集(例如,本申請案的受讓人所設計的先進向量延伸集(AVX))包含用來將來自一或兩個AVX暫存器的元素排列為一目標AVX暫存器,所以所需的只是一種自一輸入述詞遮罩計算索引值之方式。因而將使編譯器能夠表示該例示程式碼中示出之排列。
下文所述的本發明之實施例包括取得一輸入遮罩暫存器且產生一索引向量的三個SIMD指令。編譯器可將這些指令用來將諸如前文提供的例子以及具有迴圈承載相依性之其他迴圈等的迴圈向量化。在一實施例中,該等新指令有下列格式:vPropagateTrueIndex[BWDQ] v1,k2,imm1
vPropagateFalseIndex[BWDQ] v1,k2
vPropagateShiftTrue[BWDQ] v1,k2
下文中將詳細說明一實施例。
(1)vPropagateTrueIndex[BWDQ] v1,k2,imm1:該指令傳播在該遮罩的最低有效位元至最高有效位元遍歷中找到的上一TRUE位元之元素索引,而產生v1中之位元組/字/雙字/四字元素索引。在立即值(immediate value)為0之情形下,在找到第一TRUE位元之前,只在v1中記錄位元位置。然後,針對在k2中觀測到的每一FALSE位元,將該上一TRUE位元之索引加到向量長度,且記錄結果。對於1的立即值而言,在k2中於對應於TRUE位元的位置上記錄之前,先將向量長度加到元素索引。在一實施例中,該指令之目標暫存器被用來作為用來排列來自兩個向量的元素的指令中之排列索引。
下文是用來說明本發明的一實施例之虛擬碼:
第8圖示出兩個特定例子。對於具有0的立即值之第一例子而言,在到了一TRUE位元之後的第一FALSE位元之前,都只在v1中記錄現行位元位置。對於在初始兩個TRUE位元之後的所有FALSE位元而言,將上一TRUE位元之索引加到向量長度,且記錄結果。因此,在位元位置4上,上一TRUE位元之索引(3)被加到向量長度(16),而得到19的輸出值;在位元位置6上,上一TRUE位元之索引(5)被加到向量長度(16),而得到 21的輸出值;如圖所示,在位元位置8-13上,上一TRUE位元之索引(7)被加到向量長度(16),而得到23的輸出值。
在設有1的立即值之例子中,對於輸入遮罩中之每一TRUE位元而言,輸出被設定成等於現行位元位置及向量長度之總和。例如,位元位置2之輸出被設定成等於2+16=18;位元位置3之輸出被設定成等於3+16=19;位元位置5之輸出被設定成等於5+16=21;位元位置7之輸出被設定成等於7+16=21;位元位置5之輸出被設定成等於5+16=21;位元位置14之輸出被設定成等於14+16=30;且位元位置15之輸出被設定成等於15+16=31。對於該輸入遮罩中在第一TRUE值之後的每一FALSE值而言,重複上一輸出值作為輸出。
上述之指令使編譯器能夠處置一有條件地計算值與在同一或後續疊代中可能用到該值間之迴圈承載相依性,或者在該值出現在該迴圈之外時能夠處置該相依性。
(2)vPropagateFalseIndex[BWDQ] v1,k2:該指令傳播在該遮罩的最低有效位元至最高有效位元遍歷中找到的上一FALSE位元之元素索引,而產生v1中之位元組/字/雙字/四字元素索引。將該值(VLEN-1)(其中VLEN是向量長度)傳播為該元素索引,直到遭遇第一FALSE位元為止。可將該指令之目標暫存器用來作為排列一向量的元素的指令中之一排列索引。
下文是用來說明本發明的一實施例之虛擬碼:
在第9圖提供的例子中,輸出VLEN-1之值(16-1=15),直到在位元位置2上遭遇第一FALSE位元為止,此時輸出現行位元位置之值。然後,輸出該輸入遮罩的上一FALSE位元的位元位置之值。
在一實施例中,該指令被用來跨越多個SIMD疊代而傳播一有條件地計算值。
(3)vPropagateShiftTrue[BWDQ] v1,k0:該指令以自元素0至元素VL-1之方式遍歷各向量遮罩元素(其中VL是向量長度),且將k0中之上一真值元素的元素位置記錄在v1中之下一對應的元素。在k0中看到第一真值位元之前,在v1之對應的下一元素中記錄VL。VL永遠被記錄在v1的第一元素中。在一實施例中,該指令之輸出用來作為排列來自兩個向量的元素的指令中之排列索引。
該指令使編譯器能夠處置一有條件地或無條件地計算值與在下一或一後續疊代中可能用到該值間之迴圈承載相 依性。一例示迴圈如下文所示:
在第10圖提供之例子中,在位元位置3之前,都記錄向量長度(16),而在該位元位置3及其後,輸出k0中之上一真值元素的元素位置之值(開始時的輸出值是對應於該輸入遮罩中之上一TRUE值的位元位置之2)。
本說明書所述的本發明之實施例可讓編譯器將含有並不主宰迴圈內之所有使用的(與迴圈索引變數有關的)一或多個純量定義之迴圈向量化,因而改善了效能。本發明藉由增加用來自述詞遮罩計算索引向量的新指令,而表示代表某些迴圈承載相依性的向量元素排列,因而使編譯器能夠將前文所述之該等迴圈等的迴圈向量化。因此,本發明之實施例具有顯著地改善某些應用程式及系統軟體的單一執行緒效能之潛力。
例示指令格式
可以不同的格式實施本說明書所述的該一或多個指令之實施例。此外,下文中將詳細說明一些例示系統、架構、及管線。可在此類系統、架構、及管線上執行該一或 多個指令之實施例,但是不限於所詳細說明的那些。
向量親和指令格式是一種適合向量指令之指令格式(例如,有向量運算特有的某些欄位)。雖然說明了以向量親和指令格式支援向量及純量運算的一些實施例,但是替代實施例只將向量運算用於向量親和指令格式。
第11A-11B圖是根據本發明的實施例的一種一般向量親和指令格式及其指令範本之方塊圖。第11A圖是根據本發明的實施例的一種一般向量親和指令格式及其類別A指令範本之方塊圖;而第11B圖是根據本發明的實施例的該一般向量親和指令格式及其類別B指令範本之方塊圖。具體而言,針對一種一般向量親和指令格式1100而界定了類別A及類別B指令範本,這兩種類別的指令範本都包括非記憶體存取1105指令範本以及記憶體存取1120指令範本。在該向量親和指令格式的情境中,術語"一般"參照到不限定於任何特定指令集之指令格式。
雖然將說明該向量親和指令格式支援下列規範的本發明之實施例:具有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位元組的向量運算元)。
第11A圖中之類別A指令範本包括:(1)在非記憶體存取1105指令範本內示出一非記憶體存取,全捨入控制類型操作1110指令範本、以及一非記憶體存取,資料轉換類型操作1115指令範本;以及在記憶體存取1120指令範本內示出一記憶體存取,暫存1125指令範本、以及一記憶體存取,非暫存1130指令範本。第11B圖中之類別B指令範本包括:(1)在非記憶體存取1105指令範本內示出一非記憶體存取,寫入遮罩控制,部分捨入控制類型操作1112指令範本及一非記憶體存取,寫入遮罩控制,vsize類型操作1117指令範本;以及在記憶體存取1120指令範本內示出一記憶體存取,寫入遮罩控制1127指令範本。
一般向量親和指令格式1100包括下文中按照第11A-11B圖所示順序列出之欄位。
格式欄位1140--該欄位中之一特定值(一指令格式識別碼值)唯一地識別該向量親和指令格式,且因而識別指 令流中之該向量親和指令格式的指令之出現。如此而言,該欄位是可供選擇採用的,這是因為其對於僅具有一般性向量親和指令格式之指令集是不需要的。
基底操作欄位1142--該欄位之內容區別不同的基底操作。
暫存器索引欄位1144--在來源及目標運算元是在暫存器或記憶體中之情形下,該欄位之內容直接指定或利用位址產生而指定來源及目標運算元之位置。其包括用來自一PxQ(例如,32x512、16x128、32x1024、64x1014)暫存器檔案選擇N個暫存器之足夠數目的位元。雖然在一實施例中,N可多達三個來源暫存器及一個目標暫存器,但是替代實施例可支援較多及較少的來源及目標暫存器(例如,可支援多達兩個來源暫存器,其中這些來源暫存器中之一來源暫存器也被用來作為目標暫存器;或者可支援三個來源暫存器,其中這些來源暫存器中之一來源暫存器也被用來作為目標暫存器;或者可支援兩個來源暫存器及一個目標暫存器)。
修飾符欄位1146--該欄位之內容區別指定記憶體存取的該向量親和指令格式的指令之出現與該指令之未出現;亦即,區別非記憶體存取1105指令範本與記憶體存取1120指令範本。記憶體存取操作讀取及/或寫入記憶體階層(在某些例子中,使用各暫存器中之值指定及/或目標位址),而非記憶體存取操作不讀取及/或寫入記憶體階層(例如,來源及目標是暫存器))。雖然在一實施例 中,該欄位也在三種不同的方式中選擇用來執行記憶體位址計算的方式,但是替代實施例可支援用來執行記憶體位址計算之較多、較少、或不同的方式。
擴充操作欄位1150--該欄位之內容區別除了基底操作之外將被執行的各種不同的操作中之一操作。該欄位與特定情境有關。在本發明的一實施例中,該欄位被分為一類別欄位1168、一α欄位1152、及一β欄位1154。擴充操作欄位1150可在單一指令中(而不是2、3、或4個指令中)執行共同組的操作。
標度欄位1160--該欄位之內容可針對記憶體位址產生(例如,針對使用2標度*索引+基底之位址產生)而縮放索引欄位的內容。
位移欄位1162A--該欄位之內容被用來作為記憶體位址產生(例如,針對使用2標度*索引+基底+位移之位址產生)的一部分。
位移因數欄位1162B(請注意,在位移因數欄位1162B之上的位移欄位1162A之此種並列指示使用了兩者中之一者)--該欄位之內容被用來作為記憶體位址產生的一部分;該欄位指定將被記憶體存取的大小(N)縮放的一位移因數,其中N是記憶體存取中之位元組數(例如,針對使用2標度*索引+基底+縮放位移之位址產生)。忽略冗餘的低階位元(low order bit),且因而將該位移因數欄位之內容乘以記憶體運算元之總大小(N),以便產生將被用於計算一有效位址之最後位移。處理器硬體於執 行時根據(本發明所述的)完整運算碼欄位1174及資料調處欄位1154C而決定N的值。位移欄位1162A及位移因數欄位1162B是可供選擇採用的,這是因為該等欄位不被用於非記憶體存取1105指令範本,且/或不同的實施例可以只實施該等兩個欄位中之一欄位,或者都不實施該等兩個欄位。
資料單元寬度欄位1164--該欄位之內容區別將要使用一些資料單元寬度中之哪一資料單元寬度(在某些實施例中,針對所有的指令;在其他實施例中,只針對某些指令)。該欄位是可供選擇採用的,這是因為如果只支援一種資料單元寬度,及/或使用運算碼的某些部分支援資料單元寬度,則不需要該欄位。
寫入遮罩欄位1170--該欄位之內容根據每一資料單元位置而控制目標向量運算元中資料單元位置是否反映基底操作及擴充操作的結果。類別A指令範本支援合併寫入遮罩,而類別B指令範本支援合併及歸零寫入遮罩。於合併時,向量遮罩可在執行(基底操作及擴充操作指定之)任何操作期間保護目標中之任何組的資料單元不會被更新;在其他實施例中,當對應的遮罩位元有一0值時,保留目標的每一資料單元之舊值。相比之下,在將向量遮罩歸零時,可在執行(基底操作及擴充操作指定之)任何操作期間將目標中之任何組的資料單元歸零;在一實施例中,當對應的遮罩位元有一0值時,目標的一資料單元被設定為0。該功能的一子集是控制被執行的操作的向量長度之能 力(亦即,以自第一資料單元至最後資料單元之方式修改資料單元的跨距);例如,不必然是被修改的該等資料單元是連續的。因此,寫入遮罩欄位1170可容許其中包括載入、儲存、算術、邏輯操作等的部分向量運算。雖然說明了寫入遮罩欄位1170之內容選擇含有將被使用的寫入遮罩的一些寫入遮罩暫存器中之一寫入遮罩暫存器(且因而寫入遮罩欄位1170之內容間接地識別將要被使用的遮罩)之本發明的實施例,但是替代實施例替代地或額外地可使寫入遮罩欄位1170之內容直接指定將要被執行的遮罩。
立即值欄位1172--該欄位之內容可指定一立即值。該欄位是可供選擇採用的,這是因為該欄位不存在於不支援立即值的一般向量親和格式之實施例,且不存在於不使用立即值之指令。
類別欄位1168--該欄位之內容區別不同的指令類別。請參閱第11A-B圖,該欄位之內容在類別A與類別B之間作出選擇。在第11A-B圖中,帶圓角的方塊被用來指示特定的值出現在一欄位中(例如,在第11A-B圖中之分別針對類別欄位1168之類別A 1168A及類別B 1168B)。
類別A之指令範本
在類別A的非記憶體存取1105指令範本之情形中,α欄位1152被解譯為一RS欄位1152A,該RS欄位1152A之內容區別將要執行不同的擴充操作類型中之一哪一類型 (例如,針對非記憶體存取,捨入類型操作1110及非記憶體存取,資料轉換類型操作1115指令範本而分別指定的捨入1152A.1及資料轉換1152A.2),而β欄位1154區別將要被執行的被指定類型的操作中之哪一操作。在非記憶體存取1105指令範本中,標度欄位1160、位移欄位1162A、及位移標度欄位1162B是不存在的。
非記憶體存取指令範本--全捨入控制類型操作
在非記憶體存取,全捨入控制類型操作1110指令範本中,β欄位1154被解譯為一捨入控制欄位1154A,該欄位之內容提供了靜態捨入。雖然在本發明所述之實施例中,捨入控制欄位1154A包括一抑制所有浮點異常(Suppress All floating point Exceptions;簡稱SAE)欄位1156及一捨入操作控制欄位1158,但是替代實施例可支援將這兩種概念編碼到相同的欄位,或者只有這兩種概念/欄位中之一種概念/欄位(例如,可以只有捨入操作控制欄位1158)。
SAE欄位1156--該欄位之內容區別是否要停用異常事件報告;當SAE欄位1156之內容指示抑制被啟用時,一特定指令不報告任何種類的浮點異常旗標,且不呼叫任何浮點異常處置器(exception handler)。
捨入操作控制欄位1158--該欄位之內容區別將要被執行的的一組捨入操作(例如,捨進(round-up)、捨去(round-down)、小數部分直接捨去(Round-towards- zero)、捨入至最接近數值(Round-to-nearest)中之哪一捨入操作。因此,捨入操作控制欄位1158可根據每一指令而改變捨入模式。在一處理器包含用來指定捨入模式的一控制暫存器之本發明的一實施例中,擴充操作欄位1158之內容置換該暫存器之值。
非記憶體存取指令範本--資料轉換類型操作
在非記憶體存取,資料轉換類型操作1115指令範本中,β欄位1154被解譯為一資料轉換欄位1154B,該欄位之內容區別將要被執行的一些資料轉換(例如,無資料轉換、拌和(swizzle)、廣播)中之哪一資料轉換。
在類別A的記憶體存取1120指令範本之情形中,α欄位1152被解譯為一逐出(eviction)提示欄位1152B,該欄位之內容區別將要被使用的逐出提示(在第11A圖中,分別針對記憶體存取,暫存1125指令範本及記憶體存取,非暫存1130指令範本而指定暫存1152B.1及非暫存1152B.2)中之哪一逐出提示,而β欄位1154被解譯為一資料調處欄位1154C,該欄位之內容區別將要被執行的資料調處操作(也被稱為基元(primitive))(例如,無調處、廣播、來源之上轉換(up conversion)、及目標之下轉換(down conversion))中之哪一資料調處操作。記憶體存取1120指令範本包括標度欄位1160,且在可供選擇採用之情形下包括位移欄位1162A或位移因數欄位1162B。
向量記憶體指令執行自記憶體載入向量及將向量儲存到記憶體,且具有轉換支援。如同一般的向量指令,向量記憶體指令以一種資料單元之方式轉移資料進/出記憶體,其中係由被選擇為寫入遮罩之向量遮罩的內容支配被實際轉移的資料單元。
記憶體存取指令範本--暫存
暫存資料是可能很快將被重複使用而足以受益於快取的資料。亦即,然而,不同的處理器可以不同的方式實施提示,其中包括完全忽略提示。
記憶體存取指令範本--非暫存
非暫存資料是不可能很快將被重複使用而足以受益於第一階快取記憶體中之快取且應優先被逐出的資料。亦即,然而,不同的處理器可以不同的方式實施提示,其中包括完全忽略提示。
類別B的指令範本
在類別B的指令範本之情形中,α欄位1152被解譯為一寫入遮罩控制(Z)欄位1152C,該欄位之內容區別寫入遮罩欄位1170控制之寫入遮罩應是合併或歸零。
在類別B的非記憶體存取1105指令範本之情形中,β欄位1154的一部分被解譯為一RL欄位1157A,該欄位之內容區別將要被執行的不同的擴充操作(例如,分別針對 非記憶體存取,寫入遮罩控制,部分捨入控制類型操作1112指令範本及非記憶體存取,寫入遮罩控制,VSIZE類型操作1117指令範本而指定的捨入1157A.1及向量長度(VSIZE)1157A.2)中之哪一擴充操作,而β欄位1154的其餘部分區別將要被執行的所指定類型的操作中之哪一操作。在非記憶體存取1105指令範本中,沒有標度欄位1160、位移欄位1162A、及位移因數欄位1162B。
在非記憶體存取,寫入遮罩控制,部分捨入控制類型操作1112指令範本中,β欄位1154之其餘部分被解譯為一捨入操作欄位1159A,且異常事件報告被停用(特定指令不報告任何種類的浮點異常旗標,且不呼叫任何浮點異常處置器)。
捨入操作控制欄位1159A--該欄位之內容如同捨入操作控制欄位1158區別將要被執行的的一組捨入操作(例如,捨進、捨去、小數部分直接捨去、捨入至最接近數值中之哪一捨入操作。因此,捨入操作控制欄位1159A可根據每一指令而改變捨入模式。在一處理器包含用來指定捨入模式的一控制暫存器之本發明的一實施例中,擴充操作控制欄位1159A之內容置換該暫存器之值。
在非記憶體存取,寫入遮罩控制,VSIZE類型操作1117指令範本中,β欄位1154之其餘部分被解譯為一向量長度欄位1159B,該欄位之內容區別將要被執行的一些資料向量長度(例如,128、256、或512位元組)中之哪一資料向量長度。
在類別B的記憶體存取1120指令範本之情形中,β欄位1154的一部分被解譯為一廣播欄位1157B,該欄位之內容區別是否將要執行廣播類型的資料調處操作,而β欄位1154的其餘部分被解譯為向量長度欄位1159B。記憶體存取1120指令範本包括標度欄位1160,且在可供選擇採用之情形下包括位移欄位1162A或位移因數欄位1162B。
關於一般向量親和指令格式1100,示出了其中包括格式欄位1140、基底操作欄位1142、及資料單元寬度欄位1164之一完整運算碼欄位1174。雖然示出了完整運算碼欄位1174包括所有這些欄位的一實施例,但是在不支援所有這些欄位之實施例中,完整運算碼欄位1174包括少於所有這些欄位之欄位。完整運算碼欄位1174提供了運算碼(opcode)。
擴充操作欄位1150、資料單元寬度欄位1164、及寫入遮罩欄位1170可根據每一指令而在該一般向量親和指令格式中指定這些特徵。
寫入遮罩欄位及資料單元寬度欄位之組合產生了類型的指令,這是因為該等指令可根據不同的資料單元寬度而應用該遮罩。
類別A及類別B內包含的該等各種指令範本在不同的情況中是有利的。在本發明的某些實施例中,不同的處理器或一處理器內之不同的核心可支援只有類別A、只有類別B、或兩種類別。例如,適用於一般用途計算的一高效 能一般用途亂序執行核心可支援只有類別B,主要適用於圖形及/或科學(執行率)計算的一核心可支援只有類別A,且適用於以上兩種計算的一核心可支援兩種類別(當然,具有來自兩種類別的範本及指令之某一混合但是不具有來自兩種類別的所有範本及指令之核心是在本發明的範圍內)。此外,單一處理器可包括多個核心,且所有該等核心都支援相同的類別,或者該等核心中之不同的核心支援不同的類別。例如,在具有獨立的圖形及一般用途核心之一處理器中,主要適用於圖形及/或科學計算的該等圖形核心中之一圖形核心可支援只有類別A,而該等一般用途核心中之一或多個一般用途核心可以是具有主要適用於一般用途計算的亂序執行及暫存器重命名且支援只有類別B之高效能一般用途核心。沒有獨立的圖形核心之另一處理器可包括支援類別A及類別B的一或多個一般用途循序執行或亂序執行核心。當然,在本發明的不同實施例中,亦可在另一類別中實施來自一類別的特徵。以一種高階語言撰寫的程式將被放進(例如,將被及時編譯(just in time compiled)或將被靜態地編譯成)各種不同的可執行形式,該等形式包括:(1)只具有目標處理器支援執行的一或多種類別的指令之形式;或(2)具有使用所有類別的指令的不同組合撰寫的一些替代常式且具有可根據目前正在執行程式碼的處理器所支援之指令而選擇將要被執行的常式的控制流程碼之形式。
第12A-D圖是根據本發明的實施例的一例示之特定向 量親和指令格式之方塊圖。第12圖示出一特定向量親和指令格式1200,該指令格式是特定的,這是因為該指令格式指定各欄位的位置、大小、解譯、及順序,且指定這些欄位中之某些欄位的值。特定向量親和指令格式1200可被用來延伸x86指令集,且因而該等欄位中之某些欄位係類似於或相同於現有的x86指令集及其延伸集(例如,AVX)中使用的那些欄位。該格式保持與現有x86指令集及延伸集的前置編碼欄位、實際運算碼位元組欄位、MOD R/M欄位、SIB欄位、位移欄位、及立即值欄位間之一致。示出了自第11圖映射到第12圖的欄位。
我們應可了解:雖然在一般向量親和指令格式1100之情境下為了解說而參照特定向量親和指令格式1200說明本發明的一些實施例,但是除了申請專利範圍所述之外,本發明不限於特定向量親和指令格式1200。例如,一般向量親和指令格式1100考慮到各欄位的各種可能的大小,但是特定向量親和指令格式1200被示出為具有特定大小的欄位。舉特定的例子而言,雖然在特定向量親和指令格式1200中,資料單元寬度欄位1164被示出為一位元的欄位,但是本發明不限於此(亦即,一般向量親和指令格式1100考慮到資料單元寬度欄位1164的其他踏小)。
一般向量親和指令格式1100包括按照第12A圖所示的順序列出的下列各欄位。
EVEX前置碼(位元組0-3)1202--被以日位元組的形式編碼。
格式欄位1140(EVEX位元組0,位元[7:0])--第一位元組(EVEX位元組0)是格式欄位1140,且其含有0x61(在一實施例中,為被用來區別該向量親和指令格式之唯一值)。
第二至第四位元組(EVEX位元組1-3)包括用來提供特定能力之一些位元。
REX欄位1205(EVEX位元組1,位元[7:5])--包含一EVEX.R位元欄位(EVEX位元組1,位元[7]-R)、EVEX.X位元欄位(EVEX位元組1,位元[6]-X)、以及EVEX.B位元欄位(EVEX位元組1,位元[5]-B)。該等EVEX.R、EVEX.X、及EVEX.B欄位提供了與對應的VEX位元欄位相同的功能,且使用1的補數形式將該等位元欄位編碼,亦即,ZMM0被編碼為111B,ZMM15被編碼為000B。該等指令的其他指令以此項技術中習知的方式將暫存器索引的三個較低階位元(rrr、xxx、及bbb),因而可加上EVEX.R、EVEX.X、及EVEX.B而形成Rrrr、Xxxx、及Bbbb。
REX'欄位1110--這是REX'欄位1110的第一部分,且是將延伸32暫存器集的較高16或較低16暫存器編碼之EVEX.R'位元欄位(EVEX位元組1,位元[4]-R')。在本發明的一實施例中,以位元反置格式(bit inverted format)儲存該位元以及下文所示的其他位元,以便與BOUND指令區別(在習知的x86 32位元模式中),該BOUND指令的實際運算碼位元組是62,但是在(下文所 述的)MOD-R/M欄位中不接受MOD欄位中之值11;本發明之替代實施例不以反置格式儲存該位元以及下文所示的其他位元。值1被用來將較低16個暫存器編碼。換言之,合併EVEX.R'、EVEX.R、及來自其他欄位之其他RRR,而形成R'Rrrr。
運算碼映射欄位1215(EVEX位元組1,位元[3:0]-mmmm)--該欄位之內容將一隱含前導運算碼位元組(0F,0F 38,或0F 3)編碼。
資料單元寬度欄位1164(EVEX位元組2,位元[7]-W)--由記法EVEX.W表示該欄位。EVEX.W被用來界定資料類型(32位元資料單元或64位元資料單元)之粒度(大小)。
EVEX.vvvv 1220(EVEX位元組2,位元[6:3]-vvvv)--EVEX.vvvv之功能可包括下列各項:(1)EVEX.vvvv將以反置(1的補數)形式指定的第一來源暫存器運算元編碼,且EVEX.vvvv對具有兩個或更多個來源運算元的指令是有效的;(2)EVEX.vvvv針對某些向量移位而將以1的補數形式指定的目標暫存器運算元編碼;或(3)EVEX.vvvv不將任何運算元編碼,該欄位被保留,且應含有111b。因此,EVEX.vvvv欄位1220將以反置(1的補數)形式儲存的第一來源暫存器說明符的4個低階位元編碼。視指令而定,一額外的不同之EVEX位元欄位被用來將該說明符大小延伸到32個暫存器。
EVEX.U 1168類別欄位(EVEX位元組2,位元[2]- U)--如果EVEX.U=0,則將指示類別A或EVEX.U0;如果EVEX.U=1,則將指示類別B或EVEX.U1。
前置編碼欄位1225(EVEX位元組2,位元[1:0]-pp)--將額外的位元提供給基底操作欄位。除了以EVEX前置碼格式對傳統SSE指令提供支援之外,該欄位也有緊縮SIMD前置碼的好處(不需要用一個位元組表示SIMD前置碼,EVEX前置碼只需要2個位元)。在一實施例中,為了以傳統格式EVEX前置碼格式及支援使用SIMD前置碼(66H、F2H、F3H)的傳統SSE指令,這些傳統SIMD前置碼被編碼到該SIMD前置編碼欄位;且於執行時先被擴展成傳統SIMD前置碼,然後才被提供給解碼器的PLA(因而該PLA可在無須修改之情形下執行這些傳統指令的傳統及EVEX格式)。雖然較新的指令可將該EVEX前置編碼欄位的內容直接用來作為一運算元延伸,但是某些實施例為了一致性而以類似的方式擴展,且容許這些傳統SIMD前置碼指定不同的意義。一替代實施例可將該PLA重新設計成支援2位元的SIMD前置編碼,因而不需要該擴展。
α欄位1152(EVEX位元組3,位元[7]-EH;也被稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫入遮罩控制、及EVEX.N;也被以α示出)--如前文所述,該欄位是與特定情境有關。
β欄位1154(EVEX位元組3,位元[6:4]-SSS;也被稱為EVEX.s2-0、EVEX.r2-0、EVEX.rrl、EVEX.LL0、 EVEX.LLB;也被以βββ示出)--如前文所述,該欄位是與特定情境有關。
REX'欄位1110--該欄位是REX'欄位的其餘部分,且是可被用來將該該延伸32暫存器集的較高的16個或較低的16個暫存器編碼之EVEX.V'位元欄位(EVEX位元組3,位元[3]-V')。以反置格式儲存該位元。值1被用來將較低的16個暫存器編碼。換言之,合併EVEX.V'、EVEX.vvvv,而形成V'VVVV。
寫入遮罩欄位1170(EVEX位元組3,位元[2:0]-kkk)--該欄位之內容指定前文所述的該等寫入遮罩暫存器中一暫存器的索引。在本發明的一實施例中,特定值EVEX.kkk具有隱含沒有任何寫入遮罩被用於該特定指令之特殊行為(可以其中包括使用被固線到所有者的一寫入遮罩或使用跳過遮罩硬體的硬體之各種方式實施該特殊行為)。
實際運算碼欄位1230(位元組4)--也被稱為運算碼位元組。在該欄位中指定運算碼的一部分。
MOD R/M欄位1240(位元組5)--包括MOD欄位1242、Reg欄位1244、及R/M欄位1246。如前文所述,MOD欄位1242之內容區別記憶體存取及非記憶體存取操作。可將Reg欄位1244之功能總結為兩種情況:將目標暫存器運算元或一來源暫存器運算元編碼;或被視為一運算碼延伸,且不被用來將任何指令運算元編碼。R/M欄位1246之功能可包括下列各項:將參照記憶體位址的指令運 算元編碼;或將目標暫存器運算元或一來源暫存器運算元編碼。
標度、索引、基底(Scale,Index,Base;簡稱SIB)位元組欄位1250(位元組6)--如前文所述,標度欄位1150之內容被用於記憶體位址產生。SIB.xxx欄位1254及SIB.bbb欄位1256--這些欄位之內容先前被參照到與暫存器索引Xxxx及Bbbb有關。
位移欄位1162A(位元組7-10)--當MOD欄位1242含有10時,位元組7-10是位移欄位1162A,且該位移欄位以與傳統32位元位移相同之方式運作,且係在位元組粒度下運作。
位移因數欄位1162B(位元組7)--當MOD欄位1242含有01時,位元組7是位移因數欄位1162B。該欄位之位置與傳統x86指令集8位元位移(disp8)之位置相同,且該欄位係在位元組粒度下運作。因為disp8是正負號延伸式(sign extended),所以只能定址到-128或127位元組偏移量之間;就64位元組快取列而論,disp8使用可被設定成只有四個實際使用值-128、-64、0、及64之8位元;因為通常需要較大的範圍,所以使用disp32;然而,disp32需要4位元組。與disp8及disp32對比之下,位移因數欄位1162B是disp8的一重新解釋;在使用位移因數欄位1162B時,由位移因數欄位乘以記憶體運算元存取大小(N)之內容決定實際的位移。此種類型的位移被稱為disp8*N。此種方式減少了平均指令長度(被用於位移的 單一位元組,但是具有大許多的範圍)。此種壓縮式位移係基於有效位移是記憶體存取粒度的倍數之假定,且因而不需要將位址偏移量的冗餘低階位元編碼。換言之,位移因數欄位1162B取代了傳統x86指令集的8位元位移。因此,以與x86指令集的8位元位移相同之方式將位移因數欄位1162B編碼(因此,編碼規則中之ModRM/SIB沒有改變),但是唯一例外之處在於將disp8過載到disp8*N。換言之,編碼規則或編碼長度沒有改變,而是改變只有在以硬體解譯位移值時(此時需要以記憶體運算元的大小縮放位移,以便得到一位元組寬度(byte-wise)的位址偏移量)。
立即值欄位1172以前文所述之方式操作。
完整運算碼欄位
第12B圖是根據本發明的一實施例的特定向量親和指令格式1200中構成完整運算碼欄位1174的該等欄位之一方塊圖。具體而言,完整運算碼欄位1174包括格式欄位1140、基底操作欄位1142、及資料單元寬度(W)欄位1164。基底操作欄位1142包括前置編碼欄位1225、運算碼映射欄位1215、及實際運算碼欄位1230。
暫存器索引欄位
第12C圖是根據本發明的一實施例的特定向量親和指令格式1200中構成暫存器索引欄位1144的該等欄位之一 方塊圖。具體而言,暫存器索引欄位1144包括REX欄位1205、REX'欄位1210、MODR/M.reg欄位1244、MODR/M.r/m欄位1246、VVVV欄位1220、xxx欄位1254、及bbb欄位1256。
擴充操作欄位
第12D圖是根據本發明的一實施例的特定向量親和指令格式1200中構成擴充操作欄位1150的該等欄位之一方塊圖。當類別(U)欄位1168含有0時,表示了EVEX.U0(類別A 1168A);當該欄位含有1時,表示了EVEX.U1(類別B 1168B)。當U=0且MOD欄位1242含有1時(表示非記憶體存取操作),α欄位1152(EVEX位元組3,位元[7]-EH)被解譯為rs欄位1152A。當rs欄位1152A含有1時(捨入1152A.1),β欄位1154(EVEX位元組3,位元[6:4]-SSS)被解譯為捨入控制欄位1154A。捨入控制欄位1154A包括一個一位元SAE欄位1156及一個二位元捨入操作欄位1158。當rs欄位1152A含有0時(資料轉換1152A.2),β欄位1154(EVEX位元組3,位元[6:4]-SSS)被解譯為一個三位元資料轉換欄位1154B。當U=0且MOD欄位1242含有00、01、或10時(表示記憶體存取操作),α欄位1152(EVEX位元組3,位元[7]-EH)被解譯為逐出提示(EH)欄位1152B,且β欄位1154(EVEX位元組3,位元[6:4]-SSS)被解譯為一個三位元資料調處欄位1154C。
當U=1時,α欄位1152(EVEX位元組3,位元[7]-EH)被解譯為寫入遮罩控制(Z)欄位1152C。當U=1且MOD欄位1242含有11時(表示非記憶體存取操作),部分的β欄位1154(EVEX位元組3,位元[4]-S0)被解譯為RL欄位1157A;當RL欄位1157A含有1時(捨入1157A.1),β欄位1154的其餘部分(EVEX位元組3,位元[6-5]-S2-1)被解譯為捨入操作欄位1159A,而當RL欄位1157A含有0時(VSIZE 1157A.2),β欄位1154的其餘部分(EVEX位元組3,位元[6-5]-S2-1)被解譯為向量長度欄位1159B(EVEX位元組3,位元[6-5]-L1-0)。當U=1且MOD欄位1242含有00、01、或10時(表示記憶體存取操作),β欄位1154(EVEX位元組3,位元[6:4]-SSS)被解譯為向量長度欄位1159B(EVEX位元組3,位元[6-5]-L1-0)及廣播欄位1157B(EVEX位元組3,位元[4]-B)。
第13圖是根據本發明的一實施例的一暫存器架構1300之一方塊圖。在所示之實施例中,有32個寬度為512位元之向量暫存器1310;這些暫存器的參考編號為zmm0至zmm31。在暫存器ymm0-15上覆蓋了較低16個zmm暫存器的較低階256位元。在暫存器xmm0-15上覆蓋了較低16個zmm暫存器的較低階128位元(該等暫存器yym的較低階128位元)。如下表所示,特定向量親和指令格式1200對這些重疊的暫存器檔案操作。
換言之,向量長度欄位1159B在一最大長度以及一或多個其他較短長度中作出選擇,其中每一此種較短長度是前一長度的一半長度;且不包括向量長度欄位1159B之指令範本在該最大向量長度上操作。此外,在一實施例中,特定向量親和指令格式1200的類別B指令範本對緊縮或純量單/雙精確度浮點資料以及緊縮或純量整數資料操作。純量操作是對zmm/ymm/xmm暫存器中之較低階資料單元執行的操作;視實施例而定,較高階資料單元位置保持與其在該指令之前的狀況相同,或者被歸零。
寫入遮罩暫存器1315--在所示之實施例中,有8個寫入遮罩暫存器(k0至k7),每一寫入遮罩暫存器的大小是64位元。在一替代實施例中,寫入遮罩暫存器1315的大小是16位元。如前文所述,在本發明的一實施例中,不可將向量遮罩暫存器k0用來作為一寫入遮罩;當通常將指示k0的編碼用於一寫入遮罩時,該編碼選擇0xFFFF 的一固線式寫入遮罩,而有效地停用該指令之寫入遮罩。
一般用途暫存器1325--在所示之實施例中,有16個64位元一般用途暫存器,係連同現有的x86定址模式而將該等一般用途暫存器用來定址到記憶體運算元。這些暫存器的參考名稱為RAX、RBX、RCX、RDX、RBP、RSI、RDP、RSP、以及R8至R15。
純量浮點堆疊暫存器檔案(x87堆疊)1345以及將該暫存器檔案假名後的MMX緊縮整數平面暫存器檔案1350--在所示之實施例中,該x87堆疊是被用來使用x87指令集延伸而對32/64/80位元浮點資料執行純量浮點運算之八資料單元堆疊;而該等MMX暫存器被用來對64位元緊縮整數資料執行操作,且被用來為在MMX與XMM暫存器之間執行的某些操作存放運算元。
本發明之替代實施例可使用較寬或較窄的暫存器。此外,本發明之替代實施例可使用較多、較少、或不同的暫存器檔案及暫存器。
第14A-B圖示出一更特定的例示循序執行核心架構之一方塊圖,該核心將是一晶片中之數個邏輯方塊(其中包括相同類型的及/或不同類型的其他核心)中之一邏輯方塊。視應用而定,該等邏輯方塊經由一高頻寬互連網路(例如,一環狀網路)而與某些固定功能邏輯、記憶體I/O介面、及其他必要的I/O邏輯通訊。
第14A圖是根據本發明的實施例的一單一處理器核心以及其至晶片內互連網路1402之連接及其第2階(L2) 快取記憶體之本地子集1404之一方塊圖。在一實施例中,一指令解碼器1400支援支援具有緊縮資料指令集延伸之x86指令集。一L1快取記憶體1406可容許將快取記憶體的內容低延遲地存取到純量及向量單元。雖然在一實施例中(為了簡化設計),一純量單元1408及一向量單元1410使用個別的暫存器集(分別為純量暫存器1412及向量暫存器1414,且在該等暫存器之間轉移的資料被寫到記憶體,然後自第一階(L1)快取記憶體1406讀回,但是本發明之替代實施例可使用一種不同的方法(例如,使用單一暫存器集,或包含可在無須被寫入及讀回之情形下在兩個暫存器檔案之間轉移資料之一通訊路徑)。
L2快取記憶體之本地子集1404是一總體L2快取記憶體的一部分,其中該總體L2快取記憶體被分成一些個別的本地子集,且每一處理器有一本地子集。每一處理器核心具有L2快取記憶體之其自己的本地子集1404之一直接存取路徑。一處理器核心讀取的資料被儲存在其L2快取記憶體子集1404,且可以與其他處理器核心存取其自己的L2快取記憶體本地子集平行之方式迅速地存取該資料。一處理器核心寫入之資料被儲存在其自己的L2快取記憶體子集1404,且於必要時自其他子集清除該資料。該環狀網路保證被共用的資料之一致性。該環狀網路是雙向的,而可讓諸如處理器核心、L2快取記憶體、及其他邏輯方塊等的代理單元在該晶片內相互通訊。每一環狀資料路徑在每一方向的寬度是1012位元。
第14B圖是根據本發明的一實施例的第14A圖中之處理器核心的一部分之一放大圖。第14B圖包含L1快取記憶體1406的一L1資料快取記憶體1406A部分、以及與向量單元1410及向量暫存器1414有關的更多細節。具體而言,向量單元710是一16倍寬向量處理單元(Vector Processing Unit;簡稱VPU)(請參閱16倍寬ALU 1428),該16倍寬VPU執行整數、單精準度浮點、及雙精確度浮點指令中之一或多個指令。該VPU以拌和單元1420支援對暫存器輸入的拌和,以數值轉換單元1422A-B支援數值轉換,且以複製單1424支援記憶體輸入的複製。寫入遮罩暫存器1426可斷定所導致的向量寫入。
100‧‧‧處理器管線
102‧‧‧提取階段
104‧‧‧長度解碼階段
106‧‧‧解碼階段
108‧‧‧分配階段
110‧‧‧重命名階段
112‧‧‧排程階段
114‧‧‧暫存器讀取/記憶體讀取階段
116‧‧‧執行階段
118‧‧‧寫回/記憶體寫入階段
122‧‧‧異常處置階段
124‧‧‧提交階段
130‧‧‧前端單元
150‧‧‧執行引擎單元
170‧‧‧記憶體單元
190‧‧‧處理器核心
132‧‧‧分支預測單元
134‧‧‧指令快取記憶體單元
136‧‧‧指令轉譯後備緩衝區
138‧‧‧指令提取單元
140‧‧‧解碼單元
152‧‧‧重命名/分配器單元
154‧‧‧指令引退單元
156‧‧‧排程器單元
158‧‧‧實體暫存器檔案單元
160‧‧‧執行叢集
162‧‧‧執行單元
164‧‧‧記憶體存取單元
172‧‧‧資料轉譯後備緩衝區單元
174‧‧‧資料快取記憶體單元
176‧‧‧第2階快取記憶體單元
200,310,315,415,470,480‧‧‧處理器
202A~N‧‧‧核心
210‧‧‧系統代理單元
216‧‧‧匯流排控制器單元
214,472,482‧‧‧整合式記憶體控制器單元
208‧‧‧特殊用途邏輯
206‧‧‧共用快取記憶體單元
212‧‧‧環狀互連單元
300,400,500‧‧‧系統
320‧‧‧控制中心
390‧‧‧圖形及記憶體控制中心
350‧‧‧輸入/輸出控制中心
340,432,434‧‧‧記憶體
345,438,620‧‧‧共處理器
360‧‧‧輸入/輸出裝置
395‧‧‧連接
450‧‧‧點對點互連
476,478,486,488,494,498‧‧‧點對點介面電路
452,454‧‧‧點對點介面
490‧‧‧晶片組
439‧‧‧高效能介面
496‧‧‧介面
416‧‧‧第一匯流排
414,514‧‧‧輸入/輸出裝置
418‧‧‧匯流排橋接器
420‧‧‧第二匯流排
422‧‧‧鍵盤及/或滑鼠
427‧‧‧通訊裝置
430‧‧‧程式碼及資料
428‧‧‧儲存單元
424‧‧‧音訊輸入/輸出
472,482‧‧‧控制邏輯
515‧‧‧傳統I/O裝置
600‧‧‧系統單晶片
602‧‧‧互連單元
610‧‧‧應用處理器
630‧‧‧靜態機存取記憶體單元
632‧‧‧直接記憶體存取單元
640‧‧‧顯示單元
702‧‧‧高階語言
704‧‧‧x86編譯器
714‧‧‧不具有x86指令集核心之處理器
716‧‧‧具有至少一x86指令集核心之處理器
706‧‧‧x86二進制碼
708‧‧‧替代指令集編譯器
710‧‧‧替代指令集二進制碼
712‧‧‧指令轉換器
1100‧‧‧一般向量親和指令格式
1105‧‧‧非記憶體存取
1120‧‧‧記憶體存取
1110‧‧‧非記憶體存取,全捨入控制類型操作
1115‧‧‧非記憶體存取,資料轉換類型操作
1125‧‧‧記憶體存取,暫存
1130‧‧‧記憶體存取,非暫存
1112‧‧‧非記憶體存取,寫入遮罩控制,部分捨入控制類型操作
1117‧‧‧非記憶體存取,寫入遮罩控制,vsize類型操作
1127‧‧‧記憶體存取,寫入遮罩控制
1140‧‧‧格式欄位
1142‧‧‧基底操作欄位
1144‧‧‧暫存器索引欄位
1146‧‧‧修飾符欄位
1150‧‧‧擴充操作欄位
1168‧‧‧類別欄位
1152‧‧‧α欄位
1154‧‧‧β欄位
1160‧‧‧標度欄位
1162A‧‧‧位移欄位
1162B‧‧‧位移因數欄位
1174‧‧‧完整運算碼欄位
1154C‧‧‧資料調處欄位
1164‧‧‧資料單元寬度欄位
1170‧‧‧寫入遮罩欄位
1172‧‧‧立即值欄位
1168A‧‧‧類別A
1168B‧‧‧類別B
1152A‧‧‧RS欄位
1152A.1,1157A.1‧‧‧捨入
1152A.2‧‧‧資料轉換
1154A‧‧‧捨入控制欄位
1156‧‧‧抑制所有浮點異常欄位
1158‧‧‧捨入操作控制欄位
1154B‧‧‧資料轉換欄位
1152B.1‧‧‧暫存
1152B.2‧‧‧非暫存
1152C‧‧‧寫入遮罩控制欄位
1157A‧‧‧RL欄位
1157A.2‧‧‧向量長度
1159A‧‧‧捨入操作欄位
1159B‧‧‧向量長度欄位
1157B‧‧‧廣播欄位
1200‧‧‧特定向量親和指令格式
1202‧‧‧EVEX前置碼
1205‧‧‧REX欄位
1215‧‧‧運算碼映射欄位
1220‧‧‧EVEX.vvvv欄位
1225‧‧‧前置編碼欄位
1230‧‧‧實際運算碼欄位
1240‧‧‧MOD R/M欄位
1242‧‧‧MOD欄位
1244‧‧‧Reg欄位
1246‧‧‧R/M欄位
1250‧‧‧標度、索引、基底位元組欄位
1254‧‧‧SIB.xxx欄位
1256‧‧‧SIB.bbb欄位
1210‧‧‧REX'欄位
1300‧‧‧暫存器架構
1310,1414‧‧‧向量暫存器
1315,1426‧‧‧寫入遮罩暫存器
1325‧‧‧一般用途暫存器
1345‧‧‧純量浮點堆疊暫存器檔案
1350‧‧‧MMX緊縮整數平面暫存器檔案
1402‧‧‧晶片內互連網路
1404‧‧‧第2階快取記憶體之本地子集
1400‧‧‧指令解碼器
1406‧‧‧第1階快取記憶體
1408‧‧‧純量單元
1410‧‧‧向量單元
1412‧‧‧純量暫存器
1406A‧‧‧第1階資料快取記憶體
1428‧‧‧16倍寬算術邏輯單元
1420‧‧‧拌和單元
1422A-B‧‧‧數值轉換單元
1424‧‧‧複製單元
前文之說明及各附圖被用來藉說本發明之實施例。在該等圖式中:第1A圖是根據本發明的一實施例的一例示循序管線及一例示暫存器重命名亂序發出/執行管線之一方塊圖;第1B圖是將被包含在根據本發明的實施例的一處理器之一循序架構核心實施例及一例示暫存器重命名亂序發出/執行架構核心之一方塊圖;第2圖是根據本發明的實施例而具有整合式記憶體控制器及圖形的一單核心處理器及一多核心處理器一方塊圖;第3圖示出根據本發明的一實施例的一系統之一方塊 圖;第4圖示出根據本發明的一實施例的一第二系統之一方塊圖;第5圖示出根據本發明的一實施例的一第三系統之一方塊圖;第6圖示出根據本發明的一實施例的一系統單晶片(SoC)之一方塊圖;第7圖示出根據本發明的實施例而使用一軟體指令轉換器將一來源指令集中之二進制指令轉換為一目標指令集中之二進制指令的一對照方塊圖;第8-10圖示出有條件地傳播單一指令多重資料(SIMD)/向量操作中之評估值的本發明的一實施例的操作之一特定例子;第11A-11B圖是根據本發明的實施例的一種一般向量親和指令格式及其指令範本之方塊圖;第12A-D圖是根據本發明的實施例的一例示之特定向量親和指令格式之方塊圖;第13圖是根據本發明的一實施例的一暫存器架構之一方塊圖;第14A圖是根據本發明的實施例的一單一處理器核心以及其至晶片內互連網路之連接及其第2階(L2)快取記憶體之本地子集之一方塊圖;以及第14B圖是根據本發明的一實施例的第14A圖中之處理器核心的一部分之一放大圖。
100‧‧‧處理器管線
102‧‧‧提取階段
104‧‧‧長度解碼階段
106‧‧‧解碼階段
108‧‧‧分配階段
110‧‧‧重命名階段
112‧‧‧排程階段
114‧‧‧暫存器讀取/記憶體讀取階段
116‧‧‧執行階段
118‧‧‧寫回/記憶體寫入階段
122‧‧‧異常處置階段
124‧‧‧提交階段
130‧‧‧前端單元
132‧‧‧分支預測單元
134‧‧‧指令快取記憶體單元
136‧‧‧指令轉譯後備緩衝區
138‧‧‧指令提取單元
140‧‧‧解碼單元
190‧‧‧處理器核心
150‧‧‧執行引擎單元
152‧‧‧重命名/分配器單元
154‧‧‧指令引退單元
156‧‧‧排程器單元
158‧‧‧實體暫存器檔案單元
160‧‧‧執行叢集
162‧‧‧執行單元
164‧‧‧記憶體存取單元
170‧‧‧記憶體單元
172‧‧‧資料轉譯後備緩衝區單元
174‧‧‧資料快取記憶體單元
176‧‧‧第2階快取記憶體單元

Claims (33)

  1. 一種有條件地傳播評估值之方法,包含下列操作:讀取一輸入遮罩暫存器中所含的每一值,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對自該輸入遮罩暫存器讀取的每一真值,產生其中包含該真值的位元位置之一第一結果;針對在該第一真值之後自該輸入遮罩暫存器讀取的每一假值,將該輸入遮罩暫存器之向量長度加到自該輸入遮罩暫存器讀取的上一真值之位元位置,而產生一第二結果;以及將該等第一結果及第二結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
  2. 如申請專利範圍第1項之方法,進一步包含下列操作:針對在該第一真值之前自該輸入遮罩暫存器讀取的每一假值,產生其中包含該假值的位元位置之一第三結果;以及將該等第三結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
  3. 如申請專利範圍第1項之方法,進一步包含下列操作:讀取一立即值,且只有在該立即值被設定為一第一值 時才執行該等操作。
  4. 如申請專利範圍第3項之方法,其中如果該立即值並未被設定為該第一值,則執行一第二組的操作。
  5. 如申請專利範圍第4項之方法,其中該第二組的操作包含:讀取該輸入遮罩暫存器中所含的每一值,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對自該輸入遮罩暫存器讀取的每一真值,產生其中包含該真值的位元位置被加到該向量長度之一第三結果;以及將該等第三結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
  6. 如申請專利範圍第5項之方法,進一步包含下列操作:針對在該第一真值之後自該輸入遮罩暫存器讀取的每一假值,將該等第三結果中之每一結果儲存在該輸出暫存器。
  7. 如申請專利範圍第6項之方法,進一步包含下列操作:針對在該第一真值之前自該輸入遮罩暫存器讀取的每一假值,將自該輸入遮罩暫存器讀取的該假值之位元位置儲存在該輸出暫存器中之該輸出暫存器之對應的位元位置。
  8. 一種處理器,該處理器執行一或多個指令而執行下列操作:讀取一輸入遮罩暫存器中所含的每一值,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對自該輸入遮罩暫存器讀取的每一真值,產生其中包含該真值的位元位置之一第一結果;針對在該第一真值之後自該輸入遮罩暫存器讀取的每一假值,將該輸入遮罩暫存器之向量長度加到自該輸入遮罩暫存器讀取的上一真值之位元位置,而產生一第二結果;以及將該等第一結果及第二結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
  9. 如申請專利範圍第8項之處理器,該處理器執行該一或多個指令而執行下列額外的操作:針對在該第一真值之前自該輸入遮罩暫存器讀取的每一假值,產生其中包含該假值的位元位置之一第三結果;以及將該等第三結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
  10. 如申請專利範圍第8項之處理器,該處理器執行該一或多個指令而執行下列額外的操作:讀取一立即值,且只有在該立即值被設定為一第一值 時才執行該等操作。
  11. 如申請專利範圍第10項之處理器,其中如果該立即值並未被設定為該第一值,則該處理器將執行一第二組的操作。
  12. 如申請專利範圍第11項之處理器,其中該第二組的操作包含:讀取該輸入遮罩暫存器中所含的每一值,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對自該輸入遮罩暫存器讀取的每一真值,產生其中包含該真值的位元位置被加到該向量長度之一第三結果;以及將該等第三結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
  13. 如申請專利範圍第12項之處理器,該處理器執行該一或多個指令而執行下列額外的操作:針對在該第一真值之後自該輸入遮罩暫存器讀取的每一假值,將該等第三結果中之每一結果儲存在該輸出暫存器。
  14. 如申請專利範圍第13項之處理器,該處理器執行該一或多個指令而執行下列額外的操作:針對在該第一真值之前自該輸入遮罩暫存器讀取的每一假值,將自該輸入遮罩暫存器讀取的該假值之位元位置儲存在該輸出暫存器中之該輸出暫存器之對應的位元位 置。
  15. 一種系統,包含:用來儲存指令及資料之一記憶體;一處理器,該處理器執行一或多個指令而執行下列操作:讀取一輸入遮罩暫存器中所含的每一值,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對自該輸入遮罩暫存器讀取的每一真值,產生其中包含該真值的位元位置之一第一結果;針對在該第一真值之後自該輸入遮罩暫存器讀取的每一假值,將該輸入遮罩暫存器之向量長度加到自該輸入遮罩暫存器讀取的上一真值之位元位置,而產生一第二結果;以及將該等第一結果及第二結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
  16. 如申請專利範圍第15項之系統,其中該處理器執行該一或多個指令而執行下列額外的操作:針對在該第一真值之前自該輸入遮罩暫存器讀取的每一假值,產生其中包含該假值的位元位置之一第三結果;以及將該等第三結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
  17. 如申請專利範圍第15項之系統,其中該處理器執行該一或多個指令而執行下列額外的操作:讀取一立即值,且只有在該立即值被設定為一第一值時才執行該等操作。
  18. 如申請專利範圍第17項之系統,其中如果該立即值並未被設定為該第一值,則該處理器將執行一第二組的操作。
  19. 如申請專利範圍第18項之系統,其中該第二組的操作包含:讀取該輸入遮罩暫存器中所含的每一值,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對自該輸入遮罩暫存器讀取的每一真值,產生其中包含該真值的位元位置被加到該向量長度之一第三結果;以及將該等第三結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
  20. 如申請專利範圍第19項之系統,其中該處理器執行該一或多個指令而執行下列額外的操作:針對在該第一真值之後自該輸入遮罩暫存器讀取的每一假值,將該等第三結果中之每一結果儲存在該輸出暫存器。
  21. 如申請專利範圍第20項之系統,其中該處理器執行該一或多個指令而執行下列額外的操作: 針對在該第一真值之前自該輸入遮罩暫存器讀取的每一假值,將自該輸入遮罩暫存器讀取的該假值之位元位置儲存在該輸出暫存器中之該輸出暫存器之對應的位元位置。
  22. 如申請專利範圍第15項之系統,進一步包含:一顯示配接器,用以回應該處理器對程式碼的執行而繪製圖形影像。
  23. 如申請專利範圍第22項之系統,進一步包含:一使用者輸入介面,用以自一使用者輸入裝置接收控制信號,其中該處理器回應該等控制信號而執行程式碼。
  24. 一種處理器,包含:讀取一輸入遮罩暫存器中所含的每一值之裝置,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;產生裝置,用以針對自該輸入遮罩暫存器讀取的每一真值,產生其中包含該真值的位元位置之一第一結果;加法裝置,用以針對在該第一真值之後自該輸入遮罩暫存器讀取的每一假值,將該輸入遮罩暫存器之向量長度加到自該輸入遮罩暫存器讀取的上一真值之位元位置,而產生一第二結果;以及將該等第一結果及第二結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置之裝置。
  25. 如申請專利範圍第24項之處理器,進一步包含: 針對在該第一真值之前自該輸入遮罩暫存器讀取的每一假值而產生其中包含該假值的位元位置之一第三結果之裝置;以及將該等第三結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置之裝置。
  26. 如申請專利範圍第24項之處理器,進一步包含:讀取一立即值且只有在該立即值被設定為一第一值時才執行該等操作之裝置。
  27. 如申請專利範圍第26項之處理器,進一步包含:讀取該輸入遮罩暫存器中所含的每一值之裝置,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對自該輸入遮罩暫存器讀取的每一真值,產生其中包含該真值的位元位置被加到該向量長度之一第三結果;以及將該等第三結果中之每一結果儲存在對應於自該輸入遮罩暫存器讀取的該等位元位置之一輸出暫存器之各位元位置。
  28. 如申請專利範圍第27項之處理器,進一步包含:針對在該第一真值之後自該輸入遮罩暫存器讀取的每一假值而將該等第三結果中之每一結果儲存在該輸出暫存器之裝置。
  29. 如申請專利範圍第28項之處理器,進一步包含: 針對在該第一真值之前自該輸入遮罩暫存器讀取的每一假值,將自該輸入遮罩暫存器讀取的該假值之位元位置儲存在該輸出暫存器中之該輸出暫存器之對應的位元位置。
  30. 一種有條件地傳播評估值之方法,包含下列操作:讀取一輸入遮罩暫存器中所含的每一值,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對該輸入遮罩暫存器中對應於真值的所有值,在一輸出向量暫存器中儲存與該向量暫存器的大小有關之一第一值,直到遭遇第一假值為止;針對該第一假值及每一後續假值,將等於該等假值的位元位置之一第二值儲存在該輸出向量暫存器;以及一旦遭遇該第一假值之後,針對每一真值而將與上一遭遇之假值相關聯的該第二值儲存在該輸出向量暫存器。
  31. 如申請專利範圍第30項之方法,其中該第一值等於該輸出向量暫存器之向量長度減一。
  32. 一種有條件地傳播評估值之方法,包含下列操作:讀取一輸入遮罩暫存器中所含的每一值,每一值是一真值或一假值,且具有與該值相關聯的一位元位置;針對該輸入遮罩暫存器中對應於假值的所有值,在一輸出向量暫存器中儲存與該向量暫存器的大小有關之一第一值,直到遭遇第一真值為止; 針對該第一真值而將該第一值儲存在該輸出向量暫存器;針對在該第一真值之後的每一後續真值,將等於上一真值的位元位置之一值儲存在該輸出向量暫存器;以及針對每一後續假值,將等於上一真值的位元位置之第二值儲存在該輸出向量暫存器。
  33. 如申請專利範圍第32項之方法,其中該第一值等於該輸出向量之向量長度。
TW101148087A 2011-12-23 2012-12-18 有條件的傳播在單一指令多重資料/向量執行中之評估值的裝置與方法 TWI517041B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/067094 WO2013095617A1 (en) 2011-12-23 2011-12-23 Apparatus and method for propagating conditionally evaluated values in simd/vector execution

Publications (2)

Publication Number Publication Date
TW201344566A true TW201344566A (zh) 2013-11-01
TWI517041B TWI517041B (zh) 2016-01-11

Family

ID=48669257

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101148087A TWI517041B (zh) 2011-12-23 2012-12-18 有條件的傳播在單一指令多重資料/向量執行中之評估值的裝置與方法

Country Status (4)

Country Link
US (2) US9798541B2 (zh)
CN (1) CN104011649B (zh)
TW (1) TWI517041B (zh)
WO (1) WO2013095617A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11042378B2 (en) 2015-07-31 2021-06-22 Arm Limited Propagation instruction to generate a set of predicate flags based on previous and current prediction data

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9798541B2 (en) * 2011-12-23 2017-10-24 Intel Corporation Apparatus and method for propagating conditionally evaluated values in SIMD/vector execution using an input mask register
WO2015145190A1 (en) * 2014-03-27 2015-10-01 Intel Corporation Processors, methods, systems, and instructions to store consecutive source elements to unmasked result elements with propagation to masked result elements
EP3123300A1 (en) 2014-03-28 2017-02-01 Intel Corporation Processors, methods, systems, and instructions to store source elements to corresponding unmasked result elements with propagation to masked result elements
US10133570B2 (en) 2014-09-19 2018-11-20 Intel Corporation Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated
US9658821B2 (en) 2014-09-29 2017-05-23 International Business Machines Corporation Single operation array index computation
US20160283242A1 (en) * 2014-12-23 2016-09-29 Intel Corporation Apparatus and method for vector horizontal logical instruction
US11544214B2 (en) 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
JP6492943B2 (ja) * 2015-05-07 2019-04-03 富士通株式会社 計算機、コンパイル方法、コンパイルプログラム、およびパイプライン処理プログラム
US10409613B2 (en) * 2015-12-23 2019-09-10 Intel Corporation Processing devices to perform a key value lookup instruction
US10691691B2 (en) * 2016-09-10 2020-06-23 Sap Se Iterative evaluation of data through SIMD processor registers
EP3336691B1 (en) * 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
EP3336692B1 (en) 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
CN108875926A (zh) * 2017-10-30 2018-11-23 上海寒武纪信息科技有限公司 语言翻译方法及相关产品
US11990137B2 (en) 2018-09-13 2024-05-21 Shanghai Cambricon Information Technology Co., Ltd. Image retouching method and terminal device
US11340904B2 (en) 2019-05-20 2022-05-24 Micron Technology, Inc. Vector index registers
US11507374B2 (en) * 2019-05-20 2022-11-22 Micron Technology, Inc. True/false vector index registers and methods of populating thereof
US11327862B2 (en) 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
US11403256B2 (en) * 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
CN112286579B (zh) * 2019-07-24 2024-05-24 腾讯科技(深圳)有限公司 数据处理方法、装置、计算机可读存储介质和计算机设备
US12032966B2 (en) * 2022-09-30 2024-07-09 Texas Instruments Incorporated Reducing overhead in processor array searching

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6282628B1 (en) * 1999-02-24 2001-08-28 International Business Machines Corporation Method and system for a result code for a single-instruction multiple-data predicate compare operation
US7725678B2 (en) * 2005-02-17 2010-05-25 Texas Instruments Incorporated Method and apparatus for producing an index vector for use in performing a vector permute operation
US7617384B1 (en) 2006-11-06 2009-11-10 Nvidia Corporation Structured programming control flow using a disable mask in a SIMD architecture
US8793472B2 (en) * 2008-08-15 2014-07-29 Apple Inc. Vector index instruction for generating a result vector with incremental values based on a start value and an increment value
US9335980B2 (en) * 2008-08-15 2016-05-10 Apple Inc. Processing vectors using wrapping propagate instructions in the macroscalar architecture
US8060724B2 (en) 2008-08-15 2011-11-15 Freescale Semiconductor, Inc. Provision of extended addressing modes in a single instruction multiple data (SIMD) data processor
US8181001B2 (en) * 2008-09-24 2012-05-15 Apple Inc. Conditional data-dependency resolution in vector processors
US8745360B2 (en) * 2008-09-24 2014-06-03 Apple Inc. Generating predicate values based on conditional data dependency in vector processors
US8176299B2 (en) * 2008-09-24 2012-05-08 Apple Inc. Generating stop indicators based on conditional data dependency in vector processors
US7865693B2 (en) 2008-10-14 2011-01-04 International Business Machines Corporation Aligning precision converted vector data using mask indicating offset relative to element boundary corresponding to precision type
US8996845B2 (en) 2009-12-22 2015-03-31 Intel Corporation Vector compare-and-exchange operation
CN104094218B (zh) * 2011-12-23 2017-08-29 英特尔公司 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的系统、装置和方法
US9798541B2 (en) * 2011-12-23 2017-10-24 Intel Corporation Apparatus and method for propagating conditionally evaluated values in SIMD/vector execution using an input mask register
CN104137054A (zh) * 2011-12-23 2014-11-05 英特尔公司 用于执行从索引值列表向掩码值的转换的系统、装置和方法
US9189236B2 (en) * 2012-12-21 2015-11-17 Intel Corporation Speculative non-faulting loads and gathers
US20140289502A1 (en) * 2013-03-19 2014-09-25 Apple Inc. Enhanced vector true/false predicate-generating instructions

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11042378B2 (en) 2015-07-31 2021-06-22 Arm Limited Propagation instruction to generate a set of predicate flags based on previous and current prediction data

Also Published As

Publication number Publication date
TWI517041B (zh) 2016-01-11
CN104011649A (zh) 2014-08-27
US9798541B2 (en) 2017-10-24
US20140189323A1 (en) 2014-07-03
CN104011649B (zh) 2018-10-09
US20180004517A1 (en) 2018-01-04
WO2013095617A1 (en) 2013-06-27

Similar Documents

Publication Publication Date Title
TWI517041B (zh) 有條件的傳播在單一指令多重資料/向量執行中之評估值的裝置與方法
TWI475480B (zh) 向量頻率壓縮指令
TWI517039B (zh) 用以對緊縮資料執行差異解碼之系統,設備,及方法
TWI483183B (zh) 混洗浮點或整數值的裝置與方法
TWI502499B (zh) 執行將寫入罩暫存器轉換成向量暫存器中的索引值列表的系統、裝置及方法
TWI476682B (zh) 用以偵測向量暫存器內相等元素之裝置及方法
TWI517031B (zh) 用於呈現各別複數之複數共軛根之向量指令
TWI489381B (zh) 多暫存器散布指令
TWI525538B (zh) 超級乘加(super madd)指令技術
TWI582690B (zh) 用於滑動視窗資料存取之設備及方法
TWI473015B (zh) 執行向量頻率擴展指令之方法、處理器核心以及製品
TW201820125A (zh) 執行複數的熔合乘-加指令的系統與方法
TWI515650B (zh) 用於遮罩暫存器擴充操作之設備及方法
TWI489384B (zh) 執行置換運算的處理器與方法及具有該處理器的電腦系統
TWI575451B (zh) 用於遮罩及向量暫存器之間的可變擴充的方法及裝置
TWI493449B (zh) 用於使用遮罩以執行向量緊縮一元解碼的系統、裝置及方法
TWI564796B (zh) 執行用以最佳化指令流的檢查之設備及方法
TW201346744A (zh) 遮蔽排列指令的裝置及方法
TW201333687A (zh) 用於以推測支援來執行向量化的裝置及方法
TW201738733A (zh) 執行指令以排列遮罩的系統及方法
TW201346747A (zh) 用於密碼應用程式之不升起算數旗標的三輸入運算元向量加法指令
TWI490781B (zh) 用於選擇向量運算之元素的裝置及方法
TW201732571A (zh) 用於獲得偶數和奇數資料元素的系統、裝置及方法
TW201732574A (zh) 用於改善向量通量的系統、方法及設備
TWI610234B (zh) 用於壓縮遮罩值的方法及裝置

Legal Events

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