TWI697788B - 用以提供向量包裝之直方圖功能的方法,裝置,指令及邏輯 - Google Patents
用以提供向量包裝之直方圖功能的方法,裝置,指令及邏輯 Download PDFInfo
- Publication number
- TWI697788B TWI697788B TW105115542A TW105115542A TWI697788B TW I697788 B TWI697788 B TW I697788B TW 105115542 A TW105115542 A TW 105115542A TW 105115542 A TW105115542 A TW 105115542A TW I697788 B TWI697788 B TW I697788B
- Authority
- TW
- Taiwan
- Prior art keywords
- data fields
- register
- data
- processor
- vector
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 42
- 238000012545 processing Methods 0.000 claims description 195
- 230000015654 memory Effects 0.000 claims description 176
- 238000004806 packaging method and process Methods 0.000 claims description 90
- 230000006870 function Effects 0.000 claims description 82
- 238000007667 floating Methods 0.000 claims description 42
- 238000012856 packing Methods 0.000 claims description 3
- 230000005055 memory storage Effects 0.000 claims 4
- 238000003860 storage Methods 0.000 description 34
- 238000012546 transfer Methods 0.000 description 33
- 230000005540 biological transmission Effects 0.000 description 28
- 238000010586 diagram Methods 0.000 description 28
- 238000005516 engineering process Methods 0.000 description 25
- 230000008569 process Effects 0.000 description 19
- 238000004519 manufacturing process Methods 0.000 description 14
- 238000013461 design Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 9
- 230000008094 contradictory effect Effects 0.000 description 8
- 238000000605 extraction Methods 0.000 description 8
- 239000000872 buffer Substances 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 7
- 238000001514 detection method Methods 0.000 description 7
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 6
- 230000008901 benefit Effects 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 6
- 238000013500 data storage Methods 0.000 description 6
- 238000009826 distribution Methods 0.000 description 6
- 238000005538 encapsulation Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 230000002093 peripheral effect Effects 0.000 description 6
- 230000004044 response Effects 0.000 description 6
- 238000004088 simulation Methods 0.000 description 6
- 238000006073 displacement reaction Methods 0.000 description 5
- 230000009977 dual effect Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000006835 compression Effects 0.000 description 4
- 238000007906 compression Methods 0.000 description 4
- 230000033001 locomotion Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000005291 magnetic effect Effects 0.000 description 3
- 238000003909 pattern recognition Methods 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 229910052754 neon Inorganic materials 0.000 description 2
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 1
- 102000001332 SRC Human genes 0.000 description 1
- 108060006706 SRC Proteins 0.000 description 1
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 238000003708 edge detection Methods 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
- G06F15/8076—Details on data register access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- 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/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- 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/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本發明揭示提供SIMD向量包裝之直方圖功能的指令與邏輯。一些處理器實施例包括第一與第二暫存器,分別儲存第一與第二資料類型之對應元件於暫存器傳巷部份之複數個資料欄位之其中各者中。解碼階段解碼用於SIMD向量包裝之直方圖的指令。一或多個執行單元將該第一暫存器傳巷部份中之該第一資料類型之各元件,與由該指令所指明之一範圍加以比較。對於該範圍中之該第一暫存器部份的任何元件,來自該第二暫存器部份之該第二資料類型的對應元件係根據該第一資料類型的其對應元件之該值而被增加於一目的暫存器傳巷部份的複數個資料欄位之其中一者,以對各目的暫存器傳巷部份產生包裝之加權直方圖。
Description
本揭露係關於處理邏輯、微處理、及相關聯的指令集架構之領域,當指令集由處理器或其他處理邏輯執行時會執行邏輯的、數學的、或其他功能的操作。具體言之,本揭露係關於用以提供單一指令多重資料(single-instruction multiple-data;SIMD)向量封裝之直方圖功能的處理器指令及邏輯。
現代的處理器通常包括用以提供計算密集之操作但提供高階的資料平行處理的指令,其可使用各種資料儲存裝置(例如SIMD向量暫存器)透過有效率的實現而被開發。於SIMD執行中,單一指令並存地或同時地操作於多重資料元件。其係典型地藉由延伸各種資源(例如暫存器與算術邏輯單元(arithmetic logic unit;ALU))的寬度來實現,允許其分別保持或操作於多重資料元件。
中央處理單元(central processing unit;CPU)可提供此平行硬體以支援向量之SIMD處理。向量是保持一數量的連續的資料元之一種資料結構。大小為L之向量暫存器可含有N個大小為M之向量元件,其中N=L/M。例如,64位元組的向量暫存器可被分割成(a)64個向量元件,各元件保持佔1個位元組之資料項目;(b)32個向量元件,各元件保持佔2個位元組(或一個「字元(word)」)之資料項目;(c)16個向量元件,各元件保持佔4個位元組(或一個「雙字元(doubleword)」)之資料項目;或(d)8個向量元件,各元件保持佔8個位元組(或一個「四字元(quadword)」)之資料項目。
一數量的應用具有大量的資料級平行處理且可從SIMD支援中獲益。然而,一些應用花費大量的時間於一組稀疏位置之操作。分散減少(Scatter reduction)在許多應用中是一般操作。舉例來說,分散增加(scatter-add)操作可被使用以根據索引的分佈(其通常為隨機)賦能第一陣列的多個值被減少至(亦即,被加至)第二陣列之所選擇的元件中。但是,因為此緣故,有效率地並存地(亦即,於SIMD模式中)處理多個元件會是困難的。一個考量是,確定當有需要時,純量程式次序(scalar program order)係被保存。另一考量是,確定當資料被寫回記憶體時,記憶體位址之所得向量僅包括唯一的位址(亦即,沒有矛盾的重複位址)。
舉例來說,直方圖計算在許多影像處理應用中為一般
操作。直方圖可被使用以追蹤影像中的像素之色彩值的分佈、或影像中強度梯度(intensity gradient)及/或邊緣方向的分佈以用於電腦視覺及物件偵測。然而,根據至一陣列的輸入資料,對直方圖陣列的更新可為隨機的。具體言之,鄰近元件的索引可指向相同的直方圖單元條(histogram bin)。因此,矛盾偵測與解析可被需要以對相同位置偵測多個相關更新及確保純量程式次序被保存。其係明確地為使得並存地或同時地(亦即,使用SIMD操作)處理多重資料非常困難的那種情況。
迄今,對連續的瓶頸(例如矛盾考量與有關處理困難)的可能解法仍未被適當地開發。
100‧‧‧系統
102‧‧‧處理器
104‧‧‧快取記憶體
106‧‧‧暫存器檔案
108‧‧‧執行單元
109‧‧‧封裝指令集
110‧‧‧處理器匯流排
112‧‧‧圖形卡
114‧‧‧加速圖形埠(AGP)互連
116‧‧‧記憶體控制器集線器
118‧‧‧記憶體介面
120‧‧‧記憶體
122‧‧‧系統I/O
124‧‧‧資料儲存器
126‧‧‧無線收發器
128‧‧‧韌體集線器
130‧‧‧I/O控制器集線器
134‧‧‧網路控制器
140‧‧‧資料處理系統
141‧‧‧匯流排
142‧‧‧執行單元
143‧‧‧封裝指令集
144‧‧‧解碼器
145‧‧‧暫存器檔案
146‧‧‧SDRAM控制
147‧‧‧SRAM控制
148‧‧‧突發快閃記憶體介面
149‧‧‧PCMCIA/CF卡控制
150‧‧‧LCD控制
151‧‧‧DMA控制器
152‧‧‧替代匯流排主介面
153‧‧‧I/O匯流排
154‧‧‧I/O橋接器
155‧‧‧通用異步接收器/傳送器
156‧‧‧通用序列匯流排
157‧‧‧藍芽無線UART
158‧‧‧I/O擴充介面
159‧‧‧處理核心
160‧‧‧資料處理系統
161‧‧‧SIMD共處理器
162‧‧‧執行單元
163‧‧‧指令集
164‧‧‧暫存器檔案
165‧‧‧解碼器
165B‧‧‧解碼器
166‧‧‧主處理器
167‧‧‧快取記憶體
168‧‧‧輸入/輸出系統
169‧‧‧無線介面
170‧‧‧處理核心
171‧‧‧共處理器匯流排
200‧‧‧處理器
201‧‧‧循序前端
202‧‧‧快速排程器
203‧‧‧亂序執行引擎
204‧‧‧慢/一般浮點排程器
206‧‧‧簡單浮點排程器
208‧‧‧暫存器檔案
210‧‧‧暫存器檔案
211‧‧‧執行區塊
212‧‧‧執行單元
214‧‧‧執行單元
216‧‧‧執行單元
218‧‧‧執行單元
220‧‧‧執行單元
222‧‧‧執行單元
224‧‧‧執行單元
226‧‧‧指令預取器
228‧‧‧指令解碼器
230‧‧‧追蹤快取
232‧‧‧微碼ROM
234‧‧‧uop佇列
310‧‧‧封裝位元組
320‧‧‧封裝字元
330‧‧‧封裝雙字元
341‧‧‧半封裝
342‧‧‧單封裝
343‧‧‧雙封裝
344‧‧‧未帶符號的封裝位元組表示法
345‧‧‧帶符號的封裝位元組表示法
346‧‧‧未帶符號的封裝字元表示法
347‧‧‧帶符號的封裝字元表示法
348‧‧‧未帶符號的封裝雙字元表示法
349‧‧‧帶符號的封裝雙字元表示法
360‧‧‧操作碼格式
361‧‧‧欄位
362‧‧‧欄位
363‧‧‧MOD欄位
364‧‧‧來源運算元識別符
365‧‧‧來源運算元識別符
366‧‧‧目的運算元識別符
370‧‧‧操作碼格式
371‧‧‧欄位
372‧‧‧欄位
373‧‧‧MOD欄位
374‧‧‧來源運算元識別符
375‧‧‧來源運算元識別符
376‧‧‧目的運算元識別符
378‧‧‧前置位元組
380‧‧‧操作碼格式
381‧‧‧條件欄位
382‧‧‧操作碼欄位
383‧‧‧欄位
384‧‧‧欄位
385‧‧‧來源運算元識別符
386‧‧‧目的運算元識別符
387‧‧‧操作碼欄位
388‧‧‧操作碼欄位
389‧‧‧操作碼欄位
390‧‧‧來源運算元識別符
391‧‧‧VEX前置位元組
392‧‧‧操作碼欄位
393‧‧‧標度-索引-基礎識別符
394‧‧‧位移識別符
395‧‧‧立即位元組
396‧‧‧EVEX前置位元組
397‧‧‧操作碼欄位
398‧‧‧操作碼欄位
400‧‧‧處理器管線
402‧‧‧提取階段
404‧‧‧長度解碼階段
406‧‧‧解碼階段
408‧‧‧分配階段
410‧‧‧更名階段
412‧‧‧排程階段
414‧‧‧暫存器讀取/記憶體讀取階段
416‧‧‧執行階段
418‧‧‧寫回/記憶體寫入階段
422‧‧‧例外處理階段
424‧‧‧提交階段
430‧‧‧前端單元
432‧‧‧分支預測單元
434‧‧‧指令快取單元
436‧‧‧指令轉譯後備緩衝器
438‧‧‧指令提取單元
440‧‧‧解碼單元
450‧‧‧執行引擎單元
452‧‧‧更名/分配器單元
454‧‧‧引退單元
456‧‧‧排程器單元
458‧‧‧實體暫存器檔案單元
460‧‧‧執行叢集
462‧‧‧執行單元
464‧‧‧記憶體存取單元
470‧‧‧記憶體單元
472‧‧‧資料TLB單元
474‧‧‧資料快取單元
476‧‧‧L2快取單元
490‧‧‧核心
500‧‧‧多核心處理器
502A‧‧‧核心
502N‧‧‧核心
504A‧‧‧快取單元
504N‧‧‧快取單元
506‧‧‧共用快取單元
508‧‧‧整合式圖形邏輯
510‧‧‧系統代理單元
512‧‧‧環狀互連單元
514‧‧‧整合式記憶體控制器單元
516‧‧‧匯流排控制器單元
600‧‧‧系統
610‧‧‧處理器
615‧‧‧處理器
620‧‧‧圖形記憶體控制器集線器
640‧‧‧記憶體
645‧‧‧顯示器
650‧‧‧I/O控制器集線器
660‧‧‧外部圖形裝置
670‧‧‧週邊裝置
695‧‧‧多接點匯流排
700‧‧‧系統
714‧‧‧I/O裝置
716‧‧‧第一匯流排
718‧‧‧匯流排橋接器
720‧‧‧第二匯流排
722‧‧‧鍵盤及/或滑鼠
724‧‧‧音訊I/O
727‧‧‧通訊裝置
728‧‧‧儲存單元
730‧‧‧碼及資料
732‧‧‧記憶體
734‧‧‧記憶體
738‧‧‧高性能圖形電路
739‧‧‧高性能圖形介面
750‧‧‧點對點互連
752‧‧‧P-P介面
754‧‧‧P-P介面
770‧‧‧處理器
772‧‧‧整合式記憶體控制器單元
776‧‧‧點對點介面
778‧‧‧點對點介面
780‧‧‧處理器
782‧‧‧整合式記憶體控制器單元
786‧‧‧點對點介面
788‧‧‧點對點介面
790‧‧‧晶片組
794‧‧‧點對點介面
796‧‧‧介面
798‧‧‧點對點介面
800‧‧‧系統
814‧‧‧I/O裝置
815‧‧‧舊有I/O裝置
832‧‧‧記憶體
834‧‧‧記憶體
870‧‧‧處理器
872‧‧‧整合式記憶體及I/O控制邏輯
880‧‧‧處理器
882‧‧‧整合式記憶體及I/O控制邏輯
890‧‧‧晶片組
900‧‧‧系統單晶片
902‧‧‧互連單元
910‧‧‧應用處理器
920‧‧‧媒體處理器
924‧‧‧影像處理器
926‧‧‧音訊處理器
928‧‧‧視訊處理器
930‧‧‧SRAM單元
932‧‧‧DMA單元
940‧‧‧顯示單元
1000‧‧‧處理器
1005‧‧‧中央處理器
1010‧‧‧圖形處理器
1015‧‧‧影像處理器
1020‧‧‧視訊處理器
1025‧‧‧USB控制器
1030‧‧‧UART控制器
1035‧‧‧SPI/SDIO控制器
1040‧‧‧顯示裝置
1045‧‧‧HDMI控制器
1050‧‧‧MIPI控制器
1055‧‧‧快閃記憶體控制器
1060‧‧‧DDR控制器
1065‧‧‧安全引擎
1070‧‧‧I2S/I2C介面
1110‧‧‧硬體或軟體模型
1120‧‧‧模擬軟體
1130‧‧‧儲存器
1140‧‧‧記憶體
1150‧‧‧有線連接
1160‧‧‧無線連接
1165‧‧‧製造
1205‧‧‧程式
1210‧‧‧模擬邏輯
1215‧‧‧處理器
1302‧‧‧高階語言
1304‧‧‧x86編譯器
1306‧‧‧x86二進制碼
1308‧‧‧替代指令集編譯器
1310‧‧‧替代指令集二進制碼
1312‧‧‧指令轉換器
1314‧‧‧沒有至少一x86指令集核心之處理器
1316‧‧‧具有至少一x86指令集核心之處理器
1401‧‧‧處理
1402‧‧‧處理
1403‧‧‧處理
1404‧‧‧處理
1405‧‧‧處理
1406‧‧‧處理
1410‧‧‧處理方塊
1420‧‧‧處理方塊
1430‧‧‧處理方塊
1441‧‧‧處理方塊
1442‧‧‧處理方塊
1442‧‧‧處理方塊
1443‧‧‧處理方塊
1443‧‧‧處理方塊
1444‧‧‧處理方塊
1445‧‧‧處理方塊
1446‧‧‧處理方塊
1450‧‧‧處理方塊
1460‧‧‧處理方塊
1470‧‧‧處理方塊
1499‧‧‧處理方塊
1501‧‧‧裝置
1502‧‧‧裝置
1503‧‧‧裝置
1510‧‧‧第一向量暫存器
1514‧‧‧範圍比較邏輯
1515‧‧‧單元條選擇邏輯
1516‧‧‧加法器邏輯
1520‧‧‧第二向量暫存器或記憶體向量
1524‧‧‧範圍比較邏輯
1525‧‧‧單元條選擇邏輯
1526‧‧‧加法器邏輯
1530‧‧‧範圍
1534‧‧‧範圍比較邏輯
1535‧‧‧單元條選擇邏輯
1536‧‧‧加法器邏輯
1570‧‧‧結果
本發明係藉由後附圖式中之範例來說明但非用以限制。
第1A圖為執行用以提供SIMD向量封裝之直方圖功能之指令的系統之一實施例的方塊圖。
第1B圖為執行用以提供SIMD向量封裝之直方圖功能之指令的系統之另一實施例的方塊圖。
第1C圖為執行用以提供SIMD向量封裝之直方圖功能之指令的系統之另一實施例的方塊圖。
第2圖為執行指令以提供SIMD向量封裝之直方圖功能之指令的處理器之一實施例的方塊圖。
第3A圖為根據一實施例之封裝資料類型。
第3B圖為根據一實施例之封裝資料類型。
第3C圖為根據一實施例之封裝資料類型。
第3D圖為根據一實施例之用以提供SIMD向量封裝之直方圖功能的指令編碼。
第3E圖為根據另一實施例之用以提供SIMD向量封裝之直方圖功能的指令編碼。
第3F圖為根據另一實施例之用以提供SIMD向量封裝之直方圖功能的指令編碼。
第3G圖為根據另一實施例之用以提供SIMD向量封裝之直方圖功能的指令編碼。
第3H圖為根據另一實施例之用以提供SIMD向量封裝之直方圖功能的指令編碼。
第4A圖為用以執行提供SIMD向量封裝之直方圖功能的指令的處理器微架構之一實施例的元件。
第4B圖為用以執行提供SIMD向量封裝之直方圖功能的指令的處理器微架構之另一實施例的元件。
第5圖為執行提供SIMD向量封裝之直方圖功能的指令的處理器之一實施例的方塊圖。
第6圖為執行提供SIMD向量封裝之直方圖功能的指令的電腦系統之一實施例的方塊圖。
第7圖為執行提供SIMD向量封裝之直方圖功能的指令的電腦系統之另一實施例的方塊圖。
第8圖為執行提供SIMD向量封裝之直方圖功能的指令的電腦系統之另一實施例的方塊圖。
第9圖為執行提供SIMD向量封裝之直方圖功能的指令的系統單晶片之一實施例的方塊圖。
第10圖為執行提供SIMD向量封裝之直方圖功能的指令的處理器之一實施例的方塊圖。
第11圖為提供SIMD向量封裝之直方圖功能的IP核心開發系統之一實施例的方塊圖。
第12圖顯示提供SIMD向量封裝之直方圖功能的架構模擬系統之一實施例。
第13圖顯示用以轉譯提供SIMD向量封裝之直方圖功能的指令之系統的一實施例。
第14A圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的處理之一範例的一實施例的流程圖。
第14B圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的處理之另一範例的一實施例的流程圖。
第14C圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的處理之一範例的替代實施例的流程圖。
第14D圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的處理之一範例的另一替代實施例的流程圖。
第14E圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的範例處理之另一替代實施例的
流程圖。
第14F圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的第六範例處理之另一替代實施例的流程圖。
第15A圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的一裝置。
第15B圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的替代裝置。
第15C圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的另一替代裝置。
以下說明揭露於一處理器、電腦系統、或其他處理裝置內(或與其關聯)用以提供SIMD向量封裝之直方圖功能的指令及處理邏輯。指令與邏輯係於此揭露以提供SIMD向量封裝之直方圖功能。一些處理器實施例包括第一與第二向量暫存器,於暫存器傳巷部份(register lane portion)之複數個資料欄位中的各者中分別儲存第一單元條資料類型及第二大小(magnitude)資料類型之對應的元件。解碼階段解碼一指令以用於計算SIMD向量封裝之直方圖。一或多個執行單元將該第一暫存器傳巷部份中之該第一資料類型之各單元,與由該指令所指明之一範圍加以比較。於一些實施例中,該範圍可被於立即運算元(immediate operand)中之指令所界定。替代地,該範圍可藉由該指令
之一特定操作碼來界定。於一些其他替代實施例中,該範圍可被界定為於目的暫存器傳巷部份之複數個q資料欄位中的一組初始值中之一者。對於於所界定範圍中之該第一暫存器部份的任何元件,來自該第二暫存器部份之該第二大小資料類型的對應元件係根據該第一單元條資料類型的其對應元件之該值來選擇而被增加於目的暫存器傳巷部份的複數個資料欄位之其中一者中,以對各目的暫存器傳巷部份產生封裝之加權的直方圖。
用以提供SIMD向量封裝之直方圖功能的指令與處理邏輯在各種應用中具有利用價值,包括(但不限於)機器視覺、物件辨識與分類、型樣辨識等等。舉例來說,一類型的技術於物件偵測的目的計算於一影像之局部化部份中梯度定向(gradient orientation)之發生。此特定類型的技術之特徵係已知為方向梯度直方圖(Histogram of Oriented Gradient;HOG)描述符。HOG特徵的抽出物(extraction)係被Navneed Dalal與Bill Triggs介紹於「Histograms of oriented gradients for human detection」,IEEE Computer Scociety Conference on Computer Vision and Pattern Recognition,2005。這些HOG描述符之實現典型地涉及將一影像分成小的連接區域(稱為單元),及在這些連接區域內對於像素編譯梯度方向或邊緣定向的直方圖。此等直方圖之組合接著表示該描述符。區域直方圖可接著藉由使用在較大區域(稱為區塊)中使用強度的一測量而被進行對比標準化,以標準化該區塊內之單元。
應了解的是,SIMD向量封裝之直方圖指令(如此處所揭露者)可被使用以於平行SIMD硬體中執行多個相關更新至相同單元條位置。亦應了解的是,於此揭露的SIMD向量封裝之直方圖指令與處理裝置邏輯可消除連續瓶頸,例如矛盾考量與有關處理困難。
於接下來的說明中,各種特定細節(例如處理邏輯、處理器類型、微架構狀況、事件、賦能機制等等)係被提出用以提供本發明之實施例更全面的了解。然而,對於所屬技術領域中具有通常知識者而言將了解的是,沒有這些詳細說明亦可實現本發明。此外,一些已被熟知的結構、電路等等未被詳細顯示以避免不必要的模糊本發明之實施例。
雖然以下實施例係參照處理器來說明,其他實施例可應用其他類型的積體電路及邏輯裝置。本發明之實施例之類似的技術及教示可被應用至有助於較佳管道貫量及改良的效能之其他類型的電路或半導體裝置。本發明之實施例的教示可應用至執行資料處理之任何處理器或機器。然而,本發明並未受限於執行512位元、256位元、128位元、64位元、32位元或16位元資料操作之處理器或機器且可被應用至可於其中執行資料之處理與管理的任何處理器及機器。此外,以下說明提供範例,而所附圖式顯示各種範例以供說明用。然而,這些範例不應被解釋為限制之含義,而係提供本發明之實施例的範例,並非提供本發明之實施例的所有可能的實現之無遺漏的列表。
雖然以下範例說明指令處理及分配於指令單元與邏輯電路之說明中,本發明之其他實施例可藉由儲存於機器可讀的有形媒體上之資料及/或指令(當其由機器執行時造成機器執行與本發明之至少一實施例一致的功能)來實現。於一實施例中,與本發明之實施例相關聯的功能係被嵌入於機器可執行的指令中。指令可被使用以造成以指令進行程式化之一般目的或特殊目的處理系統執行本發明之步驟。本發明之實施例可被提供為電腦程式產品或軟體,其可包含根據本發明之實施例具有指令(其可被使用以執行一電腦(或其他電子裝置)用以執行一或多個操作)儲存於其上之機器或電腦可讀取媒體。替代地,本發明之實施例的步驟可被含有用以執行該等步驟的固定功能式(fixed-function)邏輯之特定硬體組件執行,或藉由程式化的電腦組件及固定功能式硬體組件之任何組合。
被使用以對邏輯進行程式化以執行本發明之實施例的指令可被儲存於系統中之記憶體內,例如DRAM、快取、快閃記憶體、或其他儲存器。再者,指令可被經由網路或藉由其他電腦可讀取媒體來散佈。因此,機器可讀取媒體可包含用以以機器(例如電腦)可讀的形式儲存或傳送資訊之任何機制,但不限於,軟碟、光碟、壓縮光碟、光碟唯讀記憶體(CD-ROM)、及磁光碟、唯讀記憶體(ROM)、隨機存取記憶體(RAM)、可抹除可程式化唯讀記憶體(EPROM)、電氣可抹除可程式化唯讀記憶體(EEPROM)、磁或光卡、快閃記憶體、或使用於透過網計網路經由電
的、光的、聽覺的或其他形式的傳播訊號(例如載波、紅外線訊號、數位訊號等等)之資訊的傳送之有形的機器可讀取的儲存器。因此,電腦可讀取媒體包括適用於以機器(例如電腦)可讀取的形式儲存或傳送電子指令或資訊的任何類型之有形的機器可讀取媒體。
設計可歷經各種階段,從創作到模擬到製造。表示一設計之資料可以數種方式表示該設計。首先,在模擬中有用的是,硬體可使用硬體描述語言或另一功能描述語言而被表示。此外,具有邏輯及/或電晶體閘極之電路級模型可在設計流程之某些階段中被產生。再者,在某些階段,大部分設計達到表示硬體模型中各種裝置的實體布局之資料級。在使用傳統半導體製造技術的情形中,表示硬體模型的資料可為指明對於被使用以產生積體電路的於不同遮罩層之許多特徵的存在或不存在之資料。於該設計的任何表示中,該資料可被儲存於任何形式的機器可讀取媒體中。記憶體或磁性的或光學的儲存器(例如碟)可為機器可讀取媒體用以儲存經由經調製的或被產生以傳送此資訊的光或電波傳送之資料。當表示或攜帶碼或設計之電載波係被傳送至複製、緩衝、或電訊號之再傳送係被執行的程度時,新的副本係被做出。因此,通訊提供者或網路提供者可將一物件(例如編碼成載波之資訊)至少暫時地儲存於有形的機器可讀取媒體,以具體化本發明之實施例的技術。
於現今的處理器中,一些不同的執行單元係被使用以處理及執行多樣的碼及指令。並非所有指令係被平等建
立,有些會較快完成,而其他指令則需要一數量的時脈週期來完成。指令的產量越快,則處理器的整體效能越好。因此,具有許多盡可能快地執行的指令將有優勢。然而,特定指令具有較大複雜度且需要較多的執行時間與處理器資源。舉例來說,浮點指令、載入/儲存操作、資料移動等等。
當較多電腦系統被使用於網際網路、文書、及多媒體應用時,額外的處理器支援已隨著時間被引入。於一實施例中,指令集可與一或多個電腦架構相關聯,包含資料類型、指令、暫存器架構、定址模式、記憶體架構、中斷及異常處理、及外部輸入及輸出(I/O)。
於一實施例中,指令集架構(instruction set architecture;ISA)可藉由一或多個微架構(其包括被使用以實現一或多個指令集之處理器邏輯及電路)來實現。因此,具有不同微架構之處理器可共用至少一部分的共同指令集。舉例來說,Intel® Pentium 4處理器、Intel® CoreTM處理器、及來自美國加州Sunnyvale之Advanced Micro Devices的處理器實現近乎相同的版本的x86指令集(較新的版本有加入一些擴充),但具有不同內部設計。同樣地,由其他處理器開發公司(例如ARM Holdings,Ltd.、MIPS、或獲其授權者(licensee)或採用者(adopter)所設計的處理器可共用至少一部分的共同指令集,但可包含不同的處理器設計。舉例來說,ISA之相同的暫存器架構可使用新的或已知的技術以不同方式於不同微架構被實
現,包含專屬實體暫存器、使用暫存器更名機制(例如暫存器別名表(Register Alias Table;RAT)、重排序緩衝器(Reorder Buffer;ROB)及引退暫存器檔案)之一或多個動態分配實體暫存器。於一實施例中,暫存器可包含一或多個暫存器、暫存器架構、暫存器檔案、或可或可不由軟體程式設計師(software programmer)所定址之其他暫存器組。
於一實施例中,指令可包括一或多個指令格式。於一實施例中,除了別的以外,指令格式可表示各種欄位(位元的數量、位元的位置等等)用以指明待被執行的操作及操作將被執行的運算元。一些指令格式可被指令範本(或子格式)進一步分開界定。舉例來說,給定指令格式之指令範本可被界定以具有指令格式的欄位之不同的子集及/或被界定以具有被不同地解譯之給定的欄位。於一實施例中,指令係被使用指令格式(且,若被界定,於該指令格式之指令範本之其中給定一者中)來表示且指明或表示操作及操作將於其上執行之運算元。
科學的、金融的、自動向量化通用的、RMS(辨別(recognition)、資料挖掘(mining)、及分析合成(synthesis))、及視覺及多媒體應用(例如2D/3D圖形、影像處理、視訊壓縮/解壓縮、聲音辨別演算法及音訊處理)會需要相同的操作待被執行於大量的資料項目。於一實施例中,單指令多資料(Single Instruction Multiple Data;SIMD)表示造成處理器執行一操作於多資料元件之一類型
的指令。SIMD技術可被使用於處理器,其可邏輯地將位元於暫存器中分成數個固定大小的或可變大小的資料元件,各資料元件表示一單獨的值。舉例來說,於一實施例中,於64位元暫存器中之位元可被組織成含有四個單獨的16位元資料元件之來源運算元,各資料元件表示一單獨的16位元值。此類型的資料可稱為「封裝(packed)」資料類型或「向量(vector)」資料類型,且此資料類型之運算元係稱為封裝資料運算元或向量運算元。於一實施例中,封裝資料項目或向量可為儲存於單一暫存器內之一序列的封裝資料元,而封裝資料運算元或向量運算元可為SIMD指令(或「封裝資料指令」或「向量指令」)之來源或目的運算元。於一實施例中,SIMD指令指明待被執行於兩個來源向量運算元之單一向量操作用以產生相同或不同大小之目的向量運算元(亦稱為結果向量運算元),以相同或不同數量的資料元件,且以相同或不同的資料元件次序。
SIMD技術(例如由具有包含x86之Intel® CoreTM處理器所採用的指令集)、MMXTM、Streaming SIMD Extensions(SSE)、SSE2、SSE3、SSE4.1、及SSE4.2指令、ARM處理器(例如具有包含向量浮點(Vector Floating Point;VFP)及/或NEON指令之指令集的處理器之ARM Cortex®家族)、及MIPS處理器(例如中國科學院計算技術研究所開發的處理器之龍芯(Loongson)家族)已有明顯的改善於應用效能(CoreTM及MMXTM是美國Intel Corporation
of Santa Clara,Calif.的註冊商標或商標)。
於一實施例中,目的及來源暫存器/資料為通用術語用以表示對應資料或操作之來源及目的。於某些實施例中,其可藉由暫存器、記憶體、或具有所顯示者以外的其他名稱或功能之其他儲存區所實現。舉例來說,於一實施例中,「DEST1」可為暫時儲存暫存器或其他儲存區域,而「SRC1」與「SRC2」可為第一及第二來源儲存暫存器或其他儲存區域等等。於其他實施例中,二或多個SRC及DEST儲存區域可對應至相同儲存區域內(例如SIMD暫存器)之不同的資料儲存元件。於一實施例中,來源暫存器之其中一者亦可作為目的暫存器,藉由例如將於該第一及第二來源資料所執行的操作之結果寫回作為目的暫存器之兩個來源暫存器之其中一者。
第1A圖為根據本發明之一實施例以包含執行單元用以執行指令之處理器形成的例示電腦系統之方塊圖。根據本發明,例如於此處所述之實施例中,系統100包括一組件,例如處理器102,用以利用包括邏輯之執行單元來對處理資料執行演算法。系統100表示基於美國加州Santa Clara的Intel Corporation所販售的PENTIUM® III、PENTIUM® 4、XeonTM、Itanium®、XScaleTM及/或StrongARMTM微處理器之處理系統,雖然其他系統(包含具有其他微處理器之PC、工程工作站、機上盒等等)亦可被使用。於一實施例中,樣品系統100可執行美國Microsoft Corporation of Redmond,Washington所販售之
WINDOWSTM作業系統的一版本,雖然其他作業系統(例如UNIX及Linux)、嵌入式軟體、及/或圖形使用者介面亦可被使用。因此,本發明之實施例並不限於硬體電路及軟體之任何特定組合。
實施例並不限於電腦系統。本發明之替代實施例可被使用於其他裝置,例如手持裝置及嵌入式應用。手持裝置之一些範例包含蜂窩式電話、網際網路協定裝置、數位照相機、個人數位助理(PDA)、及手持PC。根據至少一實施例,嵌入式應用可包含微控制器、數位訊號處理器(DSP)、系統單晶片、網路電腦(NetPC)、機上盒、網路集線器、廣域網路(WAN)交換器、或可執行一或多個指令之任何其他系統。
第1A圖為根據本發明之一實施例利用處理器102來形成的電腦系統100之方塊圖,其可包含一或多個執行單元108,用以執行一演算法以執行至少一指令。一實施例可說明於上下文中的單一處理器桌上型電腦或伺服器系統,但替代實施例可被包括於多處理器系統中。系統100為「集線式(hub)」系統架構之範例。電腦系統100包括用以處理資料訊號之處理器102。處理器102可為複雜指令集電腦(CISC)微處理器、精簡指令集計算(RISC)微處理器、極長指令字(VLIW)微處理器、實現指令集組合之處理器、或任何其他處理器裝置,例如數位訊號處理器。處理器102被耦接至處理器匯流排110,其可於處理器102與系統100中之其他組件間傳送資料訊號。系統100之元
件執行所屬技術領域中具有通常知識者所熟知之其傳統功能。
於一實施例中,處理器102包括1階(L1)內部快取記憶體104。根據該架構,處理器102可具有單一內部快取或多階內部快取。替代地,於另一實施例中,快取記憶體可位於處理器102外部。根據特定實現及需求,其他實施例亦可包括內部與外部快取之結合。暫存器檔案106可儲存不同類型的資料於各種暫存器中,包含整數暫存器、浮點暫存器、狀態暫存器、及指令指標暫存器。
包括用以執行整數及浮點操作的邏輯之執行單元108亦位於處理器102中。處理器102亦可包括微碼(ucode)ROM,其儲存用於特定巨集指令之微碼。於一實施例中,執行單元108包括用以處理封裝指令集109之邏輯。藉由包含封裝指令集109於通用處理器102之指令集中,以及相關聯的電路用以執行指令,由許多多媒體應用所使用的操作可使用通用處理器102中之封裝資料而被執行。因此,藉由使用全寬度的處理器的資料匯流排以執行操作於封裝資料,許多多媒體應用可被加速及更有效率地執行。其可消除以一次一個資料元件的方式將較小單位的資料傳送跨過處理器的匯流排用以執行一或多個操作的需求。
執行單元108之替代實施例亦可被使用於微控制器、嵌入式處理器、圖形裝置、DSP、及其他類型的邏輯電路。系統100包括記憶體120。記憶體120可為動態隨機
存取記憶體(DRAM)裝置、靜態隨機存取記憶體(SRAM)裝置、快閃記憶體裝置、或其他記憶體裝置。記憶體120可儲存由資料訊號(其可被處理器102執行)所表示之指令及/或資料。
系統邏輯晶片116被耦接至處理器匯流排110及記憶體120。於所示實施例中之系統邏輯晶片116為記憶體控制器集線器(memory controller hub;MCH)。處理器102可經由處理器匯流排110與MCH 116通訊。MCH 116提供高頻寬記憶體路徑118至記憶體120以供指令及資料儲存及供圖形命令、資料及文字的儲存。MCH 116係指揮處理器102、記憶體120、及系統100中之其他組件間之資料訊號及橋接處理器匯流排110、記憶體120、及系統I/O 122間之資料訊號。於一些實施例中,系統邏輯晶片116可提供圖形埠以耦接至圖形控制器112。MCH 116係透過記憶體介面118而被耦接至記憶體120。圖形卡112係透過加速圖形埠(AGP)互連114而被耦接至MCH 116。
系統100使用週邊集線器介面匯流排122以耦接MCH 116至I/O控制器集線器(ICH)130。ICH 130提供經由區域I/O匯流排而直接連接至一些I/O裝置。該區域I/O匯流排為高速I/O匯流排以將週邊連接至記憶體120、晶片組、及處理器102。一些範例為音訊控制器、韌體集線器(快閃BIOS)128、無線收發器126、資料儲存器124、包含使用者輸入及鍵盤介面之傳統I/O控制器、例如通用序列匯流排(USB)之序列擴充埠、及網路控制器
134。資料儲存裝置124可包含硬碟機、軟碟機、CD-ROM裝置、快閃記憶體裝置、或其他大量儲存裝置。
對於系統的另一實施例,根據一實施例之指令可被系統單晶片使用。系統單晶片之一實施例包含處理器及記憶體。用於此系統之記憶體為快閃記憶體。快閃記憶體可與處理器及其他系統組件位於相同的晶粒上。此外,例如記憶體控制器或圖形控制器之其他邏輯區塊亦可位於系統單晶片。
第1B圖顯示實現本說明之一實施例的原理之資料處理系統140。所屬技術領域中具有通常知識者應了解的是,此處所述之實施例可被使用於替代處理系統而不超出本發明之實施例的範疇。
電腦系統140包含根據一實施例能執行至少一指令之處理核心159。於一實施例中,處理核心159表示任何類型的架構之處理單元,包括但不限於,CISC、RISC或VLIW類型架構。處理核心159亦可適於製造於一或多個處理技術且藉由於機器可讀取媒體上以充足的細節來表現,可適於促進所述製造。
處理核心159包含執行單元142、一組暫存器檔案145、及解碼器144。處理核心159亦包括額外的電路(未圖示),其對於本揭露之實施例的了解是不必要的。執行單元142係被使用以執行由處理核心159所接收的指令。除了執行典型的處理器指令,執行單元142可執行封裝指令集143中的指令以執行封裝資料格式之操作。封裝指令
集143包括用以執行本發明之實施例的指令及其他封裝指令。執行單元142係藉由內部匯流排而被耦接至暫存器檔案145。暫存器檔案145表示於處理核心159上之儲存區域以用於儲存資訊(包括資料)。如前所述,應了解的是,被使用以儲存封裝資料之儲存區域不是重要的。執行單元142被耦接至解碼器144。解碼器144係被使用以將由處理核心159所接收的指令解碼成控制訊號及/或微碼轉移點。回應這些控制訊號及/或微碼轉移點,執行單元142執行適當的操作。於一實施例中,解碼器係被使用以解譯指令之操作碼,其將表示那個操作應被執行於在該指令內表示之對應的資料。
處理核心159係被耦接至匯流排141以與各種其他系統裝置通訊,其包含但不限於,同步動態隨機存取記憶體(SDRAM)控制146、靜態隨機存取記憶體(SRAM)控制147、突發快閃記憶體介面148、個人電腦記憶卡國際協會(PCMCIA)/緊湊型快閃記憶(CF)卡控制149、液晶顯示器(LCD)控制150、直接記憶體存取(DMA)控制器151、及替代匯流排主介面152。於一實施例中,資料處理系統140亦可包含I/O橋接器154,用於經由I/O匯流排153與各種I/O裝置通訊。此I/O裝置可包括但不限於,例如通用異步接收器/傳送器(UART)155、通用序列匯流排(USB)156、藍芽無線UART 157及I/O擴充介面158。
資料處理系統140之一實施例提供行動、網路及/或無線通訊及處理核心159,其能執行包括文字組串比較操
作之SIMD操作。處理核心159可被用各種音訊、視訊、影像及通訊演算法來程式化,包括離散轉換(例如華須一哈德瑪變換、快速傅立葉轉換(FFT)、離散餘弦轉換(DCT)、及其個別的反轉換)、壓縮/解壓縮技術(例如色彩空間轉換、視訊編碼動作估計或視訊解碼動作補償)、及調變/解調變(MODEM)功能(例如脈衝編碼調變(PCM))。
第1C圖顯示能執行用以提供SIMD向量封裝之直方圖功能之指令的資料處理系統的另一替代實施例。根據一替代實施例,資料處理系統160可包括主處理器166、SIMD共處理器161、快取記憶體167、及輸入/輸出系統168。輸入/輸出系統168可選項地被耦接至無線介面169。根據一實施例,SIMD共處理器161能執行包含指令之操作。處理核心170可適於製造於一或多個處理技術且藉由於機器可讀取媒體上以充足的細節來表現,可適於促進包括處理核心170之資料處理系統160的所有或部份之所述製造。
於一實施例中,SIMD共處理器161包含執行單元162及一組暫存器檔案164。主處理器166之一實施例包含解碼器165用以識別包含根據一實施例之由處理單元162所執行之指令的指令集163之指令。於替代實施例中,SIMD共處理器161亦包含至少部份的解碼器165B用以解碼指令集163之指令。處理核心170亦包括額外的電路(未圖示),其對於本發明之實施例的了解是不必要的。
操作上,主處理器166執行一串流的資料處理指令,其控制一般類型之資料處理操作,包括與快取記憶體167、及輸入/輸出系統168的互動。嵌入該串流的資料處理指令內者為SIMD共處理器指令。主處理器166之解碼器165識別這些SIMD共處理器指令作為應由附接的SIMD共處理器161所執行的類型。因此,主處理器166發出這些SIMD共處理器指令(或表示SIMD共處理器指令之控制訊號)於共處理器匯流排171(藉由任何附接的SIMD共處理器從其中所接收)上。於此情形中,SIMD共處理器161將接收及執行欲如此之任何接收的SIMD共處理器指令。
資料可經由無線介面169被接收以供SIMD共處理器指令來處理。於一範例,聲音通訊可以數位訊號的形式被接收,其可被SIMD共處理器指令所處理用以再產生(regenerate)代表聲音通訊之數位音訊取樣。於另一範例,經壓縮的音訊及/或視訊可以數位位元串流的形式被接收,其可被SIMD共處理器指令所處理用以再產生數位音訊取樣及/或動作視訊框。於處理核心170之一實施例中,主處理器166、及SIMD共處理器161係被整合至單一處理核心170,包含執行單元162、一組暫存器檔案164、及解碼器165,用以確認包括根據一實施例之指令的指令集163之指令。
第2圖為根據本發明之一實施例對於包含邏輯電路用以執行指令之處理器200的微架構之方塊圖。於一些實施
例中,根據一實施例之指令可被實現用以操作於具有位元組、字元、雙字元、四字元等大小以及資料類型(例如單及雙精度整數及浮點資料類型)之資料元件上。於一實施例中,循序前端201為提取待執行的指令並準備稍後於處理器管線中被使用的指令之處理器200的一部分。前端201可包括數個單元。於一實施例中,指令預取器226自記憶體取得指令並將其饋送至依次將其解碼或解譯之指令解碼器228。舉例來說,於一實施例中,解碼器將接收的指令解碼成稱為「微指令(micro-instructions)」或「微操作(micro-operations)」(亦稱為micro op或uops)之機器可執行的一或多個操作。於其他實施例中,解碼器將指令解析(parse)成操作碼及對應的資料與控制欄,其係根據一實施例被微架構使用以執行操作。於一實施例中,追蹤快取230將解碼的uops組合成程式序列(program ordered sequence)或uop佇列234中的追跡(trace)以供執行。當追蹤快取230遭遇複雜指令時,微碼ROM 232提供所需uops以完成操作。
某些指令係被轉換成單一微操作,而其他指令需要數個微操作以完成全部操作。於一實施例中,若需要超過四個微操作以完成指令,則解碼器228存取微碼ROM 232以執行指令。於一實施例中,指令可被解碼成少量的微操作以執行於指令解碼器228。於另一實施例中,指令可被儲存於微碼ROM 232內,數個微操作應被需要以完成操作。追蹤快取230參照轉移點可程式化邏輯陣列(PLA)以
決定正確的微指令指標以供根據一實施例從微碼ROM 232讀取微碼序列用以完成一或多個指令。在微碼ROM 232完成指令之微操作排序之後,機器之前端201可恢復從追蹤快取230取得微操作。
亂序執行引擎203為指令被準備以供執行之處。亂序執行邏輯具有數個緩衝器用以將指令的流程變平順及再排序,用以最佳化當其於管線中前進及排程以供執行時之效能。分配器邏輯分配機器緩衝器及各uop執行所需資源。暫存器更名邏輯將暫存器檔案中條目(entry)上之邏輯暫存器更名。分配器亦對兩個uop佇列之其中一者中之各uop分配條目,一個用於記憶體操作而一個用於非記憶體操作,在指令排程器之前:記憶體排程器、快速排程器202、慢/一般浮點排程器204、及簡單浮點排程器206。Uop排程器202、204、206基於其相關輸入暫存器運算元來源的準備狀態及uop完成其操作所需之執行資源的可用性來決定uop何時準備好來執行。一實施例之快速排程器202可於主時脈週期之各半中排程,而其他排程器僅可在每個處理器時脈週期排程一次。排程器仲裁配送埠用以排程供執行之uop。
暫存器檔案208、210位於排程器202、204、206、及執行區塊211中之執行單元212、214、216、218、220、222、224之間。分離的暫存器檔案208、210分別執行整數及浮點操作。一實施例之各暫存器檔案208、210亦包括旁通網路,其可將剛完成的尚未被寫入暫存器
檔案之結果旁通或轉送至新的相關uop。整數暫存器檔案208與浮點暫存器檔案210亦可彼此通訊資料。於一實施例中,整數暫存器檔案208係被分成兩個分開的暫存器檔案,一個暫存器檔案用於資料之低階的32個位元而第二暫存器檔案用於資料之高階的32個位元。一實施例之浮點暫存器檔案210具有128位元寬的條目,因為浮點指令典型具有寬度上從64至128位元的運算元。
執行區塊211含有執行單元212、214、216、218、220、222、224,指令係於其中被實際執行。此部份包括儲存微指令執行所需之整數及浮點資料運算元值之暫存器檔案208、210。一實施例之處理器200係包含數個執行單元:位址產生單元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮點ALU 222、浮點移動單元224。於一實施例中,浮點執行區塊222、224執行浮點、MMX、SIMD、及SSE、或其他操作。一實施例之浮點ALU 222包括64位元-64位元(64bit by 64bit)的浮點除法器,用以執行除法、平方根、及餘數微操作。於本發明之實施例中,涉及浮點值的指令可以浮點硬體來處理。於一實施例中,ALU操作可前往高速ALU執行單元216、218。一實施例之高速ALU 216、218可以半個時脈週期的有效等待時間執行快速操作。於一實施例中,最複雜的整數操作前往慢速ALU 220,因為慢速ALU 220包括整數執行硬體以用於長等待時間類型的操作,例如乘法、移位、旗標邏輯、及分支處理。記憶體載入/儲存操
作係由AGU 212、214執行。於一實施例中,整數ALU 216、218、220(係被說明於文中)執行整數操作於64位元資料運算元上。於替代實施例中,ALU 216、218、220可被實現用以支援許多資料位元,包括16、32、128、256等。同樣地,浮點單元222、224可被實現用以支援具有各種大小的位元之運算元。於一實施例中,浮點單元222、224可與SIMD及多媒體指令一起操作於128位元寬的封裝資料運算元。
於一實施例中,uops排程器202、204、206在父載入(parent load)完成執行之前配送相關操作。當uops在處理器200中被推測地排程及執行時,處理器200亦包括用以處理記憶體未命中之邏輯。若資料載入在資料快取中未命中,則在留給排程器暫時不正確的資料之管線中會有相關的操作。重播機制追蹤及再執行使用不正確資料的指令。僅相關的操作需要被重播而不相關的操作則被允許完成。處理器之一實施例的排程器及重播機制亦被設計用以取得提供SIMD向量封裝之直方圖功能的指令。
用語「暫存器(registers)」可參照板上處理器儲存位置,其係被使用作為用以識別運算元之指令的一部分。換句話說,暫存器可為那些可自處理器外部(從程式設計師的角度)被使用者使用的暫存器。然而,一實施例之暫存器應不受限於特定類型的電路。取而代之的是,一實施例之暫存器可儲存資料、提供資料、及執行此處所述之功能。此處所述之暫存器可使用任何數量的不同技術藉由處
理器內之電路而被實現,例如專屬實體暫存器、使用暫存器更名之動態分配實體暫存器、專屬及動態分配實體暫存器之結合等等。於一實施例中,整數暫存器儲存32位元的整數資料。一實施例之暫存器檔案亦包含八個多媒體SIMD暫存器以用於封裝資料。關於以下說明,暫存器係被了解為設計用以保持封裝資料之資料暫存器,例如美國加州Santa Clara的Intel Corporation之MMX技術,於微處理器中之64位元寬的MMXTM暫存器(某些範例中亦被稱為「mm」暫存器)。這些MMX暫存器(整數及浮點形式兩種都可買到)可操作伴隨SIMD及SSE指令之封裝資料元件。同樣地,有關SSE2、SSE3、SSE4、或較新者(一般稱為「SSEx」)技術之128位元寬的XMM暫存器亦可被使用以保持此封裝資料運算元。於一實施例中,在儲存封裝資料及整數資料時,暫存器不需要區分兩個資料類型。於一實施例中,整數與浮點係被包含於相同的暫存器檔案或不同的暫存器檔案中。再者,於一實施例中,浮點與整數資料可被儲存於不同的或相同的暫存器中。
於以下圖式之範例中,數個資料運算元係被說明。第3A圖顯示根據本發明之一實施例於多媒體暫存器中之各種封裝資料類型表示。第3A圖顯示128位元寬的運算元之封裝位元組310、封裝字元320、及封裝雙字元(dword)330之資料類型。此範例之封裝位元組格式310為128位元長且包含十六個封裝位元組資料元件。一位元組係於此被界定為8位元的資料。各位元組資料元件之資訊
係被儲存於位元組0之位元7至位元0、位元組1之位元15至位元8、位元組2之位元23至位元16、及最後的位元組15之位元120至位元127。因此,所有可用的位元係被使用於暫存器中。此儲存配置增加處理器的儲存效率。同樣的,利用存取十六個資料元件,一個操作現在可被平行執行於十六個資料元件。
通常,資料元件為與相同長度之其他資料元件被儲存於單一暫存器或記憶體位置的資料之個別片段。於有關SSEx技術之封裝資料序列中,儲存於XMM暫存器中之資料元件的數量係為128位元除以個別資料元件之位元的長度。同樣地,於有關MMX及SSE技術之封裝資料序列中,儲存於MMX暫存器中之資料元件的數量係為64位元除以個別資料元件之位元的長度。雖然第3A圖中所示之資料類型可為128位元長,本發明之實施例亦可操作於64位元寬、256位元寬、512位元寬、或其他尺寸的運算元。此範例之封裝字元格式320為128位元長且包含八個封裝字元資料元件。各封裝字元包含十六位元的資訊。第3A圖之封裝雙字元格式330為128位元長且包含四個封裝雙字元資料元件。各封裝雙字元資料元件包含三十二位元的資訊。封裝四字元為128位元長且包含兩個封裝四字元資料元件。
第3B圖顯示替代暫存器中(in-register)資料儲存格式。各封裝資料可包括多於一個獨立的資料元件。三個封裝資料格式係被顯示:半封裝341、單封裝342、及雙封
裝343。半封裝341、單封裝342、及雙封裝343之一實施例包含定點(fixed-point)資料元件。一或多個半封裝341、單封裝342、及雙封裝343之替代實施例可包含浮點資料元件。半封裝341之一替代實施例為128位元長,含有八個16位元資料元件。單封裝342之一實施例為128位元長,含有四個32位元資料元件。雙封裝343之一實施例為128位元長,含有二個64位元資料元件。應了解的是,此封裝資料格式可進一步延伸至其他暫存器長度,例如96位元、160位元、192位元、224位元、256位元、512位元或更多。
第3C圖顯示根據本發明之一實施例於多媒體暫存器中之各種帶符號的及未帶符號的封裝資料類型表示。未帶符號的封裝位元組表示法344說明於SIMD暫存器中未帶符號的封裝位元組之儲存。各位元組資料元件之資訊係被儲存於位元組0之位元7至位元0、位元組1之位元15至位元8、位元組2之位元23至位元16、等等及最後的位元組15之位元120至位元127。因此,所有可用的位元係被使用於暫存器中。此儲存配置可增加處理器的儲存效率。同樣的,利用存取十六個資料元件,一個操作現在可被平行執行於十六個資料元件。帶符號的封裝位元組表示法345說明帶符號的封裝位元組之儲存。應注意的是,每個位元組資料元件之八個位元係為符號指標。未帶符號的封裝字元表示法346顯示從字元7至字元0係如何被儲存於SIMD暫存器中。帶符號的封裝字元表示法347係類
似於未帶符號的封裝字元暫存器中表示法346。應注意的是,各字元資料元件之十六個位元係為符號指標。未帶符號的封裝雙字元表示法348顯示雙字元資料元件如何被儲存。帶符號的封裝雙字元表示法349係類似於未帶符號的封裝雙字元暫存器中表示法348。應注意的是,必要符號位元係為各雙字元資料元件之第32個位元。
第3D圖為操作編碼(操作碼)格式360的一實施例之圖式,其具有32個或更多位元,及對應操作碼格式之類型的暫存器/記憶體運算元定址模式(於「Intel® 64 and IA-32 Intel Architecture Software Developer’s Manual Combined Volumes 2A and 2B:Instruction Set Reference A-Z」中說明,其可得自美國加州Santa Clara的Intel Corporation,網址是intel.com/products/processor/manuals/)。於一實施例中,指令可藉由一或多個欄位361及362來編碼。每個指令最多有兩個運算元位置可被識別,包括最多兩個來源運算元識別符364及365。於一實施例中,目的運算元識別符366係與來源運算元識別符364相同,但於其他實施例中其為不同。於一替代實施例中,目的運算元識別符366係與來源運算元識別符365相同,但於其他實施例中其為不同。於一實施例中,由來源運算元識別符364及365所識別的來源運算元之其中一者係被指令的結果覆寫,而於另一實施例中,識別符364對應至來源暫存器元件(source register element)而識別符365對應至目的暫存器元件(destination register element)。於一
實施例中,運算元識別符364及365可被使用以識別32位元或64位元來源及目的運算元。
第3E圖為具有40或更多位元的另一替代操作編碼(操作碼)格式370之圖式。操作碼格式370對應操作碼格式360且包含選項的前置位元組378。根據一實施例之指令可藉由一或多個欄位378、371及372來編碼。每個指令最多有兩個運算元位置可由來源運算元識別符374及375及被前置位元組378識別。於一實施例中,前置位元組378可被使用以識別32位元或64位元來源及目的運算元。於一實施例中,目的運算元識別符376係與來源運算元識別符374相同,但於其他實施例中其為不同。於一替代實施例中,目的運算元識別符376係與來源運算元識別符375相同,但於其他實施例中其為不同。於一實施例中,指令操作於由運算元識別符374及375所識別之一或多個運算元且由運算元識別符374及375所識別之一或多個運算元係被指令的結果所覆寫,而於其他實施例中,由識別符374及375所識別之運算元係被寫入至另一暫存器中之另一資料元件。操作碼格式360及370允許部份藉由MOD欄位363及373與藉由選項的標度-索引-基礎(scale-index-base)及位移位元組所指明之暫存器至暫存器(register to register)、記憶體至暫存器(memory to register)、藉由記憶體之暫存器(register by memory)、藉由暫存器之暫存器(register by register)、立即暫存器(register by immediate)、暫存器至記憶體(register to
memory)定址。
翻到第3F圖,於一些替代實施例中,64位元(或128位元、或256位元、或512位元或更多)單一指令多重資料(SIMD)算術操作可透過共處理器資料處理(coprocessor data processing;CDP)指令而被執行。操作編碼(操作碼)格式380顯示具有CDP操作碼欄位382及389之一個如此之CDP指令。CDP指令之類型,於替代實施例,操作可藉由一或多個欄位383、384、387及388來編碼。每個指令最多有三個運算元位置可被識別,包括最多兩個來源運算元識別符385及390與一個目的運算元識別符386。共處理器之一實施例可操作於8、16、32、及64位元值。於一實施例中,指令係被執行於整數資料元件。於某些實施例中,指令可使用條件欄位381而被條件地執行。於某些實施例,來源資料大小可藉由欄位383來編碼。於某些實施例中,零(Zero;Z)、負(negative;N)、進位(carry;C)、及溢位(overflow;V)偵測可於SIMD欄位完成。於某些實施例,飽和(saturation)的類型可藉由欄位384來編碼。
接著翻到第3G圖,為對應操作碼格式之類型(於「Intel® Advanced Vector Extensions Programming Reference」中說明,其可得自美國加州Santa Clara的Intel Corp.,網址是intel.com/products/processor/manuals/),用以根據另一實施例來提供SIMD向量封裝之直方圖功能之另一替代操作編碼(操作碼)格式397的一圖
式。
原始x86指令集提供1位元組操作碼,其具有各種位址字節之格式及包含於額外位元組(其存在係從第一「操作碼(opcode)」位元組得知)中之立即運算元。此外,特定位元組值係被保留為操作碼之修改符(稱為前置(prefix),因其必須被置於指令之前)。當256個操作碼位元組之原始選板(palette)(包括這些特別的前置值)被耗盡時,一單一位元組被專用為256個操作碼之新組的逸出(escape)。當向量指令(例如SIMD)被增加時,更多操作碼之需求被產生,且「二位元組(two byte)」操作碼映圖(opcode map)亦不足,即使透過前置的使用來擴充。為此目的,新指令係被增加於額外的映圖中(其使用2個位元組加上一選項的前置作為識別符)。
此外,為了促進於64位元模式中之額外的暫存器,一額外的前置可被使用(稱為「REX」)於前置與操作碼間(及決定操作碼所需之任何逸出位元組(escape byte))。於一實施例中,REX可具有4個「酬載(payload)」位元以指示於64位元模式之額外的暫存器之使用。於其他實施例中,其可具有較4個位元少或多的位元。至少一指令集之一般格式(其通常對應格式360及/或格式370)係通常藉由下列來說明:[prefixes][rex]escape[escape2]opcode modrm(等等)
操作碼格式397對應操作碼格式370且包含選項的VEX前置位元組391(於一實施例中開始於C4 hex)以取代
其他通常地使用的舊有指令前置位元組與逸出碼。舉例來說,下文說明使用用以編碼一指令的兩個欄位之實施例,其可當一第二逸出碼係存在原始指令中時或當於REX欄位中之額外位元(例如XB與W欄位)需要被使用時被使用。於以下所示實施例中,舊有逸出係由新逸出值表示;舊有前置係被完全壓縮為部份的「酬載(payload)」位元組;舊有前置係被再生(reclaimed)且可用於未來擴展;第二逸出碼係被壓縮於「映圖(map)」欄位中,連同未來映圖或可用的未來空間;及新特徵係被加入(例如增加的向量長度及額外的來源暫存器區分符(specifier))。
根據一實施例之指令可藉由一或多個欄位391及392來編碼。結合來源運算元識別符374與375及結合選項的標度-索引-基礎(scale-index-base;SIB)識別符393、選項的位移識別符394、及選項的立即位元組395,每個指令最多四個運算元可被欄位391識別。於一實施例,VEX前置位元組391可被使用以識別32位元或64位元來源及目的運算元及/或128位元或256位元SIMD暫存器或記憶體運算元。於一實施例,操作碼格式397所提供之功能連同操作碼格式370可為多餘的,於其他實施例中,其為不
同的。操作碼格式370及397允許部份藉由MOD欄位373與藉由選項的(SIB)識別符393、選項的位移識別符394、及選項的立即位元組395所指明之暫存器至暫存器(register to register)、記憶體至暫存器(memory to register)、藉由記憶體之暫存器(register by memory)、藉由暫存器之暫存器(register by register)、立即暫存器(register by immediate)、暫存器至記憶體(register to memory)定址。
接著翻到第3H圖,其為用以根據另一實施例來提供SIMD向量封裝之直方圖功能的另一替代操作編碼(操作碼)格式398之圖式。操作碼格式398對應操作碼格式370與397且包含選項的EVEX前置位元組396(於一實施例中開始於62 hex)以取代其他通常地使用的舊有指令前置位元組與逸出碼及提供額外的功能。根據一實施例之指令可藉由一或多個欄位396及392來編碼。結合來源運算元識別符374與375及結合選項的標度-索引-基礎(scale-index-base;SIB)識別符393、選項的位移識別符394、及選項的立即位元組395,每個指令最多四個運算元及一遮罩(mask)可被欄位396識別。於一實施例,EVEX前置位元組396可被使用以識別32位元或64位元來源及目的運算元及/或128位元、256位元或512位元SIMD暫存器或記憶體運算元。於一實施例,操作碼格式398所提供之功能連同操作碼格式370或397可為多餘的,於其他實施例中,其為不同的。操作碼格式398允許部份藉由MOD欄
位373與藉由選項的(SIB)識別符393、選項的位移識別符394、及選項的立即位元組395所指明之暫存器至暫存器(register to register)、記憶體至暫存器(memory to register)、藉由記憶體之暫存器(register by memory)、藉由暫存器之暫存器(register by register)、立即暫存器(register by immediate)、暫存器至記憶體(register to memory)定址(連同遮罩)。至少一指令集之一般格式(其通常對應格式360及/或格式370)係通常藉由下列來說明:evex1 RXBmmmmm WvvvLpp evex4 opcode modrm[sib][disp][imm]
於一實施例,根據EVEX格式398所編碼的指令可具有額外的「酬載(payload)」位元,其可被使用以提供具有額外新特徵的SIMD向量封裝之直方圖功能,例如使用者可組構的遮罩暫存器、或額外的運算元、或來自128位元、256位元或512位元向量暫存器間之選擇、或從其中選擇的更多暫存器。
舉例來說,於其中VEX格式397可被使用以在沒有遮罩的情況下提供SIMD向量封裝之直方圖功能,EVEX格式398可被使用以在帶有明確的使用者可組構的遮罩的情況下提供SIMD向量封裝之直方圖功能。此外,於其中VEX格式397可被使用以提供SIMD向量封裝之直方圖功能於128位元或256位元向量暫存器,EVEX格式398可被使用以提供SIMD向量封裝之直方圖功能於128位元、256位元、512位元或更大的(或更小的)向量暫存器。
以上所揭露的範例指令提供SIMD向量封裝之直方圖功能。實施例可包括使用第一與第二向量暫存器,於暫存器傳巷(例如64位元、128位元或256位元)部份(register lane portion)之複數個資料欄位中的各者中分別儲存第一單元條資料類型及第二大小(magnitude)資料類型之對應的元件。第一單位條資料類型的範例實施例包括16位元或8位元整數。第二大小資料類型的範例實施例包括16位元或8位元整數或16位元浮點數。回應用於計算SIMD
向量封裝之直方圖之這些範例指令,於該第一暫存器傳巷部份中之該第一資料類型之各元件係與由該指令所指明之一範圍作比較。於特定實施例中,根據以上範例,該範圍可被於立即運算元(例如Imm8)中之指令所界定。替代地,該範圍可藉由該指令之一特定操作碼來界定。於一些其他替代實施例中,該範圍可被界定為於目的暫存器(例如Vmm1)傳巷部份之複數個資料欄位中的一組初始值中之一者。
用以提供SIMD向量封裝之直方圖功能的範例指令已使用於各種應用中,包括(但不限於)機器視覺、物件辨識與分類、型樣辨識等等。一類型的技術於物件偵測的目的計算於一影像之局部化部份中梯度定向(gradient orientation)之發生。此特定類型的技術之特徵係已知為方向梯度直方圖(Histogram of Oriented Gradient;HOG)描述符。這些HOG描述符之實現典型地涉及將一影像分成小的連接區域(稱為單元),及在這些連接區域內對於像素編譯梯度方向或邊緣定向的直方圖。此等直方圖之組合接著表示該描述符。梯度方向之直方圖的編譯可藉由用以提供SIMD向量封裝之直方圖功能以對於連接的胞元區域內之像素產生分類的梯度方向之加權的直方圖(weighted histograms of binned gradient direction)的範例處理器指令與處理邏輯來改善。對於於所界定範圍中之該第一暫存器部份的元件,來自該第二暫存器部份之該第二大小資料類型的對應元件係根據該第一單元條資料類型的其對應元件
之該值來選擇而被增加於目的暫存器傳巷部份的複數個資料欄位之其中一者,以對各目的暫存器傳巷部份產生封裝之加權的直方圖。
舉例來說,於每64位元傳巷四個單元條的情形,當第一暫存器部份之16位元元件係於該特定範圍中時,第二大小資料類型(例如未帶符號的或帶符號的整數、或浮點)之對應的16位元元件(來自第二暫存器64位元傳巷部份)係被加入於目的暫存器64位元傳巷部份中之複數個16位元資料欄位(第二大小資料類型)之其中一者中,根據該第一單元條資料類型(例如未帶符號的或帶符號的整數之兩個最小有效位元之值)之其對應的16位元元件的值來選擇,用以產生目的暫存器之各64位元傳巷部份的四個封裝16位元加權直方圖。
於每128位元傳巷八個單元條的情形,當第一暫存器部份之16位元元件係於該特定範圍中時,第二大小資料類型(例如未帶符號的或帶符號的整數、或浮點)之對應的16位元元件(來自第二暫存器128位元傳巷部份)係被加入於目的暫存器128位元傳巷部份中之複數個16位元資料欄位(第二大小資料類型)之其中一者中,根據該第一單元條資料類型(例如未帶符號的或帶符號的整數之三個最小有效位元之值)之其對應的16位元元件的值來選擇,用以產生目的暫存器之各128位元傳巷部份的八個封裝16位元加權直方圖。
於每128位元傳巷對於八個輸入元件之四個直方圖單
元條的情形,當第一暫存器部份之16位元元件係於該特定範圍中時,第二大小資料類型(例如未帶符號的或帶符號的整數、或浮點)之對應的16位元元件(來自第二暫存器128位元傳巷部份)係被加入於目的暫存器128位元傳巷部份中之複數個32位元資料欄位(例如,整數、或浮點,根據第二大小資料類型)之其中一者中,根據該第一單元條資料類型(例如未帶符號的或帶符號的整數之兩個最小有效位元之值)之其對應的16位元元件的值來選擇,用以產生目的暫存器之各128位元傳巷部份的四個封裝32位元加權直方圖。
最後,對於每個傳巷p個輸入元件歸納至q個直方圖單元條,當該第一暫存器部份之單元條元件係於該特定範圍中時,對應的大小元件(例如未帶符號的或帶符號的整數、或浮點),來自該第二暫存器傳巷部份,係被加入至目的暫存器傳巷部份中之q個資料欄位(例如整數、或浮點,根據大小資料類型)之其中一者中,根據其對應的單元條元件的值取模數(modulo)q(例如0至q-1,取模數q)來選擇,用以產生目的暫存器之各傳巷部份的q個封裝加權直方圖。
藉由執行於平行SIMD硬體中之多個相關更新至相同單元條位置,於此所揭露之處理器指令及處理邏輯可消除連續瓶頸,例如矛盾考量與有關處理困難。區域直方圖可接著藉由使用在較大區域(稱為區塊)中使用強度的一測量而被進行對比標準化,以標準化該區塊內之單元,導致於
發光或陰影中之改變有較佳的不變。因此,此處所揭露之指令提供用於影像HOG描述符之提取的單元條之封裝範圍的有效率的SIMD向量加權直方圖計算。
第4A圖為顯示根據本發明之至少一實施例的循序管線(in-order pipeline)及暫存器更名階段(register renaming stage)、亂序發送/執行管線(out-of-order issue/execution pipeline)之方塊圖。第4B圖為顯示根據本發明之至少一實施例的循序架構核心及暫存器更名邏輯、被包括於處理器中之亂序發送/執行邏輯之方塊圖。第4A圖中實線方塊顯示循序管線,而虛線方塊顯示暫存器更名、亂序發送/執行管線。同樣地,第4B圖中實線方塊顯示循序算術邏輯,而虛線方塊顯示暫存器更名邏輯及亂序發送/執行邏輯。
於第4A圖中,處理器管線400包括提取階段402、長度解碼階段404、解碼階段406、分配階段408、更名階段410、排程(亦稱為配送或發送)階段412、暫存器讀取/記憶體讀取階段414、執行階段416、寫回/記憶體寫入階段418、例外處理階段422、及提交階段424。
於第4B圖中,箭頭表示二或多個單元間的耦接且箭頭的方向表示那些單元間之資料流的方向。第4B圖顯示包含耦接至執行引擎單元450的前端單元430之處理器核心490,且兩者皆可耦接至記憶體單元470。
核心490可為精簡指令集計算(RISC)核心、複雜指令集電腦(CISC)核心、極長指令字(VLIW)核心、或混合或替
代核心類型。於另一選項中,核心490可為特殊目的核心,例如網路或通訊核心、壓縮引擎、圖形核心等等。
前端單元430包括耦接至指令快取單元434之分支預測單元432,指令快取單元434係耦接至指令轉譯後備緩衝器(translation lookaside buffer;TLB)436,TLB 436係耦接至指令提取單元438,指令提取單元438係耦接至解碼單元440。解碼單元或解碼器可解碼指令,且產生一或多個微操作、微碼轉移點、微指令、其他指令、或其他控制訊號作為輸出,其係從原始指令解碼或反射、或係從原始指令導出。解碼器可使用各種不同機制來實現。合適的機制之範例包含(但不限於)查找表、硬體實現、可程式化邏輯陣列(PLA)、微碼唯讀記憶體(ROM)等。指令快取單元434係被進一步耦接至記憶體單元470中之2階(L2)快取單元476。解碼單元440可被耦接至執行引擎單元450中之更名/分配器單元452。
執行引擎單元450包括耦接至引退單元454及一組一或多個排程器單元456之更名/分配器單元452。排程器單元456表示任何數量的不同排程器,包含保留站、中央指令窗等等。排程器單元456係耦接至實體暫存器檔案單元458。各實體暫存器檔案單元458表示一或多個實體暫存器檔案(不同的實體暫存器檔案儲存一或多個不同的資料類型,例如純量整數、純量浮點、封裝整數、封裝浮點、向量整數、向量浮點等)、狀態(例如待執行的下個指令之位址之指令指標)等。實體暫存器檔案單元458係由引退
單元454重疊以顯示暫存器更名及亂序執行可被實現之多種方式(例如使用重排序緩衝器及引退暫存器檔案、使用未來檔案、歷史緩衝器、及引退暫存器檔案;使用暫存器圖及一堆暫存器;等)。通常,架構的暫存器係從處理器的外部或從程式設計師的角度看見。暫存器不限於任何已知特定類型的電路。各種不同類型的暫存器都是適合的,只要其可儲存及提供如此處所述之資料。適合的暫存器之範例包含但不限於專屬實體暫存器、使用暫存器更名之動態分配實體暫存器、專屬與動態分配實體暫存器之結合等。引退單元454及實體暫存器檔案單元458係耦接至執行叢集460。執行叢集460包括一組一或多個執行單元462及一組一或多個記憶體存取單元464。執行單元462可執行各種運算(例如移位、加、減、乘)及各種類型的資料(純量浮點、封裝整數、封裝浮點、向量整數、向量浮點)。雖然某些實施例可包含專門用於特定功能或功能組之數個執行單元,其他實施例可包含全部執行所有功能之僅一個執行單元或多個執行單元。排程器單元456、實體暫存器檔案單元458、與執行叢集460係被顯示為複數,這是因為特定實施例對於特定類型的資料/操作(例如純量整數管線、純量浮點/封裝整數/封裝浮點/向量整數/向量浮點管線、及/或記憶體存取管線,其各具有其自己的排程器單元、實體暫存器檔案單元、及/或執行叢集,且於分開的記憶體存取管線之情形中,特定實施例可被實現為僅此管線之執行叢集具有記憶體存取單元464)建立分開的
管線。應了解的是,當分開的管線被使用,這些管線之其中一或多者可為亂序發送/執行而其他為循序。
記憶體存取單元464之組係被耦接至記憶體單元470,其包含耦接至耦接至2階(L2)快取單元476之資料快取單元474的資料TLB單元472。於一例示實施例中,記憶體存取單元464可包括載入單元、儲存位址單元、及儲存資料單元,其各可被耦接至記憶體單元470中之資料TLB單元472。L2快取單元476係被耦接至一或多個其他階快取且最終至主記憶體。
藉由範例,例示暫存器更名、亂序執行發出/執行核心架構可如下所示實現管線400:1)指令提取438執行提取及長度解碼階段402及404;2)解碼單元440執行解碼階段406;3)更名/分配器單元452執行分配階段408及更名階段410;4)排程器單元456執行排程階段412;5)實體暫存器檔案單元458及記憶體單元470執行暫存器讀取/記憶體讀取階段414;執行叢集460執行執行階段416;6)記憶體單元470及實體暫存器檔案單元458執行寫回/記憶體寫入階段418;7)許多單元可被涉及例外處理階段422中;及8)引退單元454及實體暫存器檔案單元458執行提交階段424。
核心490可支援一或多個指令集(例如x86指令集(較新的版本有加入一些擴充);美國加州MIPS Technologies of Sunnyvale之MIPS指令集;美國加州ARM Holdings of Sunnyvale之ARM指令集(有加入選項的額外擴充,例如
NEON))。
應了解的是,核心可支援多執行緒(執行二或更多平行操作或執行緒之集),且可於多種方式依此進行,包括時間切割多執行緒、同時多執行緒(於其中,單一實體核心對實體核心係被同時地進行多執行緒之各執行緒提供邏輯核心)、或其組合(例如時間切割提取及解碼及其後之同時多執行緒,例如Intel®之超執行緒(Hyperthreading)技術)。
雖然暫存器更名係說明於亂序執行之文中,應了解的是,暫存器更名可被使用於循序架構中。雖然所示的處理器之實施例亦包括分開的指令及資料快取單元434/474與共用的L2快取單元476,替代實施例可對指令及資料兩者具有單一內部快取,例如1階(L1)內部快取、或多階內部快取。於某些實施例中,系統可包含內部快取及外部快取(其為在核心及/或處理器外部)的結合。替代地,所有的快取可在核心及/或處理器外部。
第5圖為根據本發明之具有整合式記憶體控制器與圖形的單一核心處理器與多核心處理器500之方塊圖。第5圖中實線框顯示具有單一核心502A、系統代理510、一組一或多個匯流排控制器單元516之處理器500,而選項的附加之虛線框顯示具有多個核心502A-N、於系統代理單元510中之一組一或多個整合式記憶體控制器單元514、及整合式圖形邏輯508之替代處理器500。
記憶體階層包括核心內之一或多階的快取、一組或一
或多個共用快取單元506、及耦接至該組整合式記憶體控制器單元514的外部記憶體(未圖示)。該組共用快取單元506可包括一或多個中階快取(例如2階(L2)、3階(L3)、4階(L4)、或其他階的快取)、最終階快取(LLC)、及/或其組合。於一實施例中,雖然環狀互連單元512與整合式圖形邏輯508、該組共用快取單元506、及系統代理單元510互連,替代實施例可使用任何數量的已知技術以互連此等單元。
於一些實施例中,一或多個核心502A-N能進行多執行緒。系統代理510包括協調與操作核心502A-N的那些組件。系統代理單元510可包含例如電源控制單元(PCU)與顯示單元。PCU可為或包括用以調節核心502A-N與整合式圖形邏輯508之電源狀態所需的邏輯與組件。顯示單元係用以驅動一或多個外部連接的顯示器。
核心502A-N的架構及/或指令集可為同質或異質。舉例來說,一些核心502A-N可為循序,而其他者可為亂序。於另一範例中,二或更多核心502A-N可執行相同的指令集,而其他者可執行該指令集或不同指令集之子集。
處理器可為通用處理器,例如美國加州Santa Clara之Intel Corporation所販售的CoreTM i3,i5,i7,2 Duo and Quad,XeonTM,ItaniumTM,XScaleTM or StrongARMTM處理器。替代地,處理器可來自另一公司,例如美國ARM Holdings,Ltd、MIPS等等。處理器可為特殊目的處理器,例如網路或通訊處理器、壓縮引擎、圖形處理器、共
處理器、嵌入式處理器、或諸如此類。處理器可被實現於一或多個晶片上。藉由使用任何的處理技術(例如BiCMOS、CMOS、或NMOS),處理器500可為一或多個基板的一部分及/或可被實現於一或多個基板上。
第6-8圖為適於用以包括處理器500之範例系統,而第9圖為可包括一或多個核心502之系統單晶片(SoC)之範例系統。對於膝上型電腦、桌上型電腦、手持PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、交換器、嵌入式處理器、數位訊號處理器(DSP)、圖形裝置、視訊遊戲裝置、機上盒、微控制器、行動電話、可攜式媒體播放器、手持裝置、及各種其他電子裝置,該領域中已知的其他系統設計與組構亦可為適合的。通常,如此處所述可結合處理器及/或其他執行邏輯之許多系統或電子裝置通常為適合的。
現參照第6圖,所顯示者為根據本發明之一實施例的系統600之方塊圖。系統600可包括一或多個處理器610、615,其係被耦接至圖形記憶體控制器集線器(GMCH)620。選項的額外處理器615係於第6圖中以虛線表示。
各處理器610、615可為處理器500之某些版本。然而,應注意的是,整合式圖形邏輯與整合式記憶體控制單元不太可能會存在於處理器610、615中。第6圖顯示GMCH 620可被耦接至記憶體640,其可為例如動態隨機存取記憶體(DRAM)。至少一實施例中,DRAM係與非揮
發性快取相關聯。
GMCH 620可為晶片組,或晶片組的一部分。GMCH 620可與處理器610、615通訊且控制處理器610、615與記憶體640間之互動。GMCH 620亦可作為處理器610、615與系統600之其他元件間的加速匯流排介面。於至少一實施例中,GMCH 620可經由多接點匯流排(例如前側匯流排(FSB)695)與處理器610、615通訊。
再者,GMCH 620係被耦接至顯示器645(例如平板顯示器)。於一實施例中,GMCH 620可包括整合式圖形加速器。GMCH 620可被進一步耦接至輸入/輸出(I/O)控制器集線器(ICH)650,其可被使用以將各種週邊裝置耦接至系統600。舉例來說,於第6圖之實施例中顯示者為外部圖形裝置660,其可為與另一週邊裝置670耦接至ICH 650之分開的圖形裝置。
替代地,額外的或不同的處理器亦可存在於系統600中。舉例來說,額外的處理器615可包括與處理器610相同之額外的處理器、與處理器610異質或不對稱之額外的處理器、加速器(例如圖形加速器或數位訊號處理(DSP)單元)、場可程式閘極陣列、或任何其他處理器。實體資源610、615間可有各式各樣之差異,按照包含建築的、微建築的、熱的、能源消耗特性、及類似者之價值的度量之頻譜。這些差異可有效地出現為不對稱及異質於處理器610、615間。於至少一實施例,各種處理器610、615可存在於相同的晶粒封裝中。
現參照第7圖,所顯示者為根據本發明之一實施例的第二系統700之方塊圖。如第7圖所示,多處理器系統700為點對點互連系統,且包括第一處理器770及經由點對點互連750耦接之第二處理器780。各處理器770與780可為處理器500之某些版本,如同一或多個處理器610、615。
雖然係以兩個處理器770、780顯示,應了解的是,本發明之範疇並未受限於此。於其他實施例中,一或多個額外的處理器可存在於給定的處理器中。
處理器770及780係分別顯示包含整合式記憶體控制器單元772與782。處理器770亦包括點對點(P-P)介面776與778作為其匯流排控制器單元的部份;同樣地,第二處理器780包含P-P介面786與788。處理器770及780可使用P-P介面電路778、788經由點對點(P-P)介面750來交換資訊。如第7圖所示,IMC 772及782耦接處理器至個別記憶體(即記憶體732與記憶體734),其可為局部地附接至個別處理器之主記憶體的部份。
處理器770及780各可使用點對點介面電路776、794、786、798經由個別P-P介面752、754來與晶片組790交換資訊。晶片組790亦可經由高性能圖形介面739來與高性能圖形電路738交換資訊。
共用快取(未圖示)可被包括於處理器中或兩處理器外部,尚未經由P-P互連而與處理器連接,使得若處理器被置於低電源模式中時,任一處理器或兩處理器的本地快取
資訊可被儲存於共用快取。
晶片組790可經由介面796被耦接至第一匯流排716。於一實施例中,第一匯流排716可為週邊組件互連(PCI)匯流排、或例如PCI Express匯流排或另一第三代I/O互連匯流排之匯流排,雖然本發明之範疇不限於此。
如第7圖所示,各種I/O裝置714可被耦接至第一匯流排716,而匯流排橋接器718將第一匯流排716耦接至第二匯流排720。於一實施例中,第二匯流排720可為低接腳數(low pin count;LPC)匯流排。各種裝置可被耦接至第二匯流排720,包含例如鍵盤及/或滑鼠722、通訊裝置727及儲存單元728,例如碟機或於一實施例中可包含指令/碼及資料730之其他大量儲存裝置。再者,音訊I/O 724可被耦接至第二匯流排720。應注意的是,其他架構是可能的。舉例來說,取代第7圖所示之點對點架構,系統可實現多接點匯流排或其他此種架構。
現參照第8圖,所顯示者為根據本發明之一實施例的第三系統800之方塊圖。第7與8圖中類似元件以類似元件符號表示,且第7圖之特定態樣已於第8圖中忽略以避免模糊第8圖之其他態樣。
第8圖顯示處理器870、880可分別包括整合式記憶體及I/O控制邏輯(「CL」)872及882。於至少一實施例,CL 872、882可包括整合式記憶體控制單元,例如參考第5及7圖之上述說明。此外,CL 872、882亦可包含I/O控制邏輯。第8圖顯示不只記憶體832、834係被耦接
至CL 872、882,且I/O裝置814亦被耦接至控制邏輯872、882。舊有I/O裝置815係耦接至晶片組890。
現參照第9圖,所顯示者為根據本發明之一實施例的SoC 900之方塊圖。第5圖中類似元件以類似元件符號表示。同樣的,虛線框為於更先進的SoC之選項的特徵。於第9圖中,互連單元902係耦接至:應用處理器910,其包括一組一或多個核心502A-N及共用快取單元506;系統代理單元510;匯流排控制器單元516;整合式記憶體控制器單元514;一組一或多個媒體處理器920,其可包含整合式圖形邏輯508、影像處理器924(用以提供靜止及/或視訊相機功能)、音訊處理器926(用以提供硬體音訊加速功能)、及視訊處理器928(用以提供視訊編碼/解碼加速功能);靜態隨機存取記憶體(SRAM)單元930;直接記憶體存取(DMA)單元932;及顯示單元940(用以耦接至一或多個外部顯示器)。
第10圖顯示根據一實施例包含可執行至少一指令的中央處理單元(CPU)及圖形處理單元(GPU)之處理器。於一實施例中,根據至少一實施例之用以執行操作的指令可由CPU來執行。於另一實施例中,該指令可由GPU來執行。於另一實施例中,該指令可透過由GPU及CPU所執行的操作之結合來執行。舉例來說,於一實施例中,根據一實施例之指令可被接收與解碼以供於GPU上執行。然而,解碼的指令內之一或多個操作可被CPU執行而結果可回到GPU以供指令之最終引退。相反的,於某些實施
例中,CPU可作為主處理器而GPU作為共處理器。
於某些實施例中,可從高度平行生產量處理器中獲益的指令可被GPU執行,而可從深度管線架構獲益之從處理器的效能中獲益的指令可被CPU執行。舉例來說,圖形、科學應用、金融應用、及其他平行工作負載可從GPU的效能獲益且可相應地執行,而較序列的應用(例如作業系統核心或應用碼)可較適合用於CPU。
於第10圖中,處理器1000包括CPU 1005、GPU 1010、影像處理器1015、視訊處理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、顯示裝置1040、高解析度多媒體介面(HDMI)控制器1045、MIPI控制器1050、快閃記憶體控制器1055、雙資料率(DDR)控制器1060、安全引擎1065、及I2S/I2C(Integrated Interchip Sound/Inter-Integrated Circuit)介面1070。其他邏輯與電路可被包含於第10圖之處理器中,包括更多CPU或GPU與其他週邊介面控制器。
至少一實施例之一或多個態樣可被儲存於機器可讀取媒體上之表示處理器內的各種邏輯的代表資料來實現,當由機器讀取時,造成機器製造邏輯用以執行此處所述之技術。此代表(已知為「IP核心」)可被儲存於有形的機器可讀取媒體(「磁帶(tape)」)且供應至各種顧客或製造設備用以載入實際做出邏輯或處理器之製造機器內。舉例來說,IP核心(例如由美國ARM Holdings,Ltd.所開發的CortexTM家族之處理器及中國科學院計算技術研究所開發
的龍芯(Loongson)IP核心)可被許可或販賣至各種顧客或獲許可者(例如Texas Instruments、Qualcomm、Apple、或Samsung)及實現於由這些顧客或獲許可者所製造的處理器。
第11圖顯示根據一實施例之IP核心的發展之方塊圖。儲存器1130包括模擬軟體1120及/或硬體或軟體模型1110。於一實施例中,代表IP核心設計之資料可經由記憶體1140(例如硬碟)、有線連接(例如網際網路)1150或無線連接1160而被提供至儲存器1130。由模擬工作及模型所產生的IP核心資訊可接著被傳送至製造設備,於該製造設備中其可被第三方製造用以執行根據至少一實施例之至少一指令。
於某些實施例中,一或多個指令可對應至第一類型或架構(例如x86)且被轉譯或模擬於不同類型或架構(例如ARM)之處理器上。根據一實施例,指令可因此被執行於任何處理器或處理器類型,包含ARM、x86、MIPS、GPU、或其他處理器類型或架構。
第12圖顯示根據一實施例之第一類型的指令如何被不同類型的處理器模擬。於第12圖中,程式1205包含可執行根據一實施例之相同或實質相同的功能作為指令之一些指令。然而,程式1205之指令可為不同於處理器1215或與處理器1215不相容的類型及/或格式,其表示程式1205中之該類型的指令可能無法由處理器1215天然地(natively)執行。然而,藉由模擬邏輯1210的幫助,程式
1205之指令係被轉譯成可由處理器1215天然地執行的指令。於一實施例中,模擬邏輯係被體現於硬體。於另一實施例中,模擬邏輯係被體現於有形的機器可讀取媒體,其含有軟體用以將程式1205中之類型的指令轉譯成可由處理器1215天然地執行的指令。於其他實施例中,模擬邏輯為固定功能或可程式化硬體與儲存於有形的機器可讀取媒體上之程式的結合。於一實施例中,處理器包含模擬邏輯,而於其他實施例中,模擬邏輯存在處理器外部且由第三方提供。於一實施例中,藉由執行處理器中或與處理器相關聯的微碼或韌體,處理器可載入體現於含有軟體之有形的機器可讀取媒體中之模擬邏輯。
第13圖為根據本發明之實施例對比軟體指令轉換器將於來源指令集中之二進制指令轉換至於目標指令集中之二進制指令之使用之方塊圖。於所示實施例中,指令轉換器為軟體指令轉換器,雖然指令轉換器可替代地被實現於軟體、韌體、硬體、或各種其組合。第13圖顯示高階語言1302之程式可使用x86編譯器1304被編譯用以產生x86二進制碼1306,其可被具有至少一x86指令集核心之處理器1316天然地執行。具有至少一x86指令集核心之處理器1316代表可實質地執行與具有至少一x86指令集核心之Intel處理器相同功能之任何處理器,藉由相容地執行或另行處理(1)Intel x86指令集核心之指令集的實質部份或(2)目標要運行於具有至少一x86指令集核心之Intel處理器的應用程式或其他軟體之物件碼版本,用以
達成與具有至少一x86指令集核心之Intel處理器實質相同的結果。x86編譯器1304表示可操作以產生x86二進制碼1306(例如物件碼)之編譯器,其可(無論有沒有額外的連結處理(linkage processing))被執行於具有至少一x86指令集核心之處理器1316。同樣地,第13圖顯示高階語言1302之程式可使用替代指令集編譯器1308被編譯用以產生替代指令集二進制碼1310,其可被沒有至少一x86指令集核心之處理器1314的處理器(例如具有執行美國加州MIPS Technologies of Sunnyvale之MIPS指令集及/或執行美國加州ARM Holdings of Sunnyvale之ARM指令集的核心之處理器)天然地執行。指令轉換器1312係被使用以將x86二進制碼1306轉換成可由沒有x86指令集核心1314之處理器天然地執行之碼。此經轉換的碼能與替代指令集二進制碼1310不完全相同,因為能如此之指令轉換器很難被製造;然而,經轉換的碼將完成一般操作且彌補來自替代指令集之指令。因此,指令轉換器1312表示軟體、韌體、硬體、或其結合,其透過倣真、模擬、或任何其他處理,允許不具有x86指令集處理器或核心之處理器或其他電子裝置來執行x86二進制碼1306。
用以執行x86二進制碼1306的x86指令集處理器或核心之實施例可包括用以提供SIMD向量封裝之直方圖功能的指令。具有或不具有x86指令集處理器或核心之處理器實施例可包括第一與第二向量暫存器(例如128位元、256位元或512位元暫存器),於暫存器傳巷(例如64位
元、128位元或256位元)部份(register lane portion)之複數個資料欄位中的各者中分別儲存第一單元條資料類型及第二大小(magnitude)資料類型之對應的元件。第一單位條資料類型的範例實施例包括16位元或8位元整數。第二大小資料類型的範例實施例可包括16位元或8位元整數或16位元浮點數。回應用於計算SIMD向量封裝之直方圖的指令,於該第一暫存器傳巷部份中之該第一資料類型之各元件可被與由該指令所指明之一範圍作比較。於特定實施例中,該範圍可被於立即運算元(例如Imm8)中之指令所界定。替代地,該範圍可藉由該指令之一特定操作碼來界定。於一些其他替代實施例中,該範圍可被界定為於目的暫存器(例如Vmm1)傳巷部份之複數個資料欄位中的一組初始值中之一者。
用以提供SIMD向量封裝之直方圖功能的指令已使用於各種應用中,包括(但不限於)機器視覺、物件辨識與分類、型樣辨識等等。一類型的技術於物件偵測的目的記錄於一影像之局部化部份中梯度定向(gradient orientation)之發生。此特定類型的技術之特徵係已知為方向梯度直方圖(Histogram of Oriented Gradient;HOG)描述符。這些HOG描述符之實現典型地涉及將一影像分成小的連接區域(稱為單元),及在這些連接區域內對於像素編譯梯度方向或邊緣定向的直方圖。
舉例來說,典型方法可藉由於水平及垂直方向兩者施加離散卷積遮罩來開始,例如布里威特運算子(Prewitt
operators):
於位置p4,得到Ix=(p2+p5+p8)-(p0+p3+p6),且Iy=(p0+p1+p2)-(p6+p7+p8)。接著,於位置p4的大小係藉由M=(Ix 2+Iy 2)來給定且梯度方向或邊緣定向係藉由θ=arctan Iy/Ix來給定。於一些實施例,梯度方向或邊緣定向(θ)可被分類成20度(例如180°/9個單元條)、或40度(例如360°/9個單元條)、或22.5度(例如180°/8個單元條)等等之群組,且對於於一連接的區域內之像素,根據其對應的梯度單元條之大小的直方圖可被計算。
此等直方圖之組合接著表示HOG描述符。梯度方向之直方圖的編譯可藉由用以提供SIMD向量封裝之直方圖功能以對於連接的胞元區域內之像素產生分類的梯度方向之加權的直方圖(weighted histograms of binned gradient direction)的處理器指令與處理邏輯來改善。對於於所界定範圍中之該第一暫存器部份的單元條元件,來自該第二暫存器部份之該大小資料類型的對應元件係根據該其對應的單元條元件之該值來選擇而被增加於目的暫存器傳巷部份的複數個資料欄位之其中一者,以對各目的暫存器傳巷部份產生封裝之加權的直方圖。應了解的是,其他邊緣偵測方法亦可被使用以計算或近似大小及梯度方向或邊緣定向,協同SIMD向量封裝之直方圖指令,例如索貝爾運算
子(Sobel operator)、羅泊茨運算子(Roberts operator)、拉普拉斯運算子(Laplacian operator)等等。
藉由執行於平行SIMD硬體中之多個相關更新至相同單元條位置,於此所揭露之處理器指令及處理邏輯可消除連續瓶頸,例如矛盾考量與有關處理困難。區域直方圖可接著藉由使用在較大區域(稱為區塊)中使用強度的一測量而被進行對比標準化,以標準化該區塊內之單元,導致於發光或陰影中之改變有較佳的不變。因此,此處所揭露之指令提供用於影像HOG描述符之提取的單元條之封裝範圍的有效率的SIMD向量加權直方圖計算。
第14A圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的處理1401之一範例的一實施例的流程圖。處理1401及於此揭露之其他處理係藉由可包含可藉由一般目的機器或藉由特殊目的機器或藉由兩者之結合來執行的專用硬體或軟體或韌體操作碼之處理方塊來執行。
於處理1401之處理方塊1410中,指令控制訊號係被解碼以用於SIMD向量封裝之直方圖操作。於處理方塊1420中,暫存器檔案及/或記憶體係被存取。舉例來說,於一實施例中,第一向量暫存器與第二向量暫存器或記憶體向量部份可被存取。第一向量暫存器部份可儲存第一資料類型之元件於複數個p資料欄位之各者中。第二向量暫存器或記憶體向量部份可儲存第二資料類型之元件於複數個p資料欄位之各者中。於處理方塊1430中,一或多個
執行單元係被賦能予SIMD向量封裝之直方圖操作以用於執行SIMD向量封裝之直方圖。於處理方塊1441中,一或多個執行單元以由SIMD指令所界定的範圍來比較第一資料類型之各元件(例如16位元整數單元條元件),於該第一向量暫存器部份之該複數個p資料欄位中(例如Source1的各64位元部份中之四個資料欄位)。對於於該範圍中之該第一向量暫存器部份的任何元件,該第二資料類型之對應的元件(例如於Source2之16位元整數或浮點大小元件)(來自該第二向量暫存器或記憶體向量部份)係被加入至該結果(result)之一部分的複數個q資料欄位之其中一者中(例如,Result之各64位元部份的四個16位元大小累加器資料欄位),複數個q資料欄位之該其中一者係根據於該第一資料類型之對應的元件中之一值(例如兩個最小有效位元的)而被選擇。於處理方塊1470中,各結果部份之結果資料欄位係被儲存於目的向量暫存器或記憶體向量中,而處理結束於處理方塊1499中。
舉例來說,如於處理1401之範例中所示,於每64位元部份四個單元條的情形,當於Source1中之第一暫存器部份之16位元元件係於該特定範圍中時,第二大小資料類型(例如未帶符號的或帶符號的整數、或浮點)之對應的16位元元件(來自Source2之第二暫存器或記憶體向量64位元部份)係被加入於Result之目的暫存器64位元部份中之複數個16位元資料欄位(第二大小資料類型)之其中一者中,根據該第一單元條資料類型(例如未帶符號的或帶
符號的整數之兩個最小有效位元之值)之其對應的16位元元件的值來選擇,用以產生目的暫存器或記憶體向量之各64位元部份的四個封裝16位元加權直方圖。
於一些實施例,梯度方向或邊緣定向(θ)可被分類成20度(例如180°/9個單元條)、或40度(例如360°/9個單元條)、或22.5度(例如180°/8個單元條)等等之群組。舉例來說,於間隔[-11.25°,168.75°)中,各22.5度的八個單元條可被界定如下所示:
應了解的是,於連接的區域內之大小的加權直方圖可根據其對應的八個中之一個梯度單元條而被計算,其係藉由使用兩個SIMD向量封裝之直方圖指令,先在單元條0-3然後於單元條4-7,或是藉由僅使用一個SIMD向量封裝之直方圖指令於單元條0-8(平行處理)。
第14B圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的處理1402之另一範例的一實施例的流程圖。於處理1402之處理方塊1410中,指令控制訊號係被解碼以用於SIMD向量封裝之直方圖操作。於處理方塊1420中,暫存器檔案及/或記憶體係被存取。舉例來說,於一實施例中,第一向量暫存器與第二向量暫存
器或記憶體向量部份可被存取。第一向量暫存器部份可儲存(於複數個p資料欄位之各者中)第一資料類型之元件。第二向量暫存器或記憶體向量部份可儲存(於複數個p資料欄位之各者中)第二資料類型之元件。於處理方塊1430中,一或多個執行單元係被賦能予SIMD向量封裝之直方圖操作以用於執行SIMD向量封裝之直方圖。於處理方塊1442中,一或多個執行單元以由SIMD指令所界定的範圍來比較第一資料類型之各元件(例如16位元整數單元條元件),於該第一向量暫存器部份之該複數個p資料欄位中(例如Source1的各128位元部份中之八個資料欄位)。對於於該範圍中之該第一向量暫存器部份的任何元件,該第二資料類型之對應的元件(例如於Source2之16位元整數或浮點大小元件)(來自該第二向量暫存器或記憶體向量部份)係被加入至該結果(result)之一部分的複數個q資料欄位之其中一者中(例如,Result之各128位元部份的八個16位元大小累加器資料欄位),複數個q資料欄位之該其中一者係根據於該第一資料類型之對應的元件中之一值(例如三個最小有效位元的)而被選擇。於處理方塊1470中,各結果部份之結果資料欄位係被儲存於目的向量暫存器或記憶體向量中,而處理結束於處理方塊1499中。
舉例來說,如於處理1402之範例中所示,於每128位元部份八個單元條的情形,當於Source1中之第一暫存器部份之16位元元件係於該特定範圍中時,第二大小資料類型(例如未帶符號的或帶符號的整數、或浮點)之對應
的16位元元件(來自Source2之第二暫存器或記憶體向量64位元部份)係被加入於Result之目的暫存器128位元部份中之複數個16位元資料欄位(第二大小資料類型)之其中一者中,根據該第一單元條資料類型(例如未帶符號的或帶符號的整數之三個最小有效位元之值)之其對應的16位元元件的值來選擇,用以產生目的暫存器或記憶體向量之各128位元部份的八個封裝16位元加權直方圖。
應了解的是,如處理1402之範例中所示,根據其對應的梯度單元條之大小的直方圖於連接的區域內之大小的加權直方圖可根據其對應的八個中之一個梯度單元條而被計算,其係藉由僅使用一個SIMD向量封裝之直方圖指令於單元條0-8(平行處理)以用於目的暫存器或具有128位元、256位元、512位元等的記憶體向量之各128位元傳巷。
第14C圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的處理1403之一範例的替代實施例的流程圖。於處理1403之處理方塊1410中,指令控制訊號係被解碼以用於SIMD向量封裝之直方圖操作。於處理方塊1420中,暫存器檔案及/或記憶體係被存取。舉例來說,於一實施例中,第一向量暫存器與第二向量暫存器或記憶體向量部份可被存取。第一向量暫存器部份可儲存(於複數個p資料欄位之各者中)第一資料類型之元件。第二向量暫存器或記憶體向量部份可儲存(於複數個p資料欄位之各者中)第二資料類型之元件。於處理方塊1430
中,一或多個執行單元係被賦能予SIMD向量封裝之直方圖操作以用於執行SIMD向量封裝之直方圖。於處理方塊1443中,一或多個執行單元以由SIMD指令所界定的範圍來比較第一資料類型之各元件(例如16位元整數單元條元件),於該第一向量暫存器傳巷部份之該複數個p資料欄位中(例如Source1的各128位元傳巷部份中之八個資料欄位)。對於於該範圍中之該第一向量暫存器部份的任何元件,該第二資料類型之對應的元件(例如於Source2之16位元整數或浮點大小元件)(來自該第二向量暫存器或記憶體向量半傳巷部份)係被加入至該結果(result)之一對應的部分的複數個q資料欄位之其中一者中(例如,Result之各64位元半傳巷部份的四個16位元大小累加器資料欄位),複數個q資料欄位之該其中一者係根據於該第一資料類型之對應的元件中之一值(例如兩個最小有效位元的)而被選擇。
於處理方塊1450中,無論最後傳巷之處理是否完成,一決定係被做出。若如此,則處理前進於處理方塊1470中,於其中各結果部份之結果資料欄位係被儲存於目的向量暫存器或記憶體向量中,而處理結束於處理方塊1499中。否則,於處理方塊1460中,待被處理之傳巷係被設定至下個傳巷,且處理反復地開始於處理方塊1443,直到最後傳巷之處理被完成。
第14D圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的處理1404之一範例的另一替
代實施例的流程圖。於處理1404之處理方塊1410中,指令控制訊號係被解碼以用於SIMD向量封裝之直方圖操作。於處理方塊1420中,暫存器檔案及/或記憶體係被存取。舉例來說,於一實施例中,第一向量暫存器與第二向量暫存器或記憶體向量部份可被存取。第一向量暫存器部份可儲存(於複數個p資料欄位之各者中)第一資料類型之元件。第二向量暫存器或記憶體向量部份可儲存(於複數個p資料欄位之各者中)第二資料類型之元件。於處理方塊1430中,一或多個執行單元係被賦能予SIMD向量封裝之直方圖操作以用於執行SIMD向量封裝之直方圖。於處理方塊1444中,一或多個執行單元以由SIMD指令所界定的範圍來比較第一資料類型之各元件(例如16位元整數單元條元件),於該第一向量暫存器傳巷部份之該複數個p資料欄位中(例如Source1的各128位元傳巷部份中之八個資料欄位)。對於於該範圍中之該第一向量暫存器傳巷部份的任何元件,該第二資料類型之對應的元件(例如於Source2之16位元整數或浮點大小元件)(來自該第二向量暫存器或記憶體向量傳巷部份)係被加入至該結果(result)之一部分的複數個q資料欄位之其中一者中(例如,Result之各128位元傳巷部份的八個16位元大小累加器資料欄位),複數個q資料欄位之該其中一者係根據於該第一資料類型之對應的元件中之一值(例如三個最小有效位元的)而被選擇。
於處理方塊1450中,無論最後傳巷之處理是否完
成,一決定係被做出。若如此,則處理前進於處理方塊1470中,於其中各結果部份之結果資料欄位係被儲存於目的向量暫存器或記憶體向量中,而處理結束於處理方塊1499中。否則,於處理方塊1460中,待被處理之傳巷係被設定至下個傳巷,且處理反復地開始於處理方塊1444,直到最後傳巷之處理被完成。
應了解的是,梯度方向或邊緣定向(θ)可被分類成20度(例如180°/9個單元條)、或18度(例如180°/10個單元條)、或15度(例如180°/12個單元條)、或40度(例如360°/9個單元條)、或22.5度(例如360°/16個單元條)等等之各種群組。基於資料類型與大小元件之尺寸,SIMD向量封裝之直方圖的一些實施例可使累加的大小飽和(例如,對於未帶符號的16位元整數,於65536,或對於帶符號的16位元整數,於32767)。若最大累加值被超過,則一些替代實施例可觸發一例外及/或設定一溢位旗標。一些其他替代實施例可允許相對於資料類型與大小元件之尺寸所提供者具有較大之精確度的大小之累加(例如累加16位元大小為32位元直方圖,或8位元大小為16位元直方圖等等)。亦應了解的是,於連接的區域內之大小的加權直方圖可根據其對應的q個中之一個梯度單元條而被計算,其係藉由使用多個SIMD向量封裝之直方圖指令,各q個單元條之p/q範圍上有一個,或是對於p個輸入藉由僅使用一個SIMD向量封裝之直方圖指令於q個單元條之僅一個範圍(平行處理)。
第14E圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的範例處理1405之另一替代實施例的流程圖。於處理1405之處理方塊1410中,指令控制訊號係被解碼以用於SIMD向量封裝之直方圖操作。於處理方塊1420中,暫存器檔案及/或記憶體係被存取。舉例來說,於一實施例中,第一向量暫存器與第二向量暫存器或記憶體向量部份可被存取。第一向量暫存器部份可儲存(於複數個p資料欄位之各者中)第一資料類型之元件。第二向量暫存器或記憶體向量部份可儲存(於複數個p資料欄位之各者中)第二資料類型之元件。於處理方塊1430中,一或多個執行單元係被賦能予SIMD向量封裝之直方圖操作以用於執行SIMD向量封裝之直方圖。於處理方塊1445中,一或多個執行單元以由SIMD指令所界定的範圍來比較第一資料類型之各元件(例如8位元整數單元條元件),於該第一向量暫存器傳巷部份之該複數個p資料欄位中(例如Source1的各128位元傳巷部份中之十六個資料欄位)。對於於該範圍中之該第一向量暫存器傳巷部份的任何元件,該第二資料類型之對應的元件(例如於Source2之8位元整數大小元件)(來自該第二向量暫存器或記憶體向量傳巷部份)係被加入至該結果(result)之一部分的複數個q資料欄位之其中一者中(例如,Result之各128位元傳巷部份的八個中的一個16位元大小累加器資料欄位),複數個q資料欄位之該其中一者係根據於該第一資料類型之對應的元件中之一值(例如8位元整數單元條元件取模
數8的)而被選擇。
於處理方塊1450中,無論最後傳巷之處理是否完成,一決定係被做出。若如此,則處理前進於處理方塊1470中,於其中各結果部份之結果資料欄位係被儲存於目的向量暫存器或記憶體向量中,而處理結束於處理方塊1499中。否則,於處理方塊1460中,待被處理之傳巷係被設定至下個傳巷,且處理反復地開始於處理方塊1445,直到最後傳巷之處理被完成。
舉例來說,於處理1405之範例中,於每128位元傳巷對於十六個輸入元件之八個直方圖單元條的情形,當第一暫存器部份之8位元元件係於該特定範圍中時,第二大小資料類型(例如未帶符號的或帶符號的整數)之對應的8位元元件(來自第二暫存器128位元傳巷部份)係被加入於目的暫存器128位元傳巷部份中之複數個16位元資料欄位(例如,未帶符號的或帶符號的整數,根據第二大小資料類型)之其中一者中,根據該第一單元條資料類型(例如未帶符號的或帶符號的位元組取模數8之值)之其對應的8位元元件的值來選擇,用以產生目的暫存器之各128位元傳巷部份的八個封裝16位元加權直方圖。
第14F圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的第六範例處理1406之另一替代實施例的流程圖。於處理1406之處理方塊1410中,指令控制訊號係被解碼以用於SIMD向量封裝之直方圖操作。於處理方塊1420中,暫存器檔案及/或記憶體係被存
取。舉例來說,於一實施例中,第一向量暫存器與第二向量暫存器或記憶體向量部份可被存取。第一向量暫存器部份可儲存(於複數個p資料欄位之各者中)第一資料類型之元件。第二向量暫存器或記憶體向量部份可儲存(於複數個p資料欄位之各者中)第二資料類型之元件。於處理方塊1430中,一或多個執行單元係被賦能予SIMD向量封裝之直方圖操作以用於執行SIMD向量封裝之直方圖。於處理方塊1446中,一或多個執行單元以由SIMD指令所界定的範圍來比較第一資料類型之各元件(例如16位元整數單元條元件),於該第一向量暫存器傳巷部份之該複數個p資料欄位中(例如Source1的各256位元傳巷部份中之十六個資料欄位)。對於於該範圍中之該第一向量暫存器傳巷部份的任何元件,該第二資料類型之對應的元件(例如於Source2之16位元整數或浮點大小元件)(來自該第二向量暫存器或記憶體向量傳巷部份)係被加入至該結果(result)之一部分的複數個q資料欄位之其中一者中(例如,Result之各256位元傳巷部份的九個中的一個16位元大小累加器資料欄位),複數個q資料欄位之該其中一者係根據於該第一資料類型之對應的元件中之一值(例如16位元整數單元條元件取模數9的)而被選擇。
於處理方塊1450中,無論最後傳巷之處理是否完成,一決定係被做出。若如此,則處理前進於處理方塊1470中,於其中各結果部份之結果資料欄位係被儲存於目的向量暫存器或記憶體向量中,而處理結束於處理方塊
1499中。否則,於處理方塊1460中,待被處理之傳巷係被設定至下個傳巷,且處理反復地開始於處理方塊1446,直到最後傳巷之處理被完成。
舉例來說,於處理1406之範例中,於每256位元傳巷對於十六個輸入元件之九個直方圖單元條的情形,當第一暫存器部份之16位元元件係於該特定範圍中時,第二大小資料類型(例如整數或浮點)之對應的16位元元件(來自第二暫存器256位元傳巷部份)係被加入於目的暫存器256位元傳巷部份中之複數個16位元資料欄位(例如整數或浮點,根據第二大小資料類型)之其中一者中,根據該第一單元條資料類型(例如未帶符號的或帶符號的16位元整數取模數9之值)之其對應的16位元元件的值來選擇,用以產生目的暫存器之各256位元傳巷部份的九個封裝16位元加權直方圖。
因此,梯度方向之此一直方圖的編譯可藉由於此所揭露之用以提供SIMD向量封裝之直方圖功能以對於連接的胞元區域內之像素產生分類的梯度方向之加權的直方圖(weighted histograms of binned gradient direction)的處理器指令與處理邏輯來改善。藉由執行於平行SIMD硬體中之多個相關更新至相同單元條位置,於此所揭露之處理器指令及處理裝置邏輯可消除連續瓶頸,例如矛盾考量與有關處理困難。
第15A圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的一裝置1501。於一實施例中
之裝置1501包含第一向量暫存器1510部份及第二向量暫存器或記憶體向量1520部份。應了解的是,雖然僅各暫存器或記憶體向量之一個部份可被顯示,實施例可執行SIMD向量封裝之直方圖操作於兩個、或四個或更多部份的64位元、128位元、256位元、512位元等等,共同地及/或平行地執行SIMD向量封裝之直方圖指令。第一向量暫存器1510部份可儲存第一資料類型之元件於複數個p資料欄位中的一部分(B0-B3)之各者中。第二向量暫存器或記憶體向量1520部份可儲存第二資料類型之元件於複數個p資料欄位中的一部分(M0-M3)之各者中。裝置1501之實施例可為部份之管線400(例如執行階段416)或部份之核心490(例如執行單元462)用於一指令之執行,以提供SIMD向量封裝之直方圖功能。裝置1501之實施例可與解碼階段(例如解碼406)或解碼器(例如解碼單元440)耦接,以解碼用於SIMD向量封裝之直方圖的指令,其可允許有效率的單元條之封裝範圍的向量加權直方圖SIMD計算。
一或多個執行單元(例如執行裝置1501)可包含範圍比較邏輯1514、單元條選擇邏輯1515、及加法器邏輯1516。回應所解碼的指令,範圍比較邏輯1514以由SIMD指令所界定的範圍1530來比較第一資料類型之各元件(例如16位元整數單元條元件),於該第一向量暫存器1510之該複數個p資料欄位的該部份中(例如各64位元部份中之四個資料欄位)。對於於該範圍中之該第一向量暫存器
1510部份的任何元件,該第二資料類型之對應的元件(例如16位元整數或浮點大小元件)(來自該第二向量暫存器或記憶體向量1520部份)係藉由加法器邏輯1516被加入及/或選項地累加至該結果(result)的複數個p資料欄位之一部分(D0-D3)的其中一者中(例如,結果1570之各64位元部份的四個16位元大小累加器資料欄位),複數個p資料欄位中的一部分之該其中一者係藉由單元條選擇邏輯1515根據於該第一資料類型之對應的元件中之一值(例如兩個最小有效位元的)而被選擇。
對於不在該範圍中的第一向量暫存器1510部份之那些元件,藉由比較邏輯1514,零值可被選擇取代對應的大小元件。應了解的是,零值整數表示亦可等於至少一零值浮點表示。對於一些實施例,加法器邏輯1516可被實現以包括節省進位之加法器(carry-save adder),以選擇性地將多個大小元件一起平行處理加至相同單元條位置。藉由執行於平行SIMD硬體中之多個相關更新至相同單元條位置,於此所揭露之處理器指令及處理裝置邏輯可消除連續瓶頸,例如矛盾考量與有關處理困難。
第15B圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的一替代裝置。於一實施例中之裝置1502包含第一向量暫存器1510部份及第二向量暫存器或記憶體向量1520部份。第一向量暫存器1510部份可儲存第一資料類型之元件於複數個p資料欄位中的一部分(B0-Bp-1)之各者中。第二向量暫存器或記憶體向量1520
部份可儲存第二資料類型之元件於複數個p資料欄位中的一部分(M0-Mp-1)之各者中。裝置1501之實施例可為部份之管線400(例如執行階段416)或部份之核心490(例如執行單元462)用於一指令之執行,以提供SIMD向量封裝之直方圖功能。裝置1501之實施例可與解碼階段(例如解碼406)或解碼器(例如解碼單元440)耦接,以解碼用於SIMD向量封裝之直方圖的指令,其可允許有效率的單元條之封裝範圍的向量加權直方圖SIMD計算。
一或多個執行單元(例如執行裝置1501)可包含範圍比較邏輯1524、單元條選擇邏輯1525、及加法器邏輯1526。回應所解碼的指令,範圍比較邏輯1524以由SIMD指令所界定的範圍1530來比較第一資料類型之各元件(例如16位元整數單元條元件),於該第一向量暫存器1510之該複數個p資料欄位的該部份中(例如各128位元部份中之八個資料欄位)。對於於該範圍中之該第一向量暫存器1510部份的任何元件,該第二資料類型之對應的元件(例如16位元整數或浮點大小元件)(來自該第二向量暫存器或記憶體向量1520部份)係藉由加法器邏輯1526被加入及/或選項地累加至該結果(result)的複數個p資料欄位之一部分(D0-Dp-1)的其中一者中(例如,結果1570之各128位元部份的八個16位元大小累加器資料欄位),複數個p資料欄位中的一部分之該其中一者係藉由單元條選擇邏輯1525根據於該第一資料類型之對應的元件中之一值(例如三個最小有效位元的)而被選擇。
對於不在該範圍中的第一向量暫存器1510部份之那些元件,藉由比較邏輯1524,等於至少一零值浮點表示之零值整數表示可被選擇取代對應的大小元件。對於一些實施例,加法器邏輯1526可被實現以包括節省進位之加法器(carry-save adder),以選擇性地將多個大小元件一起平行處理加至相同單元條位置。因此,執行於平行SIMD硬體中之多個相關更新至相同單元條位置,於此所揭露之處理器指令及處理裝置邏輯可消除連續瓶頸,例如矛盾考量與有關處理困難。
第15C圖顯示於一處理器中執行用以提供SIMD向量封裝之直方圖功能之指令的另一替代裝置。於一實施例中之裝置1503包含第一向量暫存器1510部份及第二向量暫存器或記憶體向量1520部份。第一向量暫存器1510部份可儲存第一資料類型之元件於複數個p資料欄位中的一部分(B0-Bp-1)之各者中。第二向量暫存器或記憶體向量1520部份可儲存第二資料類型之元件於複數個p資料欄位中的一部分(M0-Mp-1)之各者中。裝置1501之實施例可為部份之管線400(例如執行階段416)或部份之核心490(例如執行單元462)用於一指令之執行,以提供SIMD向量封裝之直方圖功能。裝置1501之實施例可與解碼階段(例如解碼406)或解碼器(例如解碼單元440)耦接,以解碼用於SIMD向量封裝之直方圖的指令,其可允許有效率的單元條之封裝範圍的向量加權直方圖SIMD計算。
一或多個執行單元(例如執行裝置1503)可包含範圍比
較邏輯1534、單元條選擇邏輯1535、及加法器邏輯1536。回應所解碼的指令,範圍比較邏輯1534以由SIMD指令所界定的範圍1530來比較第一資料類型之各元件(例如16位元整數單元條元件),於該第一向量暫存器1510之該複數個p資料欄位的該部份中(例如各256位元部份中之十六個資料欄位)。對於於該範圍中之該第一向量暫存器1510部份的任何元件,該第二資料類型之對應的元件(例如16位元整數或浮點大小元件)(來自該第二向量暫存器或記憶體向量1520部份)係藉由加法器邏輯1536被加入及/或選項地累加至該結果(result)的複數個q資料欄位之一部分(D0-Dq-1)的其中一者中(例如,結果1570之256位元部份的q個16位元大小累加器資料欄位),複數個q資料欄位中的一部分之該其中一者係藉由單元條選擇邏輯1535根據於該第一資料類型之對應的元件中之一值(例如未帶符號的或帶符號的16位元整數取模數q之值)而被選擇。
對於非該範圍中之元件的第一向量暫存器1510部份之那些元件,藉由比較邏輯1534,等於至少一零值浮點表示之零值整數表示可被選擇取代對應的大小元件。對於一些實施例,加法器邏輯1536可被實現以包括節省進位之加法器(carry-save adder),以選擇性地將多個大小元件一起平行處理加至相同單元條位置。應了解的是,SIMD向量封裝之直方圖指令(如此處所揭露者)可被使用以於平行SIMD硬體中執行多個相關更新至相同單元條位置。亦
應了解的是,於此揭露的SIMD向量封裝之直方圖指令與處理裝置邏輯可消除連續瓶頸,例如矛盾考量與有關處理困難。
此處所揭露的機制之範例可以硬體、軟體、韌體、或此實現方式之組合來實現。本發明之實施例可如執行於可程式化系統(包含至少一處理器、儲存系統(包含揮發性及非揮發性記憶體及/或儲存元件)、至少一輸入裝置、及至少一輸出裝置)之電腦程式或程式碼被實現。
程式碼可被應用至輸入指令用以執行此處所述之功能及產生輸出資訊。輸出資訊可以已知方式被應用至一或多個輸出裝置。出於此應用的目的,處理系統包括任何具有處理器(例如數位訊號處理器(DSP)、微控制器、特定應用積體電路(ASIC)、或微處理器)之系統。
程式碼可被實現於高階程序或物件導向程式語言以與處理系統通訊。程式碼亦可被實現於組合或機械語言,若有需要。事實上,此處所述之機制並不限於任何特定程式語言之範疇。於任何情形中,語言可為編譯或解譯語言。
至少一實施例之一或多個觀點可被儲存於機器可讀取媒體上之表示處理器內的各種邏輯的代表指令來實現,當由機器讀取時,造成機器製造邏輯用以執行此處所述之技術。此代表(已知為「IP核心」)可被儲存於有形的機器可讀取媒體且供應至各種顧客或製造設備用以載入實際做出邏輯或處理器之製造機器內。
此機器可讀取媒體可包含(但不限於)由包含儲存媒體
(例如硬碟、任何其他類型的碟機包含軟碟、光碟、光碟唯讀記憶體(CD-ROM)、可覆寫光碟(CD-RW)、及磁光碟、例如唯讀記憶體(ROM)、隨機存取記憶體(RAM)(例如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM))、可抹除可程式化唯讀記憶體(EPROM)、快閃記憶體、電氣可抹除可程式化唯讀記憶體(EEPROM)、磁或光卡、或適合用於儲存電子指令之任何其他類型的媒體之半導體元件)之機器或裝置所製造或形成的物件之非暫態的有形的配置。
因此,本發明之實施例亦可包含含有指令或含有設計資料之非暫態的有形的機器可讀取媒體,例如硬體描述語言(HDL),其界定此處所述之結構、電路、裝置、處理器及/或系統特徵。此實施例亦可參照為程式產品。
於某些情形中,指令轉換器可被使用以將指令從來源指令集轉換成目標指令集。舉例來說,指令轉換器可藉由核心轉譯(例如使用靜態二進制翻譯、包含動態編譯之動態二進制翻譯)、變形、模擬、或轉換指令成待被處理之一或多個其他指令。指令轉換器可以軟體、硬體、韌體、或其組合來實現。指令轉換器可為處理器上、處理器外、或部份在處理器上與外。
因此,根據至少一實施例用以執行一或多個指令之技術係被揭露。雖然特定例示實施例已被說明及顯示於圖式中,應了解的是,此實施例僅為說明用而非用以限制寬廣的本發明,且本發明並未被限制於特定所顯示與說明之解
釋與配置,因為各種其他修改對於研究此揭露之所屬技術領域中具有通常知識者而言係可發生。於技術之領域中,例如成長快速且進一步優點不容易預見,所揭露之實施例在配置及細節上可藉由賦能技術進展而不超出本揭露之原理或所附申請專利範圍之範疇而被容易地修改。
200‧‧‧處理器
201‧‧‧循序前端
202‧‧‧快速排程器
203‧‧‧亂序執行引擎
204‧‧‧慢/一般浮點排程器
206‧‧‧簡單浮點排程器
208‧‧‧暫存器檔案
210‧‧‧暫存器檔案
211‧‧‧執行區塊
212‧‧‧執行單元
214‧‧‧執行單元
216‧‧‧執行單元
218‧‧‧執行單元
220‧‧‧執行單元
222‧‧‧執行單元
224‧‧‧執行單元
226‧‧‧指令預取器
228‧‧‧指令解碼器
230‧‧‧追蹤快取
232‧‧‧微碼ROM
234‧‧‧uop佇列
Claims (25)
- 一種處理器,其包含:第一暫存器,包含第一複數個資料欄位,該第一複數個資料欄位係被分成第一部份,各第一部份具有第二複數個資料欄位以儲存單元條值(bin value);第二暫存器或記憶體儲存器組,表示第三複數個資料欄位以儲存對應至該第一複數個資料欄位之大小值(magnitude value),該第三複數個資料欄位係被分成該第一部份;目的暫存器,包含第四複數個資料欄位,該第四複數個資料欄位係被分成第二部份,各第二部份包含第五複數個資料欄位,其中於該目的暫存器中之各第五複數個資料欄位係用以從對應至該第五複數個資料欄位中之各者之一或多個個別的第一部份累積該第三複數個資料欄位之和;解碼階段,用以解碼指明一直方圖操作之第一指令;及一或多個執行單元,其回應解碼後的該第一指令,進行下列操作:比較該第一暫存器的第一部份之該第二複數個資料欄位中各者之值,以決定何者對應至該目的暫存器之對應第二部份的該第五複數個資料欄位中之該各者;及根據所對應的比較,將來自分別對應至該第五複數個資料欄位中之該各者之該一或多個個別的第一部份之該第三複數個資料欄位之和,累加至該第五複數個資料欄位 中之各者。
- 如申請專利範圍第1項之處理器,其中用以決定何種對應至該第五複數個資料欄位中之該各者之該第二複數個資料欄位中的各者之對應比較包括對一範圍的比較。
- 如申請專利範圍第2項之處理器,其中該範圍係於一立即運算元中由該第一指令所指明。
- 如申請專利範圍第2項之處理器,其中該範圍係於該第一指令之一操作碼所指明。
- 如申請專利範圍第2項之處理器,其中該第二複數個資料欄位中的各者之對應比較包括根據一對應單元條元件之值來決定何者對應至該第五複數個資料欄位中之該各者。
- 如申請專利範圍第2項之處理器,其中該第二複數個資料欄位中的各者之對應比較包括根據一對應單元條元件之最小有效2位元來決定何者對應至該第五複數個資料欄位中之該各者。
- 如申請專利範圍第2項之處理器,其中該第二複數個資料欄位中的各者之對應比較包括根據一對應單元條元件之最小有效3位元來決定何者對應至該第五複數個資料欄位中之該各者。
- 如申請專利範圍第1項之處理器,其中該第一指令為向量包裝之直方圖指令,用以利用每該目的暫存器之各128位元傳巷(bit lane)有四個單元條的方式來計算一加權直方圖。
- 如申請專利範圍第1項之處理器,其中該第一指令為向量包裝之直方圖指令,用以利用每該目的暫存器之各128位元傳巷(bit lane)有八個單元條的方式來計算一加權直方圖。
- 如申請專利範圍第1項之處理器,其中該第一指令為向量包裝之直方圖指令,用以利用該目的暫存器之至少九個單元條的方式來計算一加權直方圖。
- 一種用以提供向量包裝之直方圖功能的方法,包含下列步驟:將第一資料類型之一元件儲存於第一向量暫存器部份之複數個p資料欄位之各者中;將第二資料類型之一對應元件儲存於一第二向量暫存器或記憶體向量部份之複數個p資料欄位中之各者中;於處理器中執行SIMD指令以用於向量包裝之直方圖;藉由將該第一向量暫存器部份的該複數個p資料欄位中之該第一資料類型之各元件,與藉由該SIMD指令所指明之一範圍加以比較;及對於該範圍中之該第一向量暫存器部份的任何元件,從根據該第一資料類型之該對應元件的一值所選擇的一目的向量暫存器部份之該第二向量暫存器或記憶體向量部份,將該第二資料類型之一對應元件增加至複數個q資料欄位中之其中一者。
- 如申請專利範圍第11項之方法,其中該第一資料 類型為16位元整數。
- 如申請專利範圍第11項之方法,其中該第二資料類型為16位元整數。
- 如申請專利範圍第11項之方法,其中該第二資料類型為16位元浮點數。
- 如申請專利範圍第11項之方法,其中該複數個p資料欄位具有四個資料欄位。
- 如申請專利範圍第11項之方法,其中該複數個p資料欄位具有八個資料欄位。
- 如申請專利範圍第11項之方法,其中該複數個p資料欄位具有十六個資料欄位。
- 如申請專利範圍第11項之方法,其中該複數個p資料欄位由與該複數個q資料欄位相同數量的資料欄位所組成。
- 如申請專利範圍第11項之方法,其中該複數個p資料欄位中之各者由與該複數個q資料欄位中之各者相同數量的位元所組成。
- 如申請專利範圍第11項之方法,其中該複數個p資料欄位中之各者由與該複數個q資料欄位中之各者至少一半的位元所組成。
- 如申請專利範圍第11項之方法,其中該複數個q資料欄位具有四個資料欄位。
- 如申請專利範圍第11項之方法,其中該複數個q資料欄位具有八個資料欄位。
- 如申請專利範圍第11項之方法,其中該複數個q資料欄位具有至少九個資料欄位。
- 一種處理系統,包含:一記憶體;及複數個處理器,各處理器包含:第一暫存器,將第一資料類型之一元件儲存於第一暫存器部份之複數個p資料欄位之各者中;第二暫存器或記憶體儲存器組,將第二資料類型之一對應元件儲存於第二暫存器或記憶體儲存器組部份之複數個p資料欄位中之各者中;解碼階段,用以解碼用於向量包裝之直方圖的SIMD指令;及一或多個執行單元,其回應所解碼的SIMD指令,進行下列操作:將該第一暫存器部份的該複數個p資料欄位中之該第一資料類型之各元件,與藉由該SIMD指令所指明之一範圍加以比較;及對於該範圍中之該第一暫存器部份的任何元件,從根據該第一資料類型之其對應元件的一值所選擇的一目的暫存器部份之該第二暫存器或記憶體儲存器組部份的,該複數個p資料欄位增加該第二資料類型之一對應元件至複數個q資料欄位中之其中一者。
- 如申請專利範圍第24項之處理系統,其中該複數個p資料欄位中之各者由與該複數個q資料欄位中之各者 相同數量的位元所組成。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/752,054 | 2015-06-26 | ||
US14/752,054 US9875213B2 (en) | 2015-06-26 | 2015-06-26 | Methods, apparatus, instructions and logic to provide vector packed histogram functionality |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201717052A TW201717052A (zh) | 2017-05-16 |
TWI697788B true TWI697788B (zh) | 2020-07-01 |
Family
ID=57586534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW105115542A TWI697788B (zh) | 2015-06-26 | 2016-05-19 | 用以提供向量包裝之直方圖功能的方法,裝置,指令及邏輯 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9875213B2 (zh) |
EP (1) | EP3314407B1 (zh) |
CN (1) | CN107690618B (zh) |
TW (1) | TWI697788B (zh) |
WO (1) | WO2016209582A1 (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105654092B (zh) * | 2015-11-25 | 2019-08-30 | 小米科技有限责任公司 | 特征提取方法及装置 |
WO2019005115A1 (en) | 2017-06-30 | 2019-01-03 | Intel Corporation | APPARATUS AND METHOD FOR MULTIPLICATION AND CUMULATION OF COMPLEX VALUES |
US11294679B2 (en) * | 2017-06-30 | 2022-04-05 | Intel Corporation | Apparatus and method for multiplication and accumulation of complex values |
WO2019005165A1 (en) | 2017-06-30 | 2019-01-03 | Intel Corporation | METHOD AND APPARATUS FOR VECTORIZING INDIRECT UPDATING BUCKLES |
US10706316B2 (en) | 2017-09-28 | 2020-07-07 | Qualcomm Incorporated | System and method of feature descriptor processing |
US11455169B2 (en) | 2019-05-27 | 2022-09-27 | Texas Instruments Incorporated | Look-up table read |
CN111638913B (zh) * | 2019-09-19 | 2023-05-12 | 中国科学院信息工程研究所 | 一种基于随机化索引的处理器芯片分支预测器安全增强方法及电子装置 |
CN113436121B (zh) * | 2021-06-28 | 2022-12-02 | 西安电子科技大学 | 基于arm-neon扩展指令集的图像直方图统计方法 |
GB202202794D0 (en) * | 2022-03-01 | 2022-04-13 | Graphcore Ltd | Machine code instruction |
CN114840255B (zh) * | 2022-07-04 | 2022-09-27 | 飞腾信息技术有限公司 | 处理数据的方法、装置及设备可读存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5541865A (en) * | 1993-12-30 | 1996-07-30 | Intel Corporation | Method and apparatus for performing a population count operation |
US20070283127A1 (en) * | 2003-08-18 | 2007-12-06 | Cray Inc. | Method and apparatus for indirectly addressed vector load-add-store across multi-processors |
US20120159130A1 (en) * | 2010-12-21 | 2012-06-21 | Mikhail Smelyanskiy | Mechanism for conflict detection using simd |
TW201337738A (zh) * | 2011-11-30 | 2013-09-16 | Intel Corp | 用以提供向量水平式多數決投票功能之指令與邏輯 |
TW201339961A (zh) * | 2011-12-22 | 2013-10-01 | Intel Corp | 用以執行兩向量暫存器之對應填充資料元件間絕對差計算之系統、裝置及方法 |
US20140189320A1 (en) * | 2012-12-28 | 2014-07-03 | Shih Shigjong KUO | Instruction for Determining Histograms |
US20140189307A1 (en) * | 2012-12-29 | 2014-07-03 | Robert Valentine | Methods, apparatus, instructions, and logic to provide vector address conflict resolution with vector population count functionality |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010037435A1 (en) * | 2000-05-31 | 2001-11-01 | Van Doren Stephen R. | Distributed address mapping and routing table mechanism that supports flexible configuration and partitioning in a modular switch-based, shared-memory multiprocessor computer system |
US7668897B2 (en) * | 2003-06-16 | 2010-02-23 | Arm Limited | Result partitioning within SIMD data processing systems |
EP3153965B1 (en) | 2008-03-10 | 2019-05-08 | Mobileye Vision Technologies Ltd. | Enhanched look-up table signal processing |
US9519617B2 (en) * | 2011-07-14 | 2016-12-13 | Texas Instruments Incorporated | Processor with instruction variable data distribution |
US9501276B2 (en) * | 2012-12-31 | 2016-11-22 | Intel Corporation | Instructions and logic to vectorize conditional loops |
US20160026607A1 (en) * | 2014-07-25 | 2016-01-28 | Qualcomm Incorporated | Parallelization of scalar operations by vector processors using data-indexed accumulators in vector register files, and related circuits, methods, and computer-readable media |
-
2015
- 2015-06-26 US US14/752,054 patent/US9875213B2/en active Active
-
2016
- 2016-05-19 TW TW105115542A patent/TWI697788B/zh not_active IP Right Cessation
- 2016-06-02 EP EP16815015.9A patent/EP3314407B1/en active Active
- 2016-06-02 WO PCT/US2016/035450 patent/WO2016209582A1/en unknown
- 2016-06-02 CN CN201680032319.XA patent/CN107690618B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5541865A (en) * | 1993-12-30 | 1996-07-30 | Intel Corporation | Method and apparatus for performing a population count operation |
US20070283127A1 (en) * | 2003-08-18 | 2007-12-06 | Cray Inc. | Method and apparatus for indirectly addressed vector load-add-store across multi-processors |
US20120159130A1 (en) * | 2010-12-21 | 2012-06-21 | Mikhail Smelyanskiy | Mechanism for conflict detection using simd |
TW201337738A (zh) * | 2011-11-30 | 2013-09-16 | Intel Corp | 用以提供向量水平式多數決投票功能之指令與邏輯 |
TW201339961A (zh) * | 2011-12-22 | 2013-10-01 | Intel Corp | 用以執行兩向量暫存器之對應填充資料元件間絕對差計算之系統、裝置及方法 |
US20140189320A1 (en) * | 2012-12-28 | 2014-07-03 | Shih Shigjong KUO | Instruction for Determining Histograms |
US20140189307A1 (en) * | 2012-12-29 | 2014-07-03 | Robert Valentine | Methods, apparatus, instructions, and logic to provide vector address conflict resolution with vector population count functionality |
Also Published As
Publication number | Publication date |
---|---|
US20160378716A1 (en) | 2016-12-29 |
CN107690618B (zh) | 2023-03-28 |
US9875213B2 (en) | 2018-01-23 |
EP3314407A1 (en) | 2018-05-02 |
TW201717052A (zh) | 2017-05-16 |
EP3314407B1 (en) | 2020-11-04 |
CN107690618A (zh) | 2018-02-13 |
EP3314407A4 (en) | 2019-04-03 |
WO2016209582A1 (en) | 2016-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10459877B2 (en) | Instruction and logic to provide vector compress and rotate functionality | |
TWI697788B (zh) | 用以提供向量包裝之直方圖功能的方法,裝置,指令及邏輯 | |
TWI731892B (zh) | 用於以通道為基礎的跨步儲存操作之指令及邏輯 | |
JP5933725B2 (ja) | ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック | |
JP5795787B2 (ja) | 条件付きループをベクトル化する命令及び論理 | |
TWI730016B (zh) | 用於跨步分散運算的指令與邏輯的處理器、方法及系統 | |
JP5933011B2 (ja) | ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック | |
CN108292229B (zh) | 用于重新出现的相邻聚集的指令和逻辑 | |
JP5930558B2 (ja) | ストライド機能及びマスク機能を有するベクトルロード及びベクトルストアを提供する命令及びロジック | |
TWI743064B (zh) | 用於取得多重向量元素操作之指令及邏輯 | |
TWI610233B (zh) | 用於提供向量分組元組交叉比較功能的方法、處理器和處理系統 | |
WO2014084919A1 (en) | Instruction and logic to provide pushing buffer copy and store functionality | |
US10705845B2 (en) | Instructions and logic for vector bit field compression and expansion | |
CN108292271B (zh) | 用于向量置换的指令和逻辑 | |
US9189240B2 (en) | Split-word memory | |
WO2017105716A1 (en) | Instructions and logic for even and odd vector get operations | |
US10157063B2 (en) | Instruction and logic for optimization level aware branch prediction | |
TWI773654B (zh) | 處理器、運算系統及用於執行以向量為基礎的位元操控之方法 | |
JP6231155B2 (ja) | ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック | |
JP6222859B2 (ja) | ストライド機能及びマスク機能を有するベクトルロード及びベクトルストアを提供する命令及びロジック |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |