TWI553553B - 用於產生迴圈對齊計數或迴圈對齊遮罩的系統、設備與方法 - Google Patents
用於產生迴圈對齊計數或迴圈對齊遮罩的系統、設備與方法 Download PDFInfo
- Publication number
- TWI553553B TWI553553B TW101142190A TW101142190A TWI553553B TW I553553 B TWI553553 B TW I553553B TW 101142190 A TW101142190 A TW 101142190A TW 101142190 A TW101142190 A TW 101142190A TW I553553 B TWI553553 B TW I553553B
- Authority
- TW
- Taiwan
- Prior art keywords
- instruction
- loop
- array
- data
- alignment
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 42
- 230000015654 memory Effects 0.000 claims description 48
- 238000003860 storage Methods 0.000 claims description 25
- 230000008569 process Effects 0.000 claims description 9
- 238000012545 processing Methods 0.000 description 62
- 239000013598 vector Substances 0.000 description 31
- 238000010586 diagram Methods 0.000 description 24
- 239000000463 material Substances 0.000 description 10
- 238000006243 chemical reaction Methods 0.000 description 8
- 230000003068 static effect Effects 0.000 description 7
- 238000005056 compaction Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 5
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 5
- 239000000872 buffer Substances 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 239000011343 solid material Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- -1 for example Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000000696 magnetic material Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000012782 phase change material Substances 0.000 description 1
- 230000004044 response Effects 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- 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/30018—Bit or string instructions
-
- 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/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- 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/3824—Operand accessing
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)
- Executing Machine-Instructions (AREA)
Description
所揭露的數個實施例係有關電腦處理器架構。尤其是,所揭露的數個實施例係有關被執行時會致使一種特定結果的指令。
許多處理器係具有單指令多資料(Single Instruction,Multiple Data,SIMD)架構。SIMD架構通常有助於顯著地增進處理速度。在SIMD架構中,不若只在一個資料元件(data element)或一對資料元件上作純量指令(scalar instruction)操作,係可同時或並行地在複數個資料元件或複數對資料元件上作緊縮資料指令(packed data instruction)、向量指令(vector instruction)或SIMD指令操作。此處理器可具有反應於緊縮資料指令以同時或並行地進行這複數個操作的並行執行硬體。
在SIMD架構中,係可將複數個資料元件以緊縮資料或向量資料的形式緊縮在一個暫存器或記憶體位置內。在緊縮資料中,此暫存器或其他儲存位置的位元可被邏輯性地分割成一連串的複數個固定大小資料元件。各些資料元件中之各者可係代表與典型上係具有相同大小的其他資料元件一起被儲存在此暫存器或儲存位置內的個別資料件。例如,一個256位元寬的暫存器可係具有四個64位元
寬緊縮資料元件、八個32位元寬緊縮資料元件、十六個16位元寬緊縮資料元件、或三十二個8位元寬緊縮資料元件。這些緊縮資料元件中之各者可係代表可被與其他者分開或獨立地作操作的一個不同的個別資料件(例如,一個像素的一個顏色等等)。
典型而言,一種類型的緊縮資料指令、向量指令或SIMD指令(例如,一個緊縮加法指令)可明定出單一個緊縮指令操作(例如,加法)要以一種垂直方式在來自兩個來源緊縮資料運算元中的所有對應資料元件對上進行,以產生一個目標或結果緊縮資料。這些來源緊縮資料運算元可係具有相同大小,可係含有為相同寬度的資料元件,並因而可各含有相同數量的資料元件。在這兩來源緊縮資料運算元中之相同位元位置中的來源資料元件可代表對應資料元件對。此緊縮資料運算元可係被分開或獨立地在這些對應來源資料元件對中之各者上進行,以產生符合數量的結果資料元件,並且因此,各個對應來源資料元件對可具有一個對應結果資料元件。典型上,針對這樣一個指令的結果資料元件係屬於同一個階級,並且他們常係具有相同的大小。
除了這個示範類型的緊縮資料指令以外,還有各式各樣的其他類型的緊縮資料指令。例如,係有僅具有一個或具有多於兩個的來源緊縮資料運算元的那些緊縮資料指令、被以水平方式而非垂直方式操作的那些緊縮資料指令、產生具有不同大小的結果緊縮資料運算元的那些緊縮
資料指令、具有被定為不同大小的數個資料元件的那些緊縮資料指令、和/或具有不同資料元件階級的那些緊縮資料指令。
依據本發明的一個實施例,係提出一種方法,其包含下列步驟:由一個處理器接收一個迴圈對齊指令,該迴圈對齊指令指出一個陣列的一個基底位址作為一第一運算元、指出一個迴圈極限作為一第二運算元、並指出一個目標,其中該迴圈含有多個重複次(iteration),並且在各個重複次中係有該陣列的一個資料元件要被處理;解碼該迴圈對齊指令以作執行;以及將該執行的一個結果儲存在該目標中,該結果指出在該陣列之開端處的要被與該陣列之一剩餘部份分開作處置的資料元件之數量,以使得該陣列之該剩餘部份的該基底位址針對一個對齊寬度而言係有對齊。
100、1700‧‧‧處理器
101‧‧‧指令集架構(ISA)
102‧‧‧指令集
103‧‧‧經遮蔽緊縮資料指令
105A、105B、105C‧‧‧指令
106‧‧‧架構暫存器
107‧‧‧緊縮資料暫存器
108‧‧‧遮罩暫存器
109‧‧‧執行邏輯
127、320、321、322、700‧‧‧暫存器
129‧‧‧解碼器
201、205、207‧‧‧來源緊縮資料
202、206、208‧‧‧遮罩
203‧‧‧操作
315‧‧‧指令處理設備
317‧‧‧執行單元
318‧‧‧迴圈對齊邏輯
323‧‧‧迴圈對齊計數(PLCNT)目標/暫存器
324‧‧‧迴圈對齊遮罩(PLMSK)目標/暫存器
325‧‧‧迴圈剩餘遮罩(KSUBREM)目標/暫存器
400‧‧‧儲存媒體
405‧‧‧迴圈對齊指令
500、550‧‧‧方法
510~530、560~580‧‧‧方塊
600‧‧‧表格
1300、1400、1500‧‧‧系統
1310、1315‧‧‧處理器/實體資源/處理元件
1320‧‧‧圖形記憶體控制器集線器(GMCH)
1340、1432、1434‧‧‧記憶體
1345‧‧‧顯示器
1350‧‧‧輸入/輸出控制器集線器(ICH)
1360‧‧‧外部圖形裝置
1370‧‧‧週邊裝置
1395‧‧‧前側匯流排(FSB)
1416‧‧‧第一匯流排
1414、1514‧‧‧輸入/輸出(I/O)裝置
1418‧‧‧匯流排橋
1420‧‧‧第二匯流排
1422‧‧‧鍵盤/滑鼠
1424‧‧‧音訊輸入/輸出(I/O)
1427‧‧‧通訊裝置
1428‧‧‧資料儲存體單元
1430‧‧‧碼
1438‧‧‧高效能圖形電路
1439‧‧‧高效能圖形介面
1450‧‧‧點對點互連體/點對點(PtP)介面
1452、1454‧‧‧點對點(P-P)介面
1470、1480‧‧‧處理器/處理元件
1472、1482‧‧‧記憶體控制器集線器(IMC)/控制邏輯(CL)
1476、1478、1486、1488‧‧‧點對點(P-P)介面/點對點(PtP)介面電路
1490‧‧‧晶片組
1492、1496‧‧‧介面
1494、1498‧‧‧點對點介面電路
1515‧‧‧舊有輸入/輸出(I/O)裝置
1600‧‧‧單晶片系統(SoC)
1602‧‧‧互連單元
1610‧‧‧應用處理器
1620‧‧‧媒體處理器
1624‧‧‧影像處理器
1626‧‧‧音訊處理器
1628‧‧‧視訊處理器
1630‧‧‧靜態隨機存取記憶體(SRAM)單元
1632‧‧‧直接記憶體存取(DMA)單元
1640‧‧‧顯示器單元
1702A~1702N‧‧‧核心
1704A~N‧‧‧快取單元
1706‧‧‧共享快取單元
1708‧‧‧圖形邏輯
1710‧‧‧系統代理單元
1712‧‧‧環圈
1714‧‧‧記憶體控制器單元
1716‧‧‧匯流排控制器單元
1802‧‧‧高階語言
1804‧‧‧x86編譯器
1806‧‧‧x86二元碼
1808‧‧‧替代指令集編譯器
1810‧‧‧替代指令集二元碼
1812‧‧‧指令轉換器
1814‧‧‧不具有一個x86指令集核心的處理器
1816‧‧‧具有至少一個x86指令集核心的處理器
可藉由參照下面的說明和用來例示出本發明之數個實施例的隨附圖式而對本發明有更佳的瞭解。在這些圖式中:
圖1是一個處理器之範例實施例的方塊圖,此處理器具有一個指令集,此指令集包括一或多個迴圈對齊指令。
圖2A~2C例示出利用迴圈對齊指令之結果的數個經遮蔽緊縮資料操作之範例。
圖3是一個指令處理設備之範例實施例的方塊圖,此設
備具有一個執行單元,此執行單元可被操作來執行指令,包括一或多個迴圈對齊指令的一個範例實施例。
圖4是一個製造物品(例如,一個電腦程式產品)的方塊圖,包括儲存有一或多個迴圈對齊指令的一個有形非過渡性機器可取用且/或機器可讀取儲存媒體。
圖5A和5B是流程圖,其例示出用於處理迴圈對齊指令之方法的範例實施例。
圖6是一個表格,其例示出,緊縮資料操作遮罩位元的數量係取決於對齊寬度和資料元件寬度。
圖7是一組緊縮資料操作遮罩暫存器之範例實施例的方塊圖。
圖8A-8C例示出迴圈對齊指令及其操作的數個範例實施例。
圖9是依據本發明之一實施例的一個系統的方塊圖。
圖10是依據本發明之一實施例的一第二系統的方塊圖。
圖11是依據本發明之一實施例的一第三系統的方塊圖。
圖12是依據本發明之一實施例的一個單晶片系統(system-on-a-chip,SoC)的方塊圖。
圖13是依據本發明之實施例的一個單核心處理器及具有經整合記憶體控制器和圖形的一個多核心處理器的方塊圖。
圖14是依據本發明之實施例的一個方塊圖,其對比出對於一個軟體指令轉換器的使用,用以將來源指令集內的
二元指令轉換成目標指令集內的二元指令。
在下面的說明中,係提出許多特定細節。然而,應瞭解,本發明的實施例係可在沒有這些特定細節的情況下實行。在其他情況中,為了避免混淆對本說明的理解,習知的電路、結構或技術並未被詳細示出。
圖1是一個處理器100之範例實施例的方塊圖,其具有包括有一或多個迴圈對齊指令的一個指令集102。處理器100可為各式各樣的複雜指令集運算(complex instruction set computing,CISC)處理器、各式各樣的精簡指令集運算(reduced instruction set computing,RISC)處理器、各式各樣的極長指令字組(very long instruction word,VLIW)處理器、前述幾者的各種混合體、或完全是其他類型的處理器中之任何一者。在一或多個實施例中,處理器100可係一個一般用途處理器(例如,由加利福尼亞州(California)之聖克拉拉(Santa Clara)的英特爾公司(Intel Corporation)所製造的一個一般用途微處理器),但並不要求非得如此。或者是,此指令處理設備可係一個特殊用途處理器。合適的特殊用途處理器之範例包括但不受限於,在此僅寥舉數例,網路處理器、通訊處理器、密碼處理器、圖形處理器、共處理器、嵌入式處理器、數位訊號處理器(digital signal processor,DSP)和控制器(例如,微控制器)。
處理器100具有一個指令集架構(instruction set
architecture,ISA)101。指令集架構101表示出處理器100之架構的有關程式規劃的部份。指令集架構101一般包括有本地指令、架構暫存器、資料類型、定址模式、記憶體架構、中斷和例外處置、及處理器100的外部輸入和輸出(input and output,I/O)。指令集架構101與通常表示出被選擇來實施指令集架構之特定處理器設計技術的微架構有所區別。具有不同微架構的數個處理器可共享一個共用的指令集架構。例如,加利福尼亞州之聖克拉拉的英特爾公司的某些微處理器和加利福尼亞州之森尼維耳市(Sunnyvale)超微半導體(Advanced Micro Devices)公司的某些微處理器實質上係使用不同內部微架構來實施x86指令集的類似部份。
指令集架構101包括數個架構暫存器(architectural register)(例如,架構暫存器檔案)106。所例示的這些架構暫存器106包括數個一般用途暫存器127和數個緊縮資料暫存器(packed data register)107。各個一般用途暫存器127可被操作來儲存一個純量資料元件(scalar data element)(亦稱為資料元件),並且各個緊縮資料暫存器107B可被操作來儲存緊縮資料、向量資料或SIMD資料(例如,資料元件之陣列)。所例示的這些架構暫存器106亦包括數個遮罩暫存器108。各個遮罩暫存器108可被操作來儲存一個緊縮資料操作遮罩(亦稱為「遮罩」)。
這些架構暫存器106表示數個機載儲存位置。於本文中,架構暫存器106可亦被簡稱為暫存器。除非有以其他方式指明或明顯表示,否則架構暫存器、暫存器檔案和
暫存器等詞語於本文中係用來指涉軟體和/或程式設計師可見(例如,軟體可見)的暫存器及/或由巨集指令所指明以識別運算元的暫存器。這些暫存器對比於在給定微架構中的其他非架構暫存器(例如,暫時性暫存器、重排序緩衝器、退役暫存器等等)。
所例示的指令集架構101亦包括由處理器100所支援的一個指令集102。指令集102包括數種不同類型的指令。指令集102的指令表示巨集指令(例如,被提供給處理器100以作執行的指令),而非微指令或微操作(例如,由處理器100之解碼器129解碼巨集指令所致者)。
指令集102包括一或多個迴圈對齊指令,例如迴圈對齊計數(loop alignment count,PLCNT)指令105A、迴圈對齊遮罩(loop alignment mask,PLMSK)指令105B、和/或迴圈剩餘遮罩(loop remainder mask,KSUBREM)指令105C。PLCNT指令105A是一個純量產生指令,其可被操作來致使或導致處理器100產生一個純量值,例如一個整數值。此純量值可被儲存在一般用途暫存器127中。PLMSK指令105B和KSUBREM指令105C是遮罩產生指令,其各可被操作來致使或導致處理器100產生可被儲存在遮罩暫存器108中的一個遮罩。
在一個實施例中,於上文中所述的一或多個迴圈對齊指令是經遮蔽緊縮資料指令(masked packed data instruction)103、這些經遮蔽緊縮資料指令103可係與在背景章節部份中所提過的緊縮資料指令類似,而有些許值得
注意的差異。類似於先前所提的緊縮資料指令,各個經遮蔽緊縮資料指令103可被操作來致使或導致處理器100在由此緊縮資料指令所指出的一或多個緊縮資料運算元的資料元件上進行一個緊縮資料操作。這些緊縮資料運算元可被儲存在緊縮資料暫存器107中。然而,各個經遮蔽緊縮資料指令103可係使用一或多個遮罩暫存器108來遮蔽、斷言(predicate)或有條件地控制緊縮資料處理。儲存在遮罩暫存器108中的遮罩可表示遮罩運算元、斷言運算元或有條件操作控制運算元。
遮罩可被操作來以每資料元件粒度而遮蔽或有條件地控制緊縮資料處理。例如,這些遮罩可被操作來遮蔽經遮蔽緊縮資料指令103的一個緊縮資料操作(在來自單一個來源緊縮資料運算元的個別資料元件上進行或在來自兩個來源緊縮資料運算元的個別對應資料元件對上進行)之結果是否要被儲存在一個緊縮資料結果中。經遮蔽緊縮資料指令103可容許對各個資料元件或對應資料元件對的緊縮資料處理被作分開且獨立於資料元件的斷言或有條件控制。經遮蔽緊縮資料指令103、操作、和遮罩可提供某些益處,像是,例如,增進的程式碼密度和/或更高的指令通量。
在替代實施例中,於上文中所述的這些迴圈對齊指令中之一或多者可為並不必然要具有與經遮蔽緊縮資料指令103相同的指令格式的指令;然而,這些指令會產生可由經遮蔽緊縮資料指令103使用的結果。迴圈對齊指令的這
些替代實施例係以虛線方格示於圖1中。
處理器100亦包括執行邏輯109。執行邏輯109可被操作來執行或處理指令集102之指令。執行邏輯109可包括執行單元、功能性單元、算術邏輯單元、邏輯單元、算術單元等等。處理器100亦包括解碼器129,以將巨集指令解碼成微指令或微操作以供執行邏輯109執行。
PLCNT指令105A和PLMSK指令105B運算剝離重複次(peel iteration)的數量。剝離重複次係指一個迴圈的數個初始重複次,這些初始重複次可從此迴圈取出並與此迴圈之剩餘重複次分開執行。若迴圈索引係隨著各個重複次增量,則此迴圈的這些「初始」重複次係指此迴圈之具最低索引值部份,或若迴圈索引係隨著各個重複次減量,則為具最高索引值部份。將一或多個初始重複次從一個迴圈中取出,這稱為「迴圈剝離(loop peeling)」,這是一種典型上係針對迴圈最佳化而進行的技術。在一種常見情況中,在一個迴圈中的運算可涉及一個陣列。此陣列的基底位址(base address)針對由下方處理器用來處理緊縮資料的資料儲存器之寬度(例如緊縮資料暫存器107、快取列、或其他記憶體單元的寬度)而言並不必然係有對齊。這個資料儲存器的寬度被稱為對齊寬度。一個無對齊基底位址指的是,此基底位址並不為對齊寬度的整數倍。為了改善資料取用的效率,編譯器可產生程式碼來運算剝離重複次的數量,以將一個陣列的無對齊資料元件位移出此迴圈。剝離重複次的數量與需要被位移出此迴圈(或者是在
其他情況下需要被與此陣列之剩餘部份分開作處置)的這些無對齊資料元件的數量相同。此陣列之剩餘部份的基底位址(即,開始位址)針對對齊寬度而言係有對齊;或,等效而言,是對齊寬度的整數倍。
然而,在最後向量化迴圈操作中的剝離重複次的數量,以及剩餘重複次的數量通常不能在編譯時間中得到解答,因為陣列元件的位址在那個時候還未知。配合於本文中所述之指令,在編譯時間中,編譯器可產生PLCNT指令105A、PLMSK指令105B和/或KSUBREM指令105C來替代進行相同工作的其他程式碼串。因此,編譯器可利用這些迴圈對齊指令來簡化其迴圈最佳化的工作。在替代實施例中,這些迴圈對齊指令可由程式設計師或其他產生程式碼的實體使用。由於這些迴圈對齊指令是指令集架構101的一部分,所以處理器100含有硬體(例如,解碼器129),此硬體接收這些指令作為輸入,並將它們解碼成為指令或微操作以供執行邏輯109執行。
PLCNT指令105A和PLMSK指令105B處置陣列的開始並沒有對齊這樣的情況,而KSUBREM指令105C處置在迴圈的那個末端的剩餘元件之總大小比對齊寬度小這樣的情況。在對齊寬度便為向量暫存器之寬度的一個實施例中,這意味著,在最後向量化迴圈操作中,剩餘元件並沒有填滿整個向量暫存器。也就是說,可在迴圈中沒有足夠重複次(且陣列中沒有足夠資料元件)時使用KSUBREM指令105C,以構成一個完整寬度向量操作。
考慮這麼一個範例,其中,各個迴圈重複次處理一個陣列元件。假設各個封包資料暫存器有512個位元,這表示有16個雙字組(doubleword)資料元件可被緊縮到此暫存器中並作為一個向量而被一起處理。若重複次的總數是100,且此迴圈的開始針對資料儲存器而言係有對齊,則在末端將會有未在向量化迴圈中處理且需要被分開處置的4個剩餘資料元件。KSUBREM指令105C運算剩餘資料元件的數量並產生一個遮罩,此遮罩可配合剩餘資料元件使用以改善迴圈向量化。
為了更進一步例示迴圈對齊,考慮對其使用的一個代表範例可能會有所幫助。圖2A是一個方塊圖,其例示出一個經遮蔽緊縮資料加法操作203的一第一代表示範實施例。經遮蔽緊縮資料加法操作203可係反應於或導因於一個經遮蔽緊縮資料指令(例如,圖1的其中一個經遮蔽緊縮資料指令103)而進行。在一個實施例中,係在操作203中使用一個遮罩202。遮罩202可係由一個處理器執行圖1之PLMSK指令105B所產生的結果。
在圖2A的範例中,經遮蔽緊縮資料加法操作203係要將一個純量值(例如,5)加到來源緊縮資料201之對應於一個設定遮罩位元(例如,1)的各個資料元件。假設係指明一個程式碼串(for i=0 to 21,B(i)=A(i)+5)來作執行,則純量值5要被加到陣列A的各個資料元件。由於來源緊縮資料201含有陣列A的三個資料元件(即A(0)、A(1)和A(2))作為其最低階級資料元件,所以只有遮罩202的最
低階級的三個位元被設定(例如,成1),以指出應針對A(0)、A(1)和A(2)進行此加法,並且此加法的結果應被儲存。在一個實施例中,係可使用遮罩202來載入來源緊縮資料201,以及進行經遮蔽緊縮資料加法操作203。或者是,係可在將十六個資料元件(例如,A(0)到A(15))載入到一個向量暫存器內之後使用遮罩202,以指出此加法應僅在最低階級的三個資料元件上進行。在前述兩個實施例中之任何一者中,將不會在陣列A之最高階級的十三個資料元件上進行此加法;因此,它們係由「x」(不在意)指出。
為作例示,假設來源緊縮資料201是512位元寬,且各個資料元件是32位元寬(即,一個雙字組,或「四位元組(Dword)」)。在圖2A~2C的範例中,來源緊縮資料201的寬度與對齊寬度相同。為了最佳化資料取用和緊縮資料操作,使陣列的基底位址針對對齊寬度而言為有對齊會是很有益處的。例如,當儲存在快取記憶體中的一個陣列之基底位址針對快取列寬度而言係有對齊時,處理器可藉單次提取來提取滿載著陣列資料元件的一個快取列。此外,當儲存在一個緊縮資料暫存器中的一個陣列之基底位址針對緊縮資料暫存器寬度而言係有對齊時,處理器可有效地向量化在這些陣列資料元件上的操作。
舉例來說,一個快取列的寬度可為512個位元,且對齊寬度可為一個向量暫存器的寬度。在當中向量暫存器也是512位元寬的一個處理器中,將滿載著資料(例如,十六個四位元組)的一個快取列載入此向量暫存器會需要
一個載入操作。然而,在圖2A的範例中(其中陣列A的基底位址針對對齊寬度而言並沒有對齊),載入陣列A之起首十六個四位元組將會需要兩個載入操作;首先從一第一快取列,A(0)到A(2),然後從一第二快取列,A(3)到A(15)。若一個快取列的寬度是512位元,且對齊寬度(例如,向量暫存器寬度)是128位元寬,則將有對齊的十六個四位元組載入到此向量暫存器中將會需要四個載入操作。然而,在圖2A的範例中,載入陣列A之起首十六個四位元組將會需要五個載入操作。這是因為這起首十六個四位元組係跨兩個快取列被儲存;因此,載入它們將會導致一個額外的載入操作。
在當中陣列元件之數量是2之乘冪的應用(例如,影像處理)中,起首的無對齊可能會導致在所有後續陣列元件之載入上的無對齊。因此,由於起首的無對齊,整個陣列A可能無法被以緊縮資料操作做有效處理。因此,在圖2A之範例中,係使用遮罩202來對處理器指出陣列A的那些元件需要與剩餘的陣列元件部份分開作處理。
相反地,圖2B示出一個範例,於此範例中,來源緊縮資料205含有陣列A之接下來的十六個元件(即,A(3)、A(4)、…、A(18))。這十六個元件的總寬度與對齊寬度相同。因此,可在所有的這十六個元件上作單一個緊縮資料操作(例如,向量提取、向量加法等等)。若這十六個元件各係用在一個迴圈重複次中作為一個指令(例如,for i=3 to 18,B(i)=A(i)+5)的來源運算元,則可藉單一個緊
縮資料操作來進行此加法。在圖2B的範例中,係示出要配合來源緊縮資料205使用的一個緊縮資料操作遮罩206。遮罩206之所有的這十六個遮罩位元被設定來指出可在陣列A之所有的這十六個資料元件上做操作,並且操作之結果可被儲存。遮罩206係以虛線示出,因為在一些實施例中,不使用遮罩206可能會是有利的。這是因為藉由使所有的遮罩位元為1,在來源緊縮資料205上的操作和操作結果的儲存與不在操作中使用遮罩206是一樣的。
在圖2C的範例中,此陣列的最後三個資料元件(即,A(19)、A(20)、A(21))並不佔用一個來源緊縮資料207的完整寬度。也就是說,在A中並沒有剩下足夠的元件來填滿整個向量暫存器207。由於來源緊縮資料207含有A(19)、A(20)、A(21)作為其最低階級資料元件,所以只有遮罩208之最低階級的三個位元被設定(例如,成1),以指出此加法應針對A(19)、A(20)、A(21)被進行,且此加法之結果應被儲存。遮罩208可為由一個處理器執行圖1之KSUBREM指令105C的結果。在一個實施例中,在陣列之末端會缺少(用來填滿一整個向量暫存器的)資料元件可能是在陣列之基底位址處之起首無對齊的結果。例如,在影像處理應用中,常常會有影像陣列之大小是向量暫存器寬之整數倍的時候。然而,若影像陣列的開端無對齊,則可能會有無法填滿整個向量暫存器的幾個資料元件被留在迴圈之末端。
遮罩202和208的使用有助於對當中陣列之資料
元件是運算元的迴圈之執行作向量化。在圖2A的範例中,具有迴圈索引i=0、1和2的重複次可藉一個經遮蔽緊縮資料操作(其中來源緊縮資料201係配合遮罩202使用)而被向量化。在圖2C的範例中,具有迴圈索引i=19、20和21的重複次可藉一個經遮蔽緊縮資料操作(其中來源緊縮資料207係配合遮罩208使用)而被向量化。在一個實施例中,當檢測到一個迴圈時,編譯器可產生包括PLCNT指令105A、PLMSK指令105B和/或KSUBREM指令105C中之一或多者的迴圈最佳化程式碼。PLCNT指令105A的輸出是一個整數,其指出可從此迴圈中被取出以增進向量化的重複次之數量;在圖2A的範例中,此數量為三。PLMSK指令105B的輸出是可被施加至來源緊縮資料201的一個經遮蔽資料操作遮罩(例如,遮罩202)。在圖2A的範例中,只有遮罩202之最低階級的三個元件被設定(例如,1),並且剩下的被清除(例如,0)。KSUBREM指令105C的輸出是可被施加至來源緊縮資料207的一個緊縮資料操作遮罩(例如,遮罩208)。在圖2C的範例中,只有遮罩208之最低階級的三個元件被設定(例如,1),並且剩下的被清除(例如,0)。
針對所例示之經遮蔽緊縮資料操作203的指令指出要被加到一個純量值的一個來源緊縮資料。其他經遮蔽緊縮資料指令可指出二或更多個來源緊縮資料。經遮蔽緊縮資料操作203的這個指令亦指出一個緊縮資料操作遮罩(202、206或208)。各個緊縮資料操作遮罩包括複數個遮罩元件、斷言元件、有條件控制元件或旗標。這些元件或
旗標可係包括在與一或多個對應來源資料元件的一個一對一對應關係內。例如,如於例圖中所示的,在操作係涉及一個來源緊縮資料運算元的事例中,係可能針對各個對應來源資料元件而有這樣一個元件或旗標。此經遮蔽資料操作遮罩的各個元件或旗標可被操作來遮蔽在這一或多個對應來源緊縮資料元件上的一個分開的緊縮資料操作。例如,各個元件或旗標可遮蔽在一個對應來源緊縮資料元件上的一個分開的緊縮資料操作。
如於例圖中所示出的,一般而言,各個元件或旗標可為單個位元。單一個位元可使得兩種不同可能性的其中一種被指明(例如,進行操作對上不進行此操作、儲存此操作之結果對上不儲存此操作之結果等等)。或者是,若想要在多於兩個的不同選項上作選擇,則可針對各個旗標或元件使用二或更多個位元。在圖2A的範例中,緊縮資料操作遮罩202包括十六個位元。這十六個位元各具有對於來源緊縮資料201之十六個對應資料元件中之一者的一個有序對應關係。例如,遮罩202的三個最高階級位元對應於來源緊縮資料201的對應的三個最高階級資料元件。在當中來源緊縮資料具有更少或更多資料元件的替代實施例中,緊縮資料操作遮罩可類似地具有更少或更多的資料元件。
依據所例示的慣例,當一個給定遮罩位元被設定(即,1)時,此緊縮資料操作的一個結果會在來源緊縮資料的一個對應資料元件上進行,並被儲存在此緊縮資料結果的一個對應資料元件中。相反地,當給定遮蔽位元被清
除(即,0)時,則針對來源緊縮資料的對應資料元件,此緊縮資料操作會被省略(即,不進行),或者是,結果會不容許被儲存在緊縮資料結果的對應資料元件中。然而,可將另一個值(由符號「X」指出)儲存在結果資料元件中。例如,使來自來源緊縮資料的對應資料元件之數值被儲存。在一個替代實施例中,可在緊縮資料結果的對應資料元件中儲存零或另一個預設值。相對於所例示者的一種慣例也是有可能的,當中,位元被清除(即,0)以容許結果被儲存,或者是被設定(即,1)以不容許結果被儲存。
在一些實施例中,例外(例如,例外旗標)或違規可選擇性地被壓抑或不由緊縮資料操作在被遮蔽掉的元件(即,具有對應經清除遮罩位元的資料元件)上發起。在一些實施例中,對於具有一個記憶體運算元的經遮蔽緊縮料指令而言,可選擇性地針對被遮蔽掉的元件而壓抑記憶體錯誤。這個特徵可有助於實施控制流斷言,因為此遮罩可實際上緊縮資料暫存器提供一種合併行為,但並不要求非得如此。
應識出,一個處理器可支援廣博各式各樣不同類型的經遮蔽緊縮資料操作。例如,這些可包括只具有一個或具有多於兩個的來源緊縮資料的那些、產生具有不同大小的結果緊縮資料的那些、具有大小不同之資料元件的那些、和/或具有不同結果資料元件階級的那些,以及前述數者之組合。
圖3是一個指令處理設備315之示範實施例的方
塊圖,其具有一個執行單元317,此執行單元317可被操作來執行包括PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C的一個示範實施例的指令。在一些實施例中,指令處理設備315可為一個處理器,且/或可係被包括在一個處理器(例如,圖1之處理器100,或類似者)中。或者是,指令處理設備315可係被包括在一個不同的處理器或電子系統中。
指令處理設備315接收PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C中之一或多者。這些指令可係接收自記憶體、指令佇列、指令提取單元、或其他來源。指令105A、105B和105C各可代表由指令處理設備所認可的一個機器指令、巨集指令、或控制訊號。指令處理設備315可具有可被操作來處理指令和/或反應於此指令而、由於此指令而、或如由此指令所指明地儲存結果的特定或特別的電路或是其他邏輯(例如,與硬體和/或韌體組合的軟體)。
指令處理設備315之所例示實施例包括一個指令解碼器,例如圖1之解碼器129,或類似者。解碼器129接收並解碼較高層級的機器指令或巨集指令,例如所接收到的指令105A~105C。解碼器129可產生並輸出一或多個較低層級的微操作、微碼入口點、微指令、或其他較低層級的指令或控制訊號,其反映出並/或係衍生自原始的較高層級指令。這一或多個較低層級指令或控制訊號可透過一或多個較低層級(例如,電路層級或硬體層級)操作而實施較
高層級指令之操作。解碼器129可係利用各種不同的機構來實施。適當機構的範例包括但不受限於微碼隨機存取記憶體(random access memory,ROM)、查詢表、硬體實作、可程式規劃邏輯陣列(programmable logic array,PLA)、用來實施此技藝中所習知的解碼器的其他機構等等。
或者是,不若具有解碼器129,在一或多個其他實施例中,指令處理設備315可取而代之地具有一個指令仿真器、翻譯器、變體器(morpher)、轉譯器、或其他指令轉換邏輯。各種不同類型的指令轉換邏輯在此技藝中是習知的,並且可藉軟體、硬體、韌體或前述各項之組合實施。此指令轉換邏輯可接收指令105A~105C中之一或多者、仿真、翻譯、變體、轉譯或以其他方式將其轉換成一或多個對應衍生指令或控制訊號。在更其他的實施例中,指令處理設備315可兼具有解碼器和額外指令轉換邏輯。例如,指令處理設備315可具有指令轉換邏輯,以將指令105A~105C中之一或多者轉換成一或多個中間指令,並具有一個解碼器,以將這一或多個中間指令解碼成可由此指令處理設備之本地硬體執行的一或多個較低層級指令或控制訊號。一些或所有的這些指令轉換邏輯可係並不位在與此指令處理設備之其餘部份相同的晶粒上,例如係在一個分開的晶粒上,或是在一個晶粒外記憶體中。
請再次參看圖3,指令處理設備315亦包括可被操作來儲存一個基底位址(這是要被對齊的一個陣列的開始位址)的一第一一般用途(general purpose,GP)暫存器
320、以及可被操作來儲存迴圈極限(這是在這個迴圈中之重複次的總數)的一第二一般用途暫存器321。第一和第二一般用途暫存器320和321供應輸入給PLCNT指令105A和PLMSK指令105B。在一個實施例中,指令處理設備315亦包括可被操作來儲存目前重複次計數(這指出向量處理在哪裡停止)的一第三一般用途暫存器322。第二和第三一般用途暫存器321和322供應輸入給KSUBREM指令105C。如先前曾經提過的,迴圈對齊指令可明顯地指明(例如,透過位元或是一或多個欄位)或是以其他方式指明供應輸入的暫存器以及目標。PLCNT指令105A之目標(PLCNT目標323)也是一個一般用途暫存器。PLMSK指令105B之目標(PLMSK目標324)是其中一個遮罩暫存器108。KSUBREM指令105C之目標(KSUBREM目標325)也是其中一個遮罩暫存器108。或者是,目標儲存位置可為另一個暫存器或記憶體位置。
在一些實施例中,PLCNT指令105A和PLMSK指令105B各指明或指出對於一個立即值的一個額外運算元。此立即值表示對齊寬度。在替代實施例中,這些指令並不指明一個立即值,而是使用一個預定值(例如,由下方微架構所容許的最大對齊寬度,例如512個位元)來作為對齊寬度。
暫存器320~325可各表示一個機載處理器儲存位置,例如圖1的架構暫存器106。暫存器320~325對於軟體和/或程式設計師而言可為可見的(例如,軟體可見),
且/或可為由巨集指令所指明來識別運算元的暫存器。可利用習知技術來以數種不同方式在不同微架構中實施暫存器320~325,不受限於任何習知的特定類型的電路。各種不同類型的暫存器都合適,只要它們能夠如於本文中所述地儲存和提供資料。適當類型的暫存器之範例包括但不受限於專用實體暫存器、使用暫存器重命名的動態配置實體暫存器、及前述各者之組合。
指令處理設備315亦包括執行單元317。執行單元317與暫存器320~325耦接。執行單元317亦與解碼器129耦接。執行單元317可自解碼器129接收反映出或衍生自PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C的一或多個微操作、微碼入口點、微指令、其他指令、或其他控制訊號。
執行單元317可係反應於且/或導因於各個迴圈對齊指令而被操來在目標中儲存一個結果。舉例來說,執行單元317可包括一個算術邏輯單元、邏輯單元、算術單元、功能單元或其他諸如此類者。執行單元317可包括迴圈對齊邏輯318,其可被操作來運算剝離重複次的數量。執行單元317和/或迴圈對齊邏輯318可包括可被操作來實施指令之操作(例如,執行一或多個微指令)的電路或其他執行邏輯(例如,軟體、韌體、硬體或一種組合)。
在一些實施例中,執行單元可進一步係可被操作來使目標之沒有被用來儲存遮罩的位元為零,或者是給這些位元另一個預定值。
為了避免混淆說明,所示出和描述的是一個相對簡單的指令處理設備315。可識出,其他實施例可係具有多於一個的執行單元。例如,此設備可包括複數個不同類型的執行單元,像是,例如,算術單元、算術邏輯單元(arithmetic logic unit,ALU)、整數單元、浮點數單元等等。這些單元中之至少一者可係反應於如於本文中所述的一個迴圈對齊指令之實施例。指令處理設備或處理器的另外其他數個實施例可係具有複數個核心、邏輯處理器或執行引擎。可被操作來執行一或多個迴圈對齊指令的一個執行單元可係被包括在至少一個、至少兩個、大部分的、或所有的這些核心、邏輯處理器或執行引擎中。
指令處理設備315或處理器可亦選擇性地包括一或多個其他習知部件。例如,其他實施例可包括指令提取邏輯、排程邏輯、分枝預測邏輯、指令和資料快取記憶體、指令和資料翻譯旁看緩衝器、預取緩衝器、微指令佇列、微指令序列、匯流排介面單元、第二或更高階快取、指令排程邏輯、退役邏輯、暫存器重命名邏輯及其他諸如此類者或是前述各者之各種組合中之一或多者。可識出,在處理器中之此等部件真的有許多不同的組合和組態,並且本發明之範疇不應受限於任何習知的此種組合或組態。
圖4是一個製造物品(例如,一個電腦程式產品)的方塊圖,其包括一個有形的非過渡性機器可讀(例如,機器可取用)儲存媒體400,其儲存一或多個迴圈對齊指令405(例如圖1之PLCNT指令105A、PLMSK指令105B和/或
KSUBREM指令105C)。應識出,用來進行於本文中所揭露之一或多種操作或方法(例如,使用迴圈對齊指令405之結果作為斷言運算元的一或多個指令、一個親密附屬純量或緊縮資料指令、或使用迴圈對齊指令405的一個常式或演算法)的其他指令或指令串可亦係儲存在儲存媒體400上。
在許多實施例中,此有形非過渡性機器可讀儲存媒體400可包括軟式磁片、光學儲存媒體、光學碟片、CD-ROM可程式規劃ROM(programmable ROM,PROM)、可拭除且可程式規劃ROM(erasable-and-programmable ROM,EPROM)、可電氣式拭除且可程式規劃ROM(electrically-erasable-and-programmable ROM,EEPROM)、隨機存取記憶體(random access memory,RAM)、靜態RAM(static-RAM,SRAM)、動態RAM(dynamic-RAM,DRAM)、快閃(Flash)記憶體、相變記憶體、或前述各者之組合。此有形媒體可包括一或多個有形固態材料,像是,例如,半導體材料、相變材料、磁性材料、光學碟片的光透固態材料等等。
適當的機器之範例包括但不受限於指令處理裝置、指令執行裝置、處理器、和具有一或多個指令處理裝置、指令執行裝置或處理器的各種電子裝置。此等電子裝置的幾個具代表性的範例包括但不受限於電腦系統、桌上型電腦、膝上型電腦、筆記型電腦、網路裝置、路由器、切換器、隨身型易網機、桌上型易網機、行動網際網路裝置(Mobile Internet device,MID)、行動電話、和媒體播放
器。此等電子裝置典型上包括與一或多個其他部件(像是,例如,一或多個有形非過渡性機器可讀儲存媒體)耦接的一或多個處理器。處理器與其他部件的耦接典型上係透過一或多個匯流排和橋接器(亦稱之為匯流排控制器)。因此,一個電子裝置的儲存裝置或儲存媒體可儲存指令和/或指令串以供在那個電子裝置的一或多個處理器上執行。
圖5A是一個方法500之範例實施例的方塊流程圖,此方法係用於處理一個迴圈對齊指令(例如圖1之PLCNT指令105A和/或PLMSK指令105B)之範例實施例。在許多種實施例中,方法500可係由一個一般用途處理器、一個特殊用途處理器(例如,一個圖形處理器或一個數位訊號處理器)、或其他類型的數位邏輯裝置或指令處理設備進行。在一些實施例中,方法500可係由圖1之處理器100、或圖3之指令處理設備315、或是類似的處理器或指令處理設備進行。或者是,方法500可係由處理器或指令處理設備的不同實施例進行。此外,圖1之處理器100和圖3之指令處理設備315可進行與圖5A之方法500的相同、類似或不同的操作和方法之實施例。
方法500包括一個處理器,其接收一個迴圈對齊指令,例如PLCNT指令105A或PLMSK指令105B(方塊510)。此迴圈對齊指令指明或指出一第一來源運算元、一第二來源運算元、一個目標、和一個陣列的一個資料元件大小。在一個實施例中,第一來源運算元指明當中儲存有此陣列之基底位址的一第一暫存器,並且第二來源運算元
指明當中儲存有迴圈極限(也就是一個迴圈中之重複次的總數)的一第二暫存器。在一些實施例中,各個陣列資料元件的寬度係作為指令名稱之一部份地由一個助憶符(mnemonic)指明(例如,可由指令之名稱指出一位元組的資料元件寬度,例如PLCNTB和PLMSKB)。在一些實施例中,此指令亦指明或指出一個立即值,這是此陣列要被針對來作對齊的所請求對齊寬度。在許多面向中,此指令可係在一個處理器、一個指令處理設備、或其中之一部份(例如,解碼器、指令轉換器等等)處被接收。在許多面向中,此迴圈對齊指令可係接收自處理器外來源(例如,自一個主記憶體、一個碟片、或是一個匯流排或互連體),或接收自處理器上來源(例如,自一個指令快取記憶體)。
接著,此迴圈對齊指令被解碼以作執行(方塊520)。此解碼行為可係由在一個處理器內的解碼器電路進行。在一些實施例中,此迴圈對齊指令可被轉換以由於上文中配合示於圖3中之解碼器129所述的指令轉換邏輯解碼。
在此迴圈對齊指令被執行之後,此番執行的結果被儲存在目標中(方塊530)。此結果指出在此陣列之開端處的要被與此陣列之剩餘部份分開作處置的資料元件之數量。迴圈對齊係在當此迴圈之剩餘部份的基底位址(也就是開始位址)針對一個對齊寬度(例如所請求之對齊寬度)而言係有對齊時達成。
在一個實施例中,此結果係以一個整數值來指出
資料元件之數量(例如在PLCNT指令105A的事例中)。在另一個實施例中,此結果係以被設為一個預定值(例如,1)的遮罩元件來指出資料元件之數量(例如在PLMSK指令105B的事例中)。
圖5B是一個方法550之範例實施例的方塊流程圖,此方法係用於處理一個迴圈對齊指令(例如圖1之KSUBREM指令105C)之範例實施例。在許多種實施例中,方法550可係由一個一般用途處理器、一個特殊用途處理器(例如,一個圖形處理器或一個數位訊號處理器)、或其他類型的數位邏輯裝置或指令處理設備進行。在一些實施例中,方法550可係由圖1之處理器100、或圖3之指令處理設備315、或是類似的處理器或指令處理設備進行。或者是,方法550可由處理器或指令處理設備的數個不同實施例進行。此外,圖1之處理器100和圖3之指令處理設備315可進行與圖5B之方法550的相同、類似或不同的操作和方法之實施例。
方法550包括一個處理器,其接收一個迴圈對齊指令,例如KSUBREM指令105C(方塊560)。此迴圈對齊指令指明或指出一第一來源運算元、一第二來源運算元、一個目標、和一個陣列的一個資料元件大小。在一個實施例中,第一來源運算元指明當中儲存有一個目前重複次計數(也就是一個迴圈之向量處理之處)的一第一暫存器,並且第二來源運算元指明當中儲存有迴圈極限(也就是一個迴圈中之重複次的總數)的一第二暫存器。在一些實施
例中,各個陣列資料元件的寬度係作為指令名稱之一部份地由一個助憶符指明(例如,可由指令之名稱指出一位元組的資料元件寬度,例如KSUMREMB)。在許多實施例中,此指令可係在一個處理器、一個指令處理設備、或其中之一部份(例如,解碼器、指令轉換器等等)處被接收。在許多面向中,此迴圈對齊指令可係接收自處理器外來源(例如,自一個主記憶體、一個碟片、或是一個匯流排或互連體),或接收自處理器上來源(例如,自一個指令快取記憶體)。
接著,此迴圈對齊指令被解碼以作執行(方塊570)。此解碼行為可係由在一個處理器內的解碼器電路進行。在一些實施例中,此迴圈對齊指令可被轉換以由在上文中配合示於圖3中之解碼器129所述的指令轉換邏輯解碼。
在此迴圈對齊指令被執行之後,此番執行的結果被儲存在目標中(方塊580)。此結果指出在此陣列之末端處的要被與此陣列之先前部份分開作處置的資料元件之數量。此陣列的先前部份之末端是向量處理停止且目前重複次計數被紀錄之處。
在一個實施例中,此結果係以被設為一個預定值(例如,1)的遮罩元件來指出資料元件之數量(例如在KSUBREM指令105C的事例中)。在另一個實施例中,此結果可亦係以一個整數值指出資料元件之數量。
所例示之方法包括從處理器或指令處理設備外
部(例如,從軟體觀點)可見的數個操作。在其他數個實施例中,此方法可選擇性地包括一或多個其他操作(例如,發生在此處理器或指令處理設備內部內的一或多個操作)。舉例來說,在指令被接收之後,此指令可被解碼、翻譯、仿真、或以其他方式轉換成一或多個其他指令或控制訊號。第一和第二來源運算元可被取用和/或接收。一個執行單元可被致能來依據此指令產生或進行迴圈對齊,並可產生或進行迴圈對齊。
圖6是一個表格600,其例示出由PLMSK指令105B和KSUBREM指令105C針對對齊寬度與緊縮資料元件寬度之不同組合所產生的緊縮資料操作遮罩位元的數量。緊縮資料操作遮罩位元的數量是給定對齊寬度與給定緊縮資料(例如,陣列)元件寬度的一個比例。所示出的是64位元、128位元、256位元和512位元的對齊寬度,但其他大小也是有可能的。於此係考慮8位元位元組(byte,B)、16位元字組(word,W)、32位元雙字組(doubleword,D)或單精度浮點數、和64位元四倍字(quadword,Q)的緊縮資料元件寬度,但其他大小也是有可能的。
圖7是一組遮罩暫存器700(例如圖1的遮罩暫存器108)的一個示範實施例之方塊圖。各個遮罩暫存器700可被用來儲存一個緊縮資料操作遮罩(例如儲存在PLMSK目標324和KSUBREM目標325中的遮罩)。在所例示的實施例中,這一組包括八個遮罩暫存器,標示為k0到k7。替代實施例可包括少於八個(例如,兩個、四個、六個等等)
或多於八個(例如,十六個、二十個、三十二個等等)的緊縮資料操作遮罩暫存器。在所例示的實施例中,各個遮罩暫存器700是64位元寬。在替代實施例中,遮罩暫存器700之寬度可係寬於64位元(例如,80位元、128位元等)或窄於64位元(例如,8位元、16位元、32位元等等)。遮罩暫存器700可係利用習知技術而以數種不同方式實施,並不受限於任何已知特定電路類型。各種不同類型的暫存器都合適,只要它們能夠如於本文中所述地儲存及提供資料。適當暫存器的範例包括但不受限於專用實體暫存器、使用暫存器重命名的動態配置實體暫存器、及前述各者之組合。
在一些實施例中,遮罩暫存器700可係一個分開的、專用的架構暫存器組。在一些實施例中,這些指令可藉一個指令格式之與用來編碼或指明其他暫存器(例如,圖1之遮罩暫存器108)之類型不同的位元或是一或多個不同欄位組合來編碼或指明遮罩暫存器。舉例來說,經遮蔽緊縮資料指令可利用三個位元(例如,一個3位元欄位)來編碼或指明八個緊縮資料操作遮罩暫存器k0到k7中之任何一者。在替代實施例中,係可在有更少或更多緊縮資料操作遮罩暫存器時分別使用更少或更多的位元。在一個特定實作中,只有遮罩暫存器k1~k7(而非k0)可被定址為一個斷言運算元,以斷言一個經遮蔽緊縮資料操作。暫存器k0可被用作一個常備來源或目標,但不可被編碼成斷言運算元(例如,若k0被指明,則其係具有全為一或「無遮蔽」編碼)。在其他實施例中,這些暫存器中不是全部就是只有
一些可被編碼成斷言運算元。
在一些實施例中,暫存器700之最低階級子集或部份係用於遮罩,但並不要求非得如此。如於圖6中所示,當對齊寬度是128位元,且資料元件寬度是8位元時,所使用的是16個遮罩位元。這16個遮罩位元可為儲存在其中一個暫存器700(例如,k1)中的最低階級的16個位元。k1的最高階級部份可被設為零或其他預定值。在替代實施例中,係可選擇性地使用最高階級子集或某個其他子集。
圖8A~8C分別例示出PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C及其操作的實施例。各個指令的名稱可具有附加在它們上面的一個助憶符B/W/D/Q,以指出資料元件寬度;例如,B(8位元)、W(16位元)、D(32位元)或Q(64位元)。在這些圖中,rax、rbx、rcx代表一般用途暫存器,且k1代表一個遮罩暫存器。在圖8A和8B(PLCNT和PLMSK)的範例中,rax(儲存SRC1)是具有一個陣列之基底位址的一第一來源運算元,rcx(儲存SRC2)是具有一個迴圈極限的一第二來源運算元,rax(儲存DEST)代表結果的一個目標。VL代表以位元組計的所請求對齊寬度,w代表此陣列中之各個資料元件的寬度(即,1、2、4或8位元組,如由附加在指令名稱上的B/W/D/Q所指出的)。在一些實施例中,這些指令指明可被用來設定VL之值的一個立即;例如,00、01和10,其可分別代表128位元、256位元、512位元。這些立即值中的一些可被保留;例如,11可代表1024位元。應瞭解,係可使用任何獨特的
立即值來表示不同的對齊寬度。在數個替代實施例中,這些指令並不指明一個立即值,而是使用一個預定值(例如,由下方微架構所容許的最大對齊寬度,例如512個位元)來作為VL之值。此外,在圖8A和8B的範例中,alignment_iterations代表要達到對齊的重複次之數量。此數量小於在SRC2中所指明的重複次極限。在圖2A的範例中,此數量是三。
如圖所示,PLCNT指令回傳對應於alignment_iterations與SRC2(重複次極限)中之最小值的一個計數。PLMSK指令回傳一個緊縮資料操作遮罩,其等效於由PLCNT所回傳的計數。圖8B的範例示出,此遮罩可係藉由將1之值移位n個位元然後減1來產生,其中n代表(可由PLCNT產生的)計數。所得遮罩被儲存到目標中,此目標可為圖7的其中一個緊縮資料操作遮罩暫存器700。應瞭解,這裡的這些範例是例示性的且不具限制性,並且係有許多種不同的方式可用來實施PLCNT和PLMSK。
在圖8C(KSUBREM)的範例中,rax(儲存SRC1)是具有迴圈極限的一第一來源運算元,rcx(儲存SRC2)是具有一個迴圈之迴圈極限的一第二來源運算元,rax(儲存DEST)代表結果的一個目標。VL代表向量元件之數量,且remaining_iterations代表VL與SRC2和SRC1間之差異中的最小值。所得遮罩可係藉由將1之值移位n個位元然後減1來產生,其中n是remaining_iterations之值。
在這邊所揭露的這些迴圈對齊指令是具有一般
用法的一般用途指令。例如,這些指令係可被單獨使用抑或與其他指令組合使用來計算剝離重複次的數量。在一些實施例中,在這邊所揭露的這些迴圈對齊指令可係配合一個親密附屬或相關聯緊縮資料指令使用,以最佳化對迴圈操作的執行。其他用法亦基於本揭露內容而有所考量。
示範電腦系統和處理器-圖9~13
圖9~13為示範電腦系統和處理器。於本技藝中所習知的對於膝上型電腦、桌上型電腦、手持式PC、個人數位助理、工程工作站、伺服器、網路裝置、網路集線器、切換器、嵌入式處理器、數位訊號處理器(DSP)、圖形裝置、視訊遊戲裝置、轉頻器、微控制器、行動電話、可攜式媒體播放器、手持式裝置、和各種其他電子裝置的其他系統設計和組態也適宜。一般而言,能夠如於本文中所揭露地整合處理器和/或其他執行邏輯的許多各式各樣的系統或電子裝置一般來講是適宜的。
現在請參看圖9,所示出的是依據本發明之一實施例的一個系統1300之方塊圖。此系統1300可包括耦接至圖形記憶體控制器集線器(graphics memory controller hub,GMCH)1320的一或多個處理器1310、1315。在圖9中係以虛線表示額外的處理器1315的非必須性質。
處理器1310、1315各可為處理器1700的某種版本。然而,應注意,經整合圖形邏輯和經整合記憶體控制單元不太可能會存在於處理器1310、1315中。
圖9例示出,GMCH 1320可係耦接至一個記憶體
1340,此記憶體1340可為,例如,一個動態隨機存取記憶體(dynamic random access memory,DRAM)。在至少一個實施例中,此DRAM可係與一個非依電性快取記憶體相關聯。
GMCH 1320可係一個晶片組,或是一個晶片組的一部分。GMCH 1320可與這(些)處理器1310、1315通訊,並控制在這(些)處理器1310、1315與記憶體1340之間的互動。GMCH 1320可亦作用為在這(些)處理器1310、1315與系統1300之其他元件之間的一個經加速匯流排介面。對於至少一個實施例而言,GMCH 1320係經由一個多點匯流排,例如前側匯流排(frontside bus,FSB)1395,而與這(些)處理器1310、1315通訊。
此外,GMCH 1320亦耦接至一個顯示器1345(例如一個平板顯示器)。GMCH 1320可包括一個經整合圖形加速器。GMCH 1320進一步耦接至一個輸入/輸出(input/output,I/O)控制器集線器(I/O controller hub,ICH)1350,可利用ICH 1350來將各種週邊裝置耦接至系統1300。在圖9之實施例中作為範例而示出的是一個外部圖形裝置1360還有另一個週邊裝置1370,外部圖形裝置1360可為耦接至ICH 1350的一個分立圖形裝置。
或者是,在系統1300中可亦存在有額外的或不同的處理器。例如,額外的(一或數個)處理器1315可包括與處理器1310相同的額外的(一或數個)處理器、與處理器1310異質或不對稱的額外的(一或數個)處理器、加速
器(像是,例如,圖形加速器或數位訊號處理(digital signal processing,DSP)單元)、現場可程式規劃閘陣列、或是任何其他處理器。在實體資源1310、1315之間,在包括架構、微架構、熱學、能量損耗特性及其他諸如此類者之價值的計量之範圍方面係可有各式各樣的差異。這些差異可有效地將它們自己表露為在處理元件1310、1315中的不對稱性和異質性。對於至少一個實施例而言,這各種的處理元件1310、1315可係駐在相同的晶粒封裝體中。
現在請參看圖10,所示出的是依據本發明之一實施例的一第二系統1400之方塊圖。如於圖10中所示,多處理器系統1400是一個點對點互連系統,並包括經由一個點對點互連體1450而耦接的一第一處理器1470和一第二處理器1480。如於圖10中所示,處理器1470和1480各可為處理器1700的某個版本。
或者是,處理器1470、1480中之一或多者可係處理器以外的元件,像是加速器或現場可程式規劃閘陣列。
雖然僅以兩個處理器1470、1480來作展示,應瞭解,本發明之範疇並不如此受限。在其他數個實施例中,額外的一或多個處理元件係可存在於一個給定處理器中。
處理器1470進一步包括一個經整合記憶體控制器集線器(integrated memory controller hub,IMC)1472及點對點(point-to-point,P-P)介面1476和1478。類似地,第二處理器1480可包括一個IMC 1482及P-P介面1486和1488。處理器1470、1480可使用點對點(point-to-point,PtP)
介面電路1478、1488而經由一個PtP介面1450交換資料。如於圖10中所示,IMC 1472和1482將這些處理器耦接至各別的記憶體,也就是記憶體1442和記憶體1444,其可為本地附接至各別處理器的主記憶的幾個部份。
處理器1470、1480可使用點對點介面電路1476、1494、1486、1498而經由個別的P-P介面1452、1454與晶片組1490交換資料。晶片組1490可亦經由一個高效能圖形介面1439而與一個高效能圖形電路1438交換資料。
係可有一個共享快取記憶體(未示於圖中)被包括在這兩個處理器之外的兩個中之任何一個處理器中,但仍經由P-P互連體而與這些處理器連接,以使得當有一個處理器被置於低電力模式中時,其中一個或二個處理器的本地快取資訊可被儲存在此共享快取中。
晶片組1490可係經由一個介面1496而耦接至一第一匯流排1416。在一個實施例中,第一匯流排1416可係一個週邊部件互連(Peripheral Component Interconnect,PCI)匯流排,或像是PCI快捷(PCI Express)匯流排或另一種第三代I/O互連匯流排的一個匯流排,但本發明之範疇並不如此受限。
如於圖10中所示,各種I/O裝置1414可係和一個匯流排橋1418一起耦接至第一匯流排1416,匯流排橋1418將第一匯流排1416耦接至一第二匯流排1420。在一個實施例中,第二匯流排1420可係一個低腳位數(low pin count(LPC)匯流排。在一個實施例中,係可將各種裝置耦接至
第二匯流排1420,包括,例如,鍵盤/滑鼠1422、通訊裝置1426和可能包括有碼1430的資料儲存體單元1428(像是磁碟機或其他大容量儲存裝置)。更進一步地,係可將一個音訊I/O 1424耦接至第二匯流排1420。請注意,其他架構也是有可能的。例如,取代於圖10的點對點架構,系統係可實施多點匯流排或其他此種架構。
現在請參看圖11,所示出的是依據本發明之一實施例的一第三系統1500之方塊圖。圖10和11中的相似元件帶有相似索引號碼,並且圖10中的某些面向已經從圖11中省略,以避免混淆圖11的其他面向。
圖11例示出,處理元件1470、1480可分別包括有經整合記憶體和I/O控制邏輯(control logic,CL)1472和1482。對於至少一個實施例而言,CL 1472、1482可包括記憶體控制器集線器邏輯(IMC),像是在上文中配合圖89和14所說明的。此外,CL 1472、1482可亦包括I/O控制邏輯。圖15例示出,不只有記憶體1442、1444耦接至CL 1472、1482,還有I/O裝置1514也耦接至控制邏輯1472、1482。舊有I/O裝置1515係耦接至晶片組1490。
現在請參看圖12,所示出的是依據本發明之一實施例的一個SoC 1600之方塊圖。圖13中之類似元件帶有相似索引號碼。並且,在更進階的SoC上,虛線方塊是非必要特徵。在圖12中,一或多個互連單元1602耦接至:一個應用處理器1610,其包括有一組一或多個核心1702A~N和一或數個共享快取單元1706;一個系統代理單元1710;一或
數個匯流排控制器單元1716;一或數個經整合記憶體控制器單元1714;一組或一或多個媒體處理器1620,其可包括經整合圖形邏輯1708、用於提供靜止和/或視訊相機功能的一個影像處理器1624、用於提供硬體音訊加速的一個音訊處理器1626、和用於提供視訊編碼/解碼加速的一個視訊處理器1628;一個靜態隨機存取記憶體(static random access memory,SRAM)單元1630;一個直接記憶體存取(direct memory access,DMA)單元1632;及用於耦接至一或多個外部顯示器的一個顯示器單元1640。
於本文中所揭露的數個實施例係可以硬體、軟體、韌體或此等實作途徑之組合來實施。係可將本發明的數個實施例實施為執行於包括有至少一個處理器、一個儲存系統(包括依電性和非依電性記憶體和/或儲存元件)、至少一個輸入裝置和至少一個輸出裝置的可程式規劃系統上的電腦程式或程式碼。
可將程式碼應用到輸入資料上,以進行於本文中所述之功能並產生輸出資訊。此輸出資訊可藉習知方式被應用至一或多個輸出裝置。為作這樣的應用,一個處理系統包括具有一個處理器(像是,例如;一個數位訊號處理器(DSP)、一個微控制器、一個特定應用積體電路(application specific integrated circuit,ASIC)、或一個微處理器)的任何系統。
此程式碼可係以一種高階程序或物件導向程式規劃語言實施,以與一個處理系統通訊。如果想要的話,
此程式碼可亦係以組合或機器語言實施。事實上,於本文中所描述的機構並不受限於任何定程式規劃語言之範疇。在任何情況中,此語言可為經編譯或經解譯的語言。
係可藉由代表在處理器內之許多邏輯的儲存在一個機器可讀媒體上的代表性指令而實施至少一個實施例的一或多個面向,這些指令在由一個機器執行時會致使此機器裝配邏輯以進行於本文中所述之技術。被稱為「IP核心」這樣的表示法係可被儲存在一個有形的機器可讀媒體上,並被供應給許多顧客或製造設施以載入到實際上做出此邏輯或處理器的裝配機器內。
這樣的機器可讀儲存媒體可包括但不受限於由一個機器或裝置所製造或形成的物品之非過渡性的有形配置,包括儲存媒體,像是硬碟、任何其他類型的碟片(包括軟式磁片、光學碟片(唯讀光碟記憶體(compact disk read-only memory,CD-ROM)、可抹寫光碟(compact disk rewritable,CD-RW))、和磁光碟)、半導體裝置(像是唯讀記憶體(read-only memory,ROM)、隨機存取記憶體(random access memory,RAM)(像是動態隨機存取記憶體(dynamic random access memory,DRAM)、靜態隨機存取記憶體(static random access memory,SRAM))、可拭除且可程式規劃唯讀記憶體(erasable programmable read-only memory,EPROM)、快閃記憶體、可電氣式拭除且可程式規劃唯讀記憶體(electrically erasable programmable read-only memory,EEPROM))、磁性或光學卡、或任何其他類型的適
於儲存電子指令的媒體。
因此,本發明的數個實施例亦包括含有適於向量之指令格式的指令或含有界定出於本文中所述之結構、電路、設備、處理器和/或系統特徵的設計資料(例如硬體描述語言(Hardware Description Language,HDL))的非過渡性有形機器可讀媒體。此等實施例亦可被稱為是程式產品。
在一些事例中,係可使用指令轉換器來將指令從來源指令集轉換成目標指令集。例如,此指令轉換器可翻譯(例如,利用靜態二元翻譯、包括動態編譯的動態二元翻譯)、變體、或以其他方式將一個指令轉換成要由核心處理的一或多個其他指令。可係以軟體、硬體、韌體或前述各項之組合來實施此指令轉換器。此指令轉換器可係在處理器上、在處理器外、或是部份在處理器上部份在處理器外。
圖14是依據本發明之實施例的一個方塊圖,其對比出對於一個軟體指令轉換器的使用,用以將來源指令集中之二元指令轉換成目標指令集中之二元指令。在所例示的實施例中,此指令轉換器是一個軟體指令轉換器,雖然在另一種事例中,此指令轉換器可係以軟體、韌體、硬體或前述各項之各種組合來實施。圖13示出,係可使用一個x86編譯器1804來編譯為高階語言1802的一個程式,以產生可由具有至少一個x86指令集核心的處理器1816自然執行的x86二元碼1806(假設這些指令中之已被編譯的一些指令是適於向量的指令格式)。具有至少一個x86指令集核心的
處理器1816代表可藉由相容地執行或以其他方式處理(1)英特爾(Intel)x86指令集核心之指令集的一個實質部份,或(2)旨在運行於具有至少一個x86指令集核心的一個英特爾處理器上的應用或其他軟體之目的碼版本,而進行與具有至少一個x86指令集核心的一個英特爾處理器實質上相同之功能的任何一個處理器,以達到與具有至少一個x86指令集核心的一個英特爾處理器實質上相同的結果。x86編譯器1804代表可操作來產生可在有或沒有額外連結處理的情況下在具有至少一個x86指令集核心的處理器1816上執行的x86二元碼1806(例如,目的碼)的一個編譯器。類似地,圖14示出,為高階語言1802的這個程式可利用一個替代指令集編譯器1808而被編譯,以產生可由不具有至少一個x86指令集核心的處理器1814(例如,具有執行加利福尼亞州之森尼維耳市的MIPS科技公司(MIPS Technologies)之MIPS指令集的和/或執行加利福尼亞州之森尼維耳市的安謀公司(ARM Holdings)之ARM指令集的數個核心的一個處理器)自然執行的替代指令集二元碼1810。指令轉換器1812係用來將x86二元碼1806轉換成可由不具有一個x86指令集核心的處理器1814自然執行的碼。經轉換的這個碼不太可能與替代指令集二元碼1810一樣,因為具有此種能力的指令轉換器很難做出;然而,經轉換的這個碼將會達成一般操作,並係由來自替代指令集的指令組成。因此,指令轉換器1812代表透過仿真、模擬或任何其他處理而使得不具有x86指令集處理器或核心的處理器或其他電子裝
置能夠執行x86二元碼1806的軟體、韌體、硬體或前述各項之組合。
屬於在本文中所述的適於向量之指令格式中的這(些)指令的某些操作可係藉由硬體部件來實施,且可被體現在用來致使或至少導致被以進行此等操作的指令作程式規劃的電路或其他硬體部件的機器可讀指令中。稍微舉幾個例子來說,此電路可包括一般用途或特殊用途處理器,或邏輯電路。這些操作可亦藉由硬體和軟體之組合而被選擇性地進行。執行邏輯和/或處理器可包括反應於一個機器指令或導自此機器指令的一或多個控制訊號而儲存一個特定指令結果運算元的特殊或特定電路或其他邏輯。例如,於本文中所揭露的這(些)指令之實施例可係執行於圖9~13之系統中之一或多者中,並且屬於適於向量之指令格式的這(些)指令的實施例可被儲存在要在此等系統中執行的程式碼中。此外,這些圖的處理元件亦可利用於本文中所詳述的其中一種詳細管線和/或架構(例如,有序和亂序架構)。例如,有序架構的解碼單元可解碼這(些)指令,將經解碼的指令傳遞給一個向量或純量單元,等等。
上面的說明係意欲要例示本發明之數個較佳實施例。從上面的討論中,應可明顯看出,特別是在成長快速且不容易預見進一步進展的這樣的技術領域內,熟於此技者係可對本發明在配置和細節上做出修改,而不悖離本發明之落於後附申請專利範圍及其等效範圍內的原理。例如,係可將一個方法的一或多個操作組合或作進一步拆解。
替代實施例
雖然已說明可自然執行適於向量之指令格式的數個實施例,本發明的數個替代實施例係可透過執行不同指令集的運行於一個處理器上的仿真層而執行適於向量之指令格式(例如,執行加利福尼亞州之森尼維耳市的MIPS科技公司之MIPS指令集的一個處理器、執行加利福尼亞州之森尼維耳市的安謀公司之ARM指令集的一個處理器)。此外,雖然在這些圖式中之流程圖示出由本發明之某些實施例所進行的一個特定操作順序,仍應瞭解,這樣的順序是示範性的(例如,替代實施例可係以不同的順序、組合某些操作、重疊某些操作等等方式來進行這些操作)。
在上面的說明中,為作闡釋,已提出許多特定細節以提供對本發明的這些實施例之通盤瞭解。然而,熟於此技者會可明顯識出,一或多個其他實施例係可在不具有這些特定細節中之若干的情況下實行。所說明的這些特定實施例並非係提供來限制本發明,而是要例示本發明之實施例。本發明之範疇並非係由上文中所提供的特定範例來決定,而係僅由下面的申請專利範圍決定。
應瞭解,上面的說明係意欲作為例示性而非限制性的。熟於此技者在閱讀並理解上面的說明之後會可明顯識出許多其他實施例。因此,本發明之範疇應係參看後附申請專利範圍及申請專利範圍所賦予的完整等效範圍而決定。
500‧‧‧方法
510~530‧‧‧方塊
Claims (17)
- 一種用於迴圈對齊的方法,其包含下列步驟:由一個處理器接收一個迴圈對齊指令,該迴圈對齊指令指出一個陣列的一個基底位址作為一第一運算元、指出一個迴圈極限作為一第二運算元、並指出一個目標,其中該迴圈含有多個重複次,並且在各個重複次中係有該陣列的一個資料元件要被處理;解碼該迴圈對齊指令以作執行;以及將該執行的一個結果儲存在該目標中,該結果指出在該陣列之開端處的要被與該陣列之一剩餘部份分開作處置的資料元件之數量,以使得該陣列之該剩餘部份的該基底位址針對一個對齊寬度而言係有對齊,其中,該對齊寬度是由該處理器用來處理緊縮資料的一個資料儲存器的寬度。
- 如申請專利範圍第1項之方法,其中:該迴圈對齊指令是一個迴圈對齊計數指令,並且在該結果中所指出的重複次之數量是一個整數值。
- 如申請專利範圍第1項之方法,其中:該迴圈對齊指令是一個迴圈對齊遮罩指令,並且該結果是有數個遮罩位元被設定為一個預設值的一個緊縮資料運算元遮罩,被設定的該等遮罩元件各對應於在該陣列之開端處的要被與該陣列之該剩餘部份分開作處置的該等資料元件中之一者。
- 如申請專利範圍第3項之方法,其中:該等遮罩元件各 是一個位元。
- 如申請專利範圍第1項之方法,其中:該迴圈對齊指令藉由一個助憶符而識別出該陣列之該資料元件的寬度。
- 如申請專利範圍第1項之方法,其中:接收迴圈對齊指令之步驟進一步包含下列步驟:接收一個立即值作為一第三運算元,該立即值是指出該對齊寬度的一個整數值。
- 一種用於迴圈對齊的設備,其包含:一第一暫存器,用以儲存一個陣列的一個基底位址;一第二暫存器,用以儲存一個迴圈極限,其中該迴圈含有多個重複次,並且在各個重複次中係有該陣列的一個資料元件要被處理;與該第一暫存器和該第二暫存器耦接的一個解碼器,該解碼器可操作來由於指出該第一暫存器、該第二暫存器、和一個目標的一個迴圈對齊指令而解碼該迴圈對齊指令以供執行;以及與該解碼器耦接的一個執行單元,該執行單元可操作來將該迴圈對齊指令的該結果儲存在該目標中,該結果指出在該陣列之開端處的要被與該陣列之一剩餘部份分開作處置的資料元件之數量,其中該陣列之該剩餘部份的該基底位址針對一個對齊寬度而言係有對齊,其中,該對齊寬度是由該處理器用來處理緊縮資料的一個資料儲存器的寬度。
- 如申請專利範圍第7項之設備,其中:該迴圈對齊指令是一個迴圈對齊計數指令,並且在該結果中所指出的重複次之數量是一個整數值。
- 如申請專利範圍第7項之設備,其中:該迴圈對齊指令是一個迴圈對齊遮罩指令,並且該結果是有數個遮罩位元被設定為一個預設值的一個緊縮資料運算元遮罩,被設定的該等遮罩元件各對應於在該陣列之開端處的要被與該陣列之該剩餘部份分開作處置的該等資料元件中之一者。
- 如申請專利範圍第9項之設備,其中:被設定的各個遮罩元件對應於在該陣列之開端處的該等資料元件中之一者。
- 如申請專利範圍第7項之設備,其中:該迴圈對齊指令識別出該陣列之該資料元件的寬度。
- 如申請專利範圍第7項之設備,其中:該迴圈對齊指令進一步指出一個立即值作為一第三運算元,該立即值是指出該對齊寬度的一個整數值。
- 一種用於迴圈對齊的系統,其包含:一個互連體;耦接至該互連體的一個處理器,該處理器包括:用於儲存一個陣列的一個基底位址的一第一暫存器、用於儲存一個迴圈極限的一第二暫存器,其中該迴圈含有多個重複次,並且在各個重複次中係有該陣列的一個資料元件要被處理; 與該第一暫存器和該第二暫存器耦接的一個解碼器,該解碼器可操作來由於指出該第一暫存器、該第二暫存器、和一個目標的一個迴圈對齊指令而解碼該迴圈對齊指令以供執行;及與該解碼器耦接的一個執行單元,該執行單元可操作來將該迴圈對齊指令的該結果儲存在該目標中,該結果指出在該陣列之開端處的要被與該陣列之一剩餘部份分開作處置的資料元件之數量,其中該陣列之該剩餘部份的該基底位址針對一個對齊寬度而言係有對齊;以及耦接至該互連體的一個動態隨機存取記憶體(DRAM),其中,該對齊寬度是由該處理器用來處理緊縮資料的一個資料儲存器的寬度。
- 如申請專利範圍第13項之系統,其中:該迴圈對齊指令是一個迴圈對齊計數指令,並且在該結果中所指出的重複次之數量是一個整數值。
- 如申請專利範圍第13項之系統,其中:該迴圈對齊指令是一個迴圈對齊遮罩指令,並且該結果是有數個遮罩位元被設定為一個預設值的一個緊縮資料運算元遮罩,被設定的該等遮罩元件各對應於在該陣列之開端處的要被與該陣列之該剩餘部份分開作處置的該等資料元件中之一者。
- 如申請專利範圍第15項之系統,其中:被設定的各個遮 罩元件對應於在該陣列之開端處的該等資料元件中之一者。
- 如申請專利範圍第13項之系統,其中:該迴圈對齊指令進一步指出一個立即值作為一第三運算元,該立即值是指出該對齊寬度的一個整數值。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2011/064953 WO2013089709A1 (en) | 2011-12-14 | 2011-12-14 | System, apparatus and method for generating a loop alignment count or a loop alignment mask |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201333821A TW201333821A (zh) | 2013-08-16 |
TWI553553B true TWI553553B (zh) | 2016-10-11 |
Family
ID=48613002
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW101142190A TWI553553B (zh) | 2011-12-14 | 2012-11-13 | 用於產生迴圈對齊計數或迴圈對齊遮罩的系統、設備與方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10083032B2 (zh) |
CN (1) | CN103946795B (zh) |
TW (1) | TWI553553B (zh) |
WO (1) | WO2013089709A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103946795B (zh) * | 2011-12-14 | 2018-05-15 | 英特尔公司 | 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法 |
US20140189296A1 (en) * | 2011-12-14 | 2014-07-03 | Elmoustapha Ould-Ahmed-Vall | System, apparatus and method for loop remainder mask instruction |
WO2013089750A1 (en) * | 2011-12-15 | 2013-06-20 | Intel Corporation | Methods to optimize a program loop via vector instructions using a shuffle table and a blend table |
US9436469B2 (en) * | 2011-12-15 | 2016-09-06 | Intel Corporation | Methods to optimize a program loop via vector instructions using a shuffle table and a mask store table |
US9582413B2 (en) | 2014-12-04 | 2017-02-28 | International Business Machines Corporation | Alignment based block concurrency for accessing memory |
KR102343652B1 (ko) * | 2017-05-25 | 2021-12-24 | 삼성전자주식회사 | 벡터 프로세서의 서열 정렬 방법 |
US11347506B1 (en) * | 2021-01-15 | 2022-05-31 | Arm Limited | Memory copy size determining instruction and data transfer instruction |
US11954496B2 (en) * | 2021-08-02 | 2024-04-09 | Nvidia Corporation | Reduced memory write requirements in a system on a chip using automatic store predication |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI227440B (en) * | 2003-12-19 | 2005-02-01 | Sunplus Technology Co Ltd | Device and method using a processor to perform automatic alignment for data movement in memory |
US7395531B2 (en) * | 2004-06-07 | 2008-07-01 | International Business Machines Corporation | Framework for efficient code generation using loop peeling for SIMD loop code with multiple misaligned statements |
TW200842702A (en) * | 2006-12-22 | 2008-11-01 | Broadcom Corp | System and method for performing masked store operations in a processor |
TW201137741A (en) * | 2009-12-22 | 2011-11-01 | Intel Corp | Bit range isolation instructions, methods and apparatus |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4814976C1 (en) * | 1986-12-23 | 2002-06-04 | Mips Tech Inc | Risc computer with unaligned reference handling and method for the same |
US5936872A (en) * | 1995-09-05 | 1999-08-10 | Intel Corporation | Method and apparatus for storing complex numbers to allow for efficient complex multiplication operations and performing such complex multiplication operations |
WO1998006038A1 (en) * | 1996-08-07 | 1998-02-12 | Sun Microsystems, Inc. | Architectural support for software pipelining of loops |
US5933650A (en) * | 1997-10-09 | 1999-08-03 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
AU2001245519A1 (en) * | 2000-03-08 | 2001-09-17 | Sun Microsystems, Inc. | Processing architecture having an array bounds check capability |
US7366882B2 (en) | 2001-05-10 | 2008-04-29 | Zohair Sahraoui | Address calculation unit for an object oriented processor having differentiation circuitry for selectively operating micro-instructions |
US7051168B2 (en) * | 2001-08-28 | 2006-05-23 | International Business Machines Corporation | Method and apparatus for aligning memory write data in a microprocessor |
JP3698123B2 (ja) | 2002-06-25 | 2005-09-21 | セイコーエプソン株式会社 | 情報処理装置及び電子機器 |
US20050102495A1 (en) | 2003-11-10 | 2005-05-12 | Wei-Hung Huang | Microcomputer apparatus for executing a given instruction a number of times |
CN100419670C (zh) * | 2003-12-23 | 2008-09-17 | 凌阳科技股份有限公司 | 以处理器执行储存器间资料搬移的自动对齐的装置及方法 |
US7290123B2 (en) | 2004-05-20 | 2007-10-30 | Intel Corporation | System, device and method of maintaining in an array loop iteration data related to branch entries of a loop detector |
US20060101256A1 (en) | 2004-10-20 | 2006-05-11 | Dwyer Michael K | Looping instructions for a single instruction, multiple data execution engine |
US20070150705A1 (en) | 2005-12-28 | 2007-06-28 | Intel Corporation | Efficient counting for iterative instructions |
US8667250B2 (en) * | 2007-12-26 | 2014-03-04 | Intel Corporation | Methods, apparatus, and instructions for converting vector data |
US20090327674A1 (en) * | 2008-06-27 | 2009-12-31 | Qualcomm Incorporated | Loop Control System and Method |
US8627304B2 (en) * | 2009-07-28 | 2014-01-07 | International Business Machines Corporation | Vectorization of program code |
CN103946795B (zh) * | 2011-12-14 | 2018-05-15 | 英特尔公司 | 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法 |
US9122475B2 (en) * | 2012-09-28 | 2015-09-01 | Intel Corporation | Instruction for shifting bits left with pulling ones into less significant bits |
-
2011
- 2011-12-14 CN CN201180074918.5A patent/CN103946795B/zh active Active
- 2011-12-14 WO PCT/US2011/064953 patent/WO2013089709A1/en active Application Filing
- 2011-12-14 US US13/993,321 patent/US10083032B2/en not_active Expired - Fee Related
-
2012
- 2012-11-13 TW TW101142190A patent/TWI553553B/zh not_active IP Right Cessation
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI227440B (en) * | 2003-12-19 | 2005-02-01 | Sunplus Technology Co Ltd | Device and method using a processor to perform automatic alignment for data movement in memory |
US7395531B2 (en) * | 2004-06-07 | 2008-07-01 | International Business Machines Corporation | Framework for efficient code generation using loop peeling for SIMD loop code with multiple misaligned statements |
TW200842702A (en) * | 2006-12-22 | 2008-11-01 | Broadcom Corp | System and method for performing masked store operations in a processor |
TW201137741A (en) * | 2009-12-22 | 2011-11-01 | Intel Corp | Bit range isolation instructions, methods and apparatus |
Also Published As
Publication number | Publication date |
---|---|
CN103946795A (zh) | 2014-07-23 |
TW201333821A (zh) | 2013-08-16 |
US10083032B2 (en) | 2018-09-25 |
US20140201510A1 (en) | 2014-07-17 |
WO2013089709A1 (en) | 2013-06-20 |
CN103946795B (zh) | 2018-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI514274B (zh) | 用於迴圈餘數遮罩指令之系統、裝置及方法 | |
TWI553553B (zh) | 用於產生迴圈對齊計數或迴圈對齊遮罩的系統、設備與方法 | |
TWI470543B (zh) | 用於多精度算術之單一指令多重資料(simd)整數乘法累加指令 | |
TWI756251B (zh) | 執行複數的熔合乘-加指令的系統與方法 | |
JP6351682B2 (ja) | 装置および方法 | |
RU2637463C2 (ru) | Команда и логика для обеспечения функциональных возможностей цикла защищенного хеширования с шифром | |
JP5795787B2 (ja) | 条件付きループをベクトル化する命令及び論理 | |
TWI544406B (zh) | 浮點捨入處理器 | |
US20130332707A1 (en) | Speed up big-number multiplication using single instruction multiple data (simd) architectures | |
TWI769645B (zh) | 資料元件比較處理器、方法、系統及指令 | |
US20130339649A1 (en) | Single instruction multiple data (simd) reconfigurable vector register file and permutation unit | |
US11531542B2 (en) | Addition instructions with independent carry chains | |
JP2016527650A (ja) | ベクトルポピュレーションカウント機能性を提供する方法、装置、命令、およびロジック | |
TW201113717A (en) | Unpacking packed data in multiple lanes | |
CN107077321A (zh) | 用于执行融合的单个周期递增‑比较‑跳转的指令和逻辑 | |
JP2016529617A (ja) | ゲノム配列決定および配列比較のためのポピュレーションカウント機能性を提供する方法、装置、命令、およびロジック | |
JP2018506094A (ja) | 多倍長整数(big integer)の算術演算を実行するための方法および装置 | |
TWI818894B (zh) | 毗連資料元素成對調換處理器、方法、系統、及指令 | |
JP5753603B2 (ja) | データ要素内のビットをゼロ化するためのシステム、装置、および方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |