TWI494851B - 用於推測式述詞指令之功能單元、處理器及方法 - Google Patents
用於推測式述詞指令之功能單元、處理器及方法 Download PDFInfo
- Publication number
- TWI494851B TWI494851B TW102130104A TW102130104A TWI494851B TW I494851 B TWI494851 B TW I494851B TW 102130104 A TW102130104 A TW 102130104A TW 102130104 A TW102130104 A TW 102130104A TW I494851 B TWI494851 B TW I494851B
- Authority
- TW
- Taiwan
- Prior art keywords
- vector
- instruction
- predicate
- available
- vector instruction
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 21
- 239000013598 vector Substances 0.000 claims description 307
- 230000015654 memory Effects 0.000 claims description 70
- 230000004044 response Effects 0.000 claims description 17
- 230000000977 initiatory effect Effects 0.000 claims description 6
- 230000001419 dependent effect Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 15
- 238000012545 processing Methods 0.000 description 12
- 238000007667 floating Methods 0.000 description 10
- 230000011218 segmentation Effects 0.000 description 8
- 239000000463 material Substances 0.000 description 7
- 230000003068 static effect Effects 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- OCKGFTQIICXDQW-ZEQRLZLVSA-N 5-[(1r)-1-hydroxy-2-[4-[(2r)-2-hydroxy-2-(4-methyl-1-oxo-3h-2-benzofuran-5-yl)ethyl]piperazin-1-yl]ethyl]-4-methyl-3h-2-benzofuran-1-one Chemical compound C1=C2C(=O)OCC2=C(C)C([C@@H](O)CN2CCN(CC2)C[C@H](O)C2=CC=C3C(=O)OCC3=C2C)=C1 OCKGFTQIICXDQW-ZEQRLZLVSA-N 0.000 description 5
- 238000005192 partition Methods 0.000 description 5
- 230000007704 transition Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000005291 magnetic effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000725 suspension Substances 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/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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- 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, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction 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, look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- 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, look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
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)
- Advance Control (AREA)
Description
本發明係關於處理器,且更特定言之,係關於推測式述詞向量指令執行。
為改良效能,許多無序執行處理器先行至程式中以搜集指令。在許多狀況下,輸入參數一可用,即執行指令。取決於指令之類型,指令可發出得愈早,則處理器之效能愈好。舉例而言,記憶體讀取操作可歸因於正被讀取之記憶體之效能而具有長延時。因此,記憶體位址一經產生,即可發出記憶體讀取操作。另外,諸如除法指令之一些算術運算(例如)可歸因於指令執行中所使用之管線級之數目而具有長延時。因此,運算元一可用,即可發出如除法指令之指令。
然而,當執行計算以控制向量之個別元素是否被修改時,處理向量指令之一些習知處理器使用述詞。因此,在習知處理器中,當指令取決於述詞向量時,彼指令必須在該指令被執行之前等待述詞變得可用。與此類型之等待相關聯的延時可為效率低下的且可不利地影響效能。
揭示一種用於執行推測式述詞指令之機制之各種實施例。廣泛而言,涵蓋一種處理器及一種方法,其中當向量指令所取決之一或多
個運算元可供使用時(即使該向量指令亦取決之述詞向量不可用),可起始該向量指令之執行。若該述詞向量不可用,則可臨時保持向量指令之執行結果,直至該述詞向量變得可用,此時,可用該等結果來更新目的地向量。
在一實施例中,處理器之功能單元(例如)可包括一控制器及一保持單元(諸如,儲存單元)。該控制器可回應於向量指令所取決之一或多個運算元可供使用的判定來起始該向量指令之執行。該保持單元可經組態以臨時儲存向量指令之結果。回應於在起始向量指令之後即接收到該向量指令所取決之述詞向量尚未可供使用的判定,控制器可將向量指令之結果臨時儲存於保持單元內,使得該等結果不可用於取決於向量指令之一或多個運算。控制器亦可回應於接收到述詞向量可供使用的判定來更新取決於述詞向量的向量指令之臨時儲存之結果,且將經更新之結果儲存於目的地暫存器中,該目的地暫存器可用於取決於向量指令之一或多個運算。
在一特定實施中,控制器可回應於在起始向量之後即接收到述詞向量尚未可供使用的判定來抑制在向量指令之執行期間所引起的任何錯誤。另外,控制器可在接收到述詞向量可供使用之判定後且回應於在執行向量指令期間引起一或多個錯誤之判定來重新起始向量指令。
100‧‧‧電腦系統
102‧‧‧處理器
104‧‧‧層1(L1)快取記憶體
106‧‧‧層2(L2)快取記憶體
108‧‧‧記憶體
110‧‧‧大容量儲存裝置
201‧‧‧指令提取單元
202‧‧‧整數執行單元
204‧‧‧向量執行單元
206‧‧‧浮點執行單元
701‧‧‧功能單元
703‧‧‧控制器
705‧‧‧資料路徑單元
707‧‧‧保持單元
圖1為電腦系統之一實施例之方塊圖。
圖2為說明圖1中所示之處理器之實施例的額外細節之方塊圖。
圖3為說明程式碼迴圈之一實例並行化之圖。
圖4A為說明在實例1中所示之迴圈之純量執行期間的一連串可變狀態之圖。
圖4B為說明實例1之迴圈之巨集純量(Macroscalar)向量化程式碼
的執行進展之圖。
圖5A及圖5B為說明原始程式碼之向量化之一實施例之圖。
圖6A為說明非推測式向量化程式碼之一實施例之圖。
圖6B為說明推測式向量化程式碼之另一實施例之圖。
圖7為執行推測式述詞向量運算的功能單元之一實施例之方塊圖。
圖8為描繪圖2之處理器及圖7之功能單元的一實施例之操作之流程圖。
特定實施例在圖式中藉由實例展示且將在本文中予以詳細描述。然而,應理解,圖式及「實施方式」並不意欲將申請專利範圍限於所揭示之特定實施例,甚至在關於特定特徵描述僅單一實施例之狀況下亦為如此。相反,意欲涵蓋將對受益於本發明的熟習此項技術者顯而易見之所有修改、等效物及替代。除非另外陳述,否則本發明中所提供之特徵之實例意欲為說明性的而非為限制性的。
如遍及本申請案所使用,詞「可」以許可之意義(亦即,意謂具有......之可能性)而非強制性之意義(亦即,意謂必須)來使用。類似地,詞「包括」意謂包括(但不限於)。
各種單元、電路或其他組件可描述為「經組態以」執行一或多項任務。在此等上下文中,「經組態以」為寬泛的結構詳述,其大體意謂「具有」在操作期間執行該或該等任務之「電路」。因而,單元/電路/組件可經組態以甚至在單元/電路/組件當前未接通時仍執行任務。一般而言,形成對應於「經組態以」之結構的電路可包括硬體電路。類似地,為了描述之方便起見,各種單元/電路/組件可描述為執行一或多項任務。此等描述應解釋為包括片語「經組態以」。陳述經組態以執行一或多項任務之單元/電路/組件明確地意欲不援引35 U.S.C.§ 112第六段之對彼單元/電路/組件之解釋。
本發明之範疇包括本文中所揭示之特徵中的任一特徵或組合(明顯地或隱含地),或其任何一般化,而不管其是否減輕本文中所解決之問題中之任一者或全部。因此,可在向任何此特徵組合貫徹本申請案(或向其主張優先權之申請案)期間闡明新的申請專利範圍。詳言之,參考隨附申請專利範圍,來自附屬項之特徵可與獨立項之特徵組合,且來自各別獨立項之特徵可以任何適當之方式組合而非僅僅以隨附申請專利範圍中所列舉之特定組合的形式。
現轉至圖1,展示電腦系統之一實施例之方塊圖。電腦系統100包括一處理器102、一層2(L2)快取記憶體106、一記憶體108及一大容量儲存裝置110。如所示,處理器102包括層1(L1)快取記憶體104。應注意,雖然在電腦系統100中展示及描述特定組件,但在替代性實施例中,不同組件及不同數目個組件可存在於電腦系統100中。舉例而言,電腦系統100可不包括記憶體階層中之一些(例如,記憶體108及/或大容量儲存裝置110)。替代地,雖然L2快取記憶體106展示為在處理器102外部,但預料到在其他實施例中,L2快取記憶體106可在處理器102內部。應進一步注意,在此等實施例中,可使用層3(L3)快取記憶體(未圖示)。另外,電腦系統100可包括圖形處理器、視訊卡、視訊俘獲裝置、使用者介面裝置、網路卡、光碟機,及/或使用匯流排、網路或另一合適之通信頻道(為了簡單而皆未展示)而耦接至處理器102的其他周邊裝置。
在各種實施例中,處理器102可表示執行計算運算之通用處理器。舉例而言,處理器102可為中央處理單元(CPU),諸如,微處理器、微控制器、特殊應用積體電路(ASIC)或場可程式化閘陣列(FPGA)。然而,如下文進一步描述,處理器102可包括用於向量處理
之一或多個機制(例如,向量執行單元)。下文結合圖2之描述來更詳細地描述處理器102之一實例向量執行單元。
大容量儲存裝置110、記憶體108、L2快取記憶體106及L1快取記憶體104為共同地形成儲存用於處理器102之資料及指令之記憶體階層的儲存裝置。更特定言之,大容量儲存裝置110可為高容量、非發揮性記憶體,諸如,具有長存取時間之磁碟機或大型快閃記憶體單元,而L1快取記憶體104、L2快取記憶體106及記憶體108可較小,具有較短存取時間。此等較快速之半導體記憶體儲存頻繁使用之資料的複本。記憶體108可表示在記憶體裝置之動態隨機存取記憶體(DRAM)族中的記憶體裝置。記憶體108之大小通常大於L1快取記憶體104及L2快取記憶體106,而L1快取記憶體104及L2快取記憶體106通常係使用在裝置之靜態隨機存取記憶體(SRAM)族中的較小裝置來實施。在一些實施例中,L2快取記憶體106、記憶體108及大容量儲存裝置110在電腦系統100中之一或多個處理器之間共用。
在一些實施例中,記憶體階層中之裝置(亦即,L1快取記憶體104等)可每週期(cycle)存取(亦即,讀取及/或寫入)多個快取行。此等實施例可實現對基於至非相鄰記憶體位址之指標或陣列索引之向量而發生的記憶體存取之較有效處理。
應注意,下文所描述之資料結構及程式指令(亦即,程式碼)可儲存於非暫時性電腦可讀儲存裝置上,該非暫時性電腦可讀儲存裝置可為可儲存用於由電腦系統(例如,電腦系統100)使用之程式碼及/或資料的任何裝置或儲存媒體。一般而言,非暫時性電腦可讀儲存裝置包括(但不限於)揮發性記憶體、非揮發性記憶體、磁性及光學儲存裝置(諸如,磁碟機、磁帶、光碟(CD)、數位多功能光碟或數位視訊光碟(DVD))或現在已知或日後開發之能夠儲存電腦可讀指令的其他媒體。因而,大容量儲存裝置110、記憶體108、L2快取記憶體106及L1
快取記憶體104皆為非暫時性電腦可讀儲存裝置之實例。
參看圖2,展示說明圖1之處理器之實施例的額外細節之方塊圖。在圖2中所示之實施例中,處理器102可包括許多管線級,但出於簡潔性,未在圖2中展示所有管線級。因此,如所示,處理器102包括L1快取記憶體104、一指令提取單元201、一整數執行單元202、一浮點執行單元206及一向量執行單元204。應注意,整數執行單元202、浮點執行單元206及向量執行單元204可各自互換地稱作「功能單元」。
在各種實施例中,該等執行單元可(例如)針對相關聯之類型的運算元來執行諸如邏輯運算、數學運算或逐位元運算之計算運算。更具體言之,整數執行單元202可執行涉及整數運算元之計算運算,浮點執行單元206可執行涉及浮點運算元之計算運算,且向量執行單元204可執行涉及向量運算元之計算運算。整數執行單元及浮點執行單元通常在此項技術中係已知的,且出於簡潔性將不進一步加以描述。如上文所指出,雖然圖2中所示之處理器102之實施例包括一組特定組件,但預料到在替代性實施例中,處理器102可包括不同數目個或不同類型之執行單元、功能單元及管線級,諸如,可耦接至執行單元之指令解碼單元、排程器或保留站、重排序緩衝器、記憶體管理單元、I/O介面等。
在經典意義上,向量執行單元204可表示單指令多資料(SIMD)執行單元,因為其可對多個資料元素並行地執行相同運算。然而,應注意,在一些實施例中,此處所描述之向量指令可不同於SIMD指令之其他實施。舉例而言,在一實施例中,藉由向量指令所運算的向量之元素可具有不隨該向量中的元素之數目而變化之大小。相比之下,在一些SIMD實施中,資料元素大小確實隨所運算的資料元素之數目而
變化(例如,SIMD架構可支援對八個8位元元素但僅四個16位元元素、兩個32位元元素等之運算)。在一實施例中,向量執行單元204可對運算元之向量中所包括的一些或所有資料元素運算。更特定言之,向量執行單元204可經組態以同時對向量程式指令之向量運算元的不同元素運算。
在一實施例中,向量執行單元204可包括一向量暫存器檔案(未圖示),該向量暫存器檔案可包括可保持用於向量執行單元204之運算元向量及結果向量的向量暫存器。在一些實施例中,在向量暫存器檔案中可存在32個向量暫存器,且每一向量暫存器可包括128個位元。然而,在替代性實施例中,可存在不同數目個向量暫存器及/或每暫存器不同數目個位元。
向量執行單元204可經組態以自向量暫存器擷取運算元及執行使向量執行單元204對運算元向量中之一些或所有資料元素並行執行運算的向量指令。舉例而言,向量執行單元204可對向量中之元素執行邏輯運算、數學運算或逐位元運算。向量執行單元204可每指令週期(instruction cycle)執行一個向量運算(但如上文所描述,「週期」可包括可用以觸發、同步及/或控制向量執行單元204之計算運算的一個以上之時脈週期(clock cycle))。
在一實施例中,向量執行單元204可支援保持N個資料元素(例如,位元組、字組、雙字組等)之向量,其中N可為任一正整數。在此等實施例中,向量執行單元204可對運算元向量中之N個或N個以下之資料元素並行地執行運算。舉例而言,在向量之長度為256個位元的實施例中,正被運算之資料元素為四位元組元素,且運算為將值加至該等資料元素,此等實施例可將該值加至向量中之任何數目個元素。應注意,對於處理器102之不同實施而言,N可不同。
在各種實施例中,向量執行單元204可包括至少一控制信號,該
至少一個控制信號實現對向量執行單元204所運算的運算元向量中之資料元素之動態限制。具體言之,取決於控制信號之狀態,向量執行單元204可選擇性地對向量中的資料元素中之任一者或全部運算。舉例而言,在向量之長度為512個位元且正被運算之資料元素為四位元組元素的實施例中,可確證控制信號以防止對運算元向量中的16個資料元素中之一些或所有執行運算。應注意,「動態地」限制被執行運算之運算元向量中的資料元素可涉及在執行階段針對每一週期來獨立地確證控制信號。
在一些實施例中,如下文更詳細地描述,基於述詞之向量或一或多個純量述詞中所含有之值,向量執行單元204將向量運算僅應用於選定向量資料元素。在一些實施例中,結果向量中之剩餘資料元素保持未受影響(其亦可被稱作「論斷」)或迫使為零(其亦可被稱作「調零」或「調零論斷」)。在一些實施例中,歸因於向量執行單元204中之論斷或調零而未用之資料元素處理子系統(「通道」)的時脈可經功率及/或時脈閘控,藉此減少向量執行單元204中之動態功率消耗。
在各種實施例中,架構可為向量長度不可知,以允許其在執行階段調適並行性。更特定言之,當指令或運算為向量長度不可知時,可使用任何長度(直至由支援硬體強加之限制)之向量來執行運算(亦即,指令等)。舉例而言,在向量執行硬體支援可包括八個獨立之四位元組元素(因此具有八個元素之向量長度)之向量的實施例中,向量長度不可知運算可對向量中之八個元素中的任何數目個元素運算。關於支援一不同向量長度(例如,四個元素)之不同硬體實施,向量長度不可知運算可對由基礎硬體而使得可用於其之不同數目個元素運算。因此,編譯器或程式設計器無需明確知曉由基礎硬體(例如,向量執行單元204)支援之向量長度。在此等實施例中,編譯器產生或程式設計器寫入無需依賴(或使用)特定向量長度之程式碼。在一些實施例
中,可嚴禁指定程式碼中之特定向量大小。因此,此等實施例中之經編譯程式碼(亦即,二進位碼)在可具有不同之向量長度的其他執行單元上執行,同時潛在地實現來自支援較長向量之處理器的效能增益。在此等實施例中,可在執行階段期間自系統暫存器讀取用於一給定硬體單元(諸如,處理器)的向量長度。因此,當過程技術允許較長向量時,舊版二進位碼之執行簡直可在軟體開發商不做任何努力的情況下加速。
通常,可將向量長度實施為2之冪(例如,2、4、8等)。然而,在一些實施例中,向量長度無需為2之冪。具體言之,可以與具有2之冪之數目個資料元素的向量相同的方式來使用具有三個、七個或另一數目個資料元素的向量。
在各種實施例中,向量中之每一資料元素可含有由向量執行單元204用於並行執行一組記憶體存取的位址。在此等實施例中,若向量之一或多個元素含有無效記憶體位址,則可發生無效記憶體讀取操作。因此,將另外導致程式終止之無效記憶體讀取操作可引起讀取具有有效位址之任何元素且用旗標標出具有無效位址之元素,從而允許程式執行在面對推測式且事後非法之讀取操作時繼續。
在一些實施例中,處理器102(及因此向量執行單元204)能夠對指標之向量運算並使用指標之向量。在此等實施例中,每向量之資料元素數目與每向量之指標數目相同,而不管資料類型之大小。對記憶體操作之指令可具有指示記憶體存取之大小的變體,但處理器暫存器中之元素應與指標大小相同。在此等實施例中,支援32位元定址模式與64位元定址模式兩者之處理器可選擇在32位元模式中允許每向量兩倍之多的元素,藉此達成較大之輸送量。在假定相同寬度之資料路徑的情況下,此向32位元定址暗示截然不同之輸送量優勢。可使用實施特定技術來放鬆要求。舉例而言,可在32位元模式中經由暫存器配對或
某一其他專用機制來支援雙精度浮點數。
在各種實施例中,整數執行單元202、浮點執行單元206及向量執行單元204中之每一者可經組態以推測式地執行指令,甚至當該等指令得到述詞時。更特定言之,如上文所提到,在許多習知處理器中,述詞指令必須通常在發出供執行之指令之前等待述詞變得可用。然而,由於一些指令具有比其他指令長的延時,因此儘可能快地發出並執行彼等較長延時指令可為有益之舉。因此,如下文結合圖7及圖8之描述更詳細地描述,描述了各種指令之各別輸入參數一旦可用(即使其所取決之述詞尚未可用)便可執行該等指令的實施例。在此等實施例中,可臨時保持執行結果,直至述詞準備就緒。然而,在論述此等實施例之細節之前,以下為巨集純量架構之論述,其包括關於述詞及述詞產生之論述。
指令集架構(被稱作巨集純量架構)及支援硬體可允許編譯器產生用於迴圈之程式碼而不必在編譯時間完全判定並行性且不拋棄有用之靜態分析資訊。現將描述巨集純量架構之各種實施例。具體言之,如下文予以進一步描述,提供一組指令,該組指令不命令迴圈之並行性,而是改為使得能夠在動態條件准許的情況下在執行階段採用並行性。因此,該架構包括使由編譯器產生之程式碼能夠取決於在執行階段之條件藉由切換所使用之並行性的量而在迴圈反覆運算之非並行(純量)執行與並行(向量)執行之間動態地切換的指令。
因此,該架構提供實現迴圈反覆運算之向量並行性之未判定量但不要求在執行階段使用並行性的指令。更具體言之,該架構包括一組向量長度不可知指令,其有效向量長度可取決於執行階段條件而變化。因此,若執行階段相依性需要程式碼之非並行執行,則藉由一元素之有效向量長度發生執行。同樣地,若執行階段條件准許並行執
行,則相同程式碼以向量並行方式執行達到由執行階段相依性(及基礎硬體之向量長度)允許之無論何程度。舉例而言,若向量之八個元素當中的兩個元素可安全地並行執行,則處理器(諸如,處理器102)可並行執行該兩個元素。在此等實施例中,以向量長度不可知格式來表達程式碼實現現有系統中不存在之向量化機會的寬範圍。
在各種實施例中,在編譯期間,編譯器首先分析程式碼中之給定迴圈的迴圈結構且執行靜態相依性分析。編譯器接著產生保持靜態分析資訊之程式碼且指示諸如處理器102之處理器(例如)如何解決執行階段相依性且以可能之最大量之並行性來處理程式碼。更具體言之,編譯器可提供用於並行執行對應的若干組迴圈反覆運算之向量指令,且可提供用於動態地限制該等向量指令之執行以防止迴圈反覆運算之間的資料相依性引起錯誤的向量控制指令。此方法將對並行性之判定交由執行階段決定,其中關於執行階段相依性之資訊係可用的,藉此允許軟體及處理器使並行性適應動態改變之條件。圖3中展示程式碼迴圈並行化之一實例。
參看圖3之左側,展示具有尚未被並行化之四個迴圈反覆運算(例如,反覆運算1-4)的執行型樣,其中每一反覆運算(iteration)包括指令A-G。展示串行操作,其中指令被垂直地堆疊。在圖3之右側的為已經並行化的迴圈之型式。在此實例中,反覆運算內之每一指令取決位於其前面之至少一個指令,使得在一給定反覆運算之指令之間存在靜態相依性鏈。因此,一給定反覆運算內之指令不能被並行化(亦即,一給定反覆運算內之指令A-G始終相對於該反覆運算中之其他指令而被串行地執行)。然而,在替代性實施例中,一給定反覆運算內之指令可為可並行化的。
如由圖3中之迴圈之反覆運算之間的箭頭展示,在一給定反覆運算中之指令E與後續反覆運算之指令D之間存在執行階段資料相依性
的可能性。然而,在編譯期間,編譯器可僅判定在此等指令之間存在資料相依性的可能性,但編譯器不能告知相依性將實際上在哪些反覆運算中實現,此係因為此資訊僅在執行階段可用。在此實例中,實際上在執行階段實現的資料相依性係藉由自1E至2D及自3E至4D之實箭頭來展示,而不在執行階段實現的資料相依性係使用自2E至3D之虛箭頭來展示。因此,如所示,執行階段資料相依性實際上發生於第一/第二反覆運算與第三/第四反覆運算之間。
由於第二反覆運算與第三反覆運算之間不存在資料相依性,所以可安全地並行處理第二反覆運算及第三反覆運算。此外,一給定反覆運算之指令A-C及F-G具有僅在反覆運算內之相依性,且因此一給定反覆運算之指令A能夠與所有其他反覆運算之指令A並行地執行,指令B亦可與所有其他反覆運算之指令B並行地執行,等等。然而,因為第二反覆運算中之指令D取決第一反覆運算中之指令E,所以必須在可執行第二反覆運算之指令D之前執行第一反覆運算中之指令D及E。
因此,在右側之並行化迴圈中,此迴圈之反覆運算經執行以適應靜態及執行階段資料相依性兩者,同時達成最大並行性。更特定言之,所有四個反覆運算之指令A-C及F-G並行地執行。但由於第二反覆運算中之指令D取決於第一反覆運算中之指令E,因此必須在可執行第二反覆運算之指令D之前執行第一反覆運算中之指令D及E。然而,由於第二反覆運算與第三反覆運算之間不存在資料相依性,因此可並行執行此等反覆運算之指令D及E。
以下實例介紹巨集純量操作且論證其在將迴圈(諸如,展示於圖3中且上文描述於經並行化之迴圈實例中的迴圈)向量化中的使用。為了易於理解,使用呈C++格式之偽碼來呈現此等實例。
應注意,以下實例實施例係為了論述目的。實際指令及操作僅僅意欲輔助理解架構。然而,在替代性實施例中,可以不同之方式(例如,使用較原始操作之微碼序列或使用子操作之不同序列)來實施指令或操作。應注意,避免了指令之進一步分解,使得關於巨集運算及對應的用法模型之資訊未被混淆。
在描述以下實例過程中,將以下格式用於變數,除非另有指出,否則該等變數為向量:p5=a<b; 向量p5之元素取決於測試a<b之結果而被設定至0或1。應注意,向量p5可為「述詞向量」,如下文更詳細地描述。產生述詞向量之一些指令亦設定處理器狀態旗標以反映所得述詞。舉例而言,處理器狀態旗標或條件碼可包括FIRST、LAST、NONE及/或ALL旗標。
~
p5;a=b+c; 僅向量「a」中之由述詞向量p5中之有效(亦即,非零)元素所指定的元素接收b+c的結果。a之剩餘元素未變。此操作被稱為「論斷」且在述詞向量前使用波狀符號(「~
」)符號來表示。
!p5;a=b+c; 僅向量「a」中之由述詞向量p5中之有效(亦即,非零)元素所指定的元素接收b+c的結果。a之剩餘元素被設定至零。此操作被稱為「調零」且在述詞向量前使用驚嘆號(「!」)符號來表示。
if(FIRST())goto...;//Also LAST(),ANY(),ALL(),CARRY( ),ABOVE( ),or NONE( ),(where ANY( )==!NONE( ))
以下指令因此測試處理器狀態旗標及分支。
x+=VECLEN; VECLEN為傳達每向量之元素數目的機器值。該值係在執行階段
藉由處理器執行程式碼來判定而非藉由組譯器來判定。
//Comment
以與許多普通程式設計語言類似的方式,以下實例使用雙正斜線來指示註釋。此等註釋可提供關於在對應的實例中正執行之操作之所指示向量或註解中含有之值的資訊。
在此等實例中,其他經C++格式化之算子保留其習知意義,但係在逐元素的基礎上跨越向量來應用。在使用函數調用的情況下,其暗示將返回之任一值置放至目的地暫存器中的單一指令。為了理解方面之簡單性,所有向量為整數之向量,但替代性實施例支援其他資料格式。
在下文之程式碼實例1中,展示使用習知向量架構之為「不可向量化」的程式碼迴圈。(應注意,除為不可向量化之外,此迴圈亦歸因於資料相依性之細粒度性質而在習知多執行緒處理架構上不為可多執行緒處理的。)出於清晰性,此迴圈已經提煉至使迴圈不可向量化的基礎迴圈承載相依性。
在此實例中,變數r及s具有防止使用習知架構達成向量化的迴圈承載相依性。然而,應注意到,只要已知條件(A[x]<FACTOR)為始終真或始終假,迴圈便可向量化。當允許該條件在執行期間變化時(常見狀況),此等假定改變。在此實例中出於簡單性,吾人假設在A[ ]與B[ ]之間不存在混疊。
使用巨集純量架構,可藉由將向量分割為條件(A[x]<FACTOR)不改變之區段來將實例1中之迴圈向量化。下文呈現用於分割此等向量的過程之實例以及實現該分割的指令之實例。應注意,對於此實例而言,僅需將所描述之分割應用於條件子句內之指令。惟潛在地在最後迴圈反覆運算上除外,對A[x]之第一次讀取及最後之運算B[x]=r+s可始終跨一完整向量並行地執行。
展示及描述向量化程式碼之指令及實例以結合巨集純量架構來解釋向量處理器(諸如圖2之處理器102)之操作。以下描述通常經組織使得描述許多指令且接著呈現使用該等指令之一或多個向量化程式碼樣本。在一些狀況下,在一給定實例中探究一特定類型之向量化問題。
dest=VectorReadInt(Base,Offset)
VectorReadInt為用於執行記憶體讀取操作之一指令。藉由資料大小(在此狀況下為整數)來定標的偏移之向量Offset經加至純量基址Base,以形成記憶體位址之向量,該等記憶體位址接著被讀入至目的地向量中。若指令經論斷或調零,則僅讀取對應於有效元素之位址。在所描述之實施例中,允許至無效位址之讀取發生錯誤,但此等錯誤僅在第一有效位址係無效的情況下導致程式終止。
VectorWriteInt(Base,Offset,Value)
VectorWriteInt為用於執行記憶體寫入操作之一指令。藉由資料大小(在此狀況下為整數)來定標的偏移之向量Offset經加至純量基址
Base,以形成記憶體位址之向量。將值之向量Value寫入至此等記憶體位址。若此指令經論斷或經調零,則僅將資料寫入至有效位址。在所描述之實施例中,至非法位址之寫入始終產生錯誤。
dest=VectorIndex(Start,Increment)
VectorIndex為用於產生按自Start所指定之純量開始值之增量單調地調整的值之向量之一指令。當索引調整恆定時,可將此指令用於起始迴圈索引變數。當應用論斷或調零時,第一有效元素接收開始值,且僅將增量應用於後續有效元素。舉例而言:
PropagatePostT指令將src中的有效元素之值(如藉由pred所判定)傳播至dest之後續無效元素。有效元素及先於第一有效元素之任何無效元素在dest中保持不變。此指令之目的為取得經條件計算之值,且將該經條件計算之值傳播至後續迴圈反覆運算,如在等效純量碼中所發生。舉例而言:
PropagatePriorF指令將src之無效元素之值(如藉由pred所判定)傳播至dest中之後續有效元素。無效元素經自src複製至dest。若述詞之第一元素係有效的,則src之最後元素被傳播至彼位置。舉例而言:dest=ConditionalStop(pred,deps)
ConditionalStop指令評估述詞之向量pred,且識別鄰近之述詞元素之間的轉變,該等轉變暗示如由deps所指定之資料相依性。可將純量值deps看作四個位元之陣列,該等位元中之每一者指定pred中之真/假元素之間的可能轉變(如自左至右處理)。此等位元傳達所指示之相依性的存在(若經設定),及保證相依性之不存在(若未設定)。該等位元為:kTF--暗示自述詞為真之反覆運算至述詞之值為假之後續反覆運算的迴圈承載相依性。
kFF--暗示自述詞為假之反覆運算至述詞之值為假之後續反覆運算的迴圈承載相依性。
kFT--暗示自述詞為假之反覆運算至述詞之值為真之後續反覆運算的迴圈承載相依性。
kTT--暗示自述詞為真之反覆運算至述詞之值為真之後續反覆運算的迴圈承載相依性。
對應於產生所取決之資料之反覆運算的元素位置儲存於目的地向量中對應於取決於該資料之反覆運算的元素位置處。若不存在資料相依性,則將0之值儲存於目的地向量中彼元素處。所得相依性索引向量或DIV含有表示相依性的元素位置索引之向量。出於下文所描述之原因,向量之第一元素為元素編號1(而非0)。
作為一實例,考慮在以上實例1之迴圈中的相依性。在此迴圈中,條件子句之真反覆運算與假反覆運算之間的轉變表示需要並行性之破壞的迴圈承載相依性。此可使用以下指令來處置:
由於第4反覆運算產生所需之資料且第5反覆運算取決於其,所
以4被儲存於輸出向量p2(其為DIV)之位置5中。相同情況適用於第7反覆運算,該第7反覆運算取決於來自第6反覆運算之資料。DIV之其他元素被設定至0以指示相依性之缺乏。(應注意,在此實例中,向量之第一元素為元素編號1。)
dest=GeneratePredicates(Pred,DIV)
GeneratePredicates取得相依性索引向量DIV且產生述詞,該等述詞對應於在給定所處理之先前群組的情況下可安全地並行處理之下一群元素(由pred指示)。若pred中無元素有效,則針對可安全地並行處理之第一群元素來產生述詞。若Pred指示向量之最後元素已處理,則指令產生指示無元素應加以處理之無效述詞之結果向量且設定ZF旗標。設定CF旗標以指示結果之最後元素有效。使用第一實例中之值,GeneratePredicates如下操作:
自皆為零之初始化述詞p2,GeneratePredicates產生p2之新例項,該等新例項將後續向量計算分割為三個子向量(亦即,p'、p"及p''')。此使硬體能夠處理在避免違反迴圈之資料相依性之群組中的向量。
在圖4A中,展示說明在實例1中之迴圈之純量執行期間的一連串可變狀態之圖。更特定言之,使用條件表達式之方向的隨機化50/50分佈,展示實例1之迴圈之可變狀態之進展。在圖4B中,展示說明實例1之迴圈之巨集純量向量化程式碼之執行進展之圖。在圖4A及圖4B中,自A[ ]讀取之值係使用向左傾斜雜湊標記來展示,而被寫入至
B[ ]之值係使用向右傾斜雜湊標記來展示,且「r」或「s」之值(取決於在一給定反覆運算中哪一者被改變)係使用陰影背景來展示。觀測到當「s」改變時「r」從未改變,且反之亦然。
沒有什麼能防止所有值自A[ ]並行讀取或並行寫入至B[ ],此係因為兩組值都不參與迴圈承載相依性鏈。然而,為計算r及s,可僅在條件表達式之值保持相同(亦即,真或假之執行)時並行處理元素。圖4B中展示用於針對此迴圈執行程式碼之此型樣。應注意,實例使用具有長度為八個位元之向量。當處理第一向量指令時,單獨地執行第一反覆運算(亦即,向量執行單元204僅處理第一向量元素),而反覆運算1-5由向量執行單元204並行處理,且接著反覆運算6-7由向量執行單元204並行處理。
參看圖5A及圖5B,展示說明程式碼之向量化之一實施例之圖。圖5A描繪原始程式碼,而圖5B說明表示可使用巨集純量架構執行之操作的向量化程式碼。在圖5B之向量化程式碼中,迴圈1為自原始程式碼之迴圈,而迴圈2為處理子向量分割區之向量分割迴圈。
在實例中,陣列A[ ]經在全長向量(亦即,對於N個元素之向量而言,一次讀取陣列A[ ]之N個位置)中讀取及比較。向量i2為控制向量之分割的DIV。分割係藉由針對假與真之間的轉變來監控述詞p1而判定的,該等轉變指示應觀測到的迴圈承載相依性。述詞向量p2判定將在任何時間作用於哪些元素。在此特定迴圈中,p1在任一子向量分割區之所有元素中具有相同值;因此,僅需要檢查分割區之第一元素以判定將更新哪一變數。
在更新了變數「s」之後,PropagatePostT指令將有效分割區中之最後值傳播至向量中之後續元素。在迴圈之頂部,為下一遍次作準備,PropagatePriorF指令自跨向量之所有元素的最後向量位置複製「s」之最後值。應注意,變數「r」係使用一不同方法來傳播的,該
方法說明在某些狀況下使用PropagatePriorF指令之效率。
在先前實例中,可判定在向量分割迴圈開始之前的向量分割區,此係因為控制流決定獨立於迴圈承載相依性。然而,情況並非始終如此。考慮實例2A及實例2B中所示之以下兩個迴圈:
在實例2A中,控制流決定係獨立於迴圈承載相依性鏈,而在實例2B中,控制流決定為迴圈承載相依性鏈之部分。在一些實施例中,實例2B中之迴圈可引起「j」之值將保持不變的推測,且在此預測證明為不正確的情況下稍後補償。在此等實施例中,關於「j」之值的推測並未顯著改變迴圈之向量化。
在一些實施例中,編譯器可經組態以始終預測迴圈之反覆運算之間無資料相依性。在此等實施例中,在存在執行階段資料相依性之狀況下,可減少並行處理之一群有效元素以表示彼時可安全地並行處
理之一群元素。在此等實施例中,幾乎不存在對錯誤預測比實際存在之並行性多的並行性之懲罰,此係因為實際上未損失並行性(亦即,若有必要,可以非並行之方式一次一個元素地處理反覆運算)。在此等實施例中,並行性之實際量完全在稍後階段認識到。
dest=VectorReadIntFF(Base,Offset,pf)
VectorReadIntFF為VectorReadInt之第一錯誤變體。若至少第一有效元素為有效位址,則此指令不產生錯誤。對應於無效位址之結果被迫為零,且返回旗標pf,該等旗標pf可用以向使用此資料之稍後指令掩蔽述詞。若位址之第一有效位元未映射,則此指令發生錯誤以允許電腦系統100(未圖示)中之虛擬記憶體系統填充一對應的頁面,藉此確保處理器102可繼續向前進展。
dest=Remaining(Pred)
Remaining指令評估述詞之向量Pred,且計算向量中之剩餘元素。此對應於在最後之有效述詞後面的一組無效述詞。若Pred中不存在有效元素,則返回所有有效述詞之向量。同樣地,若Pred為所有有效述詞之向量,則返回無效述詞之向量。舉例而言:
圖6A及圖6B為說明實例向量化程式碼之實施例之圖。更特定言之,圖6A中所示之程式碼樣本為實例2A中之程式碼的向量化型式(如上文所呈現)。圖6B中所示之程式碼樣本為實例2B中之程式碼的向量化型式。參看圖6B,對A[ ]之讀取及後續之比較已被移至向量分割迴圈內部。因此,此等操作假設(推測)「j」之值並未改變。僅在使用「j」之後有可能判定在哪裡「j」可改變值。在更新了「j」之後,必要時重新計算剩餘向量元素以反覆運算穿過整個向量。在推測式程式碼樣本中Remaining指令的使用允許程式在程式可判定實際上安全處
理(亦即,不具有未解決之資料相依性)的此等元素之子群之前來判定哪些元素在向量分割迴圈中保持被處理。
在各種實施例中,提供容錯讀取支援。因此,在此等實施例中,處理器102可使用來自向量指令(例如,VectorReadFF)之無效元素的位址來推測式地自記憶體讀取資料以試圖載入將在稍後用於計算中之值。然而,在發現已發生無效讀取之後,此等值便最終被拋棄且因此與正確之程式行為關係不大。因為此等讀取可參考不存在或受保護之記憶體,所以此等實施例可經組態以在存在自記憶體錯誤地讀取之無效但不相關之資料的情況下繼續正常執行。(應注意,在支援虛擬記憶體之實施例中,此可具有直至確定需要分頁才如此做的額外益處)。
在圖6A及圖6B中所示之程式迴圈中,在條件為真的反覆運算與後續反覆運算之間存在迴圈承載相依性,而不管稍後反覆運算之述詞值。此反映於ConditionalStop指令之參數中。
圖6A及圖6B中之樣本程式碼突出非推測式向量分割與推測式向量分割之間的差異。更特定言之,在實例2A中,在ConditionalStop之前讀取記憶體且計算述詞。分割迴圈始於ConditionalStop指令之後。然而,在實例2B中,ConditionalStop指令係在分割迴圈內部執行,且用以辨識致使較早操作無效的相依性。在兩種狀況下,GeneratePredicates指令計算控制哪些元素被用於分割迴圈之剩餘部分的述詞。
如上文所描述,可能需要儘可能快地發出及執行(例如)可對處理器效能重要的指令及操作(諸如,記憶體讀取操作)。因此,無序執行處理器可先行搜集指令,且記憶體位址一經計算,便可執行記憶體讀取操作。然而,當述詞可影響效能之指令或操作時,可引起一問題,
且當該指令或操作將另外準備執行時,述詞向量未準備好使用。出現此情況係因為可或不可使用述詞向量指令之結果。因此,可能需要保持推測式述詞指令執行之結果,直至述詞向量可用。另外,在一些實施例中亦可將錯誤處置延期,直至述詞向量可用於判定哪些元素位置能夠產生實際錯誤。
為藉由實例說明,實例3中展示一程式碼段,且實例4中展示其向量化對等程式碼段。實例3中所示之程式碼段包括if-else陳述式。作為「if」條件為真之結果而執行之操作與作為「if」條件為假之結果而執行之操作互斥。
在實例3中,評估陳述式A[x]<K,且針對<K之A[x]的每一元素,執行運算D+=B[x]。替代地,針對>=K之A[x]的每一元素,執行運算D+=C[x]。
下文在實例4中展示一實例程式碼段,該程式碼段說明實例3之程式碼段之向量化。
在實例4之程式碼段中,為實施經由實例3之程式碼段中的if-else陳述式所實施之互斥性,已在實例4之程式碼段中補充p1向量,使得用以論斷陳述式t2=C[x]之p1向量具有用以論斷陳述式t2=B[x]之p1向量的相反邏輯意義。因此,此等兩個陳述式之間的由if-else陳述式所需之互斥性由p1向量提供於實例4中。陳述式p1=(t1<K)對應於產生p1述詞向量之述詞產生指令。類似地,陳述式p1=NOT(p1)亦可對應於一述詞產生指令。更特定言之,向量p1之元素取決於測試t1<K之結果及p1之補充而分別被設定至0或1。另外,由於讀取B[x]及C[x]兩者(例如,t2=B[x]及t2=C[x])之指令由p1向量論斷,因此其必須等待產生述詞p1以避免自未由實例3中所示之純量程式碼段參考的潛在非法位址進行讀取。
雖然以上之程式碼實例將讀取操作用作說明性實例,但更通常地,執行述詞指令之任何功能單元可經組態以在輸入參數(例如,運算元、讀取位址)一可用便發出供執行之述詞指令,且可保持執行結果直至述詞可供使用。因此,在圖7中,展示可執行推測式述詞向量運算的功能單元之一實施例之方塊圖,且在圖8中展示描述圖7之功能單元的一實施例之操作之流程圖。
轉至圖7,功能單元701包括一控制器703,其耦接至保持單元707及資料路徑單元705。應注意,在各種實施例中,功能單元701可表示圖2之處理器102之執行單元中的任一者(例如,整數執行單元202、浮點執行單元206或向量執行單元204)。
在一實施例中,控制器703可經組態以接收指令及/或操作且將其投送至資料路徑單元705供處理,藉此起始彼等指令之執行。另外,控制器703可經組態以回應於指令輸入參數(例如,運算元、位址等)
可用的判定來起始指令之執行。在一實施例中,可在控制器703內部進行判定,且在另一實施例中,可在控制器703外部進行判定並由控制器703來接收該判定。
更特定言之,可使用多種技術(諸如,保留站、排程器及類似者)來實施相依性及排程。因而,在一實施例中,控制器713可自指令源接收指令,該指令源留意相依性且判定指令何時準備好執行。在一實施例中,指令源可發出輸入參數可用之指令。在此實施例中,控制器703可接收輸入參數可用之判定。在另一實施例中,指令源可向控制器703發出相依性未必已知且因此輸入參數可能不可用的指令。在彼實施例中,控制器703可維持相依性及排程資訊,且可經組態以做出指令輸入參數可用之判定。
除了輸入參數之外,述詞相依性資訊可由指令源抑或由控制器703維持。在指令源維持述詞相依性資訊之實施例中,控制器703可經組態以接收在起始該指令之執行後述詞(一給定指令取決於該述詞)即可用或不可用的判定。在此實施例中,控制器703亦可經組態以接收一旦執行該指令述詞便已變得可用之判定。在另一實施例中,控制器703可經組態以判定在起始指令之執行之後述詞即可用或不可用。在此實施例中,控制器703亦可經組態以判定在已起始或執行指令之後述詞即已變得可用。在一實施例中,控制器703可經組態以將述詞可用或不可用的述詞可用性指示提供至資料路徑單元703及保持單元707。
取決於實施,資料路徑單元705可經組態以提供多種處理能力。舉例而言,在一實施例中,資料路徑單元705可包括用於產生位址以用於載入及儲存指令處理的位址產生邏輯。在另一實施例中,資料路徑單元705可包括用於執行指令之整數及/或浮點算術邏輯,諸如,加法器、乘法器、除法器及類似者。因此,資料路徑單元705可經組態
以回應於自控制器703接收到指令來執行指令及/或操作。
在一實施例中,一旦資料路徑單元自控制器703接收到指令,資料路徑單元705便可執行由該指令指示之操作。舉例而言,對於載入指令而言,資料路徑單元可產生載入位址且起始記憶體階層之讀取。替代地,若指令為(例如)除法指令,則資料路徑單元705可對該指令中之運算元執行除法運算以產生結果。然而,若載入指令為述詞載入,且資料路徑單元705自控制器703接收到述詞不可用之指示,則資料路徑單元705可將自記憶體階層返回之讀取結果儲存於保持單元707中,而非將任何讀取結果返回至請求者。類似地,若除法指令為述詞除法,且資料路徑單元705自控制器703接收到述詞不可用之指示,則資料路徑單元705可將除法結果儲存於保持單元707中,而非在結果匯流排上輸出結果。
在一實施例中,保持單元707可表示多種儲存裝置中之任一者。舉例而言,可使用動態、靜態或其他類型之隨機存取記憶體裝置中之多種記憶體裝置中的任一者來實施保持單元707。在其他實施中,可使用基於暫存器之邏輯來實施保持單元707。另外,雖然圖7中將保持單元707展示為一獨立單元,但預期保持單元707可實施為控制器703、資料路徑單元705之一部分,或按需要分佈於控制器703與資料路徑單元705兩者間。在各種實施例中,如上文所提到,保持單元707可經組態以儲存與指令執行相關聯之執行結果,直至一給定指令所取決之述詞變得可用。因此,如上文所描述,一旦已做出述詞可用於一給定指令之判定,則保持單元707可回應地更新對應於彼述詞指令之有效元素的結果。可經由(例如)結果匯流排將經更新之結果釋放至目的地(例如,目的地暫存器)。另外,在述詞在自記憶體讀取未用元素之前變得可用的情況下,保持單元707可在完成記憶體讀取操作之未用元素之前釋放如由述詞修改之結果。
在被允許於述詞可用之前執行的述詞指令產生一或多個錯誤之情況下,在一實施例中,可使錯誤保持處於暫停使用或受抑制,直至述詞可用。更特定言之,若向量指令之一或多個元素引起錯誤,則彼錯誤可由控制器703追蹤及維持,而非立即解除或處置。在一實施例中,功能單元701可存取儲存器以針對某一數目個指令保持錯誤狀態。該儲存器可為與功能單元701分開之獨立儲存器,或該儲存器可為控制器703、保持單元707或資料路徑單元707之一部分,或按需要分佈於其間。另外,在各種實施例中,可使用多種資料儲存技術中之任一者來實施儲存器,諸如,基於暫存器之儲存器或基於記憶體之儲存器。
在一實施例中,一旦述詞可用且若存在任何錯誤,則可拋棄指令之結果及該等錯誤,且可重放或重新發出該指令。在另一實施例中,一旦重放指令且若產生持久錯誤之元素非有效,則可拋棄該錯誤,或若產生持久錯誤之元素有效,則可解除及處置該錯誤。然而,在又一實施例中,一旦述詞可用且若產生錯誤之元素有效,則可重放指令。否則,可拋棄錯誤且可自保持單元707釋放指令執行之結果,如上文所描述。
轉至圖8,展示描繪圖7之功能單元的一實施例之操作之流程圖。共同地參看圖2至圖8且開始於圖8之步驟801,藉由(例如)圖7之功能單元701來起始述詞向量。更特定言之,如上文所描述,可經由使用GeneratePredicates指令抑或經由其他指令(諸如,上文在實例4中所展示之指令)來執行多種述詞產生指令中之任一者。在一實施例中,功能單元701可起始取決於正產生之述詞之另一指令的執行,但係在述詞向量可用之前(步驟803)。當指令之結果準備就緒時,功能單元可將結果保持於(例如)保持單元中,直至述詞向量準備就緒(步驟805)。更特定言之,如上文所描述,控制器703可使指令結果儲存於
保持單元707中。當述詞向量可用時,控制器703可通知保持單元707將結果釋放至目的地,且在一實施例中,可更新目的地向量(步驟807)。應注意,上文所描述之操作及排序僅為實例操作。預料在其他實施例中,可省略該等操作中之一些,或可添加額外操作,且展示該等操作之次序可按需要不同。
儘管上文已相當詳細地描述了實施例,但熟習此項技術者一旦完全瞭解了以上揭示內容,眾多變化及修改便將變得顯而易見。意欲將以下申請專利範圍解釋為涵蓋所有此等變化及修改。
Claims (18)
- 一種用於推測式述詞指令之功能單元,其包含:一控制器,其經組態以回應於一向量指令所取決於之一或多個運算元可供使用的一判定來起始該向量指令之執行;及一保持單元,其經組態以臨時儲存該向量指令之結果;其中回應於接收到在起始該向量指令之後該向量指令所取決於之一述詞向量尚未可供使用的一判定,該控制器經進一步組態以:將該向量指令之結果臨時儲存於該保持單元內,使得使該等結果不可用於取決於該向量指令之一或多個運算;及回應於接收到該述詞向量可供使用之一判定,更新取決於該述詞向量的該向量指令之該等臨時儲存之結果,且將該等更新之結果儲存於一目的地暫存器中,使該目的地暫存器可用於取決於該向量指令之該一或多個運算。
- 如請求項1之功能單元,其中回應於接收到在起始該向量指令之後該述詞向量尚未可供使用的該判定,該控制器經進一步組態以抑制在該向量指令之執行期間所引起的任何錯誤。
- 如請求項2之功能單元,其中回應於一或多個錯誤係在執行該向量指令期間引起的一判定,該控制器經進一步組態以在接收到該述詞向量可供使用的該判定之後重新起始該向量指令。
- 如請求項3之功能單元,其中該控制器經進一步組態以引起錯誤,該等錯誤對應於有效元素且發生於該向量指令之該重新起始期間。
- 如請求項2之功能單元,其中該控制器經進一步組態以在該述詞向量可供使用之前保持在執行該向量指令期間所引起的該等錯 誤,且僅回應於基於該述詞向量判定在執行該向量指令期間所引起之該等錯誤對應於該向量指令之有效元素,在接收到該述詞向量可供使用的該判定之後重新起始該向量指令。
- 如請求項1之功能單元,其中該向量指令包含一向量載入指令,且該一或多個運算元包含該向量載入指令所取決於之一或多個記憶體位址。
- 一種用於推測式述詞指令之處理器,其包含:一執行單元,其經組態以起始包括一或多個述詞元素之一述詞向量的產生;及一功能單元,其經組態以回應於一向量指令所取決於之一或多個運算元可供使用的一判定來起始該向量指令之執行;其中回應於在起始該向量指令之後該述詞向量尚未可用的一判定,該功能單元經進一步組態以:使該向量指令之結果保持處於暫停使用,直至該述詞向量變得可供使用;及回應於該述詞向量可供使用的一判定來更新取決於該述詞向量之該向量指令的該等結果,且將該等經更新之結果儲存至一目的地,使該目的地可用於取決於該向量指令之一或多個運算。
- 如請求項7之處理器,其中為使向量讀取操作之結果保持處於暫停使用,該功能單元經進一步組態以抑制在執行該向量指令期間所引起之任何錯誤。
- 如請求項8之處理器,其中回應於一或多個錯誤係在執行該向量指令期間引起的一判定,該功能單元經進一步組態以在該述詞向量變得可供使用之後重新起始該向量指令。
- 如請求項9之處理器,其中該功能單元經組態以引起錯誤,該等 錯誤對應於有效元素且發生於該向量指令之該重新起始期間。
- 如請求項8之處理器,其中該功能單元經組態以在該述詞向量可供使用之前保持在執行該向量指令期間所引起的該等錯誤,且回應於基於該述詞向量判定在執行該向量指令期間所引起之該等錯誤對應於該向量指令之有效元素,該功能單元經進一步組態以在接收到該述詞向量可供使用的該判定之後重新起始該向量指令之執行。
- 一種用於推測式述詞指令之方法,其包含:起始包括一或多個元素之一述詞向量的產生;在該述詞向量變得可供使用之前,回應於一向量指令所取決於之一或多個運算元可供使用的一判定來起始該向量指令;使該向量指令之結果保持處於暫停使用,直至該述詞向量變得可供使用;及回應於該述詞向量可供使用的一判定來更新取決於該述詞向量的該向量指令之該等結果,且將該等經更新之結果儲存至一目的地,使該目的地可用於取決於該向量指令之一或多個運算。
- 如請求項12之方法,其進一步包含回應於在執行該向量指令期間偵測到一錯誤,抑制該錯誤,拋棄該向量指令之該等結果,且在判定該述詞向量可用之後重新發出該向量指令。
- 如請求項13之方法,其中在判定該述詞向量可用之後重新發出該向量指令進一步包含:僅回應於基於該述詞向量判定在執行該向量指令期間所引起之該等錯誤對應於該向量指令之有效元素來重新發出該向量指令。
- 如請求項13之方法,其進一步包含引起錯誤,該等錯誤對應於有效元素且發生於該向量指令之該重新起始期間。
- 如請求項12之方法,其中該述詞向量之該一或多個元素中之每一者控制目的地向量中之一對應的元素是否將接收該向量指令之一結果或保持未修改。
- 如請求項12之方法,其中起始該述詞向量之產生包括執行一述詞產生指令。
- 如請求項17之方法,其中該述詞產生指令為一巨集純量GeneratePredicates指令。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/590,870 US9298456B2 (en) | 2012-08-21 | 2012-08-21 | Mechanism for performing speculative predicated instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201419141A TW201419141A (zh) | 2014-05-16 |
TWI494851B true TWI494851B (zh) | 2015-08-01 |
Family
ID=49117948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102130104A TWI494851B (zh) | 2012-08-21 | 2013-08-22 | 用於推測式述詞指令之功能單元、處理器及方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9298456B2 (zh) |
TW (1) | TWI494851B (zh) |
WO (1) | WO2014031680A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9086873B2 (en) | 2013-03-15 | 2015-07-21 | Intel Corporation | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture |
US9817663B2 (en) | 2013-03-19 | 2017-11-14 | Apple Inc. | Enhanced Macroscalar predicate operations |
US9348589B2 (en) | 2013-03-19 | 2016-05-24 | Apple Inc. | Enhanced predicate registers having predicates corresponding to element widths |
US9690582B2 (en) * | 2013-12-30 | 2017-06-27 | Intel Corporation | Instruction and logic for cache-based speculative vectorization |
US11150909B2 (en) | 2015-12-11 | 2021-10-19 | International Business Machines Corporation | Energy efficient source operand issue |
GB2548602B (en) * | 2016-03-23 | 2019-10-23 | Advanced Risc Mach Ltd | Program loop control |
GB2548600B (en) | 2016-03-23 | 2018-05-09 | Advanced Risc Mach Ltd | Vector predication instruction |
GB2558955B (en) * | 2017-01-24 | 2020-12-23 | Advanced Risc Mach Ltd | An apparatus and method for generating and processing a trace stream indicative of execution of predicated vector memory access instructions |
US10409614B2 (en) | 2017-04-24 | 2019-09-10 | Intel Corporation | Instructions having support for floating point and integer data types in the same register |
US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
US10503507B2 (en) | 2017-08-31 | 2019-12-10 | Nvidia Corporation | Inline data inspection for workload simplification |
WO2020036917A1 (en) * | 2018-08-14 | 2020-02-20 | Optimum Semiconductor Technologies Inc. | Vector instruction with precise interrupts and/or overwrites |
US20220179787A1 (en) | 2019-03-15 | 2022-06-09 | Intel Corporation | Systems and methods for improving cache efficiency and utilization |
US11934342B2 (en) | 2019-03-15 | 2024-03-19 | Intel Corporation | Assistance for hardware prefetch in cache access |
JP7408671B2 (ja) | 2019-03-15 | 2024-01-05 | インテル コーポレイション | シストリックアレイに対するブロックスパース演算のためのアーキテクチャ |
US20240004656A1 (en) * | 2022-06-29 | 2024-01-04 | Advanced Micro Devices, Inc. | Accelerating predicated instruction execution in vector processors |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090240366A1 (en) * | 2008-03-08 | 2009-09-24 | Tokyo Electron Limited | Method and system for detection of tool performance degradation and mismatch |
TW200951811A (en) * | 2008-03-11 | 2009-12-16 | Qualcomm Inc | System and method of selectively committing a result of an executed instruction |
TW201224933A (en) * | 2010-09-23 | 2012-06-16 | Apple Inc | Systems and methods for compiler-based vectorization of non-leaf code |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5623650A (en) * | 1989-12-29 | 1997-04-22 | Cray Research, Inc. | Method of processing a sequence of conditional vector IF statements |
DE69425311T2 (de) * | 1993-10-18 | 2001-03-15 | Nat Semiconductor Corp | Mikroprozessor mit spekulativer Befehlsausführung |
US5634023A (en) | 1994-07-01 | 1997-05-27 | Digital Equipment Corporation | Software mechanism for accurately handling exceptions generated by speculatively scheduled instructions |
US6122727A (en) * | 1998-08-24 | 2000-09-19 | Advanced Micro Devices, Inc. | Symmetrical instructions queue for high clock frequency scheduling |
US6212622B1 (en) * | 1998-08-24 | 2001-04-03 | Advanced Micro Devices, Inc. | Mechanism for load block on store address generation |
US6212623B1 (en) * | 1998-08-24 | 2001-04-03 | Advanced Micro Devices, Inc. | Universal dependency vector/queue entry |
US6115808A (en) | 1998-12-30 | 2000-09-05 | Intel Corporation | Method and apparatus for performing predicate hazard detection |
US7617496B2 (en) | 2004-04-23 | 2009-11-10 | Apple Inc. | Macroscalar processor architecture |
US8078847B2 (en) * | 2007-05-14 | 2011-12-13 | Apple Inc. | Detecting memory-hazard conflicts during vector processing |
US8019977B2 (en) * | 2007-05-14 | 2011-09-13 | Apple Inc. | Generating predicate values during vector processing |
US8060728B2 (en) * | 2007-05-14 | 2011-11-15 | Apple Inc. | Generating stop indicators during vector processing |
US9513905B2 (en) * | 2008-03-28 | 2016-12-06 | Intel Corporation | Vector instructions to enable efficient synchronization and parallel reduction operations |
US8209525B2 (en) | 2008-08-15 | 2012-06-26 | Apple Inc. | Method and apparatus for executing program code |
US8271832B2 (en) | 2008-08-15 | 2012-09-18 | Apple Inc. | Non-faulting and first-faulting instructions for processing vectors |
US8650383B2 (en) * | 2008-08-15 | 2014-02-11 | Apple Inc. | Vector processing with predicate vector for setting element values based on key element position by executing remaining instruction |
US8745360B2 (en) * | 2008-09-24 | 2014-06-03 | Apple Inc. | Generating predicate values based on conditional data dependency in vector processors |
US8181001B2 (en) * | 2008-09-24 | 2012-05-15 | Apple Inc. | Conditional data-dependency resolution in vector processors |
US8176299B2 (en) * | 2008-09-24 | 2012-05-08 | Apple Inc. | Generating stop indicators based on conditional data dependency in vector processors |
US8949808B2 (en) | 2010-09-23 | 2015-02-03 | Apple Inc. | Systems and methods for compiler-based full-function vectorization |
US8972698B2 (en) * | 2010-12-22 | 2015-03-03 | Intel Corporation | Vector conflict instructions |
US9823929B2 (en) * | 2013-03-15 | 2017-11-21 | Qualcomm Incorporated | Optimizing performance for context-dependent instructions |
-
2012
- 2012-08-21 US US13/590,870 patent/US9298456B2/en active Active
-
2013
- 2013-08-20 WO PCT/US2013/055853 patent/WO2014031680A1/en active Application Filing
- 2013-08-22 TW TW102130104A patent/TWI494851B/zh active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090240366A1 (en) * | 2008-03-08 | 2009-09-24 | Tokyo Electron Limited | Method and system for detection of tool performance degradation and mismatch |
TW200951811A (en) * | 2008-03-11 | 2009-12-16 | Qualcomm Inc | System and method of selectively committing a result of an executed instruction |
TW201224933A (en) * | 2010-09-23 | 2012-06-16 | Apple Inc | Systems and methods for compiler-based vectorization of non-leaf code |
Also Published As
Publication number | Publication date |
---|---|
US20140059328A1 (en) | 2014-02-27 |
WO2014031680A1 (en) | 2014-02-27 |
US9298456B2 (en) | 2016-03-29 |
TW201419141A (zh) | 2014-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI494851B (zh) | 用於推測式述詞指令之功能單元、處理器及方法 | |
US8555037B2 (en) | Processing vectors using wrapping minima and maxima instructions in the macroscalar architecture | |
KR101511837B1 (ko) | 벡터 분할 루프들의 성능 향상 | |
US8359460B2 (en) | Running-sum instructions for processing vectors using a base value from a key element of an input vector | |
JP5612148B2 (ja) | ゼロ述語分岐予測ミスにおける分岐予測ミス振舞い抑制 | |
US8417921B2 (en) | Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector | |
US8793472B2 (en) | Vector index instruction for generating a result vector with incremental values based on a start value and an increment value | |
US8447956B2 (en) | Running subtract and running divide instructions for processing vectors | |
US8527742B2 (en) | Processing vectors using wrapping add and subtract instructions in the macroscalar architecture | |
US8984262B2 (en) | Generate predicates instruction for processing vectors | |
US9471324B2 (en) | Concurrent execution of heterogeneous vector instructions | |
US8539205B2 (en) | Processing vectors using wrapping multiply and divide instructions in the macroscalar architecture | |
US9367309B2 (en) | Predicate attribute tracker | |
US20160092398A1 (en) | Conditional Termination and Conditional Termination Predicate Instructions | |
US9390058B2 (en) | Dynamic attribute inference | |
US9335980B2 (en) | Processing vectors using wrapping propagate instructions in the macroscalar architecture | |
US8549265B2 (en) | Processing vectors using wrapping shift instructions in the macroscalar architecture | |
US8583904B2 (en) | Processing vectors using wrapping negation instructions in the macroscalar architecture | |
US9335997B2 (en) | Processing vectors using a wrapping rotate previous instruction in the macroscalar architecture | |
US8560815B2 (en) | Processing vectors using wrapping boolean instructions in the macroscalar architecture | |
US9342304B2 (en) | Processing vectors using wrapping increment and decrement instructions in the macroscalar architecture |