TWI502489B - 叢集多階暫存檔的暫存器分配 - Google Patents
叢集多階暫存檔的暫存器分配 Download PDFInfo
- Publication number
- TWI502489B TWI502489B TW102142292A TW102142292A TWI502489B TW I502489 B TWI502489 B TW I502489B TW 102142292 A TW102142292 A TW 102142292A TW 102142292 A TW102142292 A TW 102142292A TW I502489 B TWI502489 B TW I502489B
- Authority
- TW
- Taiwan
- Prior art keywords
- instruction
- cluster
- virtual
- scratchpad
- instructions
- Prior art date
Links
- 238000012545 processing Methods 0.000 claims description 196
- 230000015654 memory Effects 0.000 claims description 93
- 238000000034 method Methods 0.000 claims description 87
- 230000000694 effects Effects 0.000 claims description 43
- 238000003860 storage Methods 0.000 description 30
- 238000010586 diagram Methods 0.000 description 26
- 238000004891 communication Methods 0.000 description 17
- 238000000638 solvent extraction Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 10
- 239000000872 buffer Substances 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 238000005192 partition Methods 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 239000000463 material Substances 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000004040 coloring Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000014616 translation Effects 0.000 description 3
- 238000012884 algebraic function Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000011273 social behavior Effects 0.000 description 1
- 230000001360 synchronised effect 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- 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/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
- G06F9/3891—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Multi Processors (AREA)
Description
本發明通常有關平行計算,尤其係關於叢集多階暫存檔的暫存器分配。
電腦處理器經常將暫存檔當成執行計算的暫存空間使用。暫存檔通常針對速度而設立,且通常實際位置會靠近執行計算的功能單元的叢集。具有功能單元的多重叢集之某些平行處理系統運用暫存檔的多層次結構。
多層次結構在實際上(physically)靠近該等功能單元的該階層底部上提供某些暫存檔(「低階暫存檔」),並且在實際上遠離該等功能單元的該階層頂端上提供其他暫存檔(「高階暫存檔」)。存取低階暫存檔內之值所需的時間與能量低於存取高階暫存檔所需的時間與能量。為了簡化設計及為了速度,低階暫存檔只能由功能單元的單一叢集存取,而高階暫存檔可由功能單元的大量叢集存取。
雖然值可儲存在低階暫存檔內以降低能源消耗及為了速速,但不需要直接存取儲存該等值的低階暫存檔之多個叢集可能需要儲存在低階暫存檔內的值。因此,通常運用技術來確保功能單元的多重叢集所需的值實際上可由功能單元的所有這些多重叢集使用。
用於讓值可用於功能單元的一個以上叢集且確保功能單元的多重叢集運用的所有值都儲存在高階暫存檔內,某些當前技術允許功能單元的一個以上叢集存取該等值。雖然高階暫存檔內的多重功能單元所運用的儲存值幫助確保功能單元的多重叢集所需值可由功能單元多重叢集存取,不過存取高階暫存檔比存取低階暫存檔需要更多時間與能量。此外,功能單元的多重叢集所使用的某些值主要由功能單元的單一叢集所使用,
而某些附屬存取則由功能單元的其他叢集進行。
因此,功能單元的多重叢集所運用的所有值都儲存在高階暫存檔內的這項技術之一缺點為:雖然主要由功能單元的單一叢集所運用的值只具有一些由其他功能單元進行的附屬存取,不過主要由該單一功能單元使用的該等值都儲存在高階暫存檔內。由於高階暫存檔具有比低階暫存檔還較高的存取能量與較長的存取時間,所以運用功能單元的多重叢集所運用的所有值都儲存在高階暫存檔之技術,從降低存取時間與存取能量的觀點可能喪失最佳化的機會。
如前述,業界內需要一種改善由功能單元的多重叢集運用多階暫存檔階層之技術。
本發明之一具體實施例揭示一種用於分配一處理單元內的暫存器之方法。一編譯器指派複數個指令給複數個處理叢集。每一指令構成存取一活動範圍內的一第一虛擬暫存器。該編譯器決定該等複數個處理叢集內的哪個處理叢集為該活動範圍內的該第一虛擬暫存器的擁有者叢集。該編譯器設置包括在該等複數個指令內之一第一指令,以存取一第一全域虛擬暫存器。
本技術之一優點在於,該揭示技術可構成存取一多階暫存檔階層內暫存器的指令,使得時常存取的暫存器可分配給本機暫存檔內的實體暫存器。
100‧‧‧電腦系統
102‧‧‧中央處理單元
103‧‧‧裝置驅動程式
104‧‧‧系統記憶體
105‧‧‧記憶體橋接器
106‧‧‧通訊路徑
107‧‧‧輸入/輸出橋接器
108‧‧‧使用者輸入裝置
110‧‧‧顯示裝置
112‧‧‧平行處理子系統
113‧‧‧第二通訊路徑
114‧‧‧系統磁碟
116‧‧‧開關
118‧‧‧網路配接器
120-121‧‧‧外接卡
202‧‧‧平行處理單元
204‧‧‧平行處理記憶體
205‧‧‧輸入/輸出橋接器
206‧‧‧主介面
207‧‧‧任務/工作單元
208‧‧‧一般處理叢集
210‧‧‧記憶體橫桿單元
212‧‧‧前端
214‧‧‧記憶體介面
215‧‧‧劃分單元
220‧‧‧動態隨機存取記憶體
230‧‧‧處理叢集陣列
302‧‧‧執行單元
303‧‧‧載入儲存單元
304‧‧‧本機暫存檔
305‧‧‧管線管理員
306‧‧‧共用記憶體
310‧‧‧串流多重處理器
312‧‧‧經線排程器與指令單元
320‧‧‧L1快取
328‧‧‧記憶體管理單元
335‧‧‧第一點五層快取
352‧‧‧統一位址映射單元
370‧‧‧指令L1快取
380‧‧‧記憶體與快取互連
400‧‧‧多階暫存檔階層
402‧‧‧執行單元
403‧‧‧載入儲存單元
404‧‧‧本機暫存檔
405‧‧‧叢集
406‧‧‧主暫存檔
500‧‧‧方法
600‧‧‧方法
700‧‧‧方法
800‧‧‧方法
900‧‧‧方法
1000‧‧‧方法
1102-1‧‧‧程式碼區段
1102-2‧‧‧程式碼區段
1102-3‧‧‧程式碼區段
1104‧‧‧活動範圍
1106‧‧‧指令
1108‧‧‧指令
1110‧‧‧指令
1112‧‧‧指令
1122-1‧‧‧程式碼區段
1122-2‧‧‧程式碼區段
1122-3‧‧‧程式碼區段
1126‧‧‧指令
1128‧‧‧指令
1130‧‧‧指令
1132‧‧‧指令
1200‧‧‧多階暫存檔階層
1206-1‧‧‧本機暫存檔
1206-2‧‧‧本機暫存檔
1206-3‧‧‧本機暫存檔
1208-1‧‧‧實體暫存器
1208-2‧‧‧實體暫存器
1210‧‧‧主暫存檔
1212‧‧‧實體暫存器
1214‧‧‧箭頭
1214-1‧‧‧箭頭
1216‧‧‧箭頭
1216-1‧‧‧箭頭
1218‧‧‧箭頭
1218-1‧‧‧箭頭
1302-1‧‧‧程式碼區段
1302-2‧‧‧程式碼區段
1302-3‧‧‧程式碼區段
1304-1‧‧‧活動範圍
1304-2‧‧‧活動範圍
1306‧‧‧指令
1308‧‧‧指令
1310‧‧‧指令
1312‧‧‧指令
1314‧‧‧指令
1316‧‧‧指令
1318‧‧‧指令
1322-1‧‧‧程式碼區段
1322-2‧‧‧程式碼區段
1322-3‧‧‧程式碼區段
1326‧‧‧指令
1328‧‧‧指令
1330‧‧‧指令
1332‧‧‧指令
1334‧‧‧指令
1336‧‧‧指令
1338‧‧‧指令
1400‧‧‧多階暫存檔階層
1406-1‧‧‧本機暫存檔
1406-2‧‧‧本機暫存檔
1408‧‧‧實體暫存器
1410‧‧‧主暫存檔
1412‧‧‧實體暫存器
1414‧‧‧箭頭
1416-1‧‧‧箭頭
1416-2‧‧‧箭頭
1416‧‧‧箭頭
1418‧‧‧箭頭
將藉由參考部分在附圖例示的具體實施例,更特別詳細描述上述簡單彙總的本發明,以徹底瞭解本發明上述特徵。不過吾人應注意,附圖只說明本發明的典型具體實施例,因此並不認為限制本發明的範疇,本發明承認其他等效具體實施例。
第一圖為例示構成實施本發明之一或多個態樣之電腦系統的方塊圖;第二圖為根據本發明之一具體實施例之用於第一圖中該電腦系統之平行處理子系統的方塊圖;
第三圖為根據本發明之一具體實施例之第二圖中該一般處理叢集內的一串流多重處理器之一部分的方塊圖;第四圖為根據本發明之一具體實施例之一多階暫存檔階層的方塊圖;第五圖揭示根據本發明之一具體實施例之用於將由一虛擬指令集內指令所參照的虛擬暫存器分配至實體暫存器之方法步驟的流程圖;第六圖揭示根據本發明之一具體實施例之用於執行虛擬暫存器劃分之方法步驟的流程圖;第七圖揭示根據本發明之一具體實施例之用於存取擁有者叢集之方法步驟的流程圖;第八圖揭示根據本發明之一具體實施例之用於轉換擁有者叢集寫入操作之方法步驟的流程圖;第九圖揭示根據本發明之一具體實施例之用於轉換無擁有者叢集讀取操作之方法步驟的流程圖;第十圖揭示根據本發明之一具體實施例之用於轉換無擁有者叢集寫入操作之方法步驟的流程圖;第十一圖為根據本發明的一具體實施例之描述在虛擬暫存器劃分之前與之後的範例程式碼區段的方塊圖;第十二圖為根據本發明之一具體實施例之一多階暫存檔階層的方塊圖;第十三圖為根據本發明之一具體實施例之描述在虛擬暫存器劃分之前與之後的範例程式碼區段的方塊圖;及第十四圖為根據本發明之一具體實施例之一多階暫存檔階層的方塊圖。
在以下描述中,揭示許多特定細節以對本發明有更徹底之理解。但是,精通技術人士應該了解,在沒有一或多個該等特定細節之下還是可實施本發明。
系統概觀
第一圖為例示構成實施本發明之一或多個態樣之電腦系統100的方塊圖。電腦系統100包括一中央處理單元(CPU,Central Processing Unit)102,及一系統記憶體104,其透過一互連路徑通訊,其中,該路徑可包括一記憶體橋接器105。例如可為北橋晶片的記憶體橋接器105透過匯流排或其他通訊路徑106(例如超傳輸連結)而連接至一I/O(輸入/輸出)橋接器107。例如可為南橋晶片的輸入/輸出橋接器107接收來自一或多個使用者輸入裝置108(例如鍵盤、滑鼠)的使用者輸入,並透過通訊路徑106和記憶體橋接器105將該輸入轉送至中央處理單元102。一平行處理子系統112透過匯流排或第二通訊路徑113(例如一高速周邊組件互連(PCI,Peripheral Component Interconnect)、加速圖形連接埠(AGP,Accelerated Graphics Port)及/或HyperTransport連結)耦合至記憶體橋接器105。在一具體實施例中,平行處理子系統112為一圖形子系統,其將像素遞送至顯示裝置110,該裝置可為任何傳統陰極射線管、液晶顯示器、發光二極體顯示器等等。系統磁碟114亦連接至I/O橋接器107,且可構成儲存內容與應用程式及資料,供中央處理單元102及平行處理子系統112使用。系統磁碟114提供非揮發性儲存裝置給應用程式與資料,且可包括固定式或可移除式硬碟機、快閃記憶體裝置以及CD-ROM(小型光碟唯讀記憶體)、DVD-ROM(數位多用途光碟-ROM)、藍光、HD-DVD(高傳真DVD)或其他磁性、光學或固態儲存裝置。
一開關116提供輸入/輸出橋接器107與其他組件,像是網路配接器118及許多外接卡120和121之間的連接。其他組件(未明確顯示),包括萬用序列匯流排(USB,Universal Serial Bus)或其他連接埠連接、小型光碟(CD)光碟機、數位多用途光碟(DVD)光碟機、檔案記錄裝置等等,亦可連接至輸入/輸出橋接器107。第一圖顯示的許多通訊路徑,包括特別指定的通訊路徑106和113,都可使用任何合適的協定來實施,例如PCI Express、AGP(加速圖形連接埠)、HyperTransport或任何其他匯流排或點對點通訊協定,及不同組件之間的連接都可使用業界內已知的不同協定。
在一具體實施例中,平行處理子系統112併入將圖形與視訊
處理最佳化的電路,包括例如視訊輸出電路,並且構成一圖形處理單元(GPU,graphics processing unit)。在另一具體實施例中,平行處理子系統112併入將一般用途處理最佳化的電路,同時保留底層計算架構。在另一具體實施例中,平行處理子系統112可在單一子系統中與一或多個其他系統元件整合,例如結合記憶體橋接器105、中央處理單元102和輸入/輸出橋接器107來形成一晶片上系統(SoC,System onCchip)。
一編譯器101可嵌入裝置驅動程式103。編譯器101依需求編譯程式指令,平行處理子系統112執行。在此編譯期間,編譯器101可在許多編譯階段對程式指令套用轉換。在本發明的另一具體實施例中,編譯器101可為單機應用程式。
吾人應了解,本說明書中顯示的該系統為例示,所以可改變與修改。包括橋接器的數量與配置、中央處理單元102的數量及平行處理子系統112的數量這類連接佈局可依照需求修改。例如在某些具體實施例中,系統記憶體104直接連接至中央處理單元102,而不是透過橋接器,且其他裝置透過記憶體橋接器105與中央處理單元102而與系統記憶體104通訊。在其他替代佈局中,平行處理子系統112連接至輸入/輸出橋接器107或直接連接至中央處理單元102,而不是連接至記憶體橋接器105。在其他具體實施例內,輸入/輸出橋接器107和記憶體橋接器105可整合成為單一晶片,替代現有的一或多個分散裝置。大型組件可包含二或多個中央處理單元102及兩或多個平行處理子系統112。本文中顯示的該等特定組件為選擇性;例如可支援任何數量的外接卡或週邊裝置。在某些具體實施例內,省略開關116,並且網路配接器118和外接卡120、121都直接連接至輸入/輸出橋接器107。
第二圖例示根據本發明之一具體實施例的平行處理子系統112。如所示,平行處理子系統112包括一或多個平行處理單元(PPU,parallel processing unit)202,每一者都連結至本機平行處理(PP,parallel processing)記憶體204。一般來說,平行處理子系統包括數量為U的平行處理單元,其中U1。(本說明書中多個類似物體的實例都用相同參考號碼標示出該物件,且括號標示該物件的數目排序。)平行處理單元202及平行處理記憶體
204可使用一或多個積體電路裝置實施,例如可程式處理器、特殊應用積體電路(ASIC,Application Specific Integrated Circuit)或記憶體裝置,或以任何其他技術可行方式實施。
請即重新參考第一圖,如第二圖所示,在一具體實施例中,平行處理子系統112內的某些或全部平行處理單元202為具有著色管線的圖形處理器,其可執行許多操作,這些操作有關透過記憶體橋接器105和第二通訊路徑113,從中央處理單元102及/或系統記憶體104供應的圖形資料產生畫素資料、與本機平行處理記憶體204(可用來當成圖形記憶體,包括例如傳統訊框緩衝區)互動來儲存與更新畫素資料、傳遞畫素資料給顯示裝置110等等。在某些具體實施例中,平行處理子系統112可包括操作當成圖形處理器的一或多個平行處理單元202,及用於一般用途計算的一或多個其他平行處理單元202。平行處理單元202可相同或不同,且每一平行處理單元202都可擁有一或多個專屬平行處理記憶體裝置或無專屬平行處理記憶體裝置。平行處理子系統112內的一或多個平行處理單元202可輸出資料至顯示裝置110,或平行處理子系統112內的每一平行處理單元202都可輸出資料至一或多個顯示裝置110。
在操作上,中央處理單元102為電腦系統100的主要處理器,控制與協調其他系統組件的操作。中央處理單元102發出指令控制平行處理單元202的操作。在某些具體實施例中,中央處理單元102將每一平行處理單元202的指令串流寫入一資料結構(第一圖或第二圖內未明確顯示),該資料結構可位於系統記憶體104、平行處理記憶體204或可存取中央處理單元102和平行處理單元202的其他儲存位置內。每一資料結構的指標已寫入一推送緩衝區,以開始處理在該資料結構內的該指令串流。平行處理單元202讀取來自一或多個推送緩衝區的指令串流,然後關於中央處理單元102的操作非同步執行指令。利用應用程式透過裝置驅動程式103來控制不同推送緩衝區的排程,以指定每一推送緩衝區的執行優先順序。
請即重新參考第二圖及第一圖,每一平行處理單元202包括I/O(輸入/輸出)單元205,其透過連接至記憶體橋接器105(或在替代具體實施例中,直接連接至中央處理單元102)的通訊路徑113而與電腦系統100
的其餘組件通訊。平行處理單元202與電腦系統100其餘組件的連接亦可改變。在某些具體實施例中,平行處理子系統112實施成為可插入電腦系統100內擴充槽的外接卡。在其他具體實施例中,平行處理單元202可與例如記憶體橋接器105或輸入/輸出橋接器107的這類匯流排橋接器整合在單一晶片上。在其他具體實施例中,平行處理單元202的某些或全部元件可與中央處理單元102整合在單一晶片上。
在一具體實施例中,通訊路徑113為一PCI Express連結,其中,分配專屬通道給每一平行處理單元202。在一具體實施例中,通訊路徑113為一PCI Express連結,其中分配專屬通道給每一平行處理單元202。一輸入/輸出單元205產生在通訊路徑113上傳輸的封包(或其他信號),亦從通訊路徑113上接收所有傳入封包(或其他信號),將該等傳入封包導引至平行處理單元202的適當組件。例如:有關處理任務的指令可導引至主介面206,而有關記憶體操作的指令(例如讀取或寫入平行處理記憶體204)可導引至記憶體交換開關單元210。主介面206讀取每一推送緩衝區,並將該推送緩衝區內儲存的該指令串流輸出至一前端212。
每一平行處理單元202都可實施一高度平行處理架構。如所示,PPU 202(0)包括一處理叢集陣列230,其包括數量為C的一般處理叢集(General Processing Cluster,GPC)208,其中C1。每個一般處理叢集208都可同時執行大量的(例如數百或數千)執行緒,其中每一執行緒都是一程式的實例(instance)。在許多應用當中,不同的一般處理叢集208可分配用於處理不同種類的程式,或用於執行不同種類的計算。一般處理叢集208的分配絕大部分可根據每一程式或計算所賦予的工作負擔而變化。
一般處理叢集208從任務/工作單元207內的工作分配單元當中接收要執行的處理任務,該工作分配單元接收指標來處理任務,其編碼為任務中繼資料(TMD,Task MetaData)(未顯示)並儲存在記憶體內。該任務中繼資料的指標包括在指令串流內,其儲存成一推送緩衝區並由前端單元212從主介面206接收。可編碼為任務中繼資料的處理任務包括要處理的資料索引,及定義如何處理該資料的狀態參數與指令(例如要執行哪個程式)。任務/工作單元207從前端212接收任務,並且確保每一任務中繼資料
指定的處理開始之前,一般處理叢集208可被設定成有效狀態。一優先順序可指定給每一任務中繼資料,用來排定該處理任務的執行時間。處理任務亦可從處理叢集陣列230接收。或者,該任務中繼資料可包括一參數,控制該任務中繼資料是否加入處理任務清單(或處理任務指標清單)的頭部或尾部,藉此提供優先順序之上的另一控制等級。
記憶體介面214包括數量為D的劃分單元215,這些單元之每一者直接連接至一部分平行處理記憶體204,其中D1。如所示,劃分單元215的數量通常等於動態隨機存取記憶體(DRAM,Dynamic Random Access Memory)220的數量。在其他具體實施例中,劃分單元215的數量可以不等於記憶體裝置的數量。精通技術人士應了解,動態隨機存取記憶體220可用其他合適的裝置取代,且可為一般傳統設計,因此省略其詳細說明。像是訊框緩衝區或紋理地圖這類著色目標可透過動態隨機存取記憶體220儲存,允許劃分單元215平行寫入每一著色目標的部分,以有效使用平行處理記憶體204的可用頻寬。
一般處理叢集208之任一者都可處理寫入平行處理記憶體204內動態隨機存取記憶體220之任一者的資料。交換開關單元210構成將每一一般處理叢集208的輸出繞送(route)至任意劃分單元215的輸入或至其他一般處理叢集208供進一步處理。一般處理叢集208透過交換開關單元210與記憶體介面214通訊,來讀取或寫入許多外部記憶體裝置。在一具體實施例中,交換開關單元210具有一連接至記憶體介面214以與輸入/輸出單元205通訊,及一連接至本機平行處理記憶體204,藉此讓不同的一般處理叢集208內的處理核心與不在平行處理單元202本機的系統記憶體104平行或其他記憶體通訊。在第二圖所示的具體實施例中,交換開關單元210直接連接至輸入/輸出單元205。交換開關單元210可使用虛擬通道,以分隔一般處理叢集208與劃分單元215之間的流量串流。
一般處理叢集208可編程來執行有關廣泛應用的處理任務,包括但不受限於線性與非線性資料傳輸、視訊及/或音訊資料篩選、模型化運算(例如套用實體規則來決定位置、速度以及其他物體屬性)、影像渲染運算(例如曲線細分著色、影點著色、幾何著色及/或畫素著色程式)等等。
平行處理單元202可從系統記憶體104及/或本機平行處理記憶體204將資料傳輸進入內部(晶片上)記憶體、處理該資料並將結果資料寫回系統記憶體104及/或本機平行處理記憶體204,其中,此資料可由其他系統組件包括中央處理單元102或另一平行處理子系統112所存取。
一平行處理單元202可提供任何數量的本機平行處理記憶體204,包括非本機記憶體,且可任何情況下使用本機記憶體和系統記憶體。例如:平行處理單元202可為統一記憶體架構(UMA,Uunified Memory Architecture)具體實施例內的圖形處理器。在此具體實施例中,提供一些或無專屬圖形(平行處理)記憶體,並且平行處理單元202完全或幾乎完全使用系統記憶體。在統一記憶體架構具體實施例中,平行處理單元202可整合至橋接器晶片或處理器晶片,或提供當成分散式晶片,具有高速連結(例如PCI Express)透過橋接器晶片或其他通訊方式將平行處理單元202連接至系統記憶體。
如上述,任何數量的平行處理單元202可包括在一平行處理子系統112。例如:單一外接卡上可提供多重平行處理單元202,或多張外接卡可連接至通訊路徑113,或一或多個平行處理單元202可整合到一橋接器晶片上。多重平行處理單元系統內的平行處理單元202可彼此相同或不同。例如:不同平行處理單元202可具有不同數量的處理核心、不同大小的本機平行處理記憶體等等。當存在多個平行處理單元202時,這些平行處理單元可平行操作,以比單一平行處理單元202還要高產能的方式來處理資料。結合一或多個平行處理單元202的系統可在包括桌上型、膝上型或手持式個人電腦、伺服器、工作站、遊戲機、嵌入式系統等裝置中實施。
多重處理任務可在一般處理叢集208上同時執行,且一處理任務可在執行期間產生一或多個「子」處理任務。任務/工作單元207接收該等任務,且動態排定要由一般處理叢集208執行的處理任務及子處理任務。
第三圖為根據本發明之一具體實施例之第二圖所示一般處理叢集208內之串流多重處理器(SM)310的方塊圖。每個一般處理叢集208都可構成同時執行大量執行緒,其中「執行緒」代表在特定輸入資料集上
執行的特定程式之實例。在某些具體實施例中,單一指令、多重資料(SIMD,single-instruction,multiple-data)指令發行技術用於支援大量執行緒的平行執行,而不用提供多個獨立指令單元。在其他具體實施例中,單一指令、多重執行緒(SIMT,single-instruction,multiple-thread)技術用於支援大量一般同步執行緒的平行執行,使用共用指令單元,其構成發出指令給每個一般處理叢集208內的處理引擎集。不同於一單一指令、多重資料執行引擎,其中,所有處理區域通常都執行相同的指令,單一指令、多重執行緒執行允許不同執行緒更迅速遵循透過一已知執行緒程式的分散執行路徑。業界內精通技術人士將了解,單一指令、多重資料處理區域代表一單一指令、多重執行緒處理區域的函數子集。
透過將處理任務分配給一或多個串流多重處理器(SM,Streaming Multiprocessor)310的管線管理工具(未顯示)可控制一般處理叢集208的操作,其中,每一串流多重處理器310構成處理一或多個執行緒群組。每一串流多重處理器310包括一指令L1快取370,其構成透過一般處理叢集208內的一L1.5快取(未顯示)從記憶體接收指令與常數。一線程束排程器與指令單元312接收來自指令L1快取370的指令與常數,並且根據該等指令與常數控制本機暫存檔304及串流多重處理器310功能單元。串流多重處理器310功能單元包括N個執行(執行或處理)單元302及P個載入儲存單元(LSU,Load-Store Unit)303。該串流多重處理器功能單元可管線化,允許在先前指令完成之前發出新指令。本發明可提供任何功能執行單元組合。在一具體實施例中,該等功能單元支援許多種運算,包括整數與浮點演算(例如加法與乘法)、比較運算、布林運算(AND、OR、XOR)、位元位移和許多代數函數的計算(例如平面插值、三角函數以及對數函數等等);並且可運用該相同功能單元來執行不同運算。
此系列指令傳輸至特定一般處理叢集208構成一執行緒,如本說明書先前所定義,且透過串流多重處理器310內平行處理引擎(未顯示)的特定數量同時執行的執行緒之集合在此稱為「線程束」或「執行緒群組」。如說明書所使用,「執行緒群組」代表在不同輸入資料上同時執行相同程式的執行緒群組,其中,該群組的一執行緒指派給串流多重處理器310內的
不同處理引擎。一執行緒群組可包括數量比串流多重處理器310內處理引擎數量還要少的執行緒,在此實施例中,某些處理引擎會在執行緒群組的循環期間閒置。一執行緒群組亦可包含數量比串流多重處理器310內處理引擎數量還要多的執行緒,在此實施例中,執行緒將在連續時脈循環上進行處理。因為每一串流多重處理器310都可同時支援最多G
個執行緒群組,接著,在包括 M
個串流多重處理器310、最多G
*M
個執行緒群組的一般處理叢集208內的系統可於任何特定時間在一般處理叢集208內執行。
此外,在串流多重處理器310內可同時啟用複數個相關執行緒群組(在不同執行階段內)。此執行緒群組的集合稱為「合作執行緒陣列」(CAT,Cooperative Thread Array)或「執行緒陣列」。特定合作執行緒陣列的大小等於m*k,其中k為執行緒群組內同時執行的執行緒數量,通常為串流多重處理器310內平行處理引擎數量的整數倍數,且m為串流多重處理器310內同時啟用的執行緒群組數量。合作執行緒陣列的大小通常是由程式設計師及該合作執行緒陣列可用的硬體資源數量(例如記憶體或暫存器)來決定。
在本發明的具體實施例中,吾人想要使用一計算系統的平行處理單元202或其他處理器,運用執行緒陣列來執行一般用途計算。該執行緒陣列內的每一執行緒都可被指派一唯一的執行緒識別碼(「執行緒ID」),其可在該執行緒執行期間由該執行緒存取。該執行緒ID可定義為一維度或多維度數值,用以控制該執行緒處理行為的各種態樣。例如:一執行緒ID可用於決定一執行緒要處理的哪些輸入資料集之部分、及/或決定一執行緒要產生或寫入的哪些輸入資料集之部分。
一序列的每個執行緒指令可包括至少一指令,其定義該代表性執行緒與該執行緒陣列之一或多個其他執行緒之間的合作行為。例如:該序列的每一執行緒指令可包括:一中斷指令,用以中斷在該順序內特定點上該代表執行緒運算執行,直到一或多個其他執行緒到達該特定點上為止;一儲存指令,讓該代表執行緒將一或多個其他執行緒可存取的資料儲存至一共用記憶體內;一讀取與更新指令,讓該代表執行緒根據其執行緒ID自動讀取與更新一共用記憶體內的一或多個該等其他執行緒已經存取過
的資料等等。該合作執行緒陣列程式亦可包括一計算指令,用以計算該共用記憶體內所要讀取資料的位址,其中,該位址為執行緒ID的函數。利用定義合適的功能並且提供同步技術,資料可利用CAT的一執行緒寫入共用記憶體內一已知位置,且以可預測方式使用相同合作執行緒陣列的不同執行緒從該位置當中讀取。因此,支援在執行緒之間共用的任何資料圖案,並且一合作執行緒陣列內的任何執行緒都可與相同合作執行緒陣列內任何其他執行緒共用資料。在合作執行緒陣列執行緒之間共用的資料內容(若有的話)由該合作執行緒陣列程式決定;如此吾人了解,在使用合作執行緒陣列的特定應用當中,根據該合作執行緒陣列程式,合作執行緒陣列的執行緒彼此之間可能會或可能不會確實共用資料,並且在本說明書中「合作執行緒陣列」與「執行緒陣列」等為同義詞。
串流多重處理器310提供具備不同存取階層的晶片上(內部)資料儲存。特殊暫存器(未顯示)可由載入儲存單元303讀取但無法寫入,且可用於儲存定義每一執行緒「位置」的參數。在一具體實施例中,特殊暫存器包括每一執行緒(或串流多重處理器310內的每一執行單元302)的一暫存器,其儲存一執行緒ID;每一執行緒ID暫存器都只能由執行單元302之個別一者存取。特殊暫存器亦可包括額外暫存器,可由執行任務中繼資料(或由所有載入儲存單元303)所呈現相同處理任務的所有執行緒讀取,其儲存一合作執行緒陣列識別碼、該合作執行緒陣列維度、該合作執行緒陣列所屬網格的維度(或若任務中繼資料編碼一佇列任務而非一網格任務時的佇列位置),及指派合作執行緒陣列的任務中繼資料之識別碼。
若任務中繼資料為一網格任務中繼資料,則執行任務中繼資料會導致啟動並執行固定數量的合作執行緒陣列,來處理佇列內所儲存的固定數量資料。合作執行緒陣列的數量依照網格寬度、高度與深度的乘積來指定。該固定數量的資料可儲存在任務中繼資料內,或任務中繼資料可儲存指向將由合作執行緒陣列處理的資料之指標。任務中繼資料亦儲存該合作執行緒陣列所執行程式的開始位址。
若任務中繼資料為佇列任務中繼資料,則使用任務中繼資料的佇列功能,表示要處理的資料量不需要固定。佇列記錄儲存由指派給任
務中繼資料的該等合作執行緒陣列處理的資料。該等佇列記錄亦代表一執行緒執行期間由另一任務中繼資料產生的子任務,藉此提供巢狀平行。一般來說,執行緒的執行或包含該執行緒的合作執行緒陣列會中止,直到子任務執行完成為止。該佇列可儲存在任務中繼資料內,或與任務中繼資料分開,在此案例中,任務中繼資料儲存指向該佇列的佇列指標。由該子任務產生的資料可寫入該佇列,同時代表該子任務的任務中繼資料可正被執行。該佇列可實施為一圓形佇列,使得資料總量並不受限於該佇列的大小。
屬於一網格的合作執行緒陣列具有隱涵(implicit)的網格寬度、高度和深度參數,用以指出該網格內的個別合作執行緒陣列的位置。在初始化期間會寫入特殊暫存器,以回應透過前端212從裝置驅動程式103接收命令,且在一處理任務期間不會改變。前端212排程執行每一處理任務。每一合作執行緒陣列都有關同時執行一或多個任務的一特定任務中繼資料。此外,單一一般處理叢集208可同時執行多重任務。
一參數記憶體(未顯示)儲存可由相同合作執行緒陣列(或任何載入儲存單元303)內的任何執行緒讀取但無法寫入的執行時間參數(常數)。在一具體實施例中,裝置驅動程式103在導引串流多重處理器310開始執行使用這些參數的任務之前,提供參數給該參數記憶體。任何合作執行緒陣列內的任何執行緒(或串流多重處理器310內的任何執行單元)都可透過記憶體介面214存取全域記憶體。全域記憶體的一部分可儲存在L1快取320內。
每一執行緒使用的本機暫存檔304當成暫存空間;每一暫存器都分配給一執行緒專用,並且任何本機暫存檔304內的資料都只能由分配該暫存器的該執行緒存取。本機暫存檔304可實施為實體或邏輯區分成P個通路的暫存檔,每一通路都具有某些數量的記錄(其中,每一記錄都可儲存例如32位元字)。一通路指派給該等N個執行單元302及P個載入儲存單元載入儲存單元303之每一者,且不同通路內的對應記錄可填入執行相同程式的不同執行緒之資料,以幫助單一指令、多重資料執行。通路的不同部分可分配給該G
個同時執行緒群組中的不同執行緒,使得本機暫存檔304內的一已知記錄只能由特定執行緒存取。在一具體實施例內,本機暫存
檔304內的特定記錄保留用於儲存執行緒識別碼,用以實施該等特殊暫存器之一者。此外,一統一L1快取320儲存N個執行單元302及P個載入儲存單元(LSU)303的每一通路之統一或常數值。
共用記憶體306可由單一合作執行緒陣列內的執行緒存取;換言之,共用記憶體306內的任何位置都可由相同合作執行緒陣列內任何執行緒(或串流多重處理器310內的任何處理引擎)來存取。共用記憶體306可實施為具有互連的一共用暫存檔或共用晶片上記憶體,允許任何處理引擎從該共用記憶體內的任何位置讀取或寫入。在其他具體實施例中,共用的狀態空間可映射至晶片外記憶體的每個合作執行緒陣列區域,且快取在L1快取320內。該參數記憶體可實施為該相同共用暫存檔或實施共用記憶體306的共用快取記憶體內的一指定區段,或實施為載入儲存單元303具有唯讀存取的一個別共用暫存檔或晶片上快取記憶體。在一具體實施例中,實施該參數記憶體的區域亦用於儲存該合作執行緒陣列ID和任務ID,及合作執行緒陣列和網格尺寸或佇列位置,用以實施該特殊暫存器的位置。串流多重處理器310內的每一載入儲存單元303耦接至統一位址映射單元352,將提供用於載入與儲存統一記憶體空間內所指定指令的一位址轉換成每一分散記憶體空間內的一位址。因此,利用指定該統一記憶體空間內的一位址,可使用一指令來存取該本機、共用或全域記憶體空間之任一者。
每個一串流多重處理器310內的L1快取320都可用於快取私用每個執行緒(per-thread)本機資料,及且快取每一應用程式全域資料。在某些具體實施例中,該每個合作執行緒陣列共用用資料可快取在L1快取320。載入儲存單元303可透過一記憶體與快取互連380連結至共用記憶體306及L1快取320。
吾人應了解,本說明書中顯示的該核心架構為例示,且可有不同變化與修改。任何數量的處理單元,例如串流多重處理器310可包括在一般處理叢集208內。此外,如第二圖所示,平行處理單元202可包括任意數量功能彼此類似的一般處理叢集208,使得執行行為並不取決於接收特定處理任務的一般處理叢集208。此外,每個一般處理叢集208都得利於
與其他一般處理叢集208無關的操作,運用分離及分散的處理單元、L1快取,來執行一或多個應用程式的任務。
精通此技術人士應了解,第一圖至第三圖描述的架構並非用於限制本發明範疇,本說明書內的技術可在任何正確設置的處理單元上實施,在不悖離本發明範疇之下包括但不受限於一或多個中央處理單元、一或多個多核心中央處理單元、一或多個平行處理單元202、一或多個一般處理叢集208、一或多個圖形或特殊用途處理單元等等。
叢集多階暫存檔的全域暫存器分配
第四圖為根據本發明之一具體實施例之一多階暫存檔階層400的方塊圖。多階暫存檔階層400由叢集405和主暫存檔406實施。叢集405和主暫存檔406可包括在串流多重處理器310內,且可取代本機暫存檔304、執行單元302、載入儲存單元403、與共用記憶體306之全部或部分。
每一叢集405都包括一專屬本機暫存檔404、一或多個執行單元402,且可包括一載入儲存單元403。多階暫存檔階層400包括X個專屬暫存檔404、Y個執行(執行或處理)單元402及Z個載入儲存單元(LSU,Load-Store Unit)403。執行單元402可管線化,允許在先前指令完成之前發出新指令。本發明可提供執行單元402的任意組合。在一具體實施例內,執行單元402支援許多種運算,包括整數與浮點演算(例如加法與乘法)、比較運算、布林運算(AND、OR、XOR)、位元位移和許多代數函數的計算(例如平面插值、三角函數及對數函數等等);且可運用相同的執行單元402來執行不同運算。
叢集內的所有執行單元402都直接存取叢集405內專屬本機暫存檔404內的暫存器,且不直接存取其他叢集405中專屬本機暫存檔404內的暫存器。如此,第四圖所示的多階暫存檔階層400、執行單元402(0)和402(1)都直接存取本機暫存檔404(0)內的暫存器,但不直接存取本機暫存檔404(1)內的暫存器。
專屬本機暫存檔404具備提供低存取時間與低存取能量給專屬本機暫存檔404內暫存器之特徵,因此可以有較小的容量。此外,專屬本機暫存檔404在實體靠近該叢集之內的執行單元402及/或載入儲存單
元403,以降低存取專屬本機暫存檔404內暫存器所需的寫入能量。
一主暫存檔406不包括在任何叢集405之內。主暫存檔406包括可存取所有叢集405內所有執行單元402的暫存器。此外,主暫存檔406具有提供比專屬本機暫存檔404還要大容量的特徵。
主暫存檔406與專屬本機暫存檔404一起實施一多階暫存檔階層400,其中,高階暫存檔對應至主暫存檔406,且低階暫存檔對應至專屬本機暫存檔404。由於存取時間短,且專屬本機暫存檔404的低存取能量,經常使用之值儲存在專屬本機暫存檔404內比較有利。不常使用的其他值可儲存在主暫存檔406內。最不常用的值可儲存在多階暫存檔階層400之外的記憶體內,例如L1快取320。
值可間接透過主暫存檔406在叢集405內專屬本機暫存檔404之間通訊。若要將值從第一叢集405內的第一專屬本機暫存檔404通訊至第二叢集405內的第二專屬本機暫存檔404,則該值會從第一本機暫存檔404內的暫存器複製到主暫存檔406內的暫存器,然後從主暫存檔406內的該暫存器複製到第二本機暫存檔404內的暫存器。當多重指令用來在叢集405內的專屬本機暫存檔404之間完成值的通訊時,最好能夠限制值從一專屬本機暫存檔404通訊至另一專屬暫存檔404的次數。
執行單元402構成執行機器程式碼指令。該機器程式碼包括由執行單元402執行的指令集,其中該等指令可存取(且沒有限制)位於本機暫存檔404或主暫存檔406內的實體暫存器。編譯器101(第一圖內)接受虛擬指令集內的指令,且將該虛擬指令集內的該等指令轉譯成該機器程式碼內的指令。該虛擬指令集包括可存取虛擬暫存器的一組指令。虛擬暫存器並不需要對應至本機暫存檔404或主暫存檔406內的任何特定實體暫存器。取而代之的是,在轉譯期間,編譯器101執行一系列步驟,將該等虛擬暫存器分配至本機暫存檔404或主暫存檔406內的實體暫存器。
第五圖揭示根據本發明之一具體實施例之用於將由一虛擬指令集內的指令所參照的虛擬暫存器分配至實體暫存器之方法步驟的流程圖。雖然已結合第一圖至第四圖來描述該等方法步驟,不過精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇
內。
如所示,方法500從步驟505開始,其中編譯器101執行叢集指派。在叢集指派當中,編譯器101將該虛擬指令集內的指令指派給實體叢集405。編譯器101可執行叢集指派的一演算法範例為已知的「Bottom-Up-Greedy」(BUG)」演算法。在步驟510,編譯器101執行指令排程。在指令排程當中,編譯器101排程在步驟605內指定的該等虛擬指令,如所知。用於執行指令排程的演算法範例為「清單排程」。
在步驟515,編譯器101執行虛擬暫存器劃分。在虛擬暫存器劃分當中,編譯器101執行一系列轉譯,修改用於存取虛擬暫存器的該虛擬指令集內之原始指令。步驟515的結果為該虛擬指令集內的已修改指令,可參照不同於該等原始指令內所參照的虛擬暫存器。編譯器101修改存取虛擬暫存器的指令,使得虛擬暫存器可分配給本機暫存檔404內及主暫存器406內的實體暫存器。該等已修改指令內的不同虛擬暫存器包括兩種不同虛擬暫存器,即本機虛擬暫存器與全域虛擬暫存器。本機虛擬暫存器對應至叢集405中的本機暫存檔404內的實體暫存器,且全域虛擬暫存器對應至主暫存檔406內的實體暫存器。因為一叢集405內的本機暫存檔404不直接存取至另一叢集405,所以編譯器101亦插入指令,用於複製對應不同叢集405內的不同本機暫存檔404的本機虛擬暫存器間之值。第六圖至第十四圖將更詳細描述步驟515。
在步驟520,編譯器101執行本機暫存檔分配。在本機暫存檔分配當中,編譯器101指派本機虛擬暫存器給本機暫存檔404內的實體暫存器。若要指派本機虛擬暫存器給本機暫存檔404內的實體暫存器,則編譯器101可運用已知的「圖形著色」演算法。若本機暫存檔404內沒有足夠實體暫存器,則編譯器101可將一些虛擬暫存器「分派給」主暫存檔406。
在步驟525,編譯器101執行主暫存檔分配。在主暫存檔分配當中,編譯器101指派全域虛擬暫存器給主暫存檔406內的實體暫存器。若要指派全域虛擬暫存器給主暫存檔406內的實體暫存器,則編譯器101可再度運用已知的圖形著色演算法。
以下第六圖至第十圖的描述包含參考一「新虛擬暫存器」。「新虛擬暫存器」取代當成無擁有者叢集(non-owner cluster)內的本機虛擬暫存器。若一叢集擁有一虛擬暫存器,則來自該虛擬暫存器的該值可複製到該新虛擬暫存器,使得該無擁有者叢集可從本地端存取。第六圖至第十四圖指示一「新虛擬暫存器」的符號「VRn」。
以下第六圖至第十圖的描述包含參考一「無擁有者叢集」。一「無擁有者叢集」為已指派存取(寫入至或讀取自)一虛擬暫存器的指令,但是並非該虛擬暫存器的該用有者叢集。
以下第六圖至第十圖的描述包含一「對應全域虛擬暫存器」的參考。「對應全域虛擬暫存器」用於溝通叢集間的值。第六圖至第十四圖指示一「對應全域虛擬暫存器」的符號「MVR」。
以下第六圖至第十圖的描述亦說明編譯器101在指令「之前」或「之後」「插入」指令之步驟。術語「插入」描述編譯器101利用在一特定位置內加入一額外指令,以修改連續指令集合之步驟。如此,當編譯器101在一第二指令之後插入一第一指令時,編譯器101建立該第一指令,且在該連續指令集合內將該第一指令置放在該第二指令之後。同樣地,當編譯器101在一第二指令之前插入一第一指令時,編譯器101建立該第一指令,且在該連續指令集合內將該第一指令置放在該第二指令之前。
第六圖揭示根據本發明之一具體實施例之用於執行虛擬暫存器劃分之方法步驟的流程圖,說明於第五圖的步驟515內。雖然已結合第一圖至第四圖來描述該等方法步驟,不過精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法600從步驟602開始,其中編譯器101將該等原始指令內的虛擬暫存器的活動範圍指派給擁有者叢集。如所知,活動範圍包括對一虛擬暫存器的多次存取,從將一值寫入該虛擬暫存器開始,且在下一寫入該虛擬暫存器之前,從該虛擬暫存器最後讀取該值結束。一擁有者叢集為「擁有」虛擬暫存器的一特定活動範圍之叢集405。步驟602的結果為所有虛擬暫存器活動範圍及對應擁有者叢集的清單。
在步驟604、606和608,編譯器101轉換寫入及讀取虛擬
暫存器的原始指令。讀取或寫入虛擬暫存器的指令包括(但不受限於)將一值指派給一虛擬暫存器(寫入)或從一虛擬暫存器讀取一值(讀取)的任何指令,並且應包括例如指派一值給一虛擬暫存器(寫入)及從一虛擬暫存器讀取一結果(讀取)的算術指令。單一指令可寫入及讀取虛擬暫存器。此一指令經過多次分析,讀取或寫入的每一虛擬暫存器都會經歷過一次上述之分析。
在步驟604,編譯器101轉換寫入指令,該等寫入指令已指派給一叢集,該叢集亦是寫入指令所寫入的該虛擬暫存器的擁有者叢集。在步驟606,編譯器101轉換讀取指令,該等讀取指令指派給一叢集,該叢集不是該讀取指令所讀取的該虛擬暫存器之擁有者叢集。在步驟608,編譯器101轉換寫入指令,該等寫入指令已指派給一叢集,該叢集不是該寫入指令所寫入的該虛擬暫存器之擁有者叢集。
第七圖揭示根據本發明之一具體實施例之用於指派擁有者叢集之方法步驟的流程圖,說明於第六圖的步驟602。雖然已結合第一圖至第四圖來描述該等方法步驟,不過精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法700從步驟702開始,其中編譯器101獲得下一虛擬暫存器活動範圍。如所知,活動範圍包括存取一虛擬暫存器的範圍,以從將一值寫入該虛擬暫存器開始,且在下一寫入該虛擬暫存器之前,從該虛擬暫存器最後讀取該值結束。因此,虛擬暫存器活動範圍包括指派給任何叢集405的所有指令,以存取一特定活動範圍內的該虛擬暫存器。虛擬暫存器可擁有多重活動範圍。因此,因為第七圖內的流程圖循環,所以可針對任何已知虛擬暫存器多次執行步驟702。
在步驟704,編譯器101針對該虛擬暫存器活動範圍,計數由指派給每一叢集405的指令所存取之次數。在步驟706,編譯器101指派一擁有者叢集至該虛擬叢集活動範圍,當成已經指派存取該虛擬暫存器活動範圍的大多數指令之叢集405。在步驟708,編譯器101檢查是否留下任何虛擬暫存器活動範圍。若留下虛擬暫存器活動範圍,則方法700回到步驟702。若未留下虛擬暫存器活動範圍,則方法700前往步驟604。
第八圖揭示根據本發明之一具體實施例之用於轉換擁有者
叢集寫入操作之方法步驟的流程圖,說明於第六圖的步驟604。雖然已結合第一圖至第四圖來描述該等方法步驟,不過精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法800從步驟802開始,其中編譯器101獲得該下一寫入指令,該指令已指派給一叢集,該叢集亦是一特定活動範圍內的該寫入指令所寫入的該虛擬暫存器之擁有者叢集。在步驟804,編譯器101檢查該活動範圍內是否還有該虛擬暫存器的任何無擁有者叢集讀取。換言之,編譯器101檢查是否還有任何指令指派給該活動範圍內的該虛擬暫存器的無擁有者叢集,其從該活動範圍內的該虛擬暫存器讀取。若該活動範圍內有該虛擬暫存器的無擁有者叢集讀取,則方法600前往步驟806。若該活動範圍內沒有該虛擬暫存器的無擁有者叢集讀取,則方法600回到步驟802。
在步驟806,編譯器101在該寫入指令之後插入一指令,將該虛擬暫存器內的該值複製到一全域虛擬暫存器。該全域虛擬暫存器用來使在該虛擬暫存器內的該值可用於非該活動範圍內該虛擬暫存器擁有者的叢集。
在步驟808,編譯器101檢查是否留下任何更多擁有者叢集寫入。換言之,編譯器101檢查是否有任何更多指令已指派給亦在特定活動範圍內,該等寫入指令所寫入的該虛擬暫存器的擁有者叢集之叢集。若留下任何擁有者叢集寫入,則方法800回到步驟802。若未留下任何擁有者叢集寫入,則方法800前往步驟606。
第九圖揭示根據本發明之一具體實施例之用於轉換無擁有者叢集讀取操作之方法步驟的流程圖,說明於第六圖的步驟606。雖然已結合第一圖至第四圖來描述該等方法步驟,不過精通技術人士應了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法900從步驟902開始,其中編譯器101獲得該下一讀取指令,該讀取指令已指派給一叢集,該叢集不是特定活動範圍內該讀取指令讀取的該虛擬暫存器的擁有者叢集。
在步驟904,編譯器101檢查該活動範圍內是否還有該虛擬
暫存器的多個無擁有者叢集讀取。換言之,編譯器101檢查在該活動範圍內是否還有該虛擬暫存器的多個讀取指令,亦指派給在步驟902所獲得該讀取指令已指派之叢集。若該活動範圍內沒有該虛擬暫存器的多個無擁有者叢集讀取,則方法900前往步驟906。若該活動範圍內有該虛擬暫存器的多個無擁有者叢集讀取,則方法900前往步驟908。
在步驟906,編譯器101改變步驟902內獲得的該讀取指令,使得取代從該虛擬暫存器讀取,該讀取指令取代從一對應全域暫存器讀取。該對應全域暫存器是在步驟806由編譯器101所插入該指令的目標。如上面關於步驟806之陳述,該對應全域暫存器用來使在步驟806所提及該虛擬暫存器中的該值可由並非該虛擬暫存器擁有者的叢集使用,例如步驟902中提到的該無擁有者叢集。
在步驟908,編譯器101檢查在步驟902獲得的該讀取指令是否為指派給其叢集的第一讀取指令。若在步驟902獲得的該讀取指令為指派給其叢集的該第一讀取指令,則編譯器101執行步驟910。若該讀取指令並非指派給其叢集的該第一讀取指令,則編譯器101執行步驟912。
在步驟910,編譯器101在該讀取指令之前插入一指令,將來自一對應全域暫存器的該值複製到一新虛擬暫存器。編譯器101亦改變該讀取指令以從該新虛擬暫存器讀取,而非從該讀取指令原來讀取的該虛擬暫存器讀取。該對應全域暫存器是在步驟806由編譯器101所插入該指令的目標。如上面關於步驟806之陳述,該全域暫存器用來使在步驟806提及的該虛擬暫存器中的該值可由非該虛擬暫存器擁有者的叢集使用,例如步驟902提到的該無擁有者叢集。總言之,在步驟910,編譯器101插入指令,將來自步驟806所提及該全域虛擬暫存器的一值帶入新的本機虛擬暫存器,並且改變該讀取指令以從此本機虛擬暫存器讀取。
在步驟912,編譯器101改變步驟902獲得的該讀取指令以從該新虛擬暫存器讀取,而非從該讀取指令原來讀取的該虛擬暫存器讀取。該新虛擬暫存器可為步驟910所提及的該新本機虛擬暫存器。因為步驟606已經在所有讀取指令上執行,包括一無擁有者叢集內的該第一讀取指令,編譯器101在一無擁有者叢集內的該第一讀取指令上執行步驟910,
並且插入一指令,將來自一全域虛擬暫存器的一值複製到該新虛擬暫存器,如步驟910所描述。此新虛擬暫存器亦是步驟912所提及的該虛擬暫存器。
在編譯器101執行步驟906、910或912之後,該方法前往步驟914。在步驟914,編譯器101檢查是否留下任何無擁有者叢集讀取。換言之,編譯器101檢查是否留下任何讀取指令,且該等讀取指令為指派給從該指令讀取且並非該虛擬暫存器的擁有者叢集之叢集。若留下任何無擁有者叢集讀取,則方法900回到步驟902。若未留下無擁有者叢集讀取,則方法900前往步驟608。
第十圖揭示根據本發明之一具體實施例之用於轉換無擁有者叢集寫入操作的方法步驟流程圖,說明於第六圖的步驟608。雖然已結合第一圖至第四圖來描述該等方法步驟,不過精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法1000從步驟1002開始,其中編譯器101獲得該下一寫入指令,該指令已指派給一特定活動範圍內的叢集,且該叢集不是該寫入指令所寫入的該虛擬暫存器的擁有者。
在步驟1003,編譯器101檢查是否有任何讀取指令指派給從該活動範圍內該虛擬暫存器讀取的該相同無擁有者叢集。若有讀取已指派給從該活動範圍內該虛擬暫存器讀取的該相同無擁有者叢集,則方法前往步驟1004。若沒有讀取指派給從該活動範圍內該虛擬暫存器讀取的該相同無擁有者叢集,則方法前往步驟1005。
在步驟1004,編譯器101改變該寫入指令以寫入至一新虛擬暫存器,而非其原來寫入的該虛擬暫存器。在步驟1006,編譯器101在該寫入指令之後插入一第一複製指令,將來自該新虛擬暫存器的該值複製到一對應全域虛擬暫存器。在步驟1008,編譯器101在該第一複製指令之後插入一第二複製指令,將來自該對應全域虛擬暫存器的該值複製到原來在步驟1002獲得的該寫入指令所寫入之該虛擬暫存器。
在步驟1005,編譯器101改變該寫入指令來寫入一對應全域虛擬暫存器。接下來,在步驟1007,編譯器101在該寫入指令之後插入
一複製指令,將來自該對應全域虛擬暫存器的該值複製到該虛擬暫存器。利用執行步驟1005和1007,該編譯器將由該無擁有者叢集寫入的該值複製到該擁有者叢集內該虛擬暫存器。在執行步驟1008或1007之後,編譯器101執行步驟1010。
在步驟1010,編譯器101檢查是否留下任何更多無擁有者叢集寫入。換言之,編譯器101檢查是否有任何寫入指令指派給未擁有該寫入指令所寫入的該虛擬暫存器之叢集。若留下無擁有者叢集寫入,則方法回到步驟1002。若未留下無擁有者叢集寫入,則方法前往步驟520。
如以下所揭示,第十一圖至第十二圖例示如何套用上面結合第五圖至第十圖所呈現技術之第一範例。然後第十三圖至第十四圖例示如何套用上面結合第五圖至第十圖所呈現技術之第二範例。
第十一圖為根據本發明之一具體實施例之描述在虛擬暫存器劃分之前與之後的範例程式碼區段之方塊圖。第十一圖描述具有在已指派給三個不同叢集C1、C2和C3的一虛擬指令集內指令之程式碼區段。第十一圖描述在虛擬暫存器劃分之前,指派給單一活動範圍1104內的一虛擬暫存器VR1之指令。顯示的該等指令為使用符號「W」表示的寫入,或使用符號「R」表示的讀取。寫入包括將一值寫入VR1的任何指令。讀取包括從VR1讀取一值的任何指令。其他指令可提供,但並未描述,且使用符號「.」表示。
程式碼區段1102-1、1102-2和1102-3包括尚未由虛擬暫存器劃分修改過的指令。指令1106指派給叢集C1、指令1108和1110指派給叢集C2,且指令1112指派給叢集C3。所有指令1106、1108、1110和1112存取相同虛擬暫存器也就是暫存器VR1。再者,虛擬暫存器VR1的活動範圍1104被顯示。活動範圍1104從指令1108(VR1的第一寫入)延伸至指令1110(VR1的最後讀取)。
程式碼區段1122-1、1122-2和1122-3包括已由虛擬暫存器劃分修改過的指令。指令1126指派給叢集C1、指令1128和1130指派給叢集C2,且指令1132指派給叢集C3。指令1126、1128、1130和1132分別對應至指令1106、1208、1110和1112。
該擁有者叢集為叢集C1。在程式碼區段1102-1內,活動範圍1104內存有對VR1三個存取。在程式碼區段1102-2內,活動範圍1104內存有對VR1的兩存取。在程式碼區段1102-3內,活動範圍1104內存有對VR1的一存取。在程式碼區段1102-1內,指派給叢集C1的指令在活動範圍1104內存有對VR1的多次存取。因此,叢集C1為活動範圍1104內VR1的擁有者叢集。
程式碼區段1102-1包括讀取指令1106。因為叢集C1為該擁有者叢集,指派給叢集C1的讀取(包含從VR1讀取的指令1106)不被修改。VR1為其擁有者叢集(叢集C1)的一本機虛擬暫存器。如此,讀取指令1126與讀取指令1106相同。
程式碼區段1102-2包括寫入指令1108和讀取指令1110。寫入指令1128為寫入指令1108的修改版本。寫入指令1128將一值寫入一新的本機虛擬暫存器VR2。VR2為對叢集C2來說屬於本機的一本機虛擬暫存器。寫入指令1128亦將寫入VR2的該值複製到VR1,其為叢集C1的該本機虛擬暫存器。將來自VR2的該值複製到VR1並未直接完成,而是透過使用一全域虛擬暫存器MVR0來完成。因此,寫入指令1128利用該指令「MOV MVR0,VR2」先將該值複製到全域虛擬暫存器MVR0,然後利用該指令「MOV VR1,MVR0」將該值複製到該虛擬暫存器VR1。讀取指令1130從該新的虛擬暫存器也就是暫存器VR2讀取,其為叢集C2的該本機虛擬暫存器。
程式碼區段1102-3只包括一指令,即讀取指令1112。因為程式碼區段1102-3內無其他指令運用在活動範圍1104內的VR1,所以讀取指令1132直接從該全域虛擬暫存器MVR0讀取。
第十二圖為根據本發明之一具體實施例之一多階暫存檔階層1200的方塊圖。請參考第十一圖來討論第十二圖。叢集C1具有本機暫存檔1206-1、叢集C2具有本機暫存檔1206-2,且叢集C3具有本機暫存檔1206-3。主暫存檔1210亦提供並可由叢集C1、C2和C3存取。本機虛擬暫存器VR1已指派給叢集C1內的實體暫存器1208-1、本機暫存器VR2已指派給叢集C2內的實體暫存器1208-2,且全域虛擬暫存器MVR0已指派給
主戰存檔1210內的實體暫存器1212。箭頭1214、1216和1218指示由指令1126、1128、1130和1132(第十一圖內)存取實體暫存器內的值,指派給叢集C1、C2和C3。
箭頭1214-1對應至指令1126,其讀取儲存在實體暫存器1208-1內的該值。箭頭1216-1對應至指令1128和1130。一值在指令1128時寫入至實體暫存器1208-2,且在指令1130時由實體暫存器1208-2讀取。箭頭1216-2對應至指令1128內的該複製指令(「MOV」),其將來自實體暫存器1208-2的該值複製到實體暫存器1212。箭頭1216-3對應至指令1128內的該第一複製指令,其將實體暫存器121內的該值複製到實體暫存器1208-1。箭頭1218對應至讀取指令1132,該讀取指令是從實體暫存器1212讀取。
第十三圖為根據本發明之一具體實施例之描述在虛擬暫存器劃分之前與之後的範例程式碼區段之方塊圖。第十三圖描述具有在已指派給三個不同叢集C1、C2和C3的一虛擬指令集內指令之程式碼區段。第十三圖將焦點放在虛擬暫存器劃分之前,存取位於兩不同活動範圍1304-1和1304-2內的單一虛擬暫存器VR1的指令。該等顯示的指令為使用符號「W」表示的寫入,或使用符號「R」表示的讀取。寫入包括將一值寫入VR1的任何指令。讀取包括從VR1讀取一值的任何指令。其他指令可提供,但並未描述,且使用符號「.」表示。
程式碼區段1302-1、1302-2和1302-3包括尚未由虛擬暫存器劃分修改過的指令。指令1306和1308指派給叢集C1、指令1310、1312和1314指派給叢集C2,且指令1316和1318指派給叢集C3。所有指令1306、1308、1310、1312、1314、1316和1318都存取相同虛擬暫存器也就是暫存器VR1。不過,指令1306、1310和1316都在第一活動範圍1304-1內,而指令1308、1314和1318則在第二活動範圍1304-2內。因為有對VR1的兩種不同寫入,即指令1310為一第一寫入且指令1318為一第二寫入,故在此有兩種活動範圍1304-1、1304-2適用於虛擬暫存器VR1。第一活動範圍1304-1從第一寫入1310延伸直到下一寫入1318之前的最後讀取1312,且第二活動範圍1304-2從第二寫入1318延伸直到最後讀取1308。
程式碼區段1322-1、1322-2和1322-3包括已由虛擬暫存器劃分修改過的指令。指令1326和1328指派給叢集C1、指令1330、1332和1334指派給叢集C2,且指令1336和1338指派給叢集C3。指令1326、1328、1330、1332、1334、1336和1338分別對應指令1306、1308、1310、1312、1314、1316和1318。
針對第一活動範圍1304-1,該擁有者叢集為叢集C2。在程式碼區段1302-1內,活動範圍1304-1內存有對VR1的一次存取。在程式碼區段1302-2內,活動範圍1304-1內存有對VR1的兩次存取。在程式碼區段1302-3內,活動範圍1304-1內存有對VR1的一次存取。在活動範圍1304-1內,指派給叢集C2的指令存在動範圍1304-1內存有對VR1的多次取活。因此,叢集C2為活動範圍1304-1內的VR1之擁有者叢集。在活動範圍1304-1內,只有一指令存取已指派給叢集C1的VR1。因此,指令1326直接從一全域虛擬暫存器MVR0讀取。在活動範圍1304-1內,叢集C2內的該第一指令為寫入指令1310。因此,指令1330包括一複製指令,將來自VR1的該值複製到該全域虛擬暫存器MVR0。當C2為活動範圍1324-1內的VR1之該擁有者叢集時,則不修改1330內的該寫入指令和1332內的該讀取指令都。在活動範圍1304-1內,唯一指派給叢集C3的指令為一讀取指令。因此,指令1336直接從該全域虛擬暫存器MVR0讀取。
針對第二活動範圍1304-2,該擁有者叢集為叢集C2。在程式碼區段1302-1內,活動範圍1304-2內存有對VR1的一存取。在程式碼區段1302-2內,活動範圍1304-2內存有對VR1的兩存取。在程式碼區段1302-3內,活動範圍1304-2內存有對VR1的一存取。指派給活動範圍1304-2內的叢集C2的指令在活動範圍1304-1內存有對VR1的多次存取。因此,叢集C2為活動範圍1304-2內的VR1之擁有者叢集。在活動範圍1304-2內,只有一指令存取已指派給叢集C1的VR1。因此,指令1328直接從一全域虛擬暫存器MVR0讀取。在活動範圍1304-2內,叢集C2內的該等指令都為兩讀取指令。當C2為活動範圍1334-2內的VR1之該擁有者叢集時,指令1334與指令1314一致。在活動範圍1304-2內,只有指派給叢集C3的指令為一寫入指令。因此,指令1338直接寫至該全域虛擬暫存器MVR0,
然後將MVR0內的該值複製到該擁有者叢集(叢集C2)的VR1。
第十四圖為根據本發明之一具體實施例之一多階暫存檔階層1400的方塊圖。請參考第十三圖來討論第十四圖。叢集C1具有本機暫存檔1406-1、叢集C2具有本機暫存檔1406-2,且叢集C3具有本機暫存檔1406-3。主暫存檔1410亦提供並可由叢集C1、C2和C3存取。本機虛擬暫存器VR1已指派給叢集C1內的實體暫存器1408,且全域虛擬暫存器MVR0已指派給主暫存檔1410內的一實體暫存器1412。叢集C2內的相同實體暫存器1408可用於活動範圍1304-1和1304-2兩者內的VR1,因為活動範圍1304-1和1304-2並不重疊。類似地,主暫存檔1410內的相同實體暫存器1412可用於活動範圍1304-1和1304-2兩著內的MVR0,因為活動範圍1304-1和1304-2並不重疊。箭頭1414、1416和1318指示由指派給叢集C1、C2和C3的指令1326、1328、1330、1332、1334、1336和1338(第十一圖內)存取實體暫存器內的值。
箭頭1414對應至指令1326和1328,其讀取在實體暫存器1412內儲存的該值。箭頭1416-1對應至指令1330和1338,其中一值從VR1複製到MVR0,其中一值從MVR0複製到VR1。箭頭1416-2對應至指令1330,其將一值寫入至VR1;及對應至指令1332和1334,其從VR1讀取該值。箭頭1418對應至指令1336和1338,其從MVR0讀取一值,並且將一值寫入MVR0。
總結來說,根據本說明書內的說明,一編譯器修改程式碼,其中內含指令來從虛擬暫存器讀取資料以將資料寫入至虛擬暫存器,以有利地在多階暫存檔階層內將虛擬暫存器分配給實體暫存器。多階暫存檔階層包含實體暫存器,並且可在具有複數個叢集的一串流多重處理器內使用硬體實施。每一叢集都有一或多個功能單元,用於處理指令。此外,每一叢集都具有一低階暫存檔,只能由該處理叢集內的該等功能單元直接存取。高階暫存檔存在於該串流多重處理器內,且可由所有叢集直接存取。
該編譯器分析具有指令從虛擬暫存器讀取或寫入虛擬暫存器的程式碼,並且將這些指令之每一者分配至一對應叢集。然後該編譯器利用每一虛擬暫存器活動範圍的每一叢集,根據虛擬暫存器存取(讀取或
寫入)的次數,決定虛擬暫存器活動範圍且指派擁有者叢集給每一虛擬暫存器活動範圍。然後該編譯器修改該程式碼內存取虛擬暫存器的指令,使得該等虛擬暫存器內的值可儲存在該等擁有者叢集的該低階暫存檔內。該編譯器修改已指派給擁有者叢集的指令,及已指派給無擁有者叢集的指令。
該編譯器修改指派給擁有者叢集的指令,使得已分配給擁有者叢集的虛擬暫存器內地(local)該等值都儲存在對於該等擁有者叢集而言屬於本機的「本機虛擬暫存器」內。針對指派給該等擁有者叢集將一值寫入該等本機虛擬暫存器之指令,該編譯器插入一額外指令,將來自該本機虛擬暫存器的該值複製到一對應「全體虛擬暫存器」,使得無擁有者叢集可存取該本機虛擬暫存器內的該值。
該編譯器亦修改指令,該等指令已指派給無擁有者叢集,且存取分配給一擁有者叢集的一虛擬暫存器內的值。尤其是,該編譯器修改指派給一無擁有者叢集的指令,以讀取或寫入已分配至一擁有者叢集的一本機虛擬暫存器內地值,使得指派給該無擁有者叢集的該等指令讀取或寫入來自該對應全域虛擬暫存器的值。
本機虛擬暫存器稍後分配至低階暫存檔內的實體暫存器,而全域虛擬暫存器稍後分配至高階暫存檔內的實體暫存器。
本說明書所提供技術的一項優點為該揭示技術可設置指令存取一多階暫存檔階層內的暫存器,使得已經存取的暫存器通常可分配至本機暫存檔內的實體暫存器。
本發明之一具體實施例可實施搭配電腦系統使用的程式產品。該程式產品的程式定義該等具體實施例(包括本說明書所述的方法)的功能,並且可包括在電腦可讀取儲存媒體上。例示的電腦可讀取儲存媒體包括但不受限於:(i)其上資訊永久儲存的不可抹除儲存媒體(例如電腦內的唯讀記憶體裝置,例如小型碟片唯讀記憶體(CD-ROM)光碟機可讀取的CD-ROM光碟、快閃記憶體、ROM晶片或任何一種固態非揮發性半導體記憶體);及(ii)其上其儲存可變資訊的可抹除儲存媒體(例如磁碟機或硬碟內的磁碟或任何一種固態隨機存取半導體記憶體)。
在此已經參考特定具體實施例說明本發明。不過精通此技術
的人士應了解,在不悖離申請專利範圍內描述之本發明廣泛精神及範疇下,可進行許多修改與變更。因此前述說明與圖式僅供參考而不是限制。
因此,本發明具體實施例的範疇描述於文後申請專利範圍之內。
Claims (10)
- 一種分配一處理單元內的暫存器之方法,該方法包括:指派複數個指令給複數個處理叢集,其中,每一該指令構成存取一活動範圍內的一第一虛擬暫存器;決定該等複數個處理叢集內的哪個處理叢集為該活動範圍內的該第一虛擬暫存器的一擁有者叢集;及設置在該等複數個指令內包括的一第一指令,以存取一第一全域虛擬暫存器,其中該第一指令是被指派至該擁有者叢集。
- 如申請專利範圍第1項之方法,其中,該第一指令實施對該第一虛擬暫存器進行一寫入操作。
- 如申請專利範圍第2項之方法,其中:該第一指令在一程式控制流中具有一對應位置;及設置該第一指令包括:決定指派給一無擁有者叢集的一指令是否從該第一虛擬暫存器實施一讀取操作;及在該第一指令的該程式控制流內的該對應位置之後,插入一複製指令,其中,該複製指令係實施一複製操作,將該第一虛擬暫存器內的一值複製到該第一全域虛擬暫存器。
- 如申請專利範圍第1項之方法,其中,該第一指令實施對該第一虛擬暫存器進行一寫入操作,且被指派給一無擁有者叢集。
- 如申請專利範圍第4項之方法,其中:該第一指令在一程式控制流中具有一對應位置;及設置該第一指令包括:設置該第一指令實施對一第二虛擬暫存器的一寫入操作;在該第一指令的該程式控制流內的該對應位置之後,插入一第一複製指令,其中,該第一複製指令係實施一複製操作,將該第二虛擬暫存器內的一值複製到該第一全域虛擬暫存器;及在該第一複製指令之後插入一第二複製指令,其中,該第二複製指令實施另一複製操作,將該第一全域虛擬暫存器內的一值複製到 該第一虛擬暫存器。
- 如申請專利範圍第1項之方法,其中,該第一指令實施自該第一虛擬暫存器進行一讀取操作,且被指派給一無擁有者叢集。
- 如申請專利範圍第6項之方法,其中,設置該第一指令包括:決定是否只有一讀取指令實施自該第一虛擬暫存器進行該讀取操作,且指派給該活動範圍內的該無擁有者叢集;及設置該第一指令實施自該第一虛擬暫存器進行該讀取操作。
- 如申請專利範圍第6項之方法,其中:該第一指令在一程式控制流中具有一對應位置;及設置該第一指令包括:決定是否有構成從該活動範圍內的該第一虛擬暫存器進行讀取的複數個讀取指令,且被指派給該無擁有者叢集;在該第一指令的該程式控制流內的該對應位置之前,插入一第一複製指令,其中,該第一複製指令構成將該第一全域暫存器內的一值複製到一第二虛擬暫存器;及設置該等複數個讀取指令實施自該第二虛擬暫存器進行一讀取操作。
- 一種用於分配一處理單元內的暫存器之計算裝置,該計算裝置包括:一處理器;及一記憶體,其耦合至該處理器,其中,該記憶體包括一具有指令的編譯器,該等指令由該處理器執行時導致該處理器:指派複數個指令給複數個處理叢集,其中,每一指令係存取一活動範圍內的一第一虛擬暫存器;決定該等複數個處理叢集內的哪個處理叢集為該活動範圍內的該第一虛擬暫存器的一擁有者叢集;及設置包括在該等複數個指令內的一第一指令,以存取一第一全域虛擬暫存器,其中該第一指令是被指派至該擁有者叢集。
- 如申請專利範圍第9項之計算裝置,其中: 該第一指令實施對該第一虛擬暫存器的一寫入操作;該第一指令在一程式控制流中具有一對應位置;及設置該第一指令包括:決定指派給一無擁有者叢集的一指令是否構成從該第一虛擬暫存器實施一讀取操作;及在該第一指令的該程式控制流內的該對應位置之後,插入一複製指令,其中,該複製指令係實施一複製操作,將該第一虛擬暫存器內的一值複製到該第一全域虛擬暫存器。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/710,909 US9229717B2 (en) | 2012-12-11 | 2012-12-11 | Register allocation for clustered multi-level register files |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201435728A TW201435728A (zh) | 2014-09-16 |
TWI502489B true TWI502489B (zh) | 2015-10-01 |
Family
ID=50778230
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102142292A TWI502489B (zh) | 2012-12-11 | 2013-11-20 | 叢集多階暫存檔的暫存器分配 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9229717B2 (zh) |
CN (1) | CN103870309A (zh) |
DE (1) | DE102013019333A1 (zh) |
TW (1) | TWI502489B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10049054B2 (en) * | 2015-04-01 | 2018-08-14 | Micron Technology, Inc. | Virtual register file |
US9582255B1 (en) | 2015-08-28 | 2017-02-28 | International Business Machines Corporation | Method of splitting register live ranges |
WO2017049590A1 (en) * | 2015-09-25 | 2017-03-30 | Intel Corporation | Systems and methods for input/output computing resource control |
WO2017074377A1 (en) * | 2015-10-29 | 2017-05-04 | Intel Corporation | Boosting local memory performance in processor graphics |
CN106648545A (zh) * | 2016-01-18 | 2017-05-10 | 天津大学 | 一种gpu中用于分支处理的寄存器文件结构 |
US10423415B2 (en) * | 2017-04-01 | 2019-09-24 | Intel Corporation | Hierarchical general register file (GRF) for execution block |
CN107632830B (zh) * | 2017-09-19 | 2020-07-10 | 首都师范大学 | 一种溢出优化的寄存器分配方法及系统 |
US10877757B2 (en) * | 2017-11-14 | 2020-12-29 | Nvidia Corporation | Binding constants at runtime for improved resource utilization |
US12099823B2 (en) * | 2023-01-16 | 2024-09-24 | International Business Machines Corporation | Reducing register pressure |
CN116560729B (zh) * | 2023-05-11 | 2024-06-04 | 北京市合芯数字科技有限公司 | 一种多线程处理器的寄存器多级管理方法及系统 |
CN117971349B (zh) * | 2024-03-29 | 2024-07-05 | 北京壁仞科技开发有限公司 | 计算设备、为计算设备配置虚拟寄存器的方法、控制设备、计算机可读存储介质和计算机程序产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050278707A1 (en) * | 2004-06-09 | 2005-12-15 | Intel Corporation | Method and system providing virtual resource usage information |
US20100037037A1 (en) * | 2008-08-06 | 2010-02-11 | National Tsing Hua University | Method for instruction pipelining on irregular register files |
US20110107068A1 (en) * | 2009-10-30 | 2011-05-05 | International Business Machines Corporation | Eliminating redundant operations for common properties using shared real registers |
TW201342240A (zh) * | 2012-01-11 | 2013-10-16 | Nvidia Corp | 解決執行緒發散的方法和系統 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7493417B2 (en) * | 2002-12-12 | 2009-02-17 | International Business Machines Corporation | Method and data processing system for microprocessor communication using a processor interconnect in a multi-processor system |
JP4016396B2 (ja) * | 2003-06-02 | 2007-12-05 | 日本電気株式会社 | マルチセルシステム |
JP2008502083A (ja) * | 2004-06-08 | 2008-01-24 | ユニバーシティー オブ ロチェスター | クラスタ化されたプロセッサ群における通信並列性のトレードオフを動的に管理する方法 |
US7299342B2 (en) * | 2005-05-24 | 2007-11-20 | Coresonic Ab | Complex vector executing clustered SIMD micro-architecture DSP with accelerator coupled complex ALU paths each further including short multiplier/accumulator using two's complement |
JP4778286B2 (ja) * | 2005-09-28 | 2011-09-21 | パナソニック株式会社 | コンパイラ装置 |
US8738821B2 (en) * | 2005-11-18 | 2014-05-27 | International Business Machines Corporation | Selecting a path comprising ports on primary and secondary clusters to use to transmit data at a primary volume to a secondary volume |
US8933954B2 (en) * | 2011-03-23 | 2015-01-13 | Qualcomm Incorporated | Register allocation for graphics processing |
-
2012
- 2012-12-11 US US13/710,909 patent/US9229717B2/en active Active
-
2013
- 2013-11-20 DE DE201310019333 patent/DE102013019333A1/de active Pending
- 2013-11-20 TW TW102142292A patent/TWI502489B/zh active
- 2013-12-11 CN CN201310675182.8A patent/CN103870309A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050278707A1 (en) * | 2004-06-09 | 2005-12-15 | Intel Corporation | Method and system providing virtual resource usage information |
US20100037037A1 (en) * | 2008-08-06 | 2010-02-11 | National Tsing Hua University | Method for instruction pipelining on irregular register files |
US20110107068A1 (en) * | 2009-10-30 | 2011-05-05 | International Business Machines Corporation | Eliminating redundant operations for common properties using shared real registers |
TW201342240A (zh) * | 2012-01-11 | 2013-10-16 | Nvidia Corp | 解決執行緒發散的方法和系統 |
Also Published As
Publication number | Publication date |
---|---|
US20140164745A1 (en) | 2014-06-12 |
DE102013019333A1 (de) | 2014-06-12 |
US9229717B2 (en) | 2016-01-05 |
TW201435728A (zh) | 2014-09-16 |
CN103870309A (zh) | 2014-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI502489B (zh) | 叢集多階暫存檔的暫存器分配 | |
TWI552108B (zh) | 運用於執行緒單一指令多重資料執行之編譯器控制區域排程 | |
TWI490782B (zh) | 來源運算元收集器快取的方法和裝置 | |
TWI498819B (zh) | 執行成型記憶體存取作業的系統和方法 | |
TWI531974B (zh) | 管理巢狀執行串流的方法和系統 | |
TWI604410B (zh) | 改善暫存器不足和提升平行處理的即時分析式重新計算技術 | |
CN110008009B (zh) | 在运行时绑定常量以提高资源利用率 | |
TWI588653B (zh) | 針對記憶體存取的動態記憶列模式定址 | |
TWI489392B (zh) | 多個應用程式分享的圖形處理單元 | |
US10007527B2 (en) | Uniform load processing for parallel thread sub-sets | |
TWI466027B (zh) | 解決執行緒發散的方法及系統 | |
TW201439970A (zh) | 儲存共用頂點之技術 | |
TW201435591A (zh) | 存取內容可定址記憶體之技術 | |
TW201443826A (zh) | 儲存共用頂點之技術 | |
US11663767B2 (en) | Power efficient attribute handling for tessellation and geometry shaders | |
TWI525438B (zh) | 透過貼圖硬體執行記憶體存取操作之技術 | |
TW201439770A (zh) | 透過貼圖硬體執行記憶體存取操作之技術 | |
TW201435576A (zh) | 陷阱處理期間的協作執行緒陣列粒化內文切換 | |
TWI501156B (zh) | 多頻時間切面組 | |
TW201432573A (zh) | 工作佇列型圖形處理單元工作創建 | |
US10235208B2 (en) | Technique for saving and restoring thread group operating state | |
TW201351276A (zh) | 計算工作的排程和執行 |