TW202403546A - 用於可擴縮向量指令集架構的子向量支援指令 - Google Patents
用於可擴縮向量指令集架構的子向量支援指令 Download PDFInfo
- Publication number
- TW202403546A TW202403546A TW112105151A TW112105151A TW202403546A TW 202403546 A TW202403546 A TW 202403546A TW 112105151 A TW112105151 A TW 112105151A TW 112105151 A TW112105151 A TW 112105151A TW 202403546 A TW202403546 A TW 202403546A
- Authority
- TW
- Taiwan
- Prior art keywords
- vector
- subvector
- instruction
- sub
- instructions
- Prior art date
Links
- 239000013598 vector Substances 0.000 title claims abstract description 689
- 238000012545 processing Methods 0.000 claims abstract description 120
- 230000004044 response Effects 0.000 claims abstract description 36
- 230000009467 reduction Effects 0.000 claims description 50
- 238000000034 method Methods 0.000 claims description 23
- 238000004590 computer program Methods 0.000 claims description 13
- 230000008569 process Effects 0.000 claims description 4
- 230000000873 masking effect Effects 0.000 claims description 3
- 230000007704 transition Effects 0.000 claims description 2
- 230000008901 benefit Effects 0.000 description 9
- 238000013519 translation Methods 0.000 description 8
- 230000006399 behavior Effects 0.000 description 6
- 238000013507 mapping Methods 0.000 description 6
- 238000005457 optimization Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 5
- 229910052754 neon Inorganic materials 0.000 description 5
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 5
- 238000004088 simulation Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 239000000654 additive Substances 0.000 description 2
- 230000000996 additive effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000001066 destructive effect Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
- G06F9/38873—Iterative single instructions for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
- G06F9/38873—Iterative single instructions for multiple data lanes [SIMD]
- G06F9/38875—Iterative single instructions for multiple data lanes [SIMD] for adaptable or variable architectural vector length
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)
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一種設備具有:處理電路系統16,用以執行資料處理;及指令解碼電路系統10,用以回應於根據一可擴縮向量指令集架構所定義之程式指令的解碼而執行該資料處理,該可擴縮向量指令集架構支援在可擴縮向量長度之向量上操作的向量指令,以使相同指令序列可在具有支援不同最大向量長度之硬體的設備上執行。該指令解碼電路系統及該處理電路系統支援將一給定向量視為包含複數個子向量的一子向量支援指令,其中各子向量包含複數個向量元素。回應於該子向量支援指令,該指令解碼電路系統控制該處理電路系統在子向量粒度下針對該給定向量執行一操作。各子向量具有一相等子向量長度。
Description
本技術係關於資料處理領域。
指令集架構(instruction set architecture, ISA)定義在開發特定軟體程式時軟體開發者或編譯器可用的指令集,且以一對應方式定義需要由硬體的處理器實施方案支援以允許硬體與根據該ISA編寫的軟體相容的指令集。例如,ISA可針對各指令定義指令的編碼、其輸入運算元及結果值的表示、及用於將指令之輸入運算元映射至結果的函數。
向量ISA支援在包含在單一暫存器內表示的二或更多個獨立向量元素的一向量運算元上操作及/或產生包含二或更多個獨立向量元素的一向量結果的至少一個向量指令。向量指令可以SIMD(單指令、多資料)的方式處理,以允許回應於單一指令而對不同的資料值執行多個獨立計算。向量指令可用於,例如,允許將以高層碼編寫之指令的純量迴圈向量化,使得可回應於向量化迴圈的單一迭代而執行對應於多個迴圈迭代的處理。此藉由減少實行特定資料處理量所需要提取、解碼、及執行之指令的數目而有助於改善效能。
至少一些實例提供一種設備,其包含:處理電路系統,用以執行資料處理;及指令解碼電路系統,用以回應於根據一可擴縮向量指令集架構所定義之程式指令的解碼而執行該資料處理,該可擴縮向量指令集架構支援在可擴縮向量長度之向量上操作的向量指令,以使相同指令序列可在具有支援不同最大向量長度之硬體的設備上執行;其中:該指令解碼電路系統及該處理電路系統經組態以支援將一給定向量視為包含複數個子向量的一子向量支援指令,其中各子向量包含複數個向量元素,各子向量具有一相等子向量長度;且回應於該子向量支援指令,該指令解碼電路系統經組態以控制該處理電路系統在子向量粒度下針對該給定向量執行一操作。
至少一些實例提供一種方法,其包含:使用指令解碼電路系統來解碼根據一可擴縮向量指令集架構所定義之程式指令,該可擴縮向量指令集架構支援在可擴縮向量長度之向量上操作的向量指令,以使相同指令序列可在具有支援不同最大向量長度之硬體的設備上執行;及控制處理電路系統以回應於該等程式指令的解碼而執行資料處理;其中:該指令解碼電路系統及該處理電路系統支援將一給定向量視為包含複數個子向量的一子向量支援指令,其中各子向量包含複數個向量元素,各子向量具有一相等子向量長度;且回應於該子向量支援指令,該指令解碼電路系統控制該處理電路系統在子向量粒度下針對該給定向量執行一操作。
至少一些實例提供一種電腦程式,用以控制一主機資料處理設備以提供用於目標碼之執行的一指令執行環境;該電腦程式包含:指令解碼程式邏輯,用以解碼該目標碼的指令以回應於該目標碼的該等指令而控制該主機資料處理設備執行資料處理;其中:該指令解碼程式邏輯支援根據一可擴縮向量指令集架構所定義之程式指令的解碼,該可擴縮向量指令集架構支援在可擴縮向量長度之向量上操作的向量指令,以使相同指令序列可在具有支援不同最大向量長度之硬體的設備上執行;該指令解碼程式邏輯包含子向量支援指令解碼程式邏輯,用以解碼將一給定向量視為包含複數個子向量的一子向量支援指令,其中各子向量包含複數個向量元素,各子向量具有一相等子向量長度;且回應於該子向量支援指令,該指令解碼程式邏輯經組態以控制該主機資料處理設備在子向量粒度下針對該給定向量執行一操作。
該電腦程式可儲存在一儲存媒體上。該儲存媒體可係一非暫時性儲存媒體。
設備具有:處理電路系統,用以執行資料處理;及指令解碼電路系統,用以回應於根據可擴縮向量指令集架構(ISA)所定義之程式指令的解碼而執行該資料處理。可擴縮向量ISA(亦稱為「向量長度未知(vector length agnostic)」向量ISA)支援在可擴縮向量長度之向量上操作的向量指令,以使相同指令序列可在具有支援不同最大向量長度之硬體的設備上操作。此係有用的原因在於其允許處理器實施方案的不同硬體設計者可取決於其設計優先考量為高效能或減少電路面積及功率消耗而選擇不同的最大向量長度,而軟體開發者則不需要針對一特定硬體平台來量身定製其軟體,這係因為無論特定硬體平台支援的特定最大向量長度為何,根據可擴縮向量ISA編寫的軟體皆可橫跨任何支援可擴縮向量ISA的硬體平台來執行。因此,待用於可擴縮向量ISA的一特定向量指令的向量長度在編譯時間下係未知的(ISA本身未經定義為固定的,亦不由軟體本身的參數所指定)。回應於可擴縮向量ISA之一給定向量指令而執行的操作可取決於針對一特定硬體實施方案所選擇的向量長度而不同(例如,與支援一較小最大向量長度的硬體相比,支援一較大最大向量長度的硬體可針對一給定向量指令來處理更大數目的向量元素)。因此,具有一較短向量長度的一實施方案可比具有一較長向量長度的一實施方案需要更大數目的迴圈迭代,以實行一特定功能。
雖然可擴縮向量ISA對於實現可在具有不同最大向量長度的處理器實施方案之間輕易地移植之平台獨立程式碼的開發可係非常有用的,但可能存在顯著數量之藉由假設一已知向量長度來編譯的傳統碼。將傳統軟體重新開發以便與可擴縮向量ISA一起使用,可能需要可觀的軟體開發工作量。尤其如此的原因在於:一般用以改善向量化碼之效能的一些軟體技術(諸如軟體管線化或迴圈展開)可能仰賴用於指令之向量長度在編譯時間下係已知的。因此,由於在傳統碼中使用的一些技術可能在可擴縮向量ISA中不可用,故可能無法直接將非可擴縮向量ISA的指令重映射成可擴縮向量ISA的指令。此可係採用可擴縮向量ISA的顯著阻礙,且可導致一些軟體開發者選擇不使用可擴縮向量ISA,使得:即使係在支援使用可擴縮向量ISA的一大最大向量長度的處理器實施方案上(該處理器實施方案亦可能出於回溯相容性的原因而支援非可擴縮向量ISA),可能有顯著數量之在支援可擴縮向量ISA之較新處理器上執行的軟體仍然使用效能效率較低的非可擴縮向量ISA(其使用相對短的最大向量長度)。此意謂著硬體的完整效能能力可能不為許多程式所使用。
在下文討論的實例中,指令解碼電路系統及處理電路系統在可擴縮向量ISA內支援將一給定向量視為包含複數個子向量的一子向量支援指令,其中各子向量包含複數個向量元素且各子向量具有相等子向量長度。回應於該子向量支援指令,該指令解碼電路系統控制該處理電路系統在子向量粒度下針對該給定向量執行一操作。由於可將一非可擴縮向量ISA的各向量映射至可擴縮ISA中之一向量的子向量之一者,故此有助於減少實現可擴縮向量ISA之採用所需的軟體開發工作量。此使將非可擴縮軟體映射至可擴縮軟體更加簡單,且因此減少使用可擴縮向量ISA的阻礙,使得更大分量之在支援可擴縮向量ISA之設備上執行的碼更有可能實際上使用可擴縮向量ISA,其通常將會改善橫跨一系列處理器實施方案的平均效能,這係由於支援較長向量長度的高端處理器可更有可能得以利用此等較長向量長度來改善效能。
各子向量可具有在待使用子向量支援指令來執行的一給定指令序列的編譯時間下係已知的一子向量長度。此係有幫助的,這是由於其允許將可擴縮向量ISA之一向量運算元或結果定義為「向量的向量(vector of vectors)」(其包含若干個各具有已知向量長度的較小子向量),使得根據使用一非可擴縮向量ISA編寫的軟體所定義之多個向量可根據可擴縮向量ISA而組合成一較大向量。由於各子向量之長度在編譯時間下係已知的,故可在子向量的粒度下實施仰賴在編譯時間下之向量長度的知識的任何效能改善軟體技術,進而使軟體開發者更容易將根據非可擴縮向量ISA編寫的碼映射成根據可擴縮向量ISA所定義之碼,同時保持該等軟體技術。
在待使用子向量支援指令來執行的一給定指令序列的編譯時間下,給定向量包含多少個子向量係未知的。換言之,給定向量的整體向量長度可係如可擴縮向量ISA(其可定義不同處理器實施方案可允許之各種最大向量長度)所允許的一可擴縮向量長度。此意謂著:在支援一系列不同的效能/電力點的同時,子向量支援指令仍可從可擴縮向量ISA的平台獨立性質中獲益。然而,仍然可使用仰賴待用作為粒度之向量長度的知識以供向量化的軟體最佳化,這係由於:在可使用子向量支援指令將可變數目的子向量容納在可擴縮向量長度之一較大給定向量中以前,軟體最佳化可參考具有已知子向量長度的子向量而實施。例如,可將先前已使用非可擴縮向量ISA採向量化形式實施的一向量化迴圈的可變數目的迭代映射成可擴縮向量ISA中的一向量化迴圈,其中原始向量化迴圈的各迭代對應於藉由可擴縮向量ISA之子向量支援指令所處理之向量的子向量之一者。由於其可免除在根據ISA將純量迴圈轉換回向量化可擴縮碼之前從向量化非可擴縮碼恢復為一純量迴圈的需求,故此使碼的編譯及軟體開發變得更加簡單;取而代之地,將非可擴縮ISA的向量指令直接映射成可擴縮ISA的可擴縮向量指令可更加簡單,而無需一介入性的解向量化步驟(其他編譯器可直接針對包括子向量處理指令的可擴縮ISA來進行編譯,而無需使編譯係以針對一非可擴縮ISA所編譯的先前碼為基礎)。在編譯時間下已知的子向量長度可與用於給定向量的向量長度無關,使得無論一給定硬體實施方案針對整體給定向量所使用的實際向量長度為何,子向量長度對一給定軟體的一給定指令皆相同。
回應於子向量支援指令,指令解碼電路系統可控制處理電路系統以回應於執行子向量支援指令的相同實例而處理子向量之各者。例如,在子向量粒度下執行的操作之各者可平行地處理。替代地,在子向量粒度下執行的操作可循序地、或部分循序地且部分平行地、或以管線方式來處理。無論在子向量粒度下執行的各種操作的確切時序為何,在子向量粒度下執行的操作之各者係回應於子向量支援指令的單一執行實例而執行,使得可實現向量ISA的SIMD益處。
可使子向量長度在編譯時間下已知的方法有若干種。對於可擴縮向量ISA的一些實施方案,ISA可將子向量長度定義為可由軟體碼本身指定的可變軟體定義參數,以允許軟體在二或更多個不同子向量尺寸之間選擇。例如,此可有助於為重映射來自具有不同非可擴縮向量長度的二或更多個不同的非可擴縮向量ISA的碼提供支援。
然而,在一個實例中,各子向量可具有與用於給定向量的一向量長度無關的一架構定義固定尺寸的一子向量長度。此可簡化架構且避免軟體指定子向量長度的任何需要。取而代之地,在於可擴縮向量ISA中定義之子向量支援指令的架構定義中,子向量長度可係固定的。
架構定義固定尺寸可對應於規定用於根據一預定非可擴縮向量ISA處理的向量指令的一架構定義最大向量長度。例如,預定非可擴縮向量ISA可係由英國劍橋的Arm
®Limited提供的「進階SIMD」架構(亦稱為Neon
™架構)。
例如,子向量長度的架構定義固定尺寸可係128個位元。此對於與定義128個位元之一最大向量長度的進階SIMD架構之相容性係有用的。
實施標定其他非可擴縮向量ISA的子向量支援指令亦係可行的,在該情形中,子向量長度可取決於所標定之特定ISA而變化。
再者,以下係可行的:實施子向量支援指令,而不意圖標定任何特定非可擴縮向量ISA,但僅係為了選擇一給定固定子向量長度,而不帶有任何試圖仿真在一特定非可擴縮向量ISA中使用之長度之目的。即使未標定特定的非可擴縮向量ISA,但以下仍係有用的:定義具有一架構定義固定尺寸之一子向量長度的子向量,以使軟體開發者及編譯器可利用仰賴該固定尺寸之編譯時間知識的軟體效能最佳化。
子向量支援指令可支援可變元素尺寸,使得各子向量的各向量元素具有從由可擴縮向量ISA所支援之二或更多個不同尺寸選擇的一可變元素尺寸。子向量長度可與針對各子向量內的各向量元素而使用哪個元素尺寸無關。因此,無論所選擇之元素尺寸係一較大元素尺寸或較小元素尺寸,可使用相同的子向量長度。向量元素的數目定義每個子向量可對應於子向量長度與所選擇元素尺寸之間的比率。所選擇元素尺寸可藉由包含子向量支援指令的指令序列的軟體指定參數來定義,且因此在編譯時間下係已知的。因此,由於子向量長度及元素尺寸皆可在編譯時間下係已知的,故每個子向量提供之向量元素的數目在編譯時間下亦可係已知的,但整體上給定向量中之向量元素的總數目在編譯時間下可能係未知的,這係由於:根據可擴縮向量ISA,給定向量的整體向量長度在編譯時間下係未知的。
在子向量粒度下執行的操作可有所變化。可將若干個不同子向量支援指令定義為可擴縮向量ISA的部分,以便取決於程式設計師或編譯器的選擇而在子向量粒度下執行若干個不同操作。
在一些實例中,對於至少一個子向量支援指令,在子向量粒度下執行的操作係針對各子向量而對該子向量內的向量元素執行的一操作,而與其他子向量中的元素無關。因此,此可允許在單一子向量支援指令中執行操作,該等操作可在一非可擴縮向量ISA中已使用若干個單獨的向量指令(各在具有在編譯時間下已知的非可擴縮向量長度之一各別向量上操作)來執行(例如,該等單獨的向量指令可對應於以非可擴縮向量ISA之碼所編寫之迴圈的不同迭代)。
在一些實例中,對於至少一個子向量支援指令,在子向量粒度下執行的操作係針對一子向量內的各元素位置而對複數個子向量之各者內的該元素位置處的各別向量元素執行的一操作。此一指令可用以,例如,複製將已使用單一迴圈迭代內的向量指令序列來執行的處理,其中該等向量指令將已組合在經指定用於該向量指令序列的若干個向量運算元內的對應元素位置中的資料值。
在一些實例中,對於至少一個子向量支援指令,在子向量粒度下執行的操作係用以設定一述詞值之所選擇述詞位元的一操作或係取決於該述詞值之該等所選擇述詞位元而執行一操作的一操作,其中該等所選擇述詞位元係對應於一向量之子向量尺寸部分的述詞位元。此可與可擴縮向量ISA之可在小於子向量長度之個別向量元素的粒度下設定或解譯述詞的許多指令不同。此類子向量支援述詞設定或述詞相依指令可用於允許在某些情況下選擇性地遮罩整個子向量的處理,例如,在一非可擴縮向量ISA的對應碼將已對具有在編譯時間下已知的一特定向量長度的向量執行的一向量化迴圈的整個迭代遮罩掉的狀況下。
在一些實例中,可擴縮向量ISA可支援一子向量支援置換指令的至少一個變體。回應於一子向量支援置換指令,指令解碼器控制處理電路系統以針對一向量結果的各子向量將子向量設定成一或多個向量元素之一置換(permutation),該一或多個向量元素係從至少一個向量運算元的一對應定位子向量內的向量元素中選擇的。子向量支援置換指令可能無法基於在向量運算元之一者內的不同非對應子向量位置的向量元素的位元而設定向量結果的一給定子向量的一向量元素。藉由在子向量粒度下而非整體上在橫跨給定向量的整個向量長度下執行置換,此可允許子向量支援置換指令的行為反映一非可擴縮向量ISA中定義之假設用於置換的一已知向量長度的若干個單獨的非可擴縮置換指令的行為,同時仍使針對一給定指令所執行的此類子向量粒度置換的數目可基於根據可擴縮向量ISA在硬體中所支援之所實施向量長度而擴縮。
在一些實例中,可擴縮向量ISA可支援一子向量支援縮減指令的至少一個變體。回應於一子向量支援縮減指令,指令解碼器可控制處理電路系統在子向量粒度下執行至少一個縮減操作,各縮減操作用以將一運算元向量的複數個向量元素縮減成一結果內的單一資料值。由於不同子向量中的向量元素可能無法彼此組合,故在一個別子向量的粒度下執行此一縮減操作時,可對橫跨整個向量長度執行的一對應縮減操作提供一不同結果。此類縮減可用以仿真在非可擴縮向量化碼之一序列中可能已藉由在一給定迴圈迭代或一系列迴圈迭代內的多個指令之一序列而實施的處理,該一系列迴圈迭代各包含一指令的單一實例以將一向量運算元的各元素與追蹤任何先前迴圈迭代中之類似組合之結果的一累加器值的對應元素組合。
一子向量支援縮減指令的不同變體係可能的,該等變體在子向量粒度下執行縮減的方式有所不同。
例如,以一子向量內(intra-sub-vector)的子向量支援縮減指令而言,對於各縮減操作,複數個向量元素包含在運算元向量之一對應子向量內的各別向量元素。將此一指令包括在ISA中可用以允許軟體開發者使用該指令在編譯時間下具有未知向量長度的一可擴縮架構中仿真橫跨單一向量運算元的所有向量元素執行縮減之非可擴縮碼的行為。可將各子向量粒度縮減的結果放置在結果值的一不同子向量中。替代地,子向量內的子向量支援縮減指令的一變體可將各子向量粒度縮減的結果放置在結果值的一或多個子向量的各別向量元素中。
在另一變體中,以一子向量間(inter-sub-vector)的子向量支援縮減指令而言,對於各縮減操作,複數個向量元素包含在運算元向量之複數個子向量內的對應元素位置處的向量元素。對於此類型的指令,經縮減至單一結果的向量元素係以子向量長度的間隔所選擇之向量元素。將此指令包括在ISA中可用以允許軟體開發者使用該指令在編譯時間下具有未知向量長度的一可擴縮架構中仿真橫跨在若干個連續迴圈迭代中經處理之向量內的相同元素位置處的向量元素執行縮減之非可擴縮碼的行為。
可擴縮向量ISA可支援此等類型的子向量支援縮減指令中之任一或多者。
在一些實例中,可擴縮向量ISA可支援子向量支援載入/儲存指令的至少一個變體。回應於一子向量支援載入/儲存指令,指令解碼器可控制處理電路系統執行一載入/儲存操作,以在子向量粒度下於一記憶體系統與至少一個向量暫存器之間轉移一或多個子向量。此可用以仿真一非可擴縮向量ISA之將已對具有一已知向量長度之向量執行對應載入/儲存操作之載入/儲存指令的行為。
子向量支援載入/儲存指令可係與一述詞值關聯的一述詞指令(predicated instruction)。回應於子向量支援載入/儲存指令,指令解碼器可控制處理電路系統以基於在子向量粒度下從述詞值選擇的述詞位元而控制執行或遮罩一個或多個子向量的各轉移。此可與可擴縮向量ISA之可使用在用於向量之向量元素的元素尺寸(該元素尺寸小於子向量長度)的粒度下所選擇之述詞來橫跨整個(可擴縮)向量長度執行載入/儲存操作的其他載入/儲存指令的行為不同。
在一些實例中,可擴縮向量ISA可支援一子向量支援遞增/遞減指令的至少一個變體。回應於子向量支援遞增/遞減指令,指令解碼器可控制處理電路系統以基於一向量中有多少個子向量尺寸部分係藉由在子向量粒度下從一述詞值選擇的該述詞值的位元指示為有效而遞增或遞減一運算元值。此可有助於迴圈控制,使得由軟體使用以決定是否仍需要執行至少一個進一步迴圈迭代的一迴圈控制變數可根據在迴圈的最末迭代中處理之子向量的數目遞增或遞減(由於在迴圈迭代中處理之子向量的數目在編譯時間下可能係未知的,故提供促成推斷所處理之子向量的數目並因此將該數目用以更新一迴圈控制變數的一指令可係有用的)。
由子向量支援遞增/遞減指令使用以判定如何更新運算元值的述詞值可係下列中之一者:由該子向量支援遞增/遞減指令指定作為一述詞運算元的一述詞值;及由該子向量支援遞增/遞減指令指定的一述詞模式識別符所表示的一述詞值,該述詞模式識別符在子向量粒度下指定述詞位元之一預定模式。
在一些實例中,可擴縮向量ISA可支援一子向量支援述語設定指令的至少一個變體。回應於子向量支援述詞設定指令,指令解碼器可控制處理電路系統執行一述詞設定操作以在子向量粒度下設定一述詞值的位元,以指示一向量中有哪些子向量係有效的。此一指令可用以控制哪些子向量係由其他子向量支援述詞指令所處理。經設定成一特定值(例如,0)之述詞值的位元可導致對應子向量的處理被遮罩。此一述詞設定指令可係與可擴縮向量ISA之其他述詞設定指令不同的指令,該指令可在可小於子向量長度的一向量元素尺寸的粒度下設定述詞值。
用於子向量支援述詞設定指令的述詞設定操作可包含基於下列中之一者來設定述詞值:一述詞模式識別符,其指定待在子向量粒度下實施的述詞位元之一預定模式;及子向量粒度比較操作,其係基於第一運算元與第二運算元的比較。使用此方法時,述詞的新值並未在子向量支援述詞設定指令中明確地指定,但可根據可針對不同向量長度而擴縮的某個一般模式來定義。此係有用的原因在於:由於可擴縮向量長度的緣故,待設定之述詞位元的數目在編譯時間下可能係未知的。
於上文描述子向量支援指令的各種實例。應理解可擴縮向量ISA的任何給定實施方案不需要支援所有此等類型指令。可實施在本申請案中描述之指令中之任一或多者。
上文討論的技術可實施在資料處理設備內,該資料處理設備具有針對實施上文討論之指令解碼器及處理電路系統而提供的硬體電路系統。
然而,相同技術亦可實施在電腦程式內,該電腦程式係在主機資料處理設備上執行以提供用於目標碼之執行的指令執行環境。即使主機資料處理設備本身不支援該架構,此一電腦程式可控制主機資料處理設備以模擬將提供在實際上支援根據可擴縮向量指令架構之目標碼的硬體設備上的架構環境。電腦程式可具有仿真上文討論之指令解碼電路系統之功能的指令解碼程式邏輯。例如,指令解碼程式邏輯回應於目標碼的一給定指令而以主機資料處理設備的原生指令集來產生一對應碼序列,以控制主機資料處理設備執行經解碼指令的對應功能。指令解碼程式邏輯包括子向量支援指令解碼程式邏輯,用以如上文討論地解碼一子向量支援指令,以控制主機資料處理設備在子向量粒度下針對一給定向量執行一操作。例如,當針對一個指令集架構所編寫之傳統碼係在支援一不同指令集架構的一主機處理器上執行時,此一模擬程式可係有用的。再者,由於軟體在模擬執行環境上的執行可使軟體測試得以與支援新架構之硬體裝置的進行中開發平行,模擬可允許針對一較新版本的指令集架構的軟體開發在支援該新架構版本的處理硬體就緒之前開始。模擬程式可儲存在儲存媒體上,該儲存媒體可係非暫時性儲存媒體。
現在參照圖式描述特定實例。應理解申請專利範圍不限於此等特定實例。
圖1示意地繪示資料處理設備2的一實例。資料處理設備具有包括若干個管線級的處理管線4。在此實例中,管線級包括用於從指令快取記憶體8提取指令的提取級6;用於解碼經提取程式指令以產生待由管線之其餘級處理的微操作(micro-operation)(經解碼指令)的解碼級10(指令解碼電路系統的一實例);用於檢查微操作所需的運算元在暫存器14中是否可用且在一旦用於一給定微操作的所需運算元可用時發布用於執行之微操作的發布級12;用於藉由處理讀自暫存器14的運算元以產生結果值來執行對應於微操作的資料處理操作的執行級16(處理電路系統的一實例);及用於將處理的結果寫回至暫存器14的寫回級18。應瞭解此僅係可能的管線配置的一個實例,且其他系統可能具有額外級或一不同的級組態。例如,在一亂序處理器中,可包括一暫存器重命名級,以用於將由程式指令或微操作指定的架構暫存器映射至識別暫存器14中之實體暫存器的實體暫存器識別符。在一些實例中,在由解碼級10解碼的程式指令與由執行級所處理之對應微操作之間可有一對一關係。在程式指令與微操作之間亦係可能有一對多或多對一關係,使得,例如,單一程式指令可分成二或更多個微操作,或者二或更多個程式指令可融合以作為單一微操作來處理。
執行級16包括若干個處理單元,以用於執行不同類別的處理操作。例如,執行單元可包括純量處理單元20(例如,包含用於對讀自暫存器14的純量運算元執行算術或邏輯運算的純量算術/邏輯單元(ALU) 20);用於對包含多個向量元素的向量執行向量操作的向量處理單元22;及用於執行載入/儲存操作以存取記憶體系統8、30、32、34中之資料的載入/儲存單元28。可提供在執行級的處理單元的其他實例可包括用於執行涉及以浮點格式表示之值的操作的浮點單元,或用於處理分支指令的分支單元。
暫存器14包括用於儲存純量值的純量暫存器25、用於儲存向量值的向量暫存器26、及用於儲存述詞值的述詞暫存器27。在處理向量指令時,述詞值27可由向量處理單元22使用,其中在一給定述詞暫存器中的一述詞值指示儲存在向量暫存器26中的一對應向量運算元有哪些向量元素係有效向量元素或無效向量元素(其中對應於無效資料元素的操作可受抑制,或可不影響回應於一向量指令而由向量處理單元22產生的一結果值)。
記憶體管理單元(MMU) 36基於在儲存於記憶體系統中之一頁表結構中所定義之位址映射而控制虛擬位址(其係由來自提取電路系統6的指令指取或來自載入/儲存單元28的載入/儲存請求來指定)與識別記憶體系統中之位置的實體位址之間的位址轉譯。頁表結構亦可定義記憶體屬性,該等記憶體屬性可指定用於存取位址空間之對應頁的存取權限,例如,指定位址空間之區域係唯讀或係可讀/可寫的、指定允許存取該區域的特權層級、及/或指定其管理位址空間之對應區域可如何存取的其他性質。來自頁表結構的項可快取在轉譯後備緩衝區(TLB) 38中,該轉譯後備緩衝區係由用於快取頁表項或其他資訊以用於加速對來自顯示在記憶體中之頁表結構的頁表項之存取的MMU 36維持的快取記憶體。
在此實例中,記憶體系統包括一級資料快取記憶體30、一級指令快取記憶體8、共用二級快取記憶體32、及主系統記憶體34。將理解此僅係可能的記憶體階層的一個實例,並可提供快取記憶體的其他配置。顯示在執行級16中的處理單元20至28的具體類型僅係一個實例,且其他實施方案可具有不同組的處理單元或可包括相同類型的處理單元的多個實例,使得可平行地處理多個相同類型的微操作。應理解圖1僅係一可能的處理器管線配置的一些組件的簡化表示,且處理器可包括為了簡潔起見而未繪示的許多其他元件。
處理管線4支援一可擴縮向量ISA,其意謂著ISA的向量指令可受處理,而無需在編譯時間(一編譯器編譯所執行指令的時間)下知道將用於執行該等向量指令的向量長度為何。此使支援不同最大向量長度的各種不同處理設備得以執行相同的軟體碼,以避免在產生適用於橫跨一系列處理平台的執行之軟體碼時造成軟體開發者的負擔。此意謂著一給定處理設備的硬體設計者具有取決於設計者偏好的效能/電力需求而選擇所實施之最大向量長度的自由(追求較高效能的系統可選擇比追求較佳能源效率的系統更長的一最大向量長度)。
圖2繪示可擴縮向量ISA之架構狀態的一實例。ISA將若干個可擴縮向量暫存器(例如,32個向量暫存器,Z0至Z31)定義為向量暫存器26,該若干個可擴縮向量暫存器具有針對一給定硬體實施方案之可至多係特定架構定義最大長度的一特定單位尺寸的任何倍數的一實施方案選擇向量長度。例如,在此實例中,單位尺寸係128個位元,且架構支援在128個位元與2048個位元之間的任何128個位元之倍數的最大向量長度(亦即,一給定處理器的向量長度係LEN * 128個位元,其中1≤LEN≤16)。舉例而言,此與暫存器可具有128個位元之一固定架構定義向量長度的一非可擴縮向量架構不同(見圖2中標記為V0至V31的暫存器)。圖2所示的實例係基於可擴縮向量ISA係由Arm
®Limited提供的「可擴縮向量延伸(Scalable Vector Extension, SVE)」,以及非可擴縮向量ISA係由Arm
®Limited提供的「進階SIMD」架構(Neon
™)。即使根據可擴縮向量ISA支援大於128個位元的向量長度,指令解碼器10及處理電路系統16亦可出於回溯相容性的原因而支援非可擴縮向量ISA,且非可擴縮向量ISA之指令可參考固定長度(例如,128個位元)的暫存器V0至V31;實際上,此等暫存器可使用可為可擴縮向量ISA之指令存取的較長暫存器的一部分來表示,使得可擴縮向量暫存器Z0至Z31及非可擴縮向量暫存器V0至V31可共用硬體儲存電路系統。
當然,其他實例可基於不同的可擴縮及非可擴縮架構,且因此可用於可擴縮向量長度之選擇的尺寸範圍及經指定以用於非可擴縮向量長度之固定尺寸可與圖2所示者不同。
除了向量暫存器26以外,提供若干個述詞暫存器27(標記為P0至P15),以用於儲存用以選擇性地遮罩對使用向量暫存器26所提供之向量運算元的向量元素執行的操作的述詞值。當使用硬體中所支援之最大向量長度時(此最大向量長度係指由一特定硬體實施方案使用的所選擇尺寸LEN * 128,而非由用於任何硬體實施方案之架構所允許的最大向量長度(例如,2048個位元)),述詞暫存器27在根據由ISA所支援之最小向量元素尺寸定義時可於向量暫存器26中每向量元素便具有一個位元。例如,若最小元素尺寸係8個位元,則對於LEN * 128位元向量暫存器的實例而言,各述詞暫存器可具有尺寸LEN * 16個位元。圖3顯示在逐元素(element-by-element)的基礎上實施至向量之陳述的一實例。指令可定義一可變元素尺寸,例如,圖3顯示可如何將一256位元向量邏輯地劃分成64位元或32位元元素(其他元素尺寸亦可係可能的,例如,16或8位元元素)。在使用最小元素尺寸時,指定用於儲存在向量暫存器26中的一給定向量的述詞暫存器27指定足以能夠為各向量元素指定一單獨述詞位元的若干個述詞位元,但在較大的元素尺寸下,並非所有述詞位元皆需要讀取,且取而代之地,述詞位元可在對應於元素尺寸的間隔下讀取。例如,對於64位元元素,可每八個述詞位元讀取一個,如圖3之頂部實例所示,而對於32位元元素,可每四個述詞位元讀取一個(在8位元元素尺寸下,各述詞位元皆可讀取)。當將一個述詞位元設定成1時,則將對應元素視為係有效的,而將具有設定成0之對應述詞位元的向量元素則視為係無效的。可基於一向量操作的結果將一結果向量之對應於無效向量元素的元素遮罩掉而不更新(述詞指令可包含將經遮罩掉之結果元素設定成0的歸零陳述變體,或可包含在執行向量指令之前將經遮罩掉之結果元素設定成與目的地暫存器內的對應元素相同的值的合併陳述變體)。
如圖2所示,暫存器14亦可包括一些控制暫存器29(標記為ZCR),該等控制暫存器可被更高特權軟體用來限制可由在一較低特權狀態下執行之軟體使用的最大向量長度。例如,為了節省電力,可限制一給定軟體,使得其無法利用硬體中所支援之全向量長度。然而,即使更高特權軟體施加對於向量長度的限制,用於應用程式軟體的向量長度在編譯時間下仍係未知的,這係由於無法得知在一特定處理器中所實施的實際向量長度將大於或小於在控制暫存器29中所定義的限制(對於具有比在控制暫存器29中所定義的限制更小的最大向量長度的實施方案,將使用比該限制所指示者更小的向量長度)。
當考慮到規模從相對小能源效率微控制器至伺服器及其他高效能計算系統之廣泛範圍的需求時,由於在可用於編碼ISA之指令的一固定編碼空間內為處理器設計者可能要求的每個不同向量長度產生不同指令係不可行的,故可擴縮向量ISA之向量長度未知性質係有用的。藉由在編譯時間下不具有一已知的固定向量長度,可使用相同ISA來滿足多個市場,而無需軟體開發者針對各效能/電力/面積點來量身定製碼的工作量。
為達成可擴縮向量ISA的可擴縮性質,可擴縮向量ISA之向量指令的功能性係參考指示所使用的向量長度的一參數(例如,如圖2所示的LEN)來定義於架構中(當考慮到在硬體中所支援之最大向量長度及使用控制暫存器29的任何軟體定義限制時),其中該參數LEN在編譯時間下係未知的。因此,在不同系統上執行相同的向量指令可產生不同結果(其在所產生之向量元素的數目上一般會有所變化,其之子集在不同平台上可具有相同結果值,但與實施一較小向量長度的平台相比,實施一較大向量長度的平台通常可產生額外的向量元素)。述詞可用以控制在一指令的一給定實例中產生哪些元素,且可基於向量長度未知原理而設定,諸如藉由使用比較指令以自動產生用於特定迴圈迭代之述詞的值或實施可擴縮至不同向量長度的某個一般定義述詞模式。某些指令可更新迴圈控制參數(諸如,元素計數值)以追蹤目前為止已處理多少個向量元素,使得整體上在橫跨一迴圈的情況中,具有較寬或較窄向量長度二者之實施方案最終可達成相同結果,但效能等級則不相同,這係因為具有一較寬向量長度的實施方案可能比具有一較窄向量長度的實施方案需要更少的迴圈迭代。
圖4顯示使用一不同向量長度來呈現相同的指令序列可如何在不同硬體實施方案上以不同方式處理的工作實例。在此實例中,該碼實例係實行一雙精度浮點操作「daxpy」(雙精度Ax加y)以為二個輸入值陣列x[i]、y[i]計算y[i] = a*x[i] + y[i],其中0 ≤ i < n。此可使用如下之來自一可擴縮向量ISA的一組指令來實施於一向量化迴圈中:
1 // x0 = &x[0], x1 = &y[0], x2 = &a, x3 = &n
2 daxpy_:
3 ldrsw x3, [x3] // x3=*n
4 mov x4, #0 // x4=i=0
5 whilelt p0.d, x4, x3 // p0=while(i++<n)
6 ld1rd z0.d, p0/z, [x2] // p0:z0=broadcast(*a)
7 .loop:
8 ld1d z1.d, p0/z, [x0, x4, lsl #3] // p0:z1=x[i]
9 ld1d z2.d, p0/z, [x1, x4, lsl #3] // p0:z2=y[i]
10 fmla z2.d, p0/m, z1.d, z0.d // p0?z2+=x[i]*a
11 st1d z2.d, p0, [x1, x4, lsl #3] // p0?y[i]=z2
12 incd x4 // i+=(VL/64)
13 .latch:
14 whilelt p0.d, x4, x3 // p0=while(i++<n)
15 b.first .loop // more to do?
16 ret
圖4顯示針對一個實例使用128位元向量長度及針對另一實例使用256位元向量長度的此等指令之處理。變數a及陣列x[]及y[]係儲存在記憶體中的資料。暫存器x0至x4係純量暫存器。暫存器p0係一述詞暫存器。暫存器z0至z2係向量暫存器,其在第一實例中係128位元暫存器,且在第二實例中係256位元暫存器(因此,相較於128位元實例,述詞暫存器p0在256位元實例中係一較長的暫存器)。實線輪廓方塊指示由一給定指令所處理或設定的有效元素,而虛線輪廓方塊指示由陳述所遮罩的無效元素或完全不用於一給定指令的暫存器。應注意到顯示於圖4中的指令編號指示由處理電路系統16執行之經解碼指令序列的程式順序(其與上文所示的經編譯碼的編號不同,因為一些指令可執行多次,且在上述實例中經編號之分支點標記在圖4中並未編號)。然而,圖4中顯示與上文所示相同的指令序列。
在128位元及256位元實例二者中,向量指令係針對可適配在對應向量長度內之向量元素的數目而擴縮。在此實例中,所使用的元素尺寸係64個位元,使得在128位元實例中,每向量有2個向量元素,且在256位元實例中,每向量有4個向量元素。因此,在128位元實例中僅使用二個p0的述詞位元,且在256位元實例中僅使用四個p0的述詞位元(實際上,暫存器p0可包括更大數目的述詞位元,以使得更小的向量元素尺寸受到支援)。
whilelt、incd、及b.first指令係根據所支援之向量長度來設定述詞及更新迴圈計數值且取決於迴圈計數值的比較而有條件地分支回到迴圈之開始的迴圈控制指令。其他指令係根據所支援之向量長度來處理若干個向量元素的載入/儲存指令或向量處理指令。
遞增指令incd基於在對應迴圈迭代中處理之向量元素的數目而遞增迴圈計數器(例如,VL / ES,其中VL係向量長度,且ES係向量元素尺寸)。述詞設定指令whilelt使用迴圈計數器(i,在指令序列中由暫存器x4表示)與終止限制(n,由暫存器x3表示,其係藉由載入指令從記憶體在上述碼實例之第3行載入)之間的比較,以取決於迴圈計數器的各種遞增版本是否小於(lt)限制值而設定述詞。對於遞增迴圈計數器仍小於限制值的該等元素,將述詞設定為真,而一旦遞增迴圈計數器達到終止限制時,則將述詞設定為偽(在此實例中,此在256位元實例中發生於指令2所處理的第四元素上,但對於128位元實例中的2元素向量,此限制在第一回合(pass)時尚未達到且將僅由經執行以判定仍有另一向量元素要處理(見圖4之128位元實例所示之在經解碼程式順序下的第9指令)的一後續述詞設定指令(顯示在上述碼實例中之第14行的whilelt指令)來達到,因此分支指令(在經解碼程式順序下的指令10)返回迴圈以進行另一回合。在下一回合時,whilelt指令(在經解碼程式順序下的第16指令)現在判定所有述詞皆係「偽」,且因此分支指令此時不採取分支,因而迴圈結束。相反地,對於256位元實例,僅需要一回合便可將各向量暫存器中的第四元素的效果遮罩掉。
應注意到由指令序列產生的結果在128位元及256位元實例中最終皆相同(儲存至記憶體以用於陣列y[]的資料具有相同值3、50、41、32(從最高有效位址至最低有效位址),但128位元實例在二個迴圈迭代中才獲得其結果,而256位元實例僅需要一個迴圈迭代。因此,在128位元實例中,上述碼實例中在第8至15行的指令需要解碼且執行二次(見圖4中之128位元實例之在經解碼程式順序下編號的指令4至17)。
雖然可擴縮向量ISA對於促成開發支援一系列不同硬體實施方案的平台獨立碼可係非常有用的,然而許多使用中的軟體程式已特別針對支援一固定長度向量單元的一非可擴縮向量ISA來最佳化,諸如針對與Arm
®Limited的Neon
™非可擴縮向量ISA相容的系統所提供之128位元向量單元。對於回溯相容性,支援可擴縮向量ISA的系統亦可支援非可擴縮向量ISA的指令,以確保此類傳統軟體仍可執行。然而,此意謂著:即使硬體支援更大的向量長度,非可擴縮軟體仍無法從硬體中可產生的額外效能獲益。
使用可擴縮向量ISA的指令來重新開發以非可擴縮向量ISA所編寫之程式碼可係所欲的,因為此可開啟更大的效能機會,進而利用在可擴縮向量ISA的許多硬體實施方案上可用的較長向量長度。然而,若嘗試將針對一非可擴縮向量ISA所編寫之一程式(其中向量長度在編譯時間下係已知的)重編寫成針對一可擴縮向量ISA所編寫之程式碼(其中向量長度在編譯時間下係未知的),則此可能需要程式設計師或編譯器編寫者的可觀工作量。由於採非可擴縮ISA形式之程式碼常可包括取決於在編譯時間下已知的一固定向量長度(例如,128個位元)的知識而選擇的特定最佳化,故非可擴縮向量ISA的指令可能無法採一簡單方式映射至可擴縮向量指令,且若無法得知接下來在編譯時間下將使用的向量為何,則此可能會防止一些此類最佳化的使用,其在一些情形中可完全防止採可擴縮向量化碼形式之一向量化迴圈的使用。
例如,下列C語言碼可實施一部分總和縮減(例如,此可係來自一數位信號處理應用程式的一操作):
for (int biquad = 0; sample < num_samples; ++sample) {
tmp = acc;
acc += (((int32_t) coeff[biquad].b1 * state[biquad].x1 +
(int32_t) coeff[biquad].b2 * state[biquad].x2) >> 14) +
(((int32_t) coeff[biquad].a1 * state[biquad].y1 +
(int32_t) coeff[biquad].a2 * state[biquad].y2) >> 14);
state[biquad].x2 = state[biquad].x1;
state[biquad].x1 = tmp;
state[biquad].y2 = state[biquad].y1;
state[biquad].y1 = acc;
}
在上述碼中,各迭代中的乘加(multiply-add)操作的結果在acc中累加,並儲存在state[biquad].y1中。在經過向量化之後,用以儲存state[biquad].y1之值的向量的各元素應儲存累加的部分總和(元素0應在第0次迭代中儲存acc的值,元素1應在最初二個迭代之後儲存acc的所得值,依此類推)。
在一非可擴縮向量ISA上,此部分總和縮減可藉由將四個元素之各者廣播至一新向量暫存器中並使用mla(乘累加,multiply-accumulate)指令來部分累加此等四個向量暫存器而達成,如下文所示:
…
dup v17.4h, v16.h[0]
dup v18.4h, v16.h[1]
dup v19.4h, v16.h[2]
dup v20.4h, v16.h[3]
add v6.4h, v6.4h, v17.4h
mla v6.4h, v18.4h, v29.4h
mla v6.4h, v19.4h, v30.4h
mla v6.4h, v20.4h, v31.4h
…
此處,第一複製(dup)指令將向量暫存器v17的所有向量元素設定成等於向量暫存器v16的元素0,第二dup指令將向量暫存器v18的所有向量元素設定成等於向量暫存器v16的元素1,依此類推。暫存器v16每向量元素有一個dup。由於非可擴縮向量ISA中的向量長度在編譯時間下係已知的,則有鑑於向量元素的尺寸,編譯器可找出要包括多少個dup指令(在此實例中係四個,其係基於每128位元向量有4個32位元元素)。
然而,在一可擴縮向量ISA中,此部分總和縮減無法以相同方式執行,這係由於在編譯時間下的向量長度係未知的,且因此編譯器不知道應該包括多少個dup指令。此可能阻礙以C語言碼定義之純量迴圈的成功向量化,且可能強制可擴縮向量碼採用一純量迴圈,使得向量化的益處無法實現。
此僅係可能仰賴向量長度的編譯時間知識的軟體最佳化的一個實例。其他實例可包括:迴圈展開,其藉由將某一個數目的原始迴圈迭代映射至各包含一較大數目之指令的一較小數目的迴圈迭代而減少需要執行之迴圈控制指令的數目,其中「經展開」迴圈的一個迭代對應於原始迴圈的多個迭代;及軟體管線化,其中一編譯器迴圈之指令的執行重新排序,使得一稍後迴圈迭代的一些指令可在來自一較早迴圈迭代的指令之前執行。
圖5示意地繪示可幫忙此問題之技術的一實例。具有(在編譯時間下係未知的)可擴縮向量長度的一向量被邏輯地視為包括可擴縮數目的子向量,各子向量具有一相等子向量長度。該子向量長度在編譯時間下係已知的。例如,各子向量可具有對應於一非可擴縮向量架構(諸如,Neon
™)中之固定向量長度的一固定尺寸(例如,128個位元),或可單純係在一可擴縮向量ISA中定義的一任意固定尺寸(不論與一現有非可擴縮向量ISA有任何對應)。替代地,在可擴縮向量ISA的一些實施方案中,軟體可有從二或更多個選項中指定子向量長度的能力,使得子向量長度在編譯時間下係已知的(經軟體定義),但可針對利用此子向量方法之一指令的不同實例而有所變化。由於子向量長度在編譯時間下係已知的,但整體向量長度並非已知的,故適配在向量內之子向量的總數目在編譯時間下亦係未知的,且可取決於針對執行經設計用以支援子向量方法之指令的一特定硬體實施方案而選擇的特定向量長度而可擴縮。各子向量具有可變數目的向量元素,且各向量元素的尺寸可係可變的且由軟體從若干個選項(例如,8、16、32、或64個位元)中選擇。因此,雖然每子向量之向量元素的尺寸及數目在編譯時間下可係已知的,但在整個向量中之數目效應元素可係可變的且在編譯時間下係未知的。子向量長度可與由硬體使用的整體向量長度及針對一給定指令而指定之向量元素尺寸二者皆無關。
使用此方法時,由於子向量長度係已知的,故將用於與一非可擴縮向量ISA一起使用而編譯的碼(假設一固定向量長度)轉換成用於與可擴縮向量ISA一起使用而編譯的碼(使用假設已知子向量長度之子向量的子向量支援指令,但允許可擴縮整體向量長度)變得更加簡單。此外,即使針對支援子向量支援指令的可擴縮向量ISA而直接進行編譯(不從非可擴縮向量化碼開始),子向量支援指令可用以允許實施軟體效能改善技術(諸如上文討論之該等者),否則該等軟體效能改善技術將不可能用於在可擴縮長度之向量中在逐元素(element-by-element)或整體向量的粒度下操作而非在固定尺寸之子向量粒度下操作的可擴縮向量指令。
因此,如以下實例中所討論,且可定義控制處理電路系統16(例如,向量處理單元22及/或載入/儲存單元28)在子向量的粒度下而非在個別元素的粒度或整體向量的粒度下執行操作之子向量支援指令的數目)。在子向量的粒度下執行的操作可回應於執行一子向量支援指令的單一實例而平行地、循序地、部分平行地且部分循序地、或以一管線化方式來執行(因此,不需要使用設定在執行子向量支援指令的各別實例之間的述詞值將向量分割成子向量,其中各子向量經由子向量支援指令在一單獨回合中受處理)。
提供對應於可能所欲對向量運算元執行之所有向量操作的子向量支援指令並非必需的。許多操作(例如,加或乘)可在逐元素(element-by-element)粒度下實施,且因此即使在實施至經設計用以支援圖5所示之向量的向量方法(vector-of-vectors approach)的運算元時亦可提供正確結果。因此,對於某些類型的處理操作,子向量粒度指令可能係不可行的。然而,對於一些類型的處理操作(諸如一般會橫跨整個向量所實施之置換或縮減),定義在子向量的粒度下實施對應操作的子向量支援指令以提供不同處理結果可係有用的。類似地,實施某些類型之在子向量粒度下操作的載入/儲存指令及迴圈控制或述詞設定指令(例如,藉由在子向量的粒度下而非在個別元素的粒度下設定或讀取述詞位元)可係有用的。藉由將此類指令包括在一可擴縮向量ISA中,此可使重新開發先前針對一非可擴縮向量ISA所最佳化之程式碼以使用可擴縮向量ISA變得更加直接,進而在使用由可擴縮向量ISA所支援之較大向量長度的較高端處理器實施方案上執行時,使碼得以達成較佳效能。
圖6顯示繪示一子向量支援指令之處理的流程圖。在步驟100,支援可擴縮向量ISA的指令解碼器10解碼正在執行之程式的次一指令。在步驟102,指令解碼器10判定所解碼指令是否係一子向量支援指令。若否,則在步驟104,指令解碼器10控制處理電路系統16執行如由其他類型之指令所指示的一處理操作。若由指令解碼器10解碼的指令係一子向量支援指令,則在步驟106,指令解碼器10控制處理電路系統16在子向量粒度下針對視為包含二或更多個子向量的一給定向量執行一操作,該二或更多個子向量各包含某一個數目的向量元素,其中各子向量具有一相等子向量長度。該子向量長度在編譯時間下係已知的。然而,整體向量長度在編譯時間下係未知的,因此由指令所處理之子向量的數目在編譯時間下係未知的。
圖7至圖11顯示用於將一置換操作實施在向量運算元的各子向量內的子向量支援置換指令的各種實例。在各情形中,用於指令的(多個)輸入運算元及結果係被視為經邏輯地劃分成若干個子向量的一向量,該等子向量各具有在架構中係固定的或否則在編譯時間下係已知的子向量長度(例如,128個位元)。向量運算元及結果的整體長度係可擴縮的且在編譯時間下係未知的。為方便解釋起見,下文討論的所有實例顯示具有32位元元素的實例,使得每子向量有四個向量元素,但應理解其他實例可使用一不同的元素尺寸。對於各置換指令,將結果之一給定子向量內的所有元素設定成從一或多個運算元向量的對應子向量選擇的位元之一置換。取決於從運算元向量的其他子向量中的元素選擇的位元而設定結果之一給定子向量中的一給定元素係不可能的,與結果之該給定子向量相比,該等元素係在一不同的相對子向量位置處。因此,將一對應置換操作在子向量粒度下執行多次。
圖7顯示一複製置換指令DUPQ的第一實例,其中實施在結果Zd之一給定子向量中的置換係要將一運算元向量Zn的對應子向量的一經選擇元素複製至結果之給定子向量的向量元素之各者。將複製哪個元素係由定義相對於子向量之開始的一元素位置的一立即索引值#imm來指示。例如,在圖7中,立即值具有1之值,該值指示運算元Zn之各子向量的元素1將會被複製至結果Zd之對應子向量中的所有向量元素位置。因此,將值A1複製至Zd的前四個元素位置,將值B1複製至次四個元素位置,將值C1複製至次四個元素位置,依此類推(因為在此實例中各子向量包含四個向量元素)。使用置換操作所處理之子向量的數目將取決於如可擴縮向量ISA所允許之由硬體使用的特定向量長度。然而,由於將被複裂之一給定向量元素之實例的數目在編譯時間下係已知的(例如,在此情形中係4),故仍可使用碼最佳化(諸如上文所示之用於部分總和縮減的該一者),以使其更易於採用可擴縮向量ISA,同時仍允許仰賴在編譯時間下的一(子)向量長度之知識的碼最佳化。
圖7之底部部分顯示若在整體向量的粒度下實施時的一對應複製置換,如一習知向量指令所可能預期。在此情形中,立即索引值將定義相對於向量運算元Zn之開始的一向量元素位置,且在向量運算元Zn之此位置處的向量元素將會被複製至結果向量Zd的每一個元素。此清楚地展示使用置換指令的子向量支援變體所達成的結果在相較於一整體向量置換指令之情況下的差異。
圖8顯示一子向量支援置換指令EXTQ的另一實例。在此實例中,實施至各子向量的置換係一擷取置換,用以將結果Zdn'的各子向量的下部分設定成第一向量運算元Zdn的一對應子向量的較高位元,且將各子向量的上部分設定成第二向量運算元Zm的一對應子向量的較低位元。在此實例中,編碼係破壞性的,使得結果被寫入至用以提供第一向量運算元的相同暫存器Zdn。其他實例可使用一建構性編碼,其定義一進一步向量暫存器以提供與用以儲存結果之目的地暫存器不同的第一向量運算元。立即索引值定義從二個運算元向量擷取之部分的尺寸(例如,索引可定義相對於子向量之開始的位置,用於待複製至結果之對應子向量的較低位元的第一運算元的上部分係在該位置擷取,且結果之對應子向量的剩餘位元可使用從第二運算元的最低有效端選擇的位元來填充)。在此特定實例中,立即值在位元組粒度(以8位元為單位)下選擇位元位置,使得將一給定結果子向量的位元[127-(imm*8):0]設定成等於第一運算元Zdn中的對應子向量的位元[127:imm*8],且將給定結果子向量的位元[127:128-(imm*8)]設定成等於第二運算元Zm的位元[(imm*8)-1:0]。應理解其他實例可定義立即值以在8位元以外的其他單位的遞增下選擇。此置換係在子向量粒度下分別實施,但其中各子向量置換使用表示從二個運算元的對應子向量擷取的部分之間的邊界的相同立即值。同樣地,圖8顯示在子向量粒度下實施此操作與一整體向量置換有多不同。
圖9顯示若一表查找置換係在逐子向量(sub-vector by sub-vector)的基礎上實施之一子向量支援置換指令TBLQ的另一實例。在此實例中,第一向量運算元Zm定義一組索引值,該組索引值指示第二向量運算元Zn之一給定子向量有哪些元素係要被複製至結果向量Zd的一對應子向量內的對應元素位置。索引值係相對於對應子向量之開始而非相對於整個向量來定義。因此,對於第二子向量(對應於第二運算元Zn中的值B0、B1、B2、B3),元素索引3、3、1、2針對結果中之對應子向量的對應向量元素而選擇值B3、B3、B1、B2(B3係放置在子向量的最低有效元素,且B2係放置在最高有效元素中)。若特定索引值具有大於在一給定子向量中之最大向量元素索引的值,則將零寫入至結果向量Zd內的對應位置(例如,見用於第三子向量中之最高有效向量元素位置之索引值6的實例,其大於在一給定子向量中之4個元素(標記為0至3)的最高有效索引3,因此將0寫入至結果Zd中的對應位置)。同樣地,每子向量置換的此方法不同於一整體向量置換,其之索引值將相對於整體向量來定義,且因此將整體向量置換實施至圖9所示的二個相同的運算元Zm、Zn會將一不同結果提供給在子向量粒度下執行的操作,如圖9之下部分所示。
圖10顯示一子向量支援置換指令ZIPQ1的另一實例,其中在此情形中,實施在一給定子向量中的置換係要將來自二個向量運算元Zn、Zm的對應子向量的下半部的元素交錯在結果向量Zd的一給定子向量內。此置換係針對子向量之各者來執行,且同樣地將不同結果提供給一類似置換係在整體向量粒度下執行的情形,如圖10的下部分所示。雖然圖10顯示將來自各子向量的下半部的元素交錯的一實例,但亦可將一對應指令ZIPQ2另外定義成將來自各子向量的上半部的元素交錯。
圖11顯示一子向量支援置換指令UZPQ1的另一實例,其中在此情形中,實施在一給定子向量中的置換係要將二個向量運算元Zn、Zm的對應子向量的偶數編號向量元素在一結果向量Zd的對應子向量內串接(concatenate)。同樣地,此產生具有採與若一類似置換係在整體向量的粒度下實施時所會達成之不同順序的元素的一結果。此指令之一替代版本UZPQ2可串接奇數編號元素,而非偶數編號元素。
圖12顯示在子向量粒度下實行減縮操作之子向量間的縮減指令的實例,各縮減操作用以將一運算元向量的多個元素縮減成結果向量內的單一資料值。此實例顯示一述詞指令,其中指令指定與運算元向量Zn關聯的述詞值Pg以指示哪些元素被遮罩。經遮罩元素不會促成縮減結果。對於此實例,縮減係橫跨各子向量內的對應編號元素來執行,且在此實例中實施的縮減運算子係加法。因此,將結果向量Zd的元素0設定成在向量運算元Zn之子向量的各者內的位置0處的任何未遮罩元素的總和,將結果向量Zd的元素1設定成在向量運算元Zn之子向量的各者內的位置1處的任何未遮罩元素的總和,其他元素位置則依此類推(若在各子向量內的一給定位置處的所有元素皆被遮罩,則將結果的對應元素設定成0)。由於縮減操作使元素的總數目減少,故可將結果向量Zd之未填入一縮減結果的剩餘元素填入零。
雖然圖12顯示具有一加法縮減的實例,但可針對其他操作執行在子向量粒度下的一類似縮減操作,例如,諸如及(AND)、互斥或(EOR)、浮點加法(FADD)、浮點最大值(FMAX,其判定一組浮點數的最大值)、浮點最小值(FMIN,其判定一組浮點數的最小值)、或(OR)、有正負號最大值(SMAX,其判定一組有正負號整數的最大值)、有正負號最小值(SMIN,其判定一組有正負號整數的最小值)、無正負號最大值(UMAX,其判定一組無正負號整數的最大值)、及無正負號最小值(UMIN,其判定一組無正負號整數的最小值)。
如圖13所示,亦可能提供一子向量內的縮減指令,其在各子向量內執行縮減進而將一輸入運算元Zm之一給定子向量的所有元素縮減成結果向量Zd'的單一資料值。該單一元素可經正負號延伸或零延伸,以填充結果向量Zd'的對應子向量。如圖13所示,一給定子向量內的縮減操作亦可取決於從一第二向量運算元Zd的對應子向量中的一給定元素位置(例如,元素位置0)擷取的一元素。同樣地,陳述可基於定義Zm運算元的有效或無效元素的一述詞值Pg而實施(可始終將取自Zd的額外元素視為係有效的,此元素可用作為追蹤一系列先前縮減之結果的一累加器值,因此使用如圖13所示的破壞性編碼可係有用的,其中將結果寫至用以提供該累加器值的相同暫存器Zd)。
無論縮減係如圖12所示地橫跨各子向量的對應元素來實施,或者縮減係如圖13所示地對單一子向量內的元素來實施,此縮減係在子向量粒度下執行的一操作,與以下條件所會達成的結果不同:若對應操作係在全向量粒度下執行(將向量的所有元素縮減成單一資料值),或若相同的縮減操作係使用包括在一迴圈或一指令序列中的一逐元素(element-wise)向量加法指令(或用於其他縮減操作的類似逐位元指令)來實施,以將一組向量內的對應位置處的元素相加或以其他方式縮減。基於子向量的方法可用以簡化非可擴縮向量化碼(其可能已假設一固定向量長度)至可擴縮向量化碼的映射,其中子向量對應於該固定向量長度,且整體向量長度可根據硬體設計者的設計選擇而擴縮。
圖14顯示可幫助支援向量的向量法(vector of vectors approach)的子向量支援載入/儲存指令的一實例。圖14顯示一連續載入/儲存指令,其中從記憶體載入至至少一個向量暫存器或從至少一個向量暫存器儲存至記憶體的資料區塊對應於在記憶體位址空間中的一連續資料區塊。雖然圖14顯示載入/儲存單一向量暫存器的一載入/儲存指令,但可提供支援多個向量暫存器的載入/儲存的其他載入/儲存指令。與其他形式的向量載入/儲存指令不同,子向量支援向量載入儲存將子向量長度(而非子向量內的個別向量元素)視為係向量載入/儲存操作的基本單位。因此,用以指示向量暫存器的哪些部分將會被載入或儲存的述詞值Pg係在子向量粒度下而非在個別元素的粒度下施加。對應於零之一述詞位元的子向量可被遮罩,使得對於一載入指令,不將目的地暫存器Zt的對應子向量設定成從記憶體載入的一對應子向量的值,且對於一儲存指令,不將來源暫存器Zt之一對應子向量內的資料寫入至記憶體中的對應定址位置。
類似地,圖15顯示子向量支援載入/儲存指令的一集中分散(gather-scatter)形式,其能夠將來自記憶體中之非連續位址區塊的若干個子向量載入或儲存至向量暫存器Zt,或從向量暫存器Zt來載入或儲存該若干個子向量。在此實例中,向量暫存器Zm提供用以判定對應於一給定子向量之位址區塊的一索引值。各索引指示具有對應於子向量長度之尺寸的資料區塊之倍數。同樣地,述詞係在子向量粒度下施加。
應理解圖14及圖15所示的定址模式僅係一個實例,且其他實例可使用不同技術來判定待載入至向量暫存器或從向量暫存器儲存之子向量的位址。例如,對於其他集中分散指令,可將用以計算用於各子向量之載入/儲存操作之位址的向量運算元使用作為基底位址的一向量而非偏移的一向量。一般而言,子向量支援載入/儲存指令可係在子向量的粒度下操作的任何載入/儲存指令。
圖16繪示可用以在子向量粒度下設定對應於一給定向量之述詞的述詞設定指令的一實例。在此實例中,述語設定指令係在若'Rn'+i與'Rm'的比較係真的情況下將對應於子向量i的述詞位元Pi設定成「真」(1)的一比較指令,其中'Rn'係儲存在第一純量暫存器Rn中的值,且'Rm'係儲存在第二純量暫存器Rm中的值。可提供指令之對應於不同比較條件的不同變體,諸如LO(無正負號低於)、LS(無正負號小於或相同)、LT(有正負號小於)、LE(有正負號小於或等於)、HI(無正負號高於)、HS(無正負號高於或相同)、GT(有正負號大於)、或GE(有正負號大於或等於)。此指令類似於在圖4之可擴縮碼實例中顯示的whilelt指令,但係在子向量粒度下而非在向量元素粒度下設定述詞。此可用於仿真碼的行為,其在一非可擴縮向量化實例中會遮罩掉整個向量的作用。
圖17顯示子向量支援述詞設定指令的第二實例,其中同樣地在子向量粒度下設定述詞值,但在此實例中,指令指定將要在子向量粒度下實施的一特定預定義模式(例如,待取決於要實施之模式而設定/清除的述詞位元係對應於各子向量之開始的該等述詞位元)。此可能與可在個別向量元素的粒度下實施模式的一對應述詞設定指令不同。例如,述詞模式可係將指定數目的預測位元設定成有效,在每N個述詞中設定一個有效者(其中N係諸如2、3、4等的值),或在考慮硬體的所實施向量長度時將對應於與述詞值適配之2的最大冪數的若干個述詞位元設定成有效。
圖18繪示指定識別一預定述詞模式之模式識別符且在子向量粒度下實施時控制處理電路系統16以對應於由該經指定述詞模式所指示之有效子向量數目的一數目來遞增一純量運算元Xdn的子向量支援遞增指令的一實例。可提供一對應指令以取而代之地藉由述詞模式所指示之有效子向量的數目來遞減運算元。可採用一對應方式將述詞模式定義成針對圖17之指令而定義的模式。此指令可用於控制迴圈計數變數的遞增或遞減,該等迴圈計數變數用以追蹤是否仍需要繼續進一步迴圈迭代,或者由於所需的子向量皆已受處理而是否可能終止迴圈。
上文描述的所有指令可有助於使將針對一固定長度向量架構所編寫之碼調適成一可擴縮向量架構變得更容易。應理解並非所有此等指令均需要在一給定實施方案中實施。此外,類似的子向量粒度指令可針對其他操作來定義。
總而言之,為使從非可擴縮向量長度規定架構(諸如Neon
™)轉變至可擴縮向量長度未知架構(諸如SVE)的軟體開發者可以更直接地轉變,上述實例加入子向量(例如,四字組(128位元)尺寸的)元素,並將各子向量視為可擴縮架構中的元素。在如此作的同時,形成一向量中之向量(vector-in-vector)風格,以使用可擴縮架構的向量長度未知風格將非可擴縮架構的各固定長度向量向量化。此允許以粗略的1對1指令映射將非可擴縮碼映射成可擴縮碼,使得向量化可利用可擴縮架構中所允許的較長且具彈性的向量長度,且仍保留針對非可擴縮架構引入之仰賴向量長度在編譯時間下已知之假設的碼最佳化。
圖19繪示可使用的模擬器實施方案。雖然稍早所述之實施例以用於操作支援所關注技術的特定處理硬體之設備及方法來實施本發明,但亦可能根據本文所述之實施例提供一指令執行環境,其係透過使用電腦程式實施。此類電腦程式常稱為模擬器,因為其等提供硬體架構之基於軟體的實施方案。模擬器電腦程式的種類包括仿真器、虛擬機、模型、及二進制轉譯器(包括動態二進制轉譯器)。一般而言,模擬器實施方案可在可選地運行主機作業系統320、支援模擬器程式310的主機處理器330上運行。在一些配置中,在硬體與所提供的指令執行環境及/或相同的主機處理器上提供的多個相異指令執行環境之間可有多層模擬。歷史上,已需要強大的處理器來提供模擬器實施方案,其以合理速度執行,但此種方法在某些情況下可係有正當理由的,諸如當因為相容性或再使用原因而需要運行另一處理器本體的碼時。例如,模擬器實施方案可提供具有不為主機處理器硬體所支援之額外功能性的指令執行環境,或提供一般與不同的硬體架構相關聯的指令執行環境。模擬的綜述係於「Some Efficient Architecture Simulation Techniques」中給出,Robert Bedichek, Winter 1990 USENIX Conference,頁數53至63。
在先前已參照特定硬體架構或特徵來描述實施例之情況下,在一模擬實施例中,可藉由合適的軟體架構或特徵提供等效功能。例如,可在模擬實施例中將特定電路系統實施為電腦程式邏輯。類似地,記憶體硬體(諸如,暫存器或快取記憶體)可在一模擬實施例中經實施作為儲存在主機處理器330之主機儲存器(例如,記憶體或暫存器)中的一軟體資料結構。在先前描述的實施例中提及的硬體元件的一或多者存在於主機硬體(例如,主機處理器330)上的配置中,一些模擬實施例可(在適當處)利用主機硬體。
模擬器程式310可儲存在電腦可讀儲存媒體(其可係非暫時性媒體)上,並提供程式介面(指令執行環境)給目標碼300(其可包括應用程式、作業系統、及超管理器),該程式介面與藉由模擬器程式310模型化之硬體架構的程式介面相同。因此,目標碼300的程式指令可使用模擬器程式310而從指令執行環境內執行,使得實際上不具有上文討論之設備2之硬體特徵(例如,支援如上文討論之子向量支援指令的指令解碼器10及處理電路系統16)的主機電腦330可仿真該等特徵。
因此,模擬器程式310可具有用於解碼目標碼300之指令及將此等指令映射至主機設備330之原生指令集中的對應指令集的指令解碼程式邏輯312。指令解碼程式邏輯312包括用於解碼上文描述的子向量支援指令的子向量支援指令解碼程式邏輯313。暫存器仿真程式邏輯314將由目標碼請求的暫存器存取映射成對維護在主機設備330之主機硬體上的對應資料結構的存取,諸如藉由存取主機設備330之暫存器或記憶體中的資料。記憶體管理程式邏輯316採用一對應於如上述硬體實施實施例所描述之MMU 36的方式來實施位址轉譯、頁表遍歷、及存取權限檢查,以模擬目標碼300對一模擬位址空間的存取。提供記憶體位址空間模擬程式邏輯318,以將基於使用由目標程式碼300之軟體維護的頁表資訊的位址轉譯由記憶體管理程式邏輯316獲得的模擬實體位址映射成用以存取主機處理器330之主機記憶體的主機虛擬位址。此等主機虛擬位址可本身使用由主機所支援之標準位址轉譯機制來轉譯成主機實體位址(將主機虛擬位址轉譯成主機實體位址係在受到模擬器程式310控制的範圍之外)。
在本申請案中,用語「經組態以…(configured to...)」係用以意指一設備的一元件具有能夠實行該經定義操作的一組態。在此上下文中,「組態(configuration)」意指硬體或軟體之互連的配置或方式。例如,該設備可具有專用硬體,其提供經定義的操作,或者一處理器或其他處理裝置可經程式化以執行該功能。「經組態以(configured to)」並不意味著設備元件需要以任何方式改變以提供所定義的操作。
雖然本文已參照附圖詳細地描述本發明的說明性實施例,應瞭解本發明不限於該等精確實施例,且所屬技術領域中具有通常知識者可於其中實行各種變化與修改,而不脫離如隨附申請專利範圍所定義的本發明的範圍。
2:資料處理設備;設備
4:處理管線
6:提取級;提取電路系統
8:記憶體系統;一級指令快取記憶體
10:解碼級;指令解碼器;指令;指令解碼電路系統
12:發布級
14:暫存器
16:執行級;處理電路系統
18:寫回級
20:純量處理單元;純量算術/邏輯單元(ALU);處理單元
22:向量處理單元;處理單元
25:純量暫存器
26:向量暫存器
27:述詞暫存器;述詞值
28:載入/儲存單元;處理單元
29:控制暫存器
30:記憶體系統;一級資料快取記憶體
32:記憶體系統;共用二級快取記憶體
34:記憶體系統;主系統記憶體
36:記憶體管理單元(MMU)
38:轉譯後備緩衝區(TLB)
100:步驟
102:步驟
104:步驟
106:步驟
300:目標碼;目標程式碼
310:模擬器程式
312:指令解碼程式邏輯
313:子向量支援指令解碼程式邏輯
314:暫存器模仿程式邏輯
316:記憶體管理程式邏輯
318:記憶體位址空間模擬程式邏輯
320:主機作業系統
330:主機處理器;主機電腦;主機設備
a:變數
ES:向量元素尺寸
LEN:參數
P0-P15:述詞暫存器;暫存器
Pg:述詞值
V0-V31:暫存器;非可擴縮向量暫存器;向量暫存器
VL:向量長度
x[]:陣列
x0-x4:暫存器
Xdn:純量運算元
y[]:陣列
Z0-Z31:向量暫存器;可擴縮向量暫存器
ZCR:控制暫存器
Zd:結果;結果向量;第二向量運算元;暫存器
Zd':結果向量
Zdn:第一向量運算元;暫存器;第一運算元
Zdn':結果
Zm:第二向量運算元;第二運算元;第一向量運算元;運算元;向量運算元;輸入運算元;向量暫存器;暫存器
Zn:運算元向量;運算元;向量運算元;第二向量運算元;第二運算元
Zt:目的地暫存器;來源暫存器;向量暫存器
本技術的進一步態樣、特徵、及優點將由於結合附圖閱讀的以下實例描述而顯而易見,在該等附圖中:
[圖1]繪示支援矩陣ISA之資料處理設備的一實例;
[圖2]顯示用於可擴縮向量ISA之暫存器的一實例;
[圖3]顯示陳述及可變向量元素尺寸的一實例;
[圖4]繪示使支援不同最大向量長度的不同硬體實施方案得以執行相同指令序列的可擴縮向量ISA的一實例;
[圖5]顯示被視為係子向量之向量的向量的一實例;
[圖6]顯示處理子向量支援指令的方法;
[圖7]至[圖11]繪示子向量支援置換指令(sub-vector-supporting permute instruction)的數個實例;
[圖12]及[圖13]繪示子向量支援縮減指令的實例;
[圖14]及[圖15]繪示子向量支援載入/儲存指令的實例;
[圖16]及[圖17]繪示子向量支援述詞設定指令的實例;
[圖18]繪示子向量支援遞增/遞減指令的一實例;及
[圖19]繪示一模擬器實施方案。
Claims (24)
- 一種設備,其包含: 處理電路系統,用以執行資料處理;及 指令解碼電路系統,用以回應於根據一可擴縮向量指令集架構所定義之程式指令的解碼而執行該資料處理,該可擴縮向量指令集架構支援在可擴縮向量長度之向量上操作的向量指令,以使相同指令序列可在具有支援不同最大向量長度之硬體的設備上執行;其中: 該指令解碼電路系統及該處理電路系統經組態以支援將一給定向量視為包含複數個子向量的一子向量支援指令,其中各子向量包含複數個向量元素,各子向量具有一相等子向量長度;及 回應於該子向量支援指令,該指令解碼電路系統經組態以控制該處理電路系統在子向量粒度下針對該給定向量執行一操作。
- 如請求項1之設備,其中各子向量具有在待使用該子向量支援指令來執行的一給定指令序列的編譯時間下係已知的一子向量長度。
- 如請求項1及2中任一項之設備,其中在該給定指令序列的編譯時間下,該給定向量包含多少個子向量係未知的。
- 如前述請求項中任一項之設備,其中回應於該子向量支援指令,該指令解碼電路系統經組態以控制該處理電路系統以回應於執行該子向量支援指令的相同實例而處理該等子向量之各者。
- 如前述請求項中任一項之設備,其中各子向量具有與用於該給定向量的一向量長度無關的一架構定義固定尺寸的一子向量長度。
- 如請求項5之設備,其中該架構定義固定尺寸對應於規定用於根據一預定非可擴縮向量指令集架構處理的向量指令的一架構定義最大向量長度。
- 如請求項5及6中任一項之設備,其中該架構定義固定尺寸係128個位元。
- 如前述請求項中任一項之設備,其中各子向量的各向量元素具有一可變元素尺寸,且該子向量長度與針對各子向量內的各向量元素而使用哪個元素尺寸無關。
- 如前述請求項中任一項之設備,其中對於至少一個子向量支援指令,在子向量粒度下執行的該操作係針對各子向量而對該子向量內的向量元素執行的一操作,而與其他子向量中的元素無關。
- 如前述請求項中任一項之設備,其中對於至少一個子向量支援指令,在子向量粒度下執行的該操作係針對一子向量內的各元素位置而對該複數個子向量之各者內的該元素位置處的各別向量元素執行的一操作。
- 如前述請求項中任一項之設備,其中對於至少一個子向量支援指令,在子向量粒度下執行的該操作係用以設定一述詞值之所選擇述詞位元的一操作或係取決於該述詞值之該等所選擇述詞位元而執行一操作的一操作,其中該等所選擇述詞位元係對應於一向量之子向量尺寸部分的述詞位元。
- 如前述請求項中任一項之設備,其中回應於一子向量支援置換指令(sub-vector-supporting permute instruction),該指令解碼器經組態以控制該處理電路系統以針對一向量結果的各子向量將該子向量設定成一或多個向量元素的一置換(permutation),該一或多個向量元素係從至少一個向量運算元的一對應定位子向量內的向量元素中選擇的。
- 如前述請求項中任一項之設備,其中回應於一子向量支援縮減指令,該指令解碼器經組態以控制該處理電路系統在子向量粒度下執行至少一個縮減操作,各縮減操作用以將一運算元向量的複數個向量元素縮減成一結果內的一單一資料值。
- 如請求項13之設備,其中以一子向量內(intra-sub-vector)的子向量支援縮減指令而言,對於各縮減操作,該複數個向量元素包含在該運算元向量之一對應子向量內的該等各別向量元素。
- 如請求項13及14中任一項之設備,其中以一子向量間(inter-sub-vector)的子向量支援縮減指令而言,對於各縮減操作,該複數個向量元素包含在該運算元向量之複數個子向量內的對應元素位置處的該等向量元素。
- 如前述請求項中任一項之設備,其中回應於一子向量支援載入/儲存指令,該指令解碼器經組態以控制該處理電路系統執行一載入/儲存操作,以在子向量粒度下於一記憶體系統與至少一個向量暫存器之間轉移一或多個子向量。
- 如請求項16之設備,其中該子向量支援載入/儲存指令係與一述詞值關聯的一述詞指令(predicated instruction);及 回應於該子向量支援載入/儲存指令,該指令解碼器經組態以控制該處理電路系統以基於在子向量粒度下從該述詞值選擇的述詞位元而控制執行或遮罩該一個或多個子向量的各轉移。
- 如前述請求項中任一項之設備,其中回應於一子向量支援遞增/遞減指令,該指令解碼器經組態以控制該處理電路系統以基於一向量中有多少個子向量尺寸部分係藉由在子向量粒度下從一述詞值選擇的該述詞值的位元指示為有效而遞增或遞減一運算元值。
- 如請求項18之設備,其中該述詞值係下列中之一者: 由該子向量支援遞增/遞減指令指定作為一述詞運算元的一述詞值;及 由該子向量支援遞增/遞減指令指定的一述詞模式識別符所表示的一述詞值,該述詞模式識別符在子向量粒度下指定述詞位元之一預定模式。
- 如前述請求項中任一項之設備,其中回應於一子向量支援述詞設定指令,該指令解碼器經組態以控制該處理電路系統執行一述詞設定操作以在子向量粒度下設定一述詞值的位元,以指示一向量中有哪些子向量係有效的。
- 如請求項20之設備,其中該述詞設定操作包含基於下列中之一者來設定該述詞值: 一述詞模式識別符,其指定待在子向量粒度下實施的述詞位元之一預定模式;及 子向量粒度比較操作,其係基於一第一運算元與一第二運算元的一比較。
- 一種方法,其包含: 使用指令解碼電路系統來解碼根據一可擴縮向量指令集架構所定義之程式指令,該可擴縮向量指令集架構支援在可擴縮向量長度之向量上操作的向量指令,以使相同指令序列可在具有支援不同最大向量長度之硬體的設備上執行;及 控制處理電路系統以回應於該等程式指令的解碼而執行資料處理;其中: 該指令解碼電路系統及該處理電路系統支援將一給定向量視為包含複數個子向量的一子向量支援指令,其中各子向量包含複數個向量元素,各子向量具有一相等子向量長度;及 回應於該子向量支援指令,該指令解碼電路系統控制該處理電路系統在子向量粒度下針對該給定向量執行一操作。
- 一種用以控制一主機資料處理設備以提供用於目標碼之執行的一指令執行環境的電腦程式;該電腦程式包含: 指令解碼程式邏輯,用以解碼該目標碼的指令以回應於該目標碼的該等指令而控制該主機資料處理設備執行資料處理;其中: 該指令解碼程式邏輯支援根據一可擴縮向量指令集架構所定義之程式指令的解碼,該可擴縮向量指令集架構支援在可擴縮向量長度之向量上操作的向量指令,以使相同指令序列可在具有支援不同最大向量長度之硬體的設備上執行; 該指令解碼程式邏輯包含子向量支援指令解碼程式邏輯,用以解碼將一給定向量視為包含複數個子向量的一子向量支援指令,其中各子向量包含複數個向量元素,各子向量具有一相等子向量長度;及 回應於該子向量支援指令,該指令解碼程式邏輯經組態以控制該主機資料處理設備在子向量粒度下針對該給定向量執行一操作。
- 一種儲存媒體,其儲存如請求項23的電腦程式。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2203431.8A GB2616601B (en) | 2022-03-11 | 2022-03-11 | Sub-vector-supporting instruction for scalable vector instruction set architecture |
GB2203431.8 | 2022-03-11 |
Publications (1)
Publication Number | Publication Date |
---|---|
TW202403546A true TW202403546A (zh) | 2024-01-16 |
Family
ID=81254804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW112105151A TW202403546A (zh) | 2022-03-11 | 2023-02-14 | 用於可擴縮向量指令集架構的子向量支援指令 |
Country Status (4)
Country | Link |
---|---|
GB (1) | GB2616601B (zh) |
IL (1) | IL314882A (zh) |
TW (1) | TW202403546A (zh) |
WO (1) | WO2023170373A1 (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4745547A (en) * | 1985-06-17 | 1988-05-17 | International Business Machines Corp. | Vector processing |
US9557995B2 (en) * | 2014-02-07 | 2017-01-31 | Arm Limited | Data processing apparatus and method for performing segmented operations |
EP3125108A1 (en) * | 2015-07-31 | 2017-02-01 | ARM Limited | Vector processing using loops of dynamic vector length |
-
2022
- 2022-03-11 GB GB2203431.8A patent/GB2616601B/en active Active
- 2022-12-15 WO PCT/GB2022/053244 patent/WO2023170373A1/en active Application Filing
- 2022-12-15 IL IL314882A patent/IL314882A/en unknown
-
2023
- 2023-02-14 TW TW112105151A patent/TW202403546A/zh unknown
Also Published As
Publication number | Publication date |
---|---|
IL314882A (en) | 2024-10-01 |
GB2616601A (en) | 2023-09-20 |
GB2616601B (en) | 2024-05-08 |
WO2023170373A1 (en) | 2023-09-14 |
GB202203431D0 (en) | 2022-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Reshadi et al. | Instruction set compiled simulation: A technique for fast and flexible instruction set simulation | |
KR100230105B1 (ko) | 간략화된 명령 세트 프로세서의 성능 개선 방법 및 그 프로세서 시스템 | |
KR100218572B1 (ko) | 고성능 프로세서의 번역버퍼에 대해 세분성 힌트를 이용하는 프로세서 동작 방법 및 장치 | |
KR101442429B1 (ko) | 프로세서의 펑션 쿼리를 위한 펑션 가상화 장치 | |
US8010953B2 (en) | Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine | |
KR100231380B1 (ko) | 감소된 명령 세트 프로세서 내부 레지스터의 데이타를 조작하는 방법 및 장치 | |
US9495163B2 (en) | Address generation in a data processing apparatus | |
US7065631B2 (en) | Software controllable register map | |
JP5717848B2 (ja) | 特定の命令がプロセッサによって実行されないようにブロックするためのコンピュータで実装される方法、コンピュータ・システム、およびコンピュータ・プログラム | |
KR102586257B1 (ko) | 명령들의 실행을 제어하는 장치 및 방법 | |
US20230289186A1 (en) | Register addressing information for data transfer instruction | |
Clark et al. | Liquid SIMD: Abstracting SIMD hardware using lightweight dynamic mapping | |
CN107729118A (zh) | 面向众核处理器的修改Java虚拟机的方法 | |
US20240028337A1 (en) | Masked-vector-comparison instruction | |
TW202403546A (zh) | 用於可擴縮向量指令集架構的子向量支援指令 | |
Bunda | Instruction-processing optimization techniques for VLSI microprocessors | |
CN118829969A (zh) | 用于可缩放向量指令集架构的子向量支持指令 | |
US11347506B1 (en) | Memory copy size determining instruction and data transfer instruction | |
GB2615352A (en) | Technique for performing memory access operations | |
JP2024515081A (ja) | ケイパビリティを使用してメモリへのアクセスを制約するための技法 | |
JP2002182925A (ja) | コンパイル方法及びコンピュータ読み取り可能な記録媒体 | |
Burcham | An X86 emulator written using Java | |
Wang et al. | MTX in 32-bit Protected Mode |