TWI749000B - 程式迴圈控制 - Google Patents
程式迴圈控制 Download PDFInfo
- Publication number
- TWI749000B TWI749000B TW106109306A TW106109306A TWI749000B TW I749000 B TWI749000 B TW I749000B TW 106109306 A TW106109306 A TW 106109306A TW 106109306 A TW106109306 A TW 106109306A TW I749000 B TWI749000 B TW I749000B
- Authority
- TW
- Taiwan
- Prior art keywords
- loop
- instruction
- program
- processing
- branch
- Prior art date
Links
- 238000012545 processing Methods 0.000 claims abstract description 214
- 239000013598 vector Substances 0.000 claims abstract description 137
- 230000001629 suppression Effects 0.000 claims abstract description 4
- 238000000034 method Methods 0.000 claims description 54
- 230000008569 process Effects 0.000 claims description 40
- 238000007667 floating Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims 2
- 230000006399 behavior Effects 0.000 description 40
- 230000001960 triggered effect Effects 0.000 description 17
- 238000004321 preservation Methods 0.000 description 16
- 230000004044 response Effects 0.000 description 15
- 102100024348 Beta-adducin Human genes 0.000 description 10
- 101000689619 Homo sapiens Beta-adducin Proteins 0.000 description 10
- 230000006870 function Effects 0.000 description 8
- 208000011580 syndromic disease Diseases 0.000 description 8
- 230000005856 abnormality Effects 0.000 description 6
- 230000005055 memory storage Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000007792 addition Methods 0.000 description 4
- 230000014759 maintenance of location Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000001934 delay Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000003745 diagnosis Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003252 repetitive effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000002401 inhibitory effect Effects 0.000 description 1
- 230000005764 inhibitory process Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- 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/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/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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
一種資料處理系統支援預測之迴圈指令,該迴圈指令控制關於複數個向量元件之程式迴圈本體之向量化執行。當待處理之元件之數量不係針對該元件大小支援之處理通道之數量的整數倍時,則該預測之迴圈指令控制在不需要之一或多個通道中處理之抑制。
Description
本揭示係關於資料處理系統。更特定言之,本揭示係關於在資料處理系統中之程式迴圈控制。
已知提供具有程式指令之資料處理系統以支援程式迴圈執行。例如,已知提供支援重複程式指令之資料處理系統。此等重複程式指令用來規定應複數次執行/遍歷的一或更多個指令之後續序列,隨後程式執行進行至超過彼序列外。此舉提供迴圈行為。
本揭示之至少一些示例實施例提供用於處理資料之設備,其包含: 處理電路系統,用以執行由程式指令規定之處理操作,該等程式指令包括支援處理多達Nmax
個與相應向量處理通道相關之向量元件的至少一個向量處理程式指令; 指令解碼器,用以解碼該等程式指令以產生控制信號來控制該處理電路系統執行該等處理操作;其中 該指令解碼器包含預測之迴圈指令解碼器電路系統,用以在待執行之程式迴圈本體之數個迭代期間解碼具有與其相關之數個待處理之向量元件Nve
的預測之迴圈指令;以及 該處理電路系統包含預測迴圈控制電路系統以當Nve
/Nmax
不等於整數時操作以在一或更多個該等迭代期間至少部分抑制在一或更多個該等向量處理通道中之處理,使得在該等迭代期間處理之向量元件之總數係Nve
。
本揭示之至少一些示例實施例提供用於處理資料之設備,其包含: 處理構件,用以執行由程式指令規定之處理操作,該等程式指令包括支援處理多達Nmax
個與相應向量處理通道相關之向量元件的至少一個向量處理程式指令; 指令解碼構件,用以解碼該等程式指令以產生控制信號來控制該等處理構件執行該等處理操作;其中 該等指令解碼構件包含預測之迴圈指令解碼構件,用以在待執行之程式迴圈本體之數個迭代期間解碼具有與其相關之數個待處理之向量元件Nve
的預測之迴圈指令;以及 該等處理構件包含預測迴圈控制構件以當Nve
/Nmax
不等於整數時操作以在一或更多個該等迭代期間至少部分抑制在一或更多個該等向量處理通道中之處理,使得在該等迭代期間處理之向量元件之總數係Nve
。
本揭示之至少一些示例實施例提供一種處理資料之方法,其包含: 執行由程式指令規定之處理操作,該等程式指令包括支援處理多達Nmax
個與相應向量處理通道相關之向量元件的至少一個向量處理程式指令; 解碼該等程式指令以產生控制信號來控制該等處理操作之該執行;其中 該等程式指令之該解碼包含在待執行之程式迴圈本體之數個迭代期間解碼具有與其相關之數個待處理之向量元件Nve
的預測之迴圈指令;以及 當Nve
/Nmax
不等於整數時,在一或更多個該等迭代期間至少部分抑制在一或更多個該等向量處理通道中之處理,使得在該等迭代期間處理之向量元件之總數係Nve
。
本揭示意識到分支指令可導致降低效能之處理延遲。為解決此問題,本揭示提供了分支將來指令解碼電路以解碼分支將來指令。該分支將來指令包括與分支目標位址相關之可程式化參數。該分支目標位址對應於可藉由分支後之處理電路處理的程式指令。該分支將來指令亦包括額外可程式化分支點資料參數,該參數指示在程式指令序列中該分支將來指令之後的預定指令。藉由在分支將來指令中包括額外可程式化分支點資料參數,該處理電路可在該分支點之前準備分支至分支目標位址。由此,當到達分支點時,可避免或減少處理延遲。
第1圖示意地說明耦接至記憶體102之資料處理設備100的實例。記憶體102儲存程式指令及運算元資料。指令藉由擷取單元104擷取,並藉由指令解碼器106解碼以產生控制信號120來控制處理電路。處理電路可包括用於在接收自或儲存至記憶體102之浮點運算元上執行資料處理操作的浮點處理電路108及浮點暫存器110。處理電路亦包括用於在接收自或儲存至記憶體102之整數運算元上執行資料處理操作的乘法器112、移位器114、加法器116及整數暫存器117。
由擷取單元擷取之一些指令可係分支指令,該等分支指令將處理從遵循程式指令之當前序列分支至儲存於從分支目標位址開始之記憶體位址處的程式指令。為了調節分支指令,資料處理設備100包括可將程式流重定向至分支目標位址之分支單位119。為加速分支指令之處理,資料處理設備100可包括分支預測器118。分支預測器118儲存狀態資料,並基於該狀態資料預測是否將採取分支指令。分支單元119亦可由迴圈控制資料控制以支援/提供零額外負擔迴圈行為(替代或加上其他迴圈控制電路),如本文將進一步描述。分支預測器118亦可填充有迴圈控制,如本文將進一步描述。
第2A圖示意地說明分支將來指令BF 200之實例。分支將來指令200包括指示分支目標位址254之可程式化參數、提供可程式化分支點資料252之可程式化參數、及將該指令識別為分支將來指令的編碼位元258。分支點資料252指示在待由資料處理設備處理之程式指令之序列中分支將來指令BF之後的預定指令。分支目標位址254指示指令之位置,當該程式流到達預定指令時處理應分支至該位置。可保留位元數量(x 256)用於其他參數。
返回第1圖,該資料處理設備包括分支將來指令解碼電路122,該分支將來指令解碼電路用於回應於藉由匹配分支將來編碼位元258識別一指令係分支將來以解碼分支將來指令(諸如第2A圖所示之彼等)。在解碼該分支將來指令時,分支將來指令解碼電路122控制該處理電路以將分支目標位址資料及指示該預定指令之分支點資料儲存在分支控制資料快取記憶體130中。藉由此方式儲存資料,資料處理設備100可具有從處理程式指令之正常序列分支可何時發生之提前指示及目標位址,該分支將該程式執行點引導至該目標位址。由此,當該程式流到達由分支將來指令指示之預定指令時,該分支可發生處理降低就延遲或無延遲。該資料處理設備亦包括迴圈結束指令解碼電路123及預測之迴圈開始指令解碼電路125(其亦用作非預測之迴圈開始指令解碼電路)以控制該處理電路回應於迴圈結束指令DLE及迴圈開始指令DLS(P),如下文將進一步描述。
分支控制資料快取記憶體130可將對應於分支點之資料儲存為位元之適當子集,該位元指示從在指令之開始儲存位址之間區分的記憶體儲存位址之位元之最低有效位元結束開始之預定指令之記憶體儲存位址。為決定程式流何時到達預定指令,此等位元可與指示程式計數器之值相比較(例如,參看下文所述之第9圖)、與指示下一指令擷取位址之值相比較、或與指示資料處理設備100之處理活動之值相比較。
第2B圖圖示程式代碼,該程式代碼包括分支將來指令BF、及程式指令之序列(ADD1
、ADD2
、及BX),該等指令可由資料處理設備100處理。當程式流以上文所述之方式到達預定指令BX時,分支將來指令BF最初將資料處理設備100設置為分支至目標位址。在解碼該分支將來指令之後,資料處理設備100將繼續處理包括ADD1
及ADD2
之程式指令序列。一旦資料處理設備100已經處理了ADD2
,儲存在快取記憶體130中之分支點資料指示將發生分支。此外,分支控制資料快取記憶體130亦儲存對應於將分支至之指令之位址的對應分支目標資料。因此,從對應於分支目標資料從分支目標指令開始分支至處理程式指令可發生而不導致處理延遲或將引入處理管線中的氣泡(未使用之時槽)。
第2C圖說明可程式化分支點資料參數之不同實例,該參數指示相對於第2B圖所示之指令序列的預定指令。在第2C圖之分支將來指令201中,該分支點資料包含指示分支指令BX之位址的資料。第1圖所示之分支控制電路124可將指示BX之位址的資料匹配至對應於正擷取之下一指令的值。隨後,當決定該程式流已到達分支指令BX時,分支控制電路124觸發分支至由分支將來指令201之分支目標指示的指令。
該分支點資料可或者係指示指令ADD2
之資料,如第2C圖之分支將來指令202所示。由此,以與分支將來指令201相同之方式,當該程式流已擷取ADD2
並到達BX時,分支控制電路124觸發分支至該分支目標。
第2C圖之分支將來指令203圖示分支點資料,該分支點資料包括從分支將來指令BF至在第2B圖中之預定指令BX之位址偏移。在第2B圖之實例中,ADD1
及ADD2
係32位元指令。由此,8位元組之位址偏移指示預定指令BX。
第2C圖之分支將來指令204圖示指示剩餘指令計數之分支點資料。該剩餘指令計數指示在到達預定指令之前待在該分支將來指令之後執行之指令數量。在第2B圖之實例中,此對應於ADD1
及ADD2
。因此,在此實例中剩餘指令計數係+2。
第2C圖之分支將來指令205圖示指示在到達預定指令之前待處理之剩餘程式儲存位置之數量的剩餘大小資料。若指令ADD及ADD2
係分別為32位元及16位元之可變長度指令,則它們的總大小應係6位元組並因此剩餘大小值係6。
第2C圖之分支將來指令211圖示分支點資料,該分支點資料包括從分支將來指令BF至在第2B圖中之預定指令BX之位址偏移。在第2B圖之實例中,ADD1
及ADD2
係32位元指令。由此,位址偏移係8位元組,然而值4用來指示預定指令BX,因為將全部指令對準至少2位元組邊界並由此並非必需值8之最低有效位元才能唯一地識別預定指令之位址。
第2D圖圖示具有與分支目標位址相關之可程式化參數之不同實施方式的分支將來指令之一些其他實例。如第2D圖之分支將來指令206所示,該分支目標可由暫存器區分符<Rm
>指示,該暫存器區分符藉由處理電路規定儲存該指令將分支至的記憶體位址的暫存器位置。
第2D圖之分支指令207圖示另一實例,其中該分支目標由立即偏移值<imm>指示,該立即偏移值藉由從相對於分支將來指令之記憶體位址之點的偏移指示將分支至的指令之位址。
第2D圖之分支將來指令208及分支將來指令209圖示亦包括鏈路區分符之分支將來指令之實例。該鏈路區分符控制該處理電路將返回位址儲存在鏈路暫存器LR中。當該程式流完成開始於分支目標之程式指令的處理並到達返回指令時,將額外分支執行至儲存在鏈路暫存器中之位址。由此,一旦已經處理於分支目標之程式指令,處理可返回至程式指令之原始流。在其他實例中,可將返回位址儲存於在儲存區域中的任何位址,該儲存區域由應用至堆疊點暫存器之預定偏移規定。
第2D圖亦圖示條件分支將來指令210。條件分支將來指令210包括一些條件代碼:op{cond}。當處理該條件分支將來指令時,該分支將來指令解碼器決定是否已滿足該等條件代碼,並根據此決定處理該條件分支將來指令。
第3A圖說明指令序列,該指令序列包括處理通過第1圖之資料處理設備100之處理管線(簡單三級管線:擷取、解碼及執行)進行的分支將來指令。在循環0中,將指令I1
送入處理管線之擷取級。在循環1中,將第2B圖所示之指令序列之第一指令送入該管線中,即,分支將來指令BF。指令I1
亦進行至在此循環中之解碼級。在循環2中,將加法指令ADD1
送入該管線中,並解碼分支將來指令BF。在解碼分支將來指令BF時,分支將來指令解碼電路122獲取指示在程式指令之序列中分支將來指令BF之後的預定指令的分支點資料及可儲存在分支控制資料快取記憶體130中的分支目標資料。在此情形中,該分支點資料指示另一分支指令BX。
在循環3中,將另一指令(ADD2
)送入處理管線中。分支控制電路124識別了程式指令之序列已到達該預定指令及應觸發從分支目標位址開始分支至處理程式指令。由此,在下一循環(循環4)中,將來自於分支目標位址處之程式指令的第一指令I1BT
送入處理管線中。相似地,在循環5及循環6中,將兩個其他指令I2BT
及I3BT
送入處理管線中。
第3B圖說明當處理第3A圖之指令時資料處理設備100之程式流。可以看到,首先由該資料處理設備處理包括I1
、BF、ADD1
及ADD2
之指令之第一序列。歸因於分支將來指令BF,ADD2
之處理指示分支應發生在從分支目標位址開始之程式指令之另一序列。此另一序列包括分支目標指令I1BT
、I2BT
及I3BT
。可在第3B圖中看到,該程式流分支離開包括分支將來指令之程式指令之第一序列,並處理該等分支目標指令。I1BT
、I2BT
及I3BT
可係算術及邏輯指令、導致執行記憶體操作的資料處置指令、或任何其他類型指令。
如第3B圖所示,分支將來指令BF導致緊接著繞過分支指令BX之ADD2
指令之後發生分支。分支指令BX可包括在程式指令序列中,該程式指令用於儲存在分支控制資料快取記憶體130中之分支將來狀態資料在分支將來指令BF與BX之間失效的事件。例如,在下列事件中:重置該處理電路;迴圈控制電路或迴圈結束指令決定不需要包含該分支將來指令之程式迴圈之額外迭代;進入異常;異常尾鏈,藉以處理從處理當前異常直接進行至處理下一異常而不恢復在當前異常之前的狀態;執行大於預定立即目標位址範圍的分支指令;執行分支指令;迴圈開始指令;從異常返回;執行導致該資料處理設備之指令快取記憶體失效的指令;執行去能快取該控制資料之指令;執行去能分支預測之指令;該處理電路決定在程式迴圈本體中之分支指向不在迴圈開始指令與迴圈結束指令之間的位址;在操作之安全模式與操作之非安全模式之間切換;以及一或更多個定義實施方式之條件;對應於分支將來指令的任何儲存之分支點資料可失效。因此,執行由該分支將來指令指示之分支不再係可行的。由此,分支指令BX作為備份包括在序列程式指令中以分支至目標位址。然而,在正常情況下,將不處理分支指令BX。
第3C圖示意地說明包括分支將來及鏈路指令BFL之程式指令序列。BFL指令導致分支至子常用程式函數:當到達指令MUL時。BFL指令亦導致返回位址值儲存至鏈路暫存器LR中,該返回位址值指示當已執行該子常用程式函數時所返回之CMP指令之位址。在一些實施例中,BFL指令可將返回位址值儲存至鏈路暫存器LR中。在其他實施例中,BFL指令可將鏈路指示符旗標儲存在分支控制資料快取記憶體130中,且若設定該鏈路指示符旗標,則當觸發分支至該分支目標位址時,分支控制電路124可將返回位址值儲存至鏈路暫存器LR。
第4圖圖示一種用於分支將來處理之方法之實例。在步驟401中,解碼分支將來指令。該分支將來指令包括分別指示分支目標位址之可程式化參數及指示在程式指令序列中該分支將來指令之後之預定指令的分支點資料。該方法隨後進行至步驟402,此處決定該程式指令序列是否已到達該預定指令。當決定該程式指令序列已到達該預定指令時,該方法進行至步驟403,此處觸發從該分支目標位址分支至程式指令處理。
第5圖圖示一種用於分支將來處理之方法之另一實例。在步驟501中,解碼分支將來指令。如先前所述,該分支將來指令包括分支目標位址及指示在程式指令之該序列中該分支將來指令之後的預定指令的分支點資料。在步驟502中,將分支點資料及分支目標位址儲存在迴圈/分支控制快取記憶體中。在具有鏈路指令之分支將來情形中,該返回位址亦可利用鏈路暫存器LR儲存,在替代實施例中,具有鏈路指令之分支將來將導致儲存鏈路指示符旗標。處理隨後進行至步驟503,此處監控正在處理之程式指令序列是否到達該預定指令。若尚未到達預定指令,則在步驟504中檢查該分支目標位址及該分支點資料是否已失效。在於步驟504之失效事件中,處理移動至步驟506,此處忽視該分支將來指令,且正常程式流前進。然而,若決定該資料仍係有效,處理返回步驟503。當決定已到達該預定指令時,處理進行至步驟505,此處觸發從該分支目標位址開始分支至程式指令處理。在步驟502中儲存鏈路指示符旗標之實施例中,該處理電路應檢查以查看在步驟505中是否設定此旗標,且在決定已設定該旗標時,將該返回位址儲存在鏈路暫存器LR中。
第5A圖圖示指令之實例序列以說明可隨著條件分支將來指令出現之問題及用於解決此問題之技術。若滿足對應條件(例如,相等EQ),則指令之序列包括用於分支至某些目標位址之條件分支BEQ。包括規定與分支BEQ相同之條件EQ且亦規定參數「func」的對應條件分支將來指令BFCSEL,該參數指示該分支目標位址及用於識別該位址BP之分支點資料BP,應僅在位址BP之前進行該分支。因此,若滿足EQ條件,當僅在點BP之前處理到達該指令ADD2時,將觸發分支至分支目標指令I1BT。正常情況下,若不滿足與條件分支相關之條件,則不應進行分支且替代地程式流順序地繼續。吾人將期望分支將來指令BF以相似方式作用,使得若不滿足針對分支將來指令BFCSEL之條件,則在ADD2指令之後,不應分支至分支目標位址「func」,而是應執行於分支點BP處在指令ADD2之後的下一指令。
然而,在ADD2之後的指令係對應於分支將來指令BFCSEL之條件分支BEQ,並且由於已知針對分支將來指令BFCSEL而言不滿足EQ條件,分支BEQ將亦不滿足其條件。因此,當不滿足該條件時,存在引入該處理管線中之兩種「浪費」指令(分支將來指令BFCSEL及分支指令BEQ),該等指令佔據擷取/解碼/發佈/執行時槽而不觸發任何實際處理操作(失敗分支實質上行為為無操作(NOP)指令)。因此,儘管在通過分支條件之情形中包括分支將來指令BFCSEL可改良效能,當未通過該條件時,包括分支將來指令BFCSEL實際上導致效能損失,因為現在存在兩種浪費指令(分支將來指令BFCSEL及分支BEQ),而非不包括分支將來指令BFCSEL時的一個浪費指令(分支BEQ)。此舉使得針對編譯器而言難以決定包括分支將來指令BFCSEL是否係合理的-確定是否如此操作或可不取決於滿足該條件之概率,該概率可係資料依賴的並且可於編譯時間非常難以預測。
第5A圖圖示可如何解決此問題。除條件代碼EQ、分支點資訊BP及目標位址資訊「func」之外,條件分支將來指令BFCSEL亦可規定分支旁路參數「end」,該參數指示分支旁路指令I2之位址,該分支旁路指令係與分支將來指令BFCSEL相關之在隨後分支指令BEQX之後的指令。若滿足與分支將來指令BFCSEL相關之條件,則分支將來指令解碼電路122控制該處理電路以與上文所論述者相同之方式將分支目標位址資料及指示恰在點BP前之預定指令ADD2之分支點資料儲存在分支控制資料快取記憶體130中。另一方面,若不滿足與分支將來指令BFCSEL相關之條件,分支將來指令解碼電路122控制該處理電路以將識別分支點BP之分支控制資料及分支旁路指令儲存在分支控制資料快取記憶體130中。因此,當處理到達分支點BP時,若不滿足該條件,則不是順序進行至下一指令BEQ,分支控制電路124觸發分支至分支旁路指令I2。
此舉意謂無論是否滿足與條件分支將來指令相關之條件,未到達分支指令BEQ本身,除非在到達分支點BP之前該分支控制資料失效。因此,不存在由引入分支將來指令BFCSEL導致之損失,因為無論滿足還是不滿足該條件且無論該分支將來指令是否包括在內,與分支控制相關之指令時槽之數量仍係1。因此,此舉意謂編譯器可使用分支將來指令而無需評估包括該分支將來指令是否能夠引入效能損失,並且由此使分支將來指令利用率更為可能使得當實際執行程式代碼時,可更經常地達成於分支點處降低分支延遲之效能益處。
分支旁路參數「end」可以各種方式在條件分支指令中編碼,或可係隱含的並因此可完全不需要編碼。例如,「end」位址可在暫存器中規定或作為立即值,並且可規定為絕對值或相對於分支將來指令本身BFCSEL之程式計數器位址規定。然而,實務上,由於分支旁路指令I2將通常僅遵循來自分支點BP之數個指令,可更有效地將該分支旁路參數編碼為相對於分支點處之預定指令ADD2之位址規定的位址,進而減少編碼該分支旁路參數所需之位元數量。一些實施例可允許分支點BP規定在分支指令BEQ之前任意數量的指令。例如,此舉可允許控制指令諸如用於評估與當從該分支點以及分支本身分支時將繞過之分支BEQ相關之條件的比較指令。在此情形中,該分支旁路參數可係規定該分支旁路指令相對於預定指令於分支點處偏移一些位址步距值之數倍的二進制數值(例如,2或4位元組)。
然而,其他實施例可假設分支點BP係緊接在分支BX之前的指令ADD2且分支旁路指令I2係緊接在該分支之後的指令,因此在ADD2與I2之間存在一個指令。若全部分支指令具有某些固定指令長度,則在於分支點BP處之指令ADD2與分支旁路指令I2之位址之間的偏移可與某些已知偏移分開,並且因此在該分支將來指令中可完全不需要編碼分支旁路參數「end」。
另一方面,即使假設分支指令BX係於分支點BP處分開分支旁路指令I2與指令ADD2的唯一指令,一些實施方式可支援可變指令長度並因此插入分支指令BEQ可具有數個指令長度之一。在此情形中,在條件分支將來指令BFCSEL中旁路參數「end」可藉由規定隨後分支指令BEQ之長度來識別該分支旁路指令而不需要擷取並決定分支指令BEQ之長度,例如,若針對該分支指令而言存在兩種可能指令長度(例如,16位元或32位元),則該旁路參數「end」可由1-位元旗標表示。
第5B圖圖示指令之另一實例序列,其圖示使用對應於相反條件之一對分支將來指令BFCSEL。程式在程式流中相對常見需要「fork」,若滿足條件,則需要分支至第一段代碼,且若不滿足條件(例如,用於處置if-then-else構造),則需要分支至第二段代碼。因此,該程式指令序列可包括對應於相反條件(例如,相等EQ及不相等NE)的一對分支指令BEQ及BNQ。為了在處置該等分支時降低延遲,對應條件分支將來指令BFCSEL可分別包括相反條件EQ及NE。因此,無論是否滿足EQ或NE條件,應使用分支至「func1」或「func2」之一者。
若該對分支將來指令之第一個BFCSEL EQ未通過其條件,則分支將來指令解碼電路122控制該處理電路將分支控制資料儲存在分支控制資料快取記憶體130中,該分支控制資料規定於如上文所論述之旁路位址「end」處的分支旁路指令。第二分支將來指令BFCSEL NE將隨後通過其條件,並因此不在到達第一分支點BP時分支至「end」,所需程式流實際上需要於分支點BP處分支至函數「func2」。因此,若當分支控制資料快取記憶體130已含有回應於較早分支將來指令設定之有效分支控制資料時分支將來指令通過其條件,則分支將來指令解碼器電路122控制該處理電路重寫先前設定之分支控制資料。
然而,若該對分支將來指令之第一個BFCSEL EQ通過其條件,則當處理到達該分支點BP時,將資料儲存至分支控制資料快取記憶體130中以控制分支至分支目標位址「func1」。然而,該對分支將來指令之第二個BFCSEL NE將未通過其條件並且將一般將設定在分支控制資料快取記憶體130中之資料以指示於分支點BP處分支至分支旁路位址「end」。然而,重寫先前設定之分支控制資料在此情形中將導致錯誤結果,因為分支至在分支點BP之後於位址「end」處之指令I2將導致不執行兩個函數「func1」及「func2」之任一者。為防止此情況,若當分支控制資料快取記憶體130已含有回應於較早分支將來指令設定之有效分支控制資料集時分支將來指令未通過其條件,則分支將來指令解碼器電路122控制該處理電路將先前設定之分支控制資料保留在分支控制資料快取記憶體130中。
總而言之,「條件真」分支將來指令重寫回應於先前分支將來指令設定之有效分支控制資料,但「條件假」分支將來指令不重寫回應於先前分支將來指令設定之有效分支控制資料。甚至當在程式流控制中需要「fork」時,此舉確保可正確的使用分支將來指令,其中該程式取決於條件結果分支至兩個交替函數之一。
第6圖示意地說明零額外負擔之程式迴圈行為。應瞭解零額外負擔之程式迴圈行為不意謂不存在與支援迴圈行為相關之額外負擔,而是降低此額外負擔,諸如,例如,藉由需要迴圈控制程式指令以在第一次通過程式迴圈本體期間佔用在程式執行管線中之時槽,控制隨後通過而不需要分開執行彼等迴圈控制程式指令。
程式流正常地線性進行直至遇到程式分支。在第6圖所說明之實例中,程式流通過指令Ix以到達迴圈開始指令DLS[P]。此迴圈開始指令DLS[P]可呈現預測及非預測行為二者。若包含在迴圈開始指令DLS[P]之後之指令I0、I1、I2、I3之程式迴圈本體將作為向量程式迴圈本體執行,其中針對每次通過該程式迴圈本體處理多個向量元素,則該迴圈開始指令將規定待用於預測之向量元素大小。當此待使用之向量元素大小係小於下層處理系統之最大資料路徑寬度時,則此指示多個向量元素將在每次通過該程式迴圈本體時處理。相反地,若規定之向量元素大小等於最大資料路徑寬度,或不規定資料元素大小,則此指示處理將以純量方式探求,藉以針對每次通過該程式迴圈本體處理一個元素。當在一次通過該程式迴圈本體期間處理複數個向量元素時,可認為此通過對應於針對由在通過該程式迴圈本體期間處理之向量元素之數量給出之複數個迭代而言已執行該程式迴圈本體。例如,待執行之程式可需要處理八個元素,即,程式迴圈本體之八個迭代。此舉可藉由兩次通過該程式迴圈本體達成,各此通過在對應於迴圈之四個迭代的與各次通過該程式迴圈本體平行之四個元素上執行所需處理。在其他實施例中,在八次通過該迴圈期間(各次對應於一個迭代),可分開處理該等元素。
應瞭解,在通常向量實施方式中,效能增加藉由在通過該程式迴圈本體期間平行處理該等向量元素達成。然而,一些實施例可犧牲平行執行之能力以藉由順序執行不同向量元素來降低硬體額外負擔/複雜性,儘管從程式設計師之觀點,其等似乎對應於單一平行向量處理指令。
在對複數個向量元素處理向量之情形中,該等不同向量元素係在向量處理之不同通道中處理,且可對此等通道各者執行預測。於一個位準,該預測可用於在給出針對相關元素位元寬度可用之資料通道之可用數量情況下,匹配執行之處理與在每次通過該程式迴圈本體期間處理之向量元素之數量。例如,若該處理將在七個向量元素上執行且該向量元素大小使得四個向量元素可在每次通過該程式迴圈本體期間處理,則該全部處理可藉由執行一次通過該程式迴圈本體(其中平行處理四個向量元素)接著最後通過該迴圈本體(其中平行處理三個元素且歸因於在該程式迴圈本體中預測該程式指令在其操作中抑制該向量處理之一個通道)達成。
此預測匹配通過該程式迴圈本體之迭代數量與該處理之資料路徑寬度及向量元素大小。出於關於正在執行之計算的其他原因,例如,由該等程式指令所規定,該預測可添加至額外預測,該預測用以抑制在給出通過該程式迴圈本體期間在該等處理通道中之處理。兩個此等預測可結合以提供向量元素在通過程式迴圈本體之執行時之全部預測。
返回第6圖,迴圈開始指令具有與其相關之參數,該參數規定將執行程式迴圈本體之次數(若不執行向量化,對應於純量迴圈迭代之數量),此由儲存在暫存器Rn中之由DLS(P)指令複製至暫存器LR之值指示。暫存器LR可係亦用作鏈路暫存器以儲存在程式呼叫返回時將使用之返回位址的暫存器,並且由此可期望在執行DLS(P)指令之前將此鏈路暫存器之內容保存至程式堆疊。迴圈開始指令DLS(P)亦具有相關參數「loopend」,該參數指示零額外負擔迴圈之結束之程式位址並且係緊接著迴圈結束指令DLE之指令。
在迴圈開始指令DLS(P)之後,發現一或更多個程式指令,例如,I0、I1、I2、I3,該等程式指令形成程式迴圈本體。應瞭解,程式迴圈本體可係短且簡單或長且複雜(例如,可含有額外迴圈或分支)並且可在一些情況中僅包含單一指令。實務上,短程式迴圈本體成比例地更加從使用零額外負擔迴圈獲益,因為若程式迴圈本體本身長度較短,在各次通過程式迴圈本體上執行習知迴圈控制指令之額外負擔係較大的。
於程式迴圈本體之結束處存在迴圈結束指令DLE。此迴圈結束指令DLE將迴圈開始參數用作控制其行為之參數,該迴圈開始參數規定在迴圈開始指令DLS[P]之後該指令之記憶體位址。DLE指令檢查儲存在暫存器LR中之值,該值指示待執行之剩餘迭代之數量。當已執行最後通過該程式迴圈本體時,處理進行至執行在該迴圈結束指令DLE之後的該程式指令,即指令Iz。此舉可藉由直接分支至指令Iz或藉由首先執行DLE指令作為NOP並隨後執行Iz來完成。
第6圖之右手部分示意地說明在何次通過該程式迴圈本體期間執行何指令。在首次通過該程式迴圈本體時,執行迴圈開始指令DLS[P]及迴圈結束指令DLE二者。在執行迴圈開始指令及迴圈結束指令二者之後,設置迴圈控制資料並由該系統硬體儲存該迴圈控制資料。當允許此迴圈行為不受中斷地進行時,此舉允許隨後通過待執行之程式迴圈本體而無需分開執行迴圈開始指令DLS[P]或迴圈結束指令DLE。此在第6圖之右手部分中由追蹤執行之程式指令的實線及指示程式流之跳轉/分支的虛線指示。如圖所示,於最後通過該程式迴圈本體之結束處,該程式執行點可從程式迴圈本體之最後指令I3跳轉至在迴圈結束指令之後的指令Iz而不執行迴圈結束指令DLE。在其他實施例中,由於藉由該點該鏈路暫存器LR儲存指示已執行該程式迴圈本體之全部所需迭代的一值,該程式流可通過該迴圈結束指令DLE,其中其行為僅被抑制。
於程式迴圈本體之結束處迴圈結束指令DLE之位置及其在設置並儲存迴圈控制資料方面之行為具有該結果:若該通過程式迴圈本體被中斷且迴圈控制資料失效,諸如歸因於出現異常,則當繼續進行藉由該程式迴圈本體之處理時,可再次執行迴圈結束指令DLE以恢復必需迴圈控制資料。更特定言之,在出現異常時不需要保留該迴圈控制資料(微架構狀態),而是將維持鏈路暫存器值LR(架構狀態),該值指示已執行了多少次該程式迴圈本體迭代。當執行部分通過該程式迴圈本體繼續進行時,則將再次執行迴圈結束指令(儘管若中斷尚未出現,應抑制其執行)並將用以恢復該迴圈控制資料,使得在隨後通過該程式迴圈本體時,繼續進行零額外負擔迴圈行為並且在此等隨後通過上可避免執行迴圈結束指令。
如上文所提及,當在零額外負擔迴圈處理期間出現異常/中斷時,控制零額外負擔迴圈行為之迴圈控制資料可失效。在至少一些情況中,當繼續進行該處理時,其他事件亦可觸發迴圈控制資料失效,該迴圈控制資料隨後恢復。可導致迴圈控制資料失效之事件實例包括:重置該處理電路;該迴圈控制電路或該迴圈結束指令識別不需要該程式迴圈本體之額外迭代;進入異常;異常尾鏈,藉以處理從處理當前異常直接進行至處理下一異常而不恢復在當前異常之前的狀態;執行具有大於預定立即目標位址範圍之分支指令;從異常返回;執行導致設備之指令快取記憶體失效之指令;執行去能高速緩衝該迴圈控制資料之指令;執行去能分支預測器或分支預測(經修飾之分支預測器可部分用於滿足該迴圈控制電路之規則)之指令;該處理電路決定在該程式迴圈本體中之分支靶向不在該程式迴圈本體之開始指令與迴圈結束指令之間的位址;在操作之安全模式與操作之非安全模式之間切換;以及特定實施方式可用以使該迴圈控制資料失效之一或更多個實施方式定義條件。
第7圖示意地說明當執行第6圖所說明之實例零額外負擔程式迴圈行為時處理管線之各個處理級之內容。在此實例中,該處理管線含有六個級,即擷取、解碼、及執行。第6圖所說明之程式指令被提供/擷取至此處理管線。如圖所示,首次通過該程式迴圈本體包括執行迴圈開始指令DLS[P]及迴圈結束指令DLE二者。因此,存在在首次通過時執行之六個指令(DLS(P)、I0、I1、I2、I3及DLE)。在隨後三次通過該程式迴圈本體時,不需要執行迴圈開始指令DLS[P]及迴圈結束指令DLE且替代地在迴圈控制資料控制下操作之迴圈控制電路可用以追蹤通過已執行之程式迴圈本體之數量、識別何時已將在該程式迴圈本體中之最後指令置於該擷取級中及當分支返回該程式迴圈本體之開始級時用以識別待使用之分支點。在此實例中,指令I0係該程式迴圈本體之開始指令且指令I3係在該程式迴圈本體中之最終/最後指令。在零額外負擔通過該程式迴圈各者時,四個程式指令(I0、I1、I2及I3)流過該處理管線。在第四次通過該程式迴圈本體時執行最後指令I3之後,儲存在鏈路暫存器LR中之迴圈迭代計數器指示已執行全部所需迭代並且由此當到達最後指令I3時,該迴圈控制電路將不觸發返回開始指令I0之分支,而是替代地將觸發分支至緊接著迴圈結束指令DLE之指令Iz。在其他實施例中,該迴圈控制電路不觸發分支至指令Iz,而是替代地允許程式流繼續至DLE。由於所儲存之迭代計數器係將指示不需要更多迭代之鏈路暫存器LR,該DLE指令將不執行任何操作且程式流將在指令Iz上繼續。在一些實施例中此途徑將更容易實施,且由於當到達迴圈結束時僅執行一個其他DLE指令,該效能影響可係最小。
第8圖示意地說明與指令管線之擷取級1002相關的迴圈/分支控制電路1000之一個實例之形式及操作。該迴圈/分支控制電路至少部分由儲存在迴圈/分支控制快取記憶體1004中之迴圈/分支控制資料控制。應瞭解,可使用相同或相似電路控制其他處所述之零額外負擔迴圈行為及分支將來行為。例如,當該系統處於其中未設定DoLoop旗標(其指示零額外負擔迴圈行為係活動的)並且仍將該迴圈/分支控制資料旗標為有效的狀態時,分支將來行為可使用該迴圈控制資料(或與其相似之資料)及迴圈/分支控制電路1000支援。
返回第8圖及其在控制零額外負擔迴圈行為方面之用途,作為迴圈結束指令DLE之結果,將迴圈控制資料載入迴圈控制快取記憶體1004。該迴圈結束指令係由第1圖所說明之迴圈結束解碼電路123來解碼。亦可藉由執行分支將來指令BF將資料載入此快取記憶體1004中,該分支將來指令使用第1圖所說明之分支將來指令解碼電路122來解碼。
迴圈控制快取記憶體1004可在一些實施例中重新使用儲存區,該儲存區亦用作故障症候群暫存器或在出現故障時儲存故障症候群資料之暫存器。此等暫存器可具有至少一個與其相關之有效位元fv,該有效位元指示儲存在其中之任何資料是否係有效故障症候群資料。當相關暫存器替代地儲存迴圈控制資料或分支將來資料時,迴圈/分支控制電路1000及迴圈開始與迴圈結束指令之行為可用以將與故障症候群資料相關之此故障暫存器有效位元fv設定為無效狀態。在一些實施例中,可能認為保留故障症候群資料更為有效,其允許零額外負擔迴圈行為進行並且由此若任何假症候群暫存器儲存故障症候群資料(由故障暫存器有效位元fv指示),則迴圈結束指令之解碼不允許重寫此有效故障症候群資料並且零額外負擔迴圈行為將被抑制(儘管迴圈開始及迴圈結束指令之存在仍將確保由其明確執行來執行正確數量之程式迴圈本體迭代)。
出於診斷/分析目的,迴圈控制電路1000亦產生追蹤輸出以用來形成追蹤資料。儘管已經避免執行該迴圈結束指令並且在首次通過該程式迴圈本體之後零額外負擔迴圈操作期間尚未明確(分開地)發生,當執行零額外負擔迴圈時,迴圈控制電路在執行此指令時或在迴圈/分支控制電路1000之控制下控制分支返回該開始指令時產生對應於執行迴圈結束指令DLE之追蹤輸出。儘管迴圈結束指令尚未明確/分開地執行,提供包括指示對應於迴圈結束指令執行之事件的追蹤資料之追蹤輸出,當執行診斷及分析操作時在習知意義上使該追蹤輸出較為容易遵循並理解。
儲存在迴圈控制快取記憶體1004中之迴圈控制資料可具有各種形式並包括不同類型之用於控制該零額外負擔迴圈行為及該分支將來行為之資料。特定言之,該迴圈控制資料可例如包括以下中一或更多個:迴圈開始資料,指示開始指令之位址(直接或經由具有從該位址至開始指令之預定偏移的位址指示此位址);迴圈開始偏移位址,指示在立即進行至迴圈結束指令之程式迴圈本體之最後指令與該程式迴圈本體之開始指令之間的距離;迴圈結束資料,指示立即進行至迴圈結束指令的程式迴圈本體之最後指令之位址;迴圈剩餘指令資料,指示在到達立即進行至迴圈結束指令的程式迴圈本體之最後指令之前待處理之剩餘指令之數量;迴圈剩餘大小資料,指示在到達立即進行至迴圈結束指令的程式迴圈本體之最後指令之前儲存待處理之剩餘程式指令之程式儲存記憶體位置之數量;以及迴圈控制有效資料v,指示該迴圈控制資料係有效的,例如,尚未發生如先前所述之失效事件。
在一些示例實施例中,迴圈控制快取記憶體1004可含有多個條目,使得可同時支援多個操作。在迴圈控制快取記憶體1004中之此等條目各者額外具有與其相關之有效位元v,該有效位元指示其是否係當前儲存之有效迴圈控制資料。針對該迴圈控制資料而言,在出現上文所述之各種失效事件之一時可清除此有效位元v以指示失效。在此示例實施例中,說明迴圈控制快取記憶體1004具有兩個條目。此舉允許同時支援零額外負擔迴圈及分支將來行為二者。在其他實施例中,足夠用於僅單一條目之儲存可提供在迴圈控制快取記憶體1004中並由此可於給定時間支援僅零額外負擔迴圈行為或分支將來行為之一者。應瞭解,迴圈控制快取記憶體1004亦用作分支控制快取記憶體。相同雙函數亦由迴圈控制電路1000提供。
如第8圖所說明,迴圈控制電路1000用以監控與從指令快取記憶體1006載入擷取級1002中的程式指令I相關之記憶體位址。當所載入之程式指令位址匹配(或具有預定關係,例如,有預定偏移)由儲存在迴圈控制快取記憶體104中之迴圈控制資料指示為在零額外負擔迴圈之程式迴圈本體中之最後指令的該程式指令之位址時,迴圈控制電路1000決定是否存在待由系統穿過該程式迴圈本體執行的剩餘通過(由在鏈路暫存器LR中之值指示),並且若存在此等剩餘通過,則觸發分支至該程式迴圈本體之開始指令。以此方式,在儲存在迴圈控制快取記憶體1004中之迴圈控制資料之控制下作用的迴圈控制電路1000能夠決定是否需要額外迴圈迭代,並且若需要額外迴圈迭代(待處理之給定元件通過該程式迴圈本體),則控制該處理電路(執行由該處理管線執行之指令的指令管線及系統之其他元素)以執行由該程式指令規定之處理操作或在迴圈結束指令之前的程式迴圈本體,但不包括該迴圈結束指令(在除第一次通過外通過該程式迴圈本體時其本身不需要分開執行,經受尚未發生之迴圈控制資料之失效事件)。
第9圖示意地說明迴圈控制電路1000之一個實例形式可如何使用該迴圈控制資料之一部分以與取決於與待由擷取級1002擷取之下一指令(可不係指令記憶體位址本身,例如,可具有自其之固定偏移)相關的當前程式計數器值之資料相比較以決定是否需要分支至該程式迴圈本體之開始指令。更特定言之,該迴圈控制資料可包括位元之適當子集,該等位元指示迴圈結束指令之記憶體儲存位址。例如,該迴圈控制資料可包括從正常32位元之位元2延伸至位元x的位元欄位、對應於記憶體儲存位置之位元組定址之記憶體位址。此與在與待由擷取級1002提供擷取之下一指令相關之記憶體位址中的對應位元位置相比較。在此示例實施例中程式指令係32位元程式指令,該指令在位元組定址之記憶體位址空間中對準使得至少兩個有效位元1:0係不變的,並由此不需要經受比較以識別分支至迴圈開始位址之需要。應瞭解,第9圖之實例僅係一種方式,以此方式迴圈控制電路1000可識別在正在被擷取至擷取級1002中的程式迴圈本體中之最後指令並且由識別分支至迴圈開始位址之需要,即,分支至該程式迴圈本體之開始指令。執行分支之此需要可以額外方式達成,諸如計數通過該程式迴圈本體進行擷取之指令數量、計數通過擷取該程式迴圈本體指令之儲存位置數量(此技術可適用於採用可變長度指令之實施例)、或其他技術。
第10A圖係示意地說明在解碼迴圈開始指令時之行為的流程圖。於步驟2000,處理等到迴圈開始指令DLS(P)由迴圈開始指令解碼器電路解碼。步驟2002決定儲存在由參數Rn規定之暫存器中的迭代計數是否等於零。若該迭代計數等於零,則此指示不需要通過(迭代)該程式迴圈本體且處理進行至步驟2004,於此步驟執行分支至迴圈結束指令DLE之後的指令或利用抑制遇到之指令各者穿過該程式迴圈本體,諸如藉由抑制寫回及來自彼等指令之其他副效應。
若於步驟2002決定該迭代計數不係零,則處理進行至步驟2003,於此步驟決定於步驟2000解碼之指令是否係所預測之迴圈開始指令DLSP。若是,則處理直接進行至步驟2006。若否,則步驟2005將元素大小設定為在處理再次進行至步驟2006之前的全部向量大小,與步驟2006產生指示可在一次通過該程式迴圈本體中處理之向量元素之最大數量的值Nmax。在其他實施例中,計算Nmax不必作為DLS(P)指令之部分進行,例如,該計算可作為在如第13圖所說明之DoLoop中處理的指令之部分完成。此值Nmax取決於與由迴圈開始指令規定之向量元素大小相比處理管線之處理電路之資料寬度。在整個執行零額外負擔迴圈行為中Nmax值係靜態,並且因此所產生之值不必明確儲存,而是如需要且當需要時僅用以控制該向量行為。
步驟2008用以設定旗標,該旗標指示DoLoop狀態係有效的且該系統當前正在處理DoLoop(即,零額外負擔迴圈行為係活動的),亦將該迴圈迭代計數複製至鏈路暫存器LR,其中該計數將由該迴圈控制電路使用。處理隨後進行至步驟2010,於此步驟預先擷取並執行程式迴圈本體之開始指令。
第10B圖示意地說明迴圈開始指令DLS(P)。這包括將該指令識別為DLS(P)指令之作業碼欄位ENC。參數欄位亦包括在內以規定含有該迭代計數之暫存器Rn
(待轉移至鏈路暫存器LR)、其中定位該迴圈結束指令之指示符(可以各種方式規定為規定先前所述之分支目標位址之BF)、及元素大小值。若將該元素大小值設定為該資料路徑之全部向量大小,則該指令將被處理為非預測,即,DLS指令。若該元素大小小於,則此指示該迴圈應使用規定之向量大小的元素來向量化並作為預測之迴圈開始指令處理。
向量元素大小VE寬度
儲存在浮點控制資料暫存器中,當浮點資料值係可存取的時該暫存器係可存取的並且當浮點資料值係不可存取的時該暫存器係不可存取的。當該浮點資料值係可存取的時,從該迴圈開始指令解碼之向量元素大小VE寬度
儲存在浮點控制資料暫存器中並控制在資料路徑中之向量化。若該迴圈開始指令係非預測的,則將該向量元素大小設定為向量暫存器寬度VR寬度
。
當浮點資料值係不可存取的時,例如,浮點狀態尚未經初始化,嘗試從浮點控制資料暫存器讀取VE寬度
返回了獨立於當前儲存在該浮點控制暫存器(亦不可存取的)中之任何VE寬度
值之VR寬度
值。若部分通過迴圈執行使該浮點值進行可存取(初始化),則將保存任何現存浮點狀態(例如,藉由惰性狀態保存機制)並將初始化新的浮點狀態,包括將儲存在浮點控制資料暫存器中之VE寬度
值初始化為VR寬度
(針對特定實施方式硬連線)。因此未改變在該迴路中之向量化。
第11圖係示意地說明在解碼迴圈結束指令DLE時之動作的流程圖。於步驟2012處,處理等到迴圈結束指令DLE由迴圈結束指令解碼器解碼。步驟2014隨後決定當前是否設定DoLoop旗標。若當前不設定DoLoop旗標,則此指示零迴圈行為當前不係活動的且處理進行至步驟2016,於此步驟抑制迴圈結束指令之執行,諸如藉由於步驟2013將其處理為非操作指令(NOP)。
若於步驟2014決定設定了DoLoop旗標,則步驟2018用以將迴圈控制資料儲存至迴圈控制快取記憶體1004中。此迴圈控制資料可包括例如指示開始指令之指令位址的資料、對應於DLE指令之記憶體儲存位址之位元的最低有效位元之欄位(不包括固定指令對準導致的任何不變位元)及指示該迴圈控制資料係有效的有效位元。亦可如先前描述儲存迴圈控制資料之其他形式。
步驟2020決定當前迭代計數是否小於或等於先前回應於DLS(P)迴圈開始指令產生之Nmax值。若迭代計數小於或等於Nmax值,則此指示已到達迴圈結束指令之當前通過該程式迴圈本體係最後需要之通過該程式迴圈本體並由此處理進行至步驟2016。若於步驟2020決定該迭代計數不小於或等於Nmax值,則處理進行至步驟2022,於此步驟該迭代計數遞減了Nmax。
步驟2024隨後執行分支至該程式迴圈本體之開始指令。
第12圖係示意地說明迴圈控制電路1000之動作的流程圖。於步驟2026,迴圈控制電路1000決定是否該迴圈控制資料當前標記為有效。若將該迴圈控制資料當前旗標為有效,則處理進行至步驟2028,此處決定提供至管線(即,擷取至擷取級1002)之最後的指令是否係由匹配該迴圈控制資料之待擷取之下一指令之位址指示的在該程式迴圈本體中之最終指令。若偵測到在該程式迴圈本體中擷取此最終指令,則處理進行至步驟2030,於此步驟決定該迭代計數是否當前小於或等於值Nmax。若該迭代計數小於或等於值Nmax,則處理進行至步驟2032,於此步驟清除DoLoop旗標並清除迴圈控制資料有效位元v。這指示完成了零額外負擔迴圈行為。針對零額外負擔迴圈行為實例,隨後完成迴圈控制電路1000之處理。該迴圈結束指令將隨後如關於第11圖所論述來處理,例如,圍繞此迴圈結束指令DLE分支。
若於步驟2030決定當前迭代計數(追蹤通過該程式迴圈本體之數量)係不小於或等於值Nmax,則步驟2034用以使該迭代計數遞減了Nmax。步驟2036隨後分支至該程式迴圈本體之開始指令並開始下次通過該程式迴圈本體。
第13圖係示意地說明在零額外負擔程式迴圈本體中指令執行控制之流程圖,且特定言之,如何包含預測。步驟2038決定是否存在待執行之指令。步驟2040隨後決定是否設定DoLoop旗標,該旗標指示此執行發生在零額外負擔迴圈程式迴圈本體中。若未設定DoLoop旗標,則指令處理於步驟2050正常進行。若於步驟2040決定設定了DoLoop旗標,則步驟2042決定Nmax值是否大於剩餘之迭代計數。若Nmax值不大於剩餘之迭代計數,則步驟2044將用於待執行之程式指令的活動通道之數量設定為Nmax。由於可在待於步驟2048執行之指令中編碼的額外預測或在步驟2048或2050中執行之先前指令,活動通道之此數量可在實務上降低。若於步驟2042決定Nmax值大於剩餘之迭代計數,則步驟2046將用於指令之活動通道之數量設定為剩餘之迭代計數值。當不存在需要在此等通道中處理的向量元素時,此舉避免處理通道之活動使用。步驟2048隨後執行使用設定數量之活動通道於步驟2038識別為需要執行的指令。
該指令之向量化效能可取決於正在執行之指令類型。更特定言之,達成由經選擇之活動通道之數量指示之預測的方式可取決於正在執行之指令之性質及相關系統之資料路徑之性質變化。例如,預測可藉由抑制寫回資料通道(例如,位元組啟用)應用,該預測已經由將資料預測為非所需來指示。在此情形中,當產生預測值時所應用之元素大小可與由處理指令應用之元素大小不同。因此抑制於較小元素大小之寫回可導致僅部分單一算術操作,諸如寫回加法。在不能容易分割指令之情形中,所應用之預測可於位元組位準規定,但取決於僅一個位元組預測值(諸如用以預測執行之資料處理之全部字組的最低有效位元組)實施。
如上文所論述,迴圈控制電路1000可取決於儲存在預定狀態暫存器中之控制參數來控制該迴圈計數器之更新,該控制參數指示回應於該程式迴圈本體之一個向量指令處理的向量元素之數量。例如,該控制參數可係指示由該迴圈處理之一個向量元素之大小的VE寬度
,其允許決定每個迴圈迭代處理之元素數量,使得該迴圈計數器可藉由穿過該迴圈本體處理之向量元素之數量在各個迭代上更新。注意到VE寬度
係針對處理該迴圈所定義之一個向量元素之大小。亦可將單獨之向量元素大小IVE寬度
規定為在該迴圈中向量指令之參數之一,該參數通常匹配針對迴圈整體規定之VE寬度
,但不需要相同。允許針對迴圈整體規定之獨立元素大小及在該迴圈中之指令可用於支援其中在該迴圈中待處理之一個「元素」實際上含有經定位至向量指令之不同向量元素的多個組件之情形。例如,複數可具有實數及虛數部分,並且可支援複數算術向量指令,該指令假設一或更多個數字之實數及虛數部分經分配給交替向量元素。在此情形中,即使個別向量指令規定32位元元素,例如,該迴圈整體可認為一個「元素」具有64位元,因為其包含實數及虛數部分二者。因此,本文所提及之VE寬度
指由迴圈控制電路所見之向量元素大小,其不需與該迴圈中向量指令使用之實際元素大小相同。
該迴圈尾部預測以屏蔽(Nmax-迴圈計數)在該迴圈之最後迭代上的向量通道亦可取決於儲存在預定狀態暫存器中之參數。例如,該迴圈尾部預測可取決於指示是否需要預測之旗標,並且當需要預測時,在最後迭代上執行之活動通道之數量可獲自儲存在預定狀態暫存器中之VE寬度
(與儲存在鏈路暫存器中之迴圈計數器「迴圈計數」相結合)。在迴圈結束處,正應用之任何迴圈尾部預測可藉由在預定狀態暫存器中重置該旗標而去能,使得在該迴圈之後之向量指令將無需尾部預測而操作。或者,是否需要預測可直接由迴圈計數及VE寬度
確定,使得可不需要明確預測旗標。在本文中,迴圈尾部預測指功能,其中,當Nve
/Nmax
不等於整數時,其中Nve
係在該程式迴圈本體之數個迭代期間待處理的向量元素(大小為VE寬度
)之總數量及Nmax
係在該程式迴圈本體之一個迭代中待處理之向量元素(再次大小為VE寬度
)之最大數量,迴圈控制電路1000在一或更多個該迭代期間至少部分抑制在一或更多個該向量處理通道中之處理使得在該等迭代期間處理之向量元素之總數係Nve
。儘管下文實例描述了其中將迴圈尾部預測應用至最後迴圈迭代之情形,但其他實施方式亦可在較早迴圈迭代中應用該迴圈尾部預測以給出相同結果。注意到大小為VE寬度
之一個元素之預測可需要針對在該迴圈中之個別向量指令屏蔽之超過一個大小為IVE寬度
之元素,在如上文所論述其中VE寬度
>IVE寬度
之情形中。
然而,該預定狀態暫存器可係通常不可存取之暫存器。例如,該預定狀態暫存器可係與浮點內容資料相關之暫存器,例如,浮點控制暫存器1110(參看第8圖),其係第1圖所示之浮點暫存器110之一。為減少需要在上下文切時保存之狀態量,不需要浮點操作之處理預設係未分配浮點狀態,並且儲存在控制暫存器中之浮點狀態可存取性旗標(或惰性狀態保存狀態旗標)可指示該浮點上下文是否對當前過程可存取。在上下文切換時,若該狀態可存取性旗標指示該浮點上下文當前不可存取,則該浮點上下文不需要保存至記憶體。回應於需要浮點上下文之指令,當該浮點上下文當前不可存取時,執行惰性狀態保存操作以將儲存在浮點暫存器中之任何先前上下文資料保存至記憶體,並隨後使該等浮點上下文暫存器對當前過程可存取及更新狀態可存取性旗標以指示該浮點上下文現在係可存取的。
預定狀態暫存器不可存取之另一情況係若已經定義去能當前特權級別或過程存取該暫存器之存取許可。例如,一些系統可提供許可檢查電路1008(參看第8圖)以檢查用於控制對暫存器之特定子集(包括該預定狀態暫存器(例如,浮點暫存器))之存取之存取許可資料,並用以當偵測到存取違反該存取許可資料之暫存器之子集之一時,觸發故障條件。該故障可觸發作業系統檢查該存取許可及若需要將當前儲存在暫存器中之特權資料保存至記憶體使得在改變該存取許可以使暫存器子集對觸發該故障之過程/優先等級可存取並將處理返回至非特權過程之前,該特權資料可從觸發該故障之非特權過程隱藏。
即使使該浮點上下文於該迴圈之開始處可存取以用於設置所需向量元素寬度VE寬度
,不能假設該浮點上下文將於該迴圈之結束處仍係可存取,因為在導致當前過程之上下文失效的迴圈期間可出現異常,並且在該異常之後恢復該過程上下文時,該浮點上下文將直到其實際上為與恢復之過程相關之指令所需時才恢復。
因此,於迴圈之結束處,儲存用於控制迴圈計數遞減及/或迴圈尾部預測之參數的預定狀態暫存器可係不可存取的。為能夠重置該迴圈尾部預測資訊,吾人期望提供用於在迴圈之結束處觸發惰性狀態保存或故障條件的功能以允許該預定狀態暫存器變得可存取。然而,此途徑可能有問題,因為觸發惰性狀態保存操作或來自迴圈控制電路1000之故障條件而不由指令觸發通常非所欲,因為用於處置故障或狀態保存之架構機制可假設此等操作於特定指令位址觸發。為改良效能,可較佳地省略在該迴圈之最後迭代上一起執行該迴圈結束指令(使得當該迴圈控制資料係有效時回應於偵測到不需要額外迴圈迭代,該迴圈控制電路經配置以控制該處理電路繼續來自在該迴圈結束指令之後的指令之程式執行)。回應於在迴圈結束指令之前或之後的指令觸發該故障條件或狀態保存可能不適當。因此,於迴圈結束處不存在用於觸發惰性狀態保存或當需要時使浮點上下文可存取之故障條件的適當指令。此外,迴圈控制電路1000可與可通常不具有用於觸發暫存器存取之路徑的指令管線之擷取級相關,因此允許該擷取級觸發狀態保存在電路面積而言可能困難且昂貴。
這些問題可藉由回應於迴圈結束指令替代地觸發惰性狀態保存操作或故障條件來解決,該迴圈結束指令可在該迴圈之第一迭代上或於其中發生異常之迭代結束處執行(由於異常將使得該迴圈控制資料失效,該迴圈結束指令將於彼迭代之結束處再次執行)。因此,回應於該迴圈結束指令,當包括預定狀態暫存器之暫存器子集不可存取時,該迴圈結束指令解碼電路可產生狀態保存控制信號以觸發保存至儲存在暫存器之該子集中之狀態資料之記憶體中並且使得暫存器之該子集可存取。藉由回應於迴圈結束指令而非在完成該迴圈時觸發該狀態保存操作,不一定於最後迴圈迭代之結束處執行該迴圈結束指令,僅僅由於預防萬一浮點狀態已變得不可存取,允許改良效能。類似地,萬一該存取許可資料去能存取至包括預定狀態暫存器之暫存器子集,回應於該迴圈結束指令,該迴圈結束指令解碼電路可產生控制信號以觸發存取至暫存器子集。因此,若存取當前未由許可檢查電路1008允許,將於執行該迴圈結束指令時產生故障,一旦已將任何敏感資料保存至記憶體且在暫存器之彼子集中失效,允許該作業系統進入以授權必需許可。回應於迴圈結束指令之此等操作亦確保迴圈控制電路1000可存取用於控制迴圈計數器之遞減的VE寬度
參數。
於該迴圈之最後迭代之結束處,回應於偵測到在該程式迴圈本體之迭代之後不需要額外迴圈迭代,該迴圈控制電路去能在該一或更多個該向量處理通道中處理之抑制。例如,該迴圈控制電路可取決於儲存在預定狀態暫存器中之控制參數來控制在一或更多個該向量處理通道中處理之抑制,並且回應於偵測在該程式迴圈本體之迭代之後不需要額外迴圈迭代,迴圈控制電路1000可決定該預定狀態暫存器是否係可存取的,且當決定該預定狀態暫存器係可存取的時,藉由更新儲存在該預定狀態暫存器中之控制參數產生用於去能在一或更多個該向量處理通道中處理之抑制的預測去能控制信號。當決定該預定狀態暫存器係不可存取的時,迴圈控制電路1000抑制預測去能控制信號之產生。
亦即,當該預定狀態暫存器已係可存取的時,迴圈控制電路1000僅重置在該預定狀態暫存器中之參數以去能迴圈尾部預測。當該預定狀態暫存器不可存取時,將遇到該迴圈結束指令,因為可導致該暫存器變得不可存取之事件(例如,異常、故障、或上下文切換)亦將使來自迴圈控制快取記憶體1004之迴圈控制資料失效。因此,不需要迴圈控制電路1000來觸發惰性狀態保存或故障觸發操作-若需要於該迴圈之結束處此將替代地回應於該迴圈結束指令由迴圈結束指令解碼電路123觸發。
出於上文給出之原因,該迴圈結束指令觸發檢查儲存規定該元素寬度資訊及迴圈尾部預測控制之控制參數之預定狀態暫存器是否可存取係非常有用的,並且若該暫存器係不可存取的,則觸發故障條件或惰性狀態保存。當所需之預定狀態暫存器係不可存取的時,一些實施方式可通常回應於迴圈結束指令觸發此狀態保存或故障條件。
然而,實務上並非全部迴圈需要於迴圈尾部之預測通道。例如,若該迴圈將使用具有等於該暫存器寬度之元素大小的純量指令或向量指令處理,則每個迭代僅處理一個元素並且因此元素之全部數量通常係該向量長度之準確倍數。因此,在此等迴圈上,不需要對VE寬度
或迴圈尾部預測控制參數之存取。針對非預測迴圈而言為避免導致觸發惰性狀態保存或故障條件之效能成本,提供迴圈開始及結束指令之兩個版本: •DLS:非預測之迴圈開始指令:規定迴圈結束位址「loopend」及迭代數量rN
,而不規定向量元素大小,並因此不改變在浮點控制暫存器中VE寬度
參數。VE寬度
係預設等於在一個向量暫存器VR寬度
中之位元數量。 •DLSP:預測之迴圈開始指令:規定該迴圈結束位址「loopend」及迭代數量rN
,並且亦規定指示向量指令之元素寬度VE寬度
的「size」參數。將該元素寬度儲存至該浮點控制暫存器中。若該浮點上下文不可存取,則DLSP指令觸發惰性狀態保存操作以將先前浮點上下文保存至記憶體,並在將元素寬度儲存至該浮點控制暫存器之前,使該浮點上下文對該當前過程不可存取。 •DLE:非預測之迴圈結束指令:在DLS指令之後使用。若當該浮點上下文係不可存取時執行,則該迴圈結束指令解碼電路不觸發將浮點上下文保存至記憶體之任何惰性狀態。 •DLEP:預測之迴圈結束指令;在DLSP指令之後使用。若當該浮點上下文不可存取時執行,則該迴圈結束指令解碼電路產生控制信號以觸發將浮點上下文保存至記憶體,並且使該浮點上下文可存取。DLEP指令亦觸發對該等浮點上下文暫存器之一(例如,儲存VE寬度
之浮點控制暫存器)之存取以確保若針對當前過程/特權等級而言不允許存取浮點上下文,故障條件由存取許可檢查電路1008觸發。
於該迴圈之各個迭代之結束處,該迴圈控制電路使該迴圈計數器遞減了在彼迭代中處理之元素數量,其源自從該浮點控制暫存器讀取之VE寬度
。因此,針對非預測之迴圈,VE寬度
=VR寬度
,因此針對各個迭代,該迴圈計數器遞減了1。針對預測之迴圈,每個迭代處理之元素數量係VR寬度
/VE寬度
(針對給定硬體實施方式而言VR寬度
可係固定的,因此可不需要在控制暫存器中明確指示)。
藉由提供該迴圈結束指令之兩個版本,則即使異常在通過預測迴圈中途時發生,使得清空該上下文資料且在從異常返回之後浮點上下文變得不可再次對當前過程可存取,因此此舉將亦使該迴圈控制資料失效,預測之迴圈結束指令將於該迴圈之結束處執行,並且因此若需要可觸發該惰性狀態保存操作或故障條件以再次使該浮點上下文可存取。然而,針對非預測之迴圈,觸發該惰性狀態保存操作或故障條件之額外負擔可藉由使用非預測之迴圈結束指令避免。因此,總而言之,取決於該迴圈結束指令係第一類型迴圈結束指令還是第二類型迴圈結束指令,該迴圈結束指令解碼電路可選擇是否產生該狀態保存控制信號。類似地,是否回應於迴圈結束指令觸發存取包括預定狀態暫存器之暫存器子集可取決於該迴圈結束指令係第一類型還是第二類型迴圈結束指令。
第14A圖至第14E圖圖示非預測及預測迴圈之執行實例以說明上文所述之特徵。
第14A圖圖示非預測迴圈之實例,其中在執行該迴圈期間不發生異常。該非預測之迴圈開始指令DLS於迴圈之開始處執行以設置該迴圈結束位址及待執行之迭代數量。由於此係非預測之迴圈開始指令,在浮點控制暫存器中元素寬度VE寬度
參數保持不改變。若當前過程還無法存取浮點上下文,則不需要存取並且因此不觸發惰性狀態保存操作或故障條件。於第一迴圈迭代之結束處,執行非預測之迴圈結束指令DLE以設置用於控制隨後迭代之迴圈開始位址,並且再次不需要存取浮點控制暫存器,因此即使浮點上下文可存取性旗標指示該浮點上下文當前不可存取,不觸發惰性狀態保存操作或故障條件。在該迴圈之隨後迭代上,不執行迴圈開始及迴圈結束指令且程式流進行通過該程式迴圈本體之多個迭代。於各個迭代之結束處,由於浮點上下文係不可存取的,迴圈控制電路1000不存取該浮點控制暫存器並假設VE寬度
=VR寬度
,即,每個向量之元素數量係1,並且因此使該迴圈計數器遞減了1。在最後迭代上,不應用向量迴圈預測,並且在偵測到不要額外迭代時,迴圈控制電路1000控制程式流從在迴圈結束指令DLE之前的指令跳轉至在DLE之後的指令,跳過迴圈結束指令並繼續在該迴圈之後的隨後指令處理。
第14B圖圖示預測之迴圈之實例,其中在執行迴圈期間不發生異常。此時該迴圈開始指令係預測之迴圈開始指令DLSP並且因此除設置規定迴圈結束位址之迴圈控制資料及待執行之迭代數量之外,該迴圈開始指令解碼電路亦觸發基於由DLSP指令規定之「size」參數在浮點控制暫存器中規定的向量元素寬度VE寬度
之更新。因此,若該浮點上下文還不可存取,觸發惰性狀態保存操作或故障條件以使該上下文可存取,使得可更新VE寬度
。於第一迴圈迭代之結束處,執行預測之迴圈結束指令DLEP以設置該迴圈開始位址。該迴圈結束指令解碼電路從該狀態可存取性旗標偵測到該浮點上下文已可存取,因此不需要惰性狀態保存,且回應於迴圈結束指令DLEP觸發之對浮點控制暫存器之存取不觸發故障。隨後執行該迴圈之隨後迭代而不執行迴圈開始/結束指令。在該迴圈之各個迭代上,迴圈控制電路1000基於從浮點控制暫存器讀取之VE寬度
決定在迭代中處理之元素數量,並且使該迴圈計數器遞減了元素之預定數量。在該迴圈之最後迭代上,若如由迴圈計數器指示的待處理之剩餘元素數量小於待由一個向量指令處理之元素數量,迴圈控制電路1000將預測應用至非必須向量通道,及待屏蔽之向量部分由VE寬度
及迴圈計數器決定。於最後迭代之結束處,迴圈控制電路1000偵測到不需要額外迭代並且因此跳過DLEP指令。由於該浮點上下文已可存取,將在浮點控制暫存器中VE寬度
欄位重置為向量暫存器之寬度以針對隨後向量指令去能迴圈尾部預測,並且不需要惰性狀態保存或故障條件。
第14C圖圖示當在該迴圈期間發生異常時示非預測迴圈之實例。非預測之迴圈開始及迴圈結束指令DLS、DLE以與第14A圖所述之相同方式執行,並且如第14A圖所述在迴圈之各個迭代上該迴圈計數器遞減了1。異常發生在第三迭代上,其觸發了中斷線程上下文之狀態保存。若指示該浮點上下文為可存取,則狀態保存包括保存浮點上下文,而若該浮點上下文係不可存取的,則該狀態保存保存了整數上下文資料而非浮點上下文資料。在從該異常返回時,恢復整數狀態資料並且該浮點上下文資料最初係不可存取的。設定惰性狀態保留旗標以指示惰性狀態保留係活動的,使得若該迴圈之任何隨後指令需要浮點上下文資料,則此將觸發浮點上下文之惰性狀態恢復。若未遇到需要浮點上下文資料之指令,則當到達該迴圈結束指令DLE時,該浮點上下文仍將係不可存取的。由於在出現異常時該迴圈控制資料先前失效,執行迴圈結束指令DLE以重置該迴圈控制資料。由於此係非預測之迴圈結束指令DLE,該迴圈結束指令不觸發惰性狀態保存至或存取該浮點控制暫存器,即使該浮點上下文係不可存取的。在恢復該迴圈控制資料之後,該迴圈之隨後迭代以與第14A圖相同之方式繼續,並以與第14A圖相同之方式處置該迴圈之最後迭代。因此,當無待處理之剩餘迭代時跳過DLE指令,並且因此在最後迭代上不觸發惰性狀態保留或故障條件,即使該浮點上下文係不可存取的。若自從自異常返回之後仍未清除該惰性狀態保留旗標,則其保持活動並因此在迴圈之後需要浮點上下文之下一指令將觸發惰性狀態保存。此外,若自從自異常返回之後仍未清除該惰性狀態保留旗標,則該迴圈控制電路不嘗試將在浮點控制暫存器中之VE寬度
重置為向量暫存器之寬度。
第14D圖圖示當在迴圈期間出現異常時預測迴圈之實例。在第一迭代上,預測迴圈開始/結束指令DLSP及DLEP以與第14B圖相同之方式執行。異常出現在迴圈之第三迭代上。此舉觸發了上下文切換至異常處置器或另一線程並再次返回,其以與第14C圖相同之方式處置。然而,針對預測迴圈,在返回至具有設定為活動之惰性狀態保留旗標(狀態可存取性旗標)之迴圈本體指令時,解碼預測之迴圈結束指令DLEP觸發了該惰性狀態保存操作(若在該迴圈本體中無較早指令需要浮點上下文)並且亦觸發了存取該浮點控制暫存器使得若針對該當前過程之存取許可不允許存取浮點暫存器,則可產生故障條件以觸發該作業系統授權所需許可。因此,在遇到預測之迴圈結束指令之後,該浮點上下文變得可用並且因此可能讀取用於控制迴圈計數器更新之VE寬度
參數及存取在迴圈之最終迭代上用於控制預測之迴圈尾部預測參數。若在迴圈期間出現超過一個異常,則以與第14D圖所示之一者相似之方式處置各個異常。在最後迴圈迭代上,應用迴圈尾部預測以控制屏蔽未使用之向量通道來確保在該迴圈中處理之元素總數量匹配由迴圈開始指令規定之數量。於最後迴圈迭代之結束處,迴圈控制電路1000偵測到該惰性狀態保存旗標係無效的並且因此浮點上下文已可存取,並因此將在浮點控制暫存器中之VE寬度
重置為向量暫存器之寬度以去能抑制處理在迴圈期間預測之彼等向量通道。
第14E圖圖示預測迴圈之實例,其中異常發生在迴圈之最後迭代上。在第一迭代上,迴圈開始/結束指令DLSP及DLEP以與第14B圖或第14D圖相同之方式處置,並且亦以相同方式處置在各個迭代上迴圈計數器之遞減。然而,於點*2處,異常發生在最後迭代上,這觸發上下文切換。將先前浮點上下文(包括預測元素寬度VE寬度
)保存至記憶體並隨後處理該異常。在從異常返回時,恢復與運行該迴圈之線程相關之整數上下文,但未恢復浮點上下文並因此將惰性狀態保存旗標設定為活動。在此實例中,在從異常返回之後執行之第一指令係不需要浮點狀態之純量指令SI1
並且因此不觸發惰性狀態保存。儘管在浮點控制暫存器中預測元素寬度VE寬度
係不可存取的,由於該指令係純量指令這樣沒關係因此不需要預測。當於點*3處遇到第一向量指令VI2
時,認為此係需要浮點上下文之指令(除了需要來自浮點控制暫存器之預測元素寬度VE寬度
之外,在一些架構中,該等向量暫存器可與浮點暫存器重疊並且因此當惰性狀態保存旗標係活動時執行向量指令無論如何均可導致惰性狀態保留發生以使該等向量暫存器可存取)。由於該延遲狀態保存旗標係活動的,向量指令VI2
觸發了惰性狀態保存操作,該操作使浮點上下文可存取並允許恢復VE寬度
使得針對該迴圈之最後迭代之剩餘部分再次啟用預測。
在一些實施例中,該惰性狀態保留過程保留了在該等暫存器中之浮點上下文並且不恢復與觸發惰性狀態保留之線程相關的浮點上下文。在此等實施例中,該作業系統配置存取許可使得除觸發惰性狀態保留之外,嘗試存取浮點狀態亦觸發了故障,該作業系統可回應於該故障並恢復與觸發了該故障之線程相關的浮點上下文。
第15圖示意地說明在一些示例實施例中適用於實施本文所述之技術的虛擬機器實施例。儘管前文描述之實施例根據用於操作支援相關技術之具體處理硬體的設備及方法來實施本發明,但亦有可能提供硬體元件的所謂虛擬機器實施方式。該等虛擬機器實施方式在主處理機530上運行,該主處理機530運行支援虛擬機器程式510的主機作業系統520。通常,需要大型高效處理器以提供按合理速度執行的虛擬機器實施方式,但此方法在某些環境中可為合理的,諸如當需要運行另一處理器本端的代碼以獲得相容性時,或出於再使用之原因。虛擬機器程式510向應用程式500提供應用程式介面,該介面與將由實際硬體提供的應用程式介面相同,該實際硬體是藉由虛擬機器程式510模型化的元件。由此,程式指令(包括上述對記憶體存取的控制)可藉由使用虛擬機器程式510而在應用程式500內執行,以模型化指令與虛擬機器硬體的互動。
儘管已在本文中參考隨附圖式詳細描述了說明性實施例,但應理解,申請專利範圍不限於彼等精確實施例,且熟習此項技術者可在本發明中實現各種變化、添加及修改,而不偏離隨附申請專利範圍之範疇及精神。例如,附屬項之特徵之各種組合可由獨立項之特徵產生。
100‧‧‧資料處理設備102‧‧‧記憶體104‧‧‧擷取單元106‧‧‧指令解碼器108‧‧‧浮點處理電路110‧‧‧浮點暫存器112‧‧‧乘法器114‧‧‧移位器116‧‧‧加法器117‧‧‧整數暫存器118‧‧‧分支預測器119‧‧‧分支單位120‧‧‧控制信號122‧‧‧分支將來指令解碼電路123‧‧‧迴圈結束指令解碼電路124‧‧‧分支控制電路125‧‧‧迴圈開始指令解碼電路130‧‧‧分支控制資料快取記憶體200‧‧‧分支將來指令BF201‧‧‧分支將來指令202‧‧‧分支將來指令203‧‧‧分支將來指令204‧‧‧分支將來指令205‧‧‧分支將來指令206‧‧‧分支將來指令207‧‧‧分支指令208‧‧‧分支將來指令209‧‧‧分支將來指令210‧‧‧條件分支將來指令211‧‧‧分支將來指令252‧‧‧可程式化分支點資料254‧‧‧分支目標位址256‧‧‧位元數量500‧‧‧應用程式501‧‧‧步驟502‧‧‧步驟503‧‧‧步驟504‧‧‧步驟505‧‧‧步驟506‧‧‧步驟510‧‧‧虛擬機器程式520‧‧‧主機作業系統530‧‧‧主處理機1000‧‧‧迴圈/分支控制電路1002‧‧‧擷取級1004‧‧‧迴圈/分支控制快取記憶體1006‧‧‧指令快取記憶體1008‧‧‧許可檢查電路1110‧‧‧浮點控制暫存器2000‧‧‧步驟2002‧‧‧步驟2003‧‧‧步驟2004‧‧‧步驟2005‧‧‧步驟2006‧‧‧步驟2008‧‧‧步驟2010‧‧‧步驟2012‧‧‧步驟2013‧‧‧步驟2014‧‧‧步驟2016‧‧‧步驟2018‧‧‧步驟2020‧‧‧步驟2022‧‧‧步驟2024‧‧‧步驟2026‧‧‧步驟2028‧‧‧步驟2030‧‧‧步驟2032‧‧‧步驟2034‧‧‧步驟2036‧‧‧步驟2038‧‧‧步驟2040‧‧‧步驟2042‧‧‧步驟2044‧‧‧步驟2046‧‧‧步驟2048‧‧‧步驟2050‧‧‧步驟
示例實施例現將參考附圖僅以實例之方式描述,其中:
第1圖示意地說明資料處理設備;
第2A圖示意地說明分支將來指令;
第2B圖示意地說明包括分支將來指令之程式指令之序列;
第2C圖示意地說明具有指示預定指令之可程式化參數之不同實施方式的數個分支將來指令;
第2D圖示意地說明具有可程式化分支目標位址之不同實施方式的數個分支將來指令;
第3A圖示意地說明包括通過處理管線進行之分支將來指令的程式指令之序列;
第3B圖示意地說明包括分支將來指令之指令序列之程式流;
第3C圖示意地說明包括分支將來及鏈路指令之指令序列之程式流;
第4圖示意地說明分支將來處理之方法;
第5圖示意地說明包括回應於資料失效之過程的分支將來處理之另一方法。
第5A圖說明處理條件分支將來指令之實例;
第5B圖說明處理對應於相反條件之一對條件分支將來指令之實例;
第6圖示意地說明零額外負擔迴圈行為;
第7圖示意地說明當執行第6圖之零額外負擔迴圈行為之後的指令時的處理管線級內容;
第8圖示意地說明包括迴圈/分支控制電路以控制零額外負擔迴圈行為及分支將來指令行為之處理管線;
第9圖說明如何在程式計數器值與迴圈控制資料欄位之間進行比較以識別在程式執行中之點,於此點應執行分支至迴圈開始位置;
第10A圖係示意地說明迴圈開始程式指令之行為的流程圖;
第10B圖示意地說明迴圈開始指令之實施方式;
第11圖係示意地說明迴圈結束程式指令之行為的流程圖;
第12圖係示意地說明當作為零額外負擔迴圈行為之部分執行程式迴圈本體時迴圈控制電路動作的流程圖;
第13圖係示意地說明在程式迴圈本體中控制指令執行以提供預測,藉以在藉由預測控制該程式迴圈本體之給定迭代期間向量指令可在具有特定活動向量元素之多個向量元素上操作的流程圖;
第14A圖至第14E圖圖示執行非預測及預測迴圈之實例;以及
第15圖示意地說明虛擬機器實施方式。
國內寄存資訊 (請依寄存機構、日期、號碼順序註記) 無
國外寄存資訊 (請依寄存國家、機構、日期、號碼順序註記) 無
(請換頁單獨記載) 無
2038‧‧‧步驟
2040‧‧‧步驟
2042‧‧‧步驟
2044‧‧‧步驟
2046‧‧‧步驟
2048‧‧‧步驟
2050‧‧‧步驟
Claims (18)
- 一種用於處理資料之設備,其包含:處理電路系統,用以執行由程式指令規定之處理操作,該等程式指令包括支援處理多達Nmax個與相應向量處理通道相關之向量元件的至少一個向量處理程式指令;一指令解碼器,用以解碼該等程式指令以產生控制信號來控制該處理電路系統執行該等處理操作;其中該指令解碼器包含預測之迴圈指令解碼器電路系統,用以在待執行之一程式迴圈本體之數個迭代期間解碼具有與其相關之數個待處理之向量元件Nve的一預測之迴圈指令;以及該處理電路系統包含預測迴圈控制電路系統以當Nve/Nmax不等於整數時操作以在一或更多個該等迭代期間至少部分抑制在一或更多個該等向量處理通道中之處理,使得在該等迭代期間處理之向量元件之一總數係Nve;其中該處理電路系統包含向量暫存器,該等向量暫存器各者具有一預定位元數量VR寬度並且能夠儲存複數個該等向量元件,該等向量元件各者具有一位元數量VE寬度,其中Nmax係由(VR寬度/VE寬度)之一整數部分給出; 浮點暫存器以儲存浮點資料值及一浮點控制暫存器以儲存浮點控制資料及指示VE寬度之一值,其中:當浮點資料值對該等程式指令可存取時,該浮點控制暫存器亦係可存取;以及當該等浮點資料值對該等程式指令不可存取時,該浮點控制暫存器亦係不可存取。
- 如請求項1所述之設備,其中Nmax係獨立於在該程式迴圈本體中之該等程式指令的一恆定值。
- 如請求項1所述之設備,其中該預測之迴圈指令規定了指示VE寬度之一值。
- 如請求項1所述之設備,其中該預測之迴圈指令藉由下列之一項規定了Nve:將Nve編碼為在該預測之迴圈指令中之一立即值;編碼含有指示Nve之資料的一暫存器之一識別符。
- 如請求項1所述之設備,其中該預測之迴圈指令規定了指示該程式迴圈本體之一大小的一值。
- 如請求項5所述之設備,其中在處理該預測之迴圈指令時,若該處理電路系統判定不需要迴圈迭代,則該處理電路系統藉由下列之一項抑制該程式迴圈本體:抑制至少一些指令之該執行直至指示該程式迴圈本體之該大小的該值指示已到達該程式迴圈本體之結束 處;或抑制至少一些指令之結果暫存器更新直至指示該程式迴圈本體之該大小的該值指示已到達該程式迴圈本體之該結束處;或觸發至在該程式迴圈本體之後的該指令之一分支。
- 如請求項5所述之設備,其中該預測之迴圈指令係一預測之零負擔迴圈指令且該處理電路系統包含迴圈控制電路系統以控制該處理電路系統執行由在該預測之迴圈開始指令之後且不包括該預測之迴圈開始指令的該程式迴圈本體之程式指令所規定的處理操作。
- 如請求項1所述之設備,其中該指令解碼器包含迴圈結束指令解碼電路系統以在該程式迴圈本體之一結束時解碼一迴圈結束指令來產生控制信號以控制該處理電路系統儲存迴圈控制資料,決定是否需要額外迴圈迭代,並且若需要額外迴圈迭代,則分支至該程式迴圈本體之一開始指令;以及在至少部分執行該程式迴圈本體之一最終程式指令之後,該迴圈控制電路系統決定是否需要額外迴圈迭代,並且若需要額外迴圈迭代,則在該迴圈控制資料之控制下,控制該處理電路系統以執行由在該迴圈結束指令之前且不包括該迴圈結束指令的該程式迴圈本 體之程式指令所規定的處理操作。
- 如請求項8所述之設備,其中在處理該預測之迴圈指令時,若該處理電路系統判定不需要迴圈迭代,則該處理電路系統藉由以下一項抑制該程式迴圈本體:抑制至少一些指令之該執行直至到達該迴圈結束指令;或抑制至少一些指令之結果暫存器更新直至到達該迴圈結束指令。
- 如請求項1所述之設備,其中該迴圈控制資料包括指示VE寬度之資料。
- 如請求項8所述之設備,其中該迴圈控制資料包括以下中一或更多個:迴圈開始資料,其指示該開始指令之一位址;迴圈開始偏移資料,其指示在緊接在該迴圈結束指令之前的該程式迴圈本體之一最終指令與該程式迴圈本體之該開始指令之間的該距離;迴圈結束資料,其指示緊接在該迴圈結束指令之前的該程式迴圈本體之一最終指令之一位址;迴圈剩餘指令資料,其指示在到達緊接在該迴圈結束指令之前的該程式迴圈本體之一最終指令之前剩餘待處理之指令之該數量; 迴圈剩餘大小資料,其指示在到達緊接在該迴圈結束指令之前的該程式迴圈本體之一最終指令之前剩餘待處理之程式儲存記憶體位置之該數量;以及迴圈控制有效資料。
- 如請求項1所述之設備,其中該指令解碼器包含非預測之迴圈開始指令解碼電路系統以產生控制信號來控制該處理電路系統將該非預測之迴圈開始指令執行為一預測之迴圈開始指令,其中VE寬度=VR寬度。
- 如請求項12所述之設備,其中:當該非預測之迴圈開始解碼電路系統解碼一非預測之迴圈開始指令,其中VE寬度=VR寬度且該等浮點值係可存取時,該非預測之迴圈開始解碼電路系統控制該處理電路系統以將表示VE寬度之一值儲存在該浮點控制暫存器中,且當該處理電路系統嘗試讀取表示VE寬度之該值時,表示VE寬度之該值係自該浮點控制資料暫存器讀取;當該非預測之迴圈開始解碼電路系統解碼一非預測之迴圈開始指令且該等浮點值係不可存取時,該處理電路系統返回表示VE寬度=VR寬度之一值,該值獨立於儲存在該浮點控制暫存器中之VE寬度的任何值。
- 如請求項13所述之設備,其中,當在執行 該非預測之迴圈開始指令之後並在已完成該程式迴圈本體之該數量迭代Nit之前將該等浮點資料值從不可存取變為可存取時,將指示VR寬度之一值儲存在該浮點控制暫存器中。
- 如請求項1所述之設備,其中與一給定向量處理通道之一給定部分相關的一操作之一抑制係藉由下列之一項執行:抑制對應於該給定部分之隨後向量指令之一的一目的向量暫存器之一部分的更新;將對應於該給定部分之一目的向量暫存器之一部分設定為零;取決於對應於該給定通道之該等給定部分之一的一控制資訊來抑制對應於該給定通道之一目的向量暫存器之一部分的更新;以及取決於對應於該等給定部分之一的該控制資訊來抑制對應於該給定通道之該處理。
- 一種用於處理資料之設備,其包含:處理構件,用以執行由程式指令規定之處理操作,該等程式指令包括支援處理多達Nmax個與相應向量處理通道相關之向量元件的至少一個向量處理程式指令;一指令解碼構件,用以解碼該等程式指令以產生控 制信號來控制該等處理構件執行該等處理操作;其中該等指令解碼構件包含預測之迴圈指令解碼構件,用以在待執行之一程式迴圈本體之數個迭代期間解碼具有與其相關之數個待處理之向量元件Nve的一預測之迴圈指令;以及該等處理構件包含預測迴圈控制構件以當Nve/Nmax不等於整數時操作以在一或更多個該等迭代期間至少部分抑制在一或更多個該等向量處理通道中之處理,使得在該等迭代期間處理之向量元件之一總數係Nve;該設備包含向量儲存構件,該向量儲存構件各者具有一預定位元數量VR寬度並且能夠儲存複數個該等向量元件,該等向量元件各者具有一位元數量VE寬度,其中Nmax係由(VR寬度/VE寬度)之一整數部分給出;浮點儲存構件以儲存浮點資料值及一浮點控制儲存構件以儲存浮點控制資料及指示VE寬度之一值,其中:當浮點資料值對該等程式指令可存取時,該浮點控制儲存構件亦係可存取;以及當該等浮點資料值對該等程式指令不可存取時,該浮點控制儲存構件亦係不可存取。
- 一種處理資料之方法,其包含以下步驟: 執行由程式指令規定之處理操作,該等程式指令包括支援處理多達Nmax個與相應向量處理通道相關之向量元件的至少一個向量處理程式指令;解碼該等程式指令以產生控制信號來控制該等處理操作之該執行;其中該等程式指令之該解碼之步驟包含以下步驟:在待執行之一程式迴圈本體之數個迭代期間解碼具有與其相關之數個待處理之向量元件Nve的一預測之迴圈指令;以及當Nve/Nmax不等於一整數時,在一或更多個該等迭代期間至少部分抑制在一或更多個該等向量處理通道中之處理,使得在該等迭代期間處理之向量元件之一總數係Nve;其中使用處理電路系統來執行該等處理操作,該處理電路系統包含向量暫存器,該等向量暫存器各者具有一預定位元數量VR寬度並且能夠儲存複數個該等向量元件,該等向量元件各者具有一位元數量VE寬度,其中Nmax係由(VR寬度/VE寬度)之一整數部分給出;其中將浮點資料值儲存在浮點暫存器中及將浮點控制資料及指示VE寬度之一值儲存在一浮點控制暫存器中,其中:當浮點資料值對該等程式指令可存取時,該浮點 控制暫存器亦係可存取;以及當該等浮點資料值對該等程式指令不可存取時,該浮點控制暫存器亦係不可存取。
- 一種以非暫時形式儲存用於控制一電腦之一電腦程式的電腦程式產品,以提供根據如請求項17所述之方法操作之一虛擬機執行環境。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1604945.4A GB2548602B (en) | 2016-03-23 | 2016-03-23 | Program loop control |
GB1604945.4 | 2016-03-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201737060A TW201737060A (zh) | 2017-10-16 |
TWI749000B true TWI749000B (zh) | 2021-12-11 |
Family
ID=55968775
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106109306A TWI749000B (zh) | 2016-03-23 | 2017-03-21 | 程式迴圈控制 |
Country Status (9)
Country | Link |
---|---|
US (1) | US10768934B2 (zh) |
EP (1) | EP3433726B1 (zh) |
JP (1) | JP7105699B2 (zh) |
KR (1) | KR102353636B1 (zh) |
CN (1) | CN108780397B (zh) |
GB (1) | GB2548602B (zh) |
IL (1) | IL261310B (zh) |
TW (1) | TWI749000B (zh) |
WO (1) | WO2017163040A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2548603B (en) * | 2016-03-23 | 2018-09-26 | Advanced Risc Mach Ltd | Program loop control |
JP6933263B2 (ja) * | 2017-11-13 | 2021-09-08 | 日本電気株式会社 | データ処理装置、ループ制御装置、データ処理方法、ループ制御方法およびプログラム |
CN112000370B (zh) * | 2020-08-27 | 2022-04-15 | 北京百度网讯科技有限公司 | 循环指令的处理方法、装置、设备和存储介质 |
US20220100514A1 (en) * | 2020-09-26 | 2022-03-31 | Intel Corporation | Loop support extensions |
US12039329B2 (en) * | 2020-12-24 | 2024-07-16 | Intel Corporation | Methods, systems, and apparatuses to optimize partial flag updating instructions via dynamic two-pass execution in a processor |
US11954496B2 (en) * | 2021-08-02 | 2024-04-09 | Nvidia Corporation | Reduced memory write requirements in a system on a chip using automatic store predication |
US11663007B2 (en) | 2021-10-01 | 2023-05-30 | Arm Limited | Control of branch prediction for zero-overhead loop |
US11650822B1 (en) * | 2021-10-25 | 2023-05-16 | Arm Limited | Program flow prediction for loops |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5761470A (en) * | 1995-07-12 | 1998-06-02 | Mitsubishi Denki Kabushiki Kaisha | Data processor having an instruction decoder and a plurality of executing units for performing a plurality of operations in parallel |
US6304963B1 (en) * | 1998-05-14 | 2001-10-16 | Arm Limited | Handling exceptions occuring during processing of vector instructions |
US20040193858A1 (en) * | 2003-03-24 | 2004-09-30 | Infineon Technologies North America Corp. | Zero-overhead loop operation in microprocessor having instruction buffer |
US20100169612A1 (en) * | 2007-06-26 | 2010-07-01 | Telefonaktiebolaget L M Ericsson (Publ) | Data-Processing Unit for Nested-Loop Instructions |
US20100325397A1 (en) * | 2009-06-19 | 2010-12-23 | Arm Limited | Data processing apparatus and method |
TW201403470A (zh) * | 2012-04-02 | 2014-01-16 | Apple Inc | 向量分割迴圈之效能改良 |
US20140115301A1 (en) * | 2012-10-23 | 2014-04-24 | Analog Devices Technology | Processor architecture and method for simplifying programming single instruction, multiple data within a register |
TW201419141A (zh) * | 2012-08-21 | 2014-05-16 | Apple Inc | 用於執行推測式述詞指令之機制 |
US20140189331A1 (en) * | 2012-12-31 | 2014-07-03 | Maria Lipshits | System of improved loop detection and execution |
US20140208078A1 (en) * | 2013-01-23 | 2014-07-24 | International Business Machines Corporation | Vector checksum instruction |
US20150100755A1 (en) * | 2013-10-09 | 2015-04-09 | Arm Limited | Data processing apparatus and method for controlling performance of speculative vector operations |
Family Cites Families (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3551895A (en) | 1968-01-15 | 1970-12-29 | Ibm | Look-ahead branch detection system |
JPS60220424A (ja) * | 1984-04-16 | 1985-11-05 | Nec Corp | 配列要素の演算方式 |
JPS6353643A (ja) * | 1986-08-23 | 1988-03-07 | Nec Corp | 命令制御装置 |
US5781753A (en) * | 1989-02-24 | 1998-07-14 | Advanced Micro Devices, Inc. | Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions |
US5388841A (en) | 1992-01-30 | 1995-02-14 | A/N Inc. | External memory system having programmable graphics processor for use in a video game system or the like |
US5742804A (en) | 1996-07-24 | 1998-04-21 | Institute For The Development Of Emerging Architectures, L.L.C. | Instruction prefetch mechanism utilizing a branch predict instruction |
US6092188A (en) | 1997-12-23 | 2000-07-18 | Intel Corporation | Processor and instruction set with predict instructions |
TW455814B (en) | 1998-08-06 | 2001-09-21 | Intel Corp | Software directed target address cache and target address register |
US6611910B2 (en) | 1998-10-12 | 2003-08-26 | Idea Corporation | Method for processing branch operations |
US6308322B1 (en) | 1999-04-06 | 2001-10-23 | Hewlett-Packard Company | Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints |
US6523110B1 (en) | 1999-07-23 | 2003-02-18 | International Business Machines Corporation | Decoupled fetch-execute engine with static branch prediction support |
US6629238B1 (en) | 1999-12-29 | 2003-09-30 | Intel Corporation | Predicate controlled software pipelined loop processing with prediction of predicate writing and value prediction for use in subsequent iteration |
WO2002084451A2 (en) * | 2001-02-06 | 2002-10-24 | Victor Demjanenko | Vector processor architecture and methods performed therein |
WO2004049154A2 (en) * | 2002-11-28 | 2004-06-10 | Koninklijke Philips Electronics N.V. | A loop control circuit for a data processor |
GB2409064B (en) * | 2003-12-09 | 2006-09-13 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing in parallel a data processing operation on data elements |
US20050223202A1 (en) | 2004-03-31 | 2005-10-06 | Intel Corporation | Branch prediction in a pipelined processor |
US7272704B1 (en) * | 2004-05-13 | 2007-09-18 | Verisilicon Holdings (Cayman Islands) Co. Ltd. | Hardware looping mechanism and method for efficient execution of discontinuity instructions |
US7886314B2 (en) * | 2005-03-28 | 2011-02-08 | Pioneer Corporation | Disk device, shutter control device, and computer program for shutter opening/closing control |
US7565514B2 (en) * | 2006-04-28 | 2009-07-21 | Freescale Semiconductor, Inc. | Parallel condition code generation for SIMD operations |
US7991985B2 (en) | 2006-12-22 | 2011-08-02 | Broadcom Corporation | System and method for implementing and utilizing a zero overhead loop |
US7937574B2 (en) | 2007-07-17 | 2011-05-03 | Advanced Micro Devices, Inc. | Precise counter hardware for microcode loops |
JP4526560B2 (ja) | 2007-12-05 | 2010-08-18 | 日本テキサス・インスツルメンツ株式会社 | プロセッサおよび信号処理方法 |
US8271832B2 (en) | 2008-08-15 | 2012-09-18 | Apple Inc. | Non-faulting and first-faulting instructions for processing vectors |
US9110683B2 (en) | 2008-08-15 | 2015-08-18 | Apple Inc. | Predicting branches for vector partitioning loops when processing vector instructions |
US7900025B2 (en) * | 2008-10-14 | 2011-03-01 | International Business Machines Corporation | Floating point only SIMD instruction set architecture including compare, select, Boolean, and alignment operations |
NL2002799C2 (en) | 2009-04-24 | 2010-10-26 | Univ Delft Tech | Data structure, method and system for address lookup. |
GB2471067B (en) | 2009-06-12 | 2011-11-30 | Graeme Roy Smith | Shared resource multi-thread array processor |
WO2011065145A1 (ja) * | 2009-11-24 | 2011-06-03 | 日本電気株式会社 | プロセッサ、プロセッサによるループ回数制御方法 |
US20110280314A1 (en) * | 2010-05-12 | 2011-11-17 | Texas Instruments Incorporated | Slice encoding and decoding processors, circuits, devices, systems and processes |
WO2012134532A1 (en) * | 2011-04-01 | 2012-10-04 | Intel Corporation | Vector friendly instruction format and execution thereof |
WO2013089707A1 (en) * | 2011-12-14 | 2013-06-20 | Intel Corporation | System, apparatus and method for loop remainder mask instruction |
US9557999B2 (en) | 2012-06-15 | 2017-01-31 | Apple Inc. | Loop buffer learning |
US9244677B2 (en) * | 2012-09-28 | 2016-01-26 | Intel Corporation | Loop vectorization methods and apparatus |
US9740493B2 (en) * | 2012-09-28 | 2017-08-22 | Intel Corporation | System and method of loop vectorization by compressing indexes and data elements from iterations based on a control mask |
US9329870B2 (en) * | 2013-02-13 | 2016-05-03 | International Business Machines Corporation | Extensible execution unit interface architecture with multiple decode logic and multiple execution units |
US9606803B2 (en) * | 2013-07-15 | 2017-03-28 | Texas Instruments Incorporated | Highly integrated scalable, flexible DSP megamodule architecture |
JP6353643B2 (ja) | 2013-09-26 | 2018-07-04 | 矢崎総業株式会社 | 車両用表示装置 |
US9430245B2 (en) | 2014-03-28 | 2016-08-30 | Telefonaktiebolaget Lm Ericsson (Publ) | Efficient branch predictor history recovery in pipelined computer architectures employing branch prediction and branch delay slots of variable size |
GB2548604B (en) | 2016-03-23 | 2018-03-21 | Advanced Risc Mach Ltd | Branch instruction |
US20180349144A1 (en) | 2017-06-06 | 2018-12-06 | Intel Corporation | Method and apparatus for branch prediction utilizing primary and secondary branch predictors |
-
2016
- 2016-03-23 GB GB1604945.4A patent/GB2548602B/en active Active
-
2017
- 2017-03-21 KR KR1020187029666A patent/KR102353636B1/ko active IP Right Grant
- 2017-03-21 US US16/081,464 patent/US10768934B2/en active Active
- 2017-03-21 TW TW106109306A patent/TWI749000B/zh active
- 2017-03-21 WO PCT/GB2017/050776 patent/WO2017163040A1/en active Application Filing
- 2017-03-21 CN CN201780017790.6A patent/CN108780397B/zh active Active
- 2017-03-21 EP EP17713414.5A patent/EP3433726B1/en active Active
- 2017-03-21 JP JP2018548766A patent/JP7105699B2/ja active Active
-
2018
- 2018-08-22 IL IL261310A patent/IL261310B/en active IP Right Grant
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5761470A (en) * | 1995-07-12 | 1998-06-02 | Mitsubishi Denki Kabushiki Kaisha | Data processor having an instruction decoder and a plurality of executing units for performing a plurality of operations in parallel |
US6304963B1 (en) * | 1998-05-14 | 2001-10-16 | Arm Limited | Handling exceptions occuring during processing of vector instructions |
US20040193858A1 (en) * | 2003-03-24 | 2004-09-30 | Infineon Technologies North America Corp. | Zero-overhead loop operation in microprocessor having instruction buffer |
US20100169612A1 (en) * | 2007-06-26 | 2010-07-01 | Telefonaktiebolaget L M Ericsson (Publ) | Data-Processing Unit for Nested-Loop Instructions |
US20100325397A1 (en) * | 2009-06-19 | 2010-12-23 | Arm Limited | Data processing apparatus and method |
TW201403470A (zh) * | 2012-04-02 | 2014-01-16 | Apple Inc | 向量分割迴圈之效能改良 |
TW201419141A (zh) * | 2012-08-21 | 2014-05-16 | Apple Inc | 用於執行推測式述詞指令之機制 |
US20140115301A1 (en) * | 2012-10-23 | 2014-04-24 | Analog Devices Technology | Processor architecture and method for simplifying programming single instruction, multiple data within a register |
US20140189331A1 (en) * | 2012-12-31 | 2014-07-03 | Maria Lipshits | System of improved loop detection and execution |
US20140208078A1 (en) * | 2013-01-23 | 2014-07-24 | International Business Machines Corporation | Vector checksum instruction |
US20150100755A1 (en) * | 2013-10-09 | 2015-04-09 | Arm Limited | Data processing apparatus and method for controlling performance of speculative vector operations |
Also Published As
Publication number | Publication date |
---|---|
US20190310851A1 (en) | 2019-10-10 |
CN108780397B (zh) | 2023-03-10 |
EP3433726B1 (en) | 2020-09-02 |
US10768934B2 (en) | 2020-09-08 |
KR102353636B1 (ko) | 2022-01-20 |
WO2017163040A1 (en) | 2017-09-28 |
CN108780397A (zh) | 2018-11-09 |
IL261310A (en) | 2018-10-31 |
IL261310B (en) | 2020-08-31 |
JP2019509574A (ja) | 2019-04-04 |
GB2548602B (en) | 2019-10-23 |
EP3433726A1 (en) | 2019-01-30 |
KR20180126519A (ko) | 2018-11-27 |
JP7105699B2 (ja) | 2022-07-25 |
GB2548602A (en) | 2017-09-27 |
GB201604945D0 (en) | 2016-05-04 |
TW201737060A (zh) | 2017-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI738744B (zh) | 用於程式迴圈控制的設備、方法及電腦程式產品 | |
TWI749000B (zh) | 程式迴圈控制 | |
TWI746529B (zh) | 分支指令 | |
US11307856B2 (en) | Branch target variant of branch-with-link instruction | |
JP2019510313A (ja) | ベクトル命令の処理 |