TWI881835B - 配置中繼暫存器模組的方法和裝置、計算設備和電腦可讀媒介 - Google Patents
配置中繼暫存器模組的方法和裝置、計算設備和電腦可讀媒介 Download PDFInfo
- Publication number
- TWI881835B TWI881835B TW113119350A TW113119350A TWI881835B TW I881835 B TWI881835 B TW I881835B TW 113119350 A TW113119350 A TW 113119350A TW 113119350 A TW113119350 A TW 113119350A TW I881835 B TWI881835 B TW I881835B
- Authority
- TW
- Taiwan
- Prior art keywords
- task
- relay
- allocated
- registers
- register
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公開涉及一種配置中繼暫存器模組的方法,其包括以下步驟:接收任務調度器發送的至少一個任務的啟動分配請求;基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量;針對每個任務,分配對應數量的中繼暫存器;在分配完成的情況下,發送喚醒信號至所述任務調度器,所述喚醒信號用於所述任務調度器啟動已分配中繼暫存器的任務;其中所述中繼暫存器模組用於儲存基於任務的指令運算得到的中間結果。本公開還涉及一種配置中繼暫存器模組的裝置。
Description
本發明涉及晶片技術領域,尤其是涉及一種配置中繼暫存器模組的方法和裝置。此外,本公開還涉及一種對應的計算設備和電腦可讀媒介。
通用資料暫存器可以用於中央處理器或者圖形處理器各管線存放屬性、私有資料等相關資訊,其使用量一般較大。相關技術中,會出現各管線同時訪問通用資料暫存器埠造成擁塞等待的問題。
本公開提出一種配置中繼暫存器模組的技術方案,通過為任務動態配置用於儲存基於任務的指令運算得到的中間結果的中繼暫存器,能夠緩解各管線同時訪問通用資料暫存器埠造成擁塞等待的問題。
根據本公開的一個方面,提供了一種配置中繼暫存器模組的方法,其包括以下步驟:
接收任務調度器發送的至少一個任務的啟動分配請求,
基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量,
針對每個任務,分配對應數量的中繼暫存器,
在分配完成的情況下,發送喚醒信號至所述任務調度器,所述喚醒信號用於所述任務調度器啟動已分配中繼暫存器的任務,其中,所述中繼暫存器模組用於儲存基於任務的指令運算得到的中間結果。
根據該方法的一些示例性實施例,所述啟動分配請求包括任務的工作模式和待分配給任務中每個工作項實例的中繼暫存器的數量,其中,所述基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量,包括:根據任務的工作模式對應的細微性以及待分配給任務中每個工作項實例的中繼暫存器的數量,確定待分配給每個任務的中繼暫存器的數量,其中所述細微性表徵相應任務包括的工作項實例的最大數量。
根據該方法的一些示例性實施例,所述待分配給任務中每個工作項實例的中繼暫存器的數量是基於同時啟動的任務的限定數量確定的。
根據該方法的一些示例性實施例,不同工作模式的任務中每個工作項實例待分配有不同數量的中繼暫存器,並且相同工作模式的任務中每個工作項實例待分配有相同或不同數量的中繼暫存器。
根據該方法的一些示例性實施例,待分配給每個任務的中繼暫存器的數量小於或等於參考數值,其中,所述參考數值是基於中繼暫存器的總數量、所述任務的工作模式以及配置的最大中繼暫存器使用量確定的。
根據該方法的一些示例性實施例,所述任務包括至少一個工作項實例,每個工作項實例分配至少一個中繼暫存器,所述方法還包括:在中繼暫存器中第一指令的計算結果已使用完畢的情況下,在所述中繼暫存器中儲存第二指令的計算結果,其中,所述第一指令和所述第二指令為同一工作項實例的指令,第二指令為所述第一指令的後續指令。
根據該方法的一些示例性實施例,所述針對每個任務,分配對應數量的中繼暫存器,包括:基於待分配給所述任務的中繼暫存器的數量,確定所述中繼暫存器模組中用於分配給所述任務的可用行,所述可用行為可供分配的中繼暫存器行;將所述可用行的中繼暫存器分配給所述任務,並將所述可用行標記為已分配的中繼暫存器行。
根據該方法的一些示例性實施例,所述可用行包括索引值,所述任務包括編號,所述方法還包括:獲取所述任務的編號和分配給相應任務的可用行的索引值並將所述編號和所述索引值記錄在行位址表中,其中,所述編號用於管理所述行位址表。
根據該方法的一些示例性實施例,所述方法還包括:回應於接收對所述中繼暫存器模組的訪問請求,根據所述訪問請求包括的任務的編號和所述行位址表,生成所述訪問請求對應的中繼暫存器的物理位址,其中,所述物理位址用於對所述中繼暫存器模組進行訪問。
根據該方法的一些示例性實施例,所述方法還包括:回應於接收到任務結束信號,回收分配給所述任務結束信號對應任務的中繼暫存器。
根據本公開的另一方面,提供了一種配置中繼暫存器模組的裝置,其包括以下模組:
中繼暫存器控制器,其用於接收任務調度器發送的至少一個任務的啟動分配請求;並且基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量;
分配單元,其針對每個任務,分配對應數量的中繼暫存器;
通知單元,在分配完成的情況下,發送喚醒信號至所述任務調度器,所述喚醒信號用於所述任務調度器啟動已分配中繼暫存器的任務;
其中,所述中繼暫存器模組用於儲存基於任務的指令運算得到的中間結果。
根據該裝置的一些示例性實施例,所述啟動分配請求包括任務的工作模式和待分配給任務中每個工作項實例的中繼暫存器的數量,所述中繼暫存器控制器被配置成,根據任務的工作模式對應的細微性以及待分配給任務中每個工作項實例的中繼暫存器的數量,確定待分配給每個任務的中繼暫存器的數量,其中所述細微性表徵相應任務包括的工作項實例的最大數量。
根據該裝置的一些示例性實施例,所述待分配給任務中每個工作項實例的中繼暫存器的數量是基於同時啟動的任務的限定數量確定的。
根據該裝置的一些示例性實施例,不同工作模式的任務中每個工作項實例待分配有不同數量的中繼暫存器,並且相同工作模式的任務中每個工作項實例待分配有相同或不同數量的中繼暫存器。
根據該裝置的一些示例性實施例,待分配給每個任務的中繼暫存器的數量小於或等於參考數值,其中,所述參考數值是基於中繼暫存器的總數量、所述任務的工作模式以及配置的最大中繼暫存器使用量確定的。
根據該裝置的一些示例性實施例,所述任務包括至少一個工作項實例,每個工作項實例分配至少一個中繼暫存器,所述分配單元被配置成,在中繼暫存器中第一指令的計算結果已使用完畢的情況下,在所述中繼暫存器中儲存第二指令的計算結果,其中,所述第一指令和所述第二指令為同一工作項實例的指令,第二指令為所述第一指令的後續指令。
根據該裝置的一些示例性實施例,所述分配單元被配置成,基於待分配給所述任務的中繼暫存器的數量,確定所述中繼暫存器模組中用於分配給所述任務的可用行,所述可用行為可供分配的中繼暫存器行;將所述可用行的中繼暫存器分配給所述任務,並將所述可用行標記為已分配的中繼暫存器行。
根據該裝置的一些示例性實施例,所述可用行包括索引值,所述任務包括編號,所述分配單元還被配置成,獲取所述任務的編號和分配給相應任務的可用行的索引值並將所述編號和所述索引值記錄在行位址表中,其中,所述編號用於管理所述行位址表。
根據該裝置的一些示例性實施例,所述分配單元還被配置成,回應於接收對所述中繼暫存器模組的訪問請求,根據所述訪問請求包括的任務的編號和所述行位址表,生成所述訪問請求對應的中繼暫存器的物理位址,其中,所述物理位址用於對所述中繼暫存器模組進行訪問。
根據該裝置的一些示例性實施例,所述分配單元還被配置成,回應於接收到任務結束信號,回收分配給所述任務結束信號對應任務的中繼暫存器。
根據本公開的另一方面,提供了一種計算設備,其包括:處理器;和用於儲存處理器可執行指令的記憶體;其中,所述處理器被配置為調用所述記憶體儲存的指令,以執行根據上述實施例中任一項所述的方法。
根據本公開的另一方面,提供了一種其上儲存有指令的電腦可讀媒介,所述指令當被執行時使得計算設備執行根據上述實施例中任一項所述的方法。
通過本公開的一個實施例,由於可以根據每個任務的啟動分配請求給每個任務分配對應數量的中繼暫存器,這樣,通過動態配置用於儲存基於任務的指令運算得到的中間結果的中繼暫存器,能夠緩解各管線同時訪問通用資料暫存器埠造成擁塞等待的問題。
為使本公開的目的、技術方案及優點更加清楚明白,以下參照圖式並舉實施例,對本公開技術方案作進一步說明。應該進一步理解,使用在該說明書中,用語“包括”意指存在所陳述的特徵、步驟、操作、部件和/或元件,但是並不排除存在或添加一個或更多個其他特徵、步驟、操作、部件、元件和/或其組成的組。
相關技術中,通用資料暫存器用於CPU或者GPU各管線中存放屬性、私有資料或位址等相關資訊,其使用量一般較大,例如,一般情況下每個任務的任意一個工作項實例均可以分配幾十個到最多兩百多個。並且,這種配置數量隨著任務數量的變化而變化,例如,單個任務使用通用暫存器數量多,能啟動的任務數量必然就少,甚至無法按照設定的最多工數量而使用。同時,通用資料暫存器供所有管線使用,包括整數或浮點型ALU管線、特殊算數功能管線、紋理採樣管線等等,這就使得各管線同時訪問通用資料暫存器埠造成擁塞等待等問題。而內核中計算ALU處理單元運行在內核高頻狀態下,也正是這種高速運轉,需要減少通用資料暫存器訪問擁塞,從而使得內核處理能夠達到最好的性能。
本公開提供一種配置中繼暫存器模組的方法,其中,中繼暫存器模組可以用來儲存基於任務的指令運算得到的中間結果,例如,存放浮點運算或者定點數運算的中間結果。這樣,在前後幾條指令之間使用的中間結果,可以立即從中繼暫存器讀取並被後續指令使用,從而能夠減少通用資料暫存器的訪問壓力,以使得內核處理能過夠達到較好的性能,並且,還可以提高浮點運算單元的運行效率。
通過中繼暫存器存放指令中間結果,可以使得管線中任務的後續指令可以快速訪問獲取該中間結果。中繼暫存器的使用可以減少浮點型邏輯運算單元以及整數邏輯運算單元管線中訪問通用資料暫存器的壓力,它具有存取速度快、週期短、頻寬高、容量小等特點。並且,編譯器在編譯過程中可以通過配合使用通用資料暫存器和中繼暫存器資源來優化編譯出的指令,使邏輯運算單元管線性能更佳。
為便於理解,下文以應用於GPU為例進行說明,本公開實施例提供的配置中繼暫存器模組的方法可以適用於任何應用場景。
現有桌面GPU架構基本使用了純SIMD(Single Instruction Multiple Data,單指令多資料流程)32或CUDA的純SIMT(Single Instruction Multiple Thread,單指令多執行緒)32,這種純SIMD32的小核心結構固定將32個工作項實例組裝在一起執行,並行性很好。通常在並行程式設計中使用SIMD32結構,32個工作項實例同時執行相同的指令行為等。在部分行動GPU架構中,為了減少內核面積和降低功耗,通常會採用SIMD128這種128個工作項實例組裝在一起執行的大核心結構。然而,SIMD32小核心結構對於無需太過於複雜的計算,會增加執行緒調度次數、指令發射和取指次數,而SIMD128大核心結構對於小任務,資源浪費比較嚴重。因此,根據不同的使用場景採用不同的結構是適宜的。
在本申請中,wave是一種自訂的SIMD Thread(執行緒),wave32表示32個工作項實例組裝成的平行線程束,wave128表示128個工作項實例組裝成的平行線程束。
圖1示出根據本公開的一個實施例的配置中繼暫存器模組的方法100的流程圖。示例性地,本公開的配置中繼暫存器模組的方法可以由配置中繼暫存器模組的裝置執行,例如,GPU中用於配置中繼暫存器模組的裝置執行。如圖1中所示,方法100包括:
步驟S100,接收任務調度器發送的至少一個任務的啟動分配請求;
步驟S200,基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量;
步驟S300,針對每個任務,分配對應數量的中繼暫存器;
步驟S400,在分配完成的情況下,發送喚醒信號至所述任務調度,所述喚醒信號用於所述任務調度器啟動已分配中繼暫存器的任務;
其中,所述中繼暫存器模組用於儲存基於任務的指令運算得到的中間結果。
通過這種方式,由於可以根據每個任務的啟動分配請求給每個任務分配對應數量的中繼暫存器,通過動態配置用於儲存基於任務的指令運算得到的中間結果的中繼暫存器,能夠緩解各管線同時訪問通用資料暫存器埠造成擁塞等待的問題。並且,即使由於個別任務需要使用大量通用資料暫存器資源而啟動任務數量少時,可以基於啟動分配請求給待運行的任務分配更多的中繼暫存器資源,從而充分利用了在固定分配中繼暫存器時閒置的中繼暫存器區域,進而提高中繼暫存器的利用率。
其中,啟動分配請求可以是針對一個或多個任務的啟動分配請求,分配完成發送喚醒信號至任務調度器,可以是在啟動分配請求對應所有任務均分配完成的情況下,也可以針對任意一個已分配完成的任務發送的喚醒信號,其中,針對一個任務,分配完成可以是確定分配給該任務的所有中繼暫存器均已分配完成,也可以是確定分配給該任務的部分中繼暫存器已分配完成。示例性地,配置中繼暫存器模組的裝置確定當前可用的中繼暫存器行僅為待分配給該任務的部分中繼暫存器行,則也可以進行部分配置,例如,待分配給該任務4行中繼暫存器,當前可用的中繼暫存器行為2行,可以在2行分配完成後,確定分配完成,並發送喚醒信號至所述任務調度器。需要說明的是,部分配置的情況下,在執行部分代碼後確定解析出來的指令需要更多中繼暫存器的情況下,該任務可被阻塞,任務調度器可以重新發起啟動分配請求,配置中繼暫存器模組的裝置基於啟動分配請求,執行中繼暫存器配置操作,本公開對此不作限制。示例性地,任務調度器發送的啟動分配請求對應的任務為編譯確定需要配置中繼暫存器的任務。
本申請中,中繼暫存器可以動態分配給對應的任務,分配給每個任務的中繼暫存器數量和中繼暫存器區域都可以動態變化,例如,在個別任務需要使用大量通用資料暫存器資源而啟動任務數量少時,可以分配給啟動任務較多數量的中繼暫存器,充分利用中繼暫存器資源,從而可以解決中繼暫存器與任務固定綁定、當啟動任務數量少時,空閒的任務部分的中繼暫存器區域仍然無法使用,導致資源浪費的問題。
示例性地,任務可以包括wave32和wave128。替代地或附加地,任務也可以包括wave64等。示例性地,wave32的啟動分配請求可以包括該任務的工作模式、即wave32模式和待分配給任務中每個工作項實例的中繼暫存器的數量,該數量可以根據同時啟動的任務的數量被設置為2、4、6、8等。示例性地,wave128的啟動分配請求可以包括該任務的工作模式、即wave128模式和待分配給任務中每個工作項實例的中繼暫存器的數量,該數量可以根據同時啟動的任務的數量被設置為2、4等。在一些可選的實施例中,wave128模式的任務中每個工作項實例所分配的中繼暫存器的數量小於wave32模式的任務中每個工作項實例所分配的中繼暫存器的數量。此外,相同工作模式的不同任務中每個工作項實例所分配的中繼暫存器的數量也可以不同。例如,一個wave32中每個工作項實例分配的中繼暫存器的數量為2,而另一wave32中每個工作項實例分配的中繼暫存器的數量為4。
通過這種方式,可以根據每個任務的啟動分配請求給每個任務分配不同數量的中繼暫存器數量。需要說明的是,為相容多種任務工作模式、採用中繼暫存器與任務綁定的方式,需要按照最大執行細微性設計每個任務對應的中繼暫存器,例如,為相容wave32模式和wave128模式,需要按照128個工作項實例的執行力度來設計,硬體實現開銷過大。並且,如果通用資料暫存器資料量使用大,導致任務啟動不滿的情況下,中繼暫存器與任務綁定的方式會導致每個任務可使用數量固定,此時大量中繼暫存器資源空閒無法使用。
本公開實施例可以為每個任務動態分配中繼暫存器,無需按照多工工作模式中的最大執行細微性來設計,能夠有效減少硬體開銷。針對在不同模式運行的情況下,可以實現在儘量不增加開銷的情況下,充分使用中繼暫存器資源,提高使用效率。
示例性地,由於中繼暫存器並沒有與各個工作項實例固定綁定,因此在確定分配給每個任務的中繼暫存器數量後,可以將相應數量的中繼暫存器分配給相應任務。在分配完成的情況下,發送喚醒信號至任務調度器,以便任務調度器啟動已分配中繼暫存器的任務。示例性地,任務調度器中的任務如果需要配置中繼暫存器,則任務調度器可以將該任務阻塞住,直至收到已對該任務完成中繼暫存器配置的喚醒信號之後,任務調度器可以基於收到的喚醒信號,允許該任務參與調度。
其中,基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量可以是基於任務的類型確定每個任務對應的中繼暫存器數量,例如,針對wave128模式的任務,可以分配與wave128模式對應數量的中繼暫存器,還可以是啟動分配請求包括任務申請的中繼暫存器數量,基於任務申請的中繼暫存器數量進行分配,本公開對確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量的方式不作限制。
在一種可能的實現方式中,所述啟動分配請求包括任務的工作模式和待分配給任務中每個工作項實例的中繼暫存器的數量,其中,所述基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量,包括:根據任務的工作模式對應的細微性以及待分配給任務中每個工作項實例的中繼暫存器的數量,確定待分配給每個任務的中繼暫存器的數量,其中所述細微性表徵相應任務包括的工作項實例的最大數量。
示例性地,wave32模式對應的細微性為32,並且如果待分配給wave32中每個工作項實例的中繼暫存器的數量為4,則分配給該wave32的中繼暫存器的數量為32*4=128。示例性地,wave128模式對應的細微性為128,並且如果待分配給wave128中每個工作項實例的中繼暫存器的數量為2,則分配給該wave128的中繼暫存器的數量為128*2=256。此外,即使wave32中所包括的工作項實例的數量小於32,也給該wave32分配128個中繼暫存器。同樣,即使wave128中所包括的工作項實例的數量小於128,也給該wave128分配256個中繼暫存器。
如前所述,在相容多種工作模式時,如wave32與wave128同時使用的狀態下,如果採用綁定模式,則需要按照最大執行細微性的模式來設計,此處需要按wave128的128個工作項實例的執行細微性來設計。這樣,在執行wave32任務時,有對應96個工作項實例的中繼暫存器空間閒置,這導致了極大的資源浪費。通過本公開實施例的實現方式,可以給wave32任務中每個工作項實例配置更多的中繼暫存器使用量,從而使讀寫效率更高。
在一種可能的實現方式中,所述待分配給任務中每個工作項實例的中繼暫存器的數量是基於同時啟動的任務的限定數量確定的。
示例性地,在編譯器編譯時可以根據任務佔用通用資料暫存器資源的多少而限定同時啟動任務的數量來決定分配給每個工作項實例的中繼暫存器數量。示例性地,待分配給任務中每個工作項實例的中繼暫存器的數量與同時啟動的任務的限定數量呈反相關(或稱負相關)關係,例如,同時啟動的任務的限定數量越小,待分配給任務中每個工作項實例的中繼暫存器的數量可以越大。通過這種方式,能夠實現對中繼暫存器資源的更高效的利用。
如前所述,不同工作模式的任務中每個工作項實例待分配的中繼暫存器數量可以相同或不同。
在一種可能的實現方式中,不同工作模式的任務中每個工作項實例待分配有不同數量的中繼暫存器,相同工作模式的任務中每個工作項實例待分配有相同或不同數量的中繼暫存器。
示例性地,wave128模式的任務中每個工作項實例所分配的中繼暫存器的數量可以等於或小於wave32模式的任務中每個工作項實例所分配的中繼暫存器的數量。例如,wave128模式的任務中每個工作項實例所分配的中繼暫存器的數量為2,而wave32模式的任務中每個工作項實例所分配的中繼暫存器的數量為4。當然,也可以給兩種模式下的每個工作項實例分別分配其他數量的中繼暫存器,這可以視同時啟動的任務數量來確定。附加地,還可以根據同時啟動的任務的工作模式來確定。此外,相同工作模式的不同任務中每個工作項實例所分配的中繼暫存器的數量也可以不同。例如,一個wave32中每個工作項實例分配的中繼暫存器的數量為2,而另一wave32中每個工作項實例分配的中繼暫存器的數量為4。當然,也可以給相同模式下的每個工作項實例分別分配其他數量的中繼暫存器,這可以視同時啟動的任務數量來確定。附加地,還可以根據同時啟動的任務的工作模式來確定。在一些可選的實施例中,相同工作模式的不同任務中每個工作項實例所分配的中繼暫存器的數量可以是相同的。
通過這種方式,能夠實現對中繼暫存器資源的更高效的利用。
其中,待分配給每個任務的中繼暫存器的數量可以被限定,例如,可以小於或等於參考數值。
在一種可能的實現方式中,待分配給每個任務的中繼暫存器的數量小於或等於參考數值,其中,所述參考數值是基於中繼暫存器的總數量、所述任務的工作模式以及配置的最大中繼暫存器使用量確定的。
示例性地,假設總的中繼暫存器數量K = M個bank * N個任務 * SIMD_Numb,每個任務配置單個實例的最大中繼暫存器使用量T, aligned_size表示對齊的單個實例中繼暫存器行所包含的DW數(DW為Double-Word的簡寫,譯為雙字),aligned_line表示需要分配的中繼暫存器行數。中繼暫存器的數量所能支援的純wave128模式的任務的數量為Num_of_Wave128= K/(SIMD_128 * aligned_size * ((T+ aligned_ size - 1)/ aligned_ size)),超過此數量的Wave將因分配不到中繼暫存器而進入阻塞狀態;中繼暫存器的數量所能支援的純wave32模式的任務的數量為Num_of_Wave32= K/(SIMD_32 * aligned_size * ((T+ aligned_ size - 1)/ aligned_size)),超過此數量的Wave將因分配不到中繼暫存器而進入阻塞狀態。
通過這種方式,在給每個任務配置了最大中繼暫存器使用量的情況下,使每個任務所分配的中繼暫存器的數量在一個範圍內靈活選擇,既保證了中繼暫存器的更高效利用,又減少某個任務分配過多中繼暫存器,從而影響新的任務的啟動的情況。
在一種可能的實現方式中,所述任務包括至少一個工作項實例,每個工作項實例分配至少一個中繼暫存器,所述方法還包括:在中繼暫存器中第一指令的計算結果已使用完畢的情況下,在所述中繼暫存器中儲存第二指令的計算結果,其中,所述第一指令和所述第二指令為同一工作項實例的指令,第二指令為所述第一指令的後續指令。
示例性地,wave32可以包括大於等於1個工作項實例且小於等於32個工作項實例,而wave128可以包括大於等於1個工作項實例且小於等於128個工作項實例。替代地,wave128也可以包括大於等於33個工作項實例且小於等於128個工作項實例。示例性地,每個工作項實例都可以分配至少一個中繼暫存器,例如2個、4個、6個等。同一個任務內的每個工作項實例具有自己的中繼暫存器空間,同一個任務前面指令寫回後,通過任務內部指令調度隱藏延遲後,可立即提供給後一條指令使用,再次寫回時,只要保證前面指令使用完成,即可直接覆蓋前面的結果。例如,同一工作項實例包括第一指令和所述第二指令,第二指令為所述第一指令的後續指令,當第一指令的計算結果已使用完畢的情況下,第二指令的結果可以寫入儲存第一指令的中繼暫存器,即覆蓋第一指令的中間結果。
通過這種方式,可以保證中繼暫存器的迴圈利用,無需給每個工作項實例分配過多的中繼暫存器、提高中繼暫存器的利用率。
在一種可能的實現方式中,所述針對每個任務,分配對應數量的中繼暫存器,包括:基於待分配給所述任務的中繼暫存器的數量,確定所述中繼暫存器模組中用於分配給所述任務的可用行,所述可用行為可供分配的中繼暫存器行;將所述可用行的中繼暫存器分配給所述任務,並將所述可用行標記為已分配的中繼暫存器行。
示例性地,通過一個有效可用行資訊表來管理中繼暫存器模組的中繼暫存器行。當中繼暫存器模組中的某一中繼暫存器行可供分配時,在有效可用行資訊表中對應於該可供分配的中繼暫存器行的標誌為1;當中繼暫存器模組中的某一中繼暫存器行不可供分配時,例如已經被分配或佔用,在有效可用行資訊表中對應於該不可供分配的中繼暫存器行的標誌為0。示例性地,當將該可供分配的中繼暫存器行分配給某一任務時,將該中繼暫存器行在有效可用行資訊表中的標誌變更為0。替代地,當中繼暫存器模組中的某一中繼暫存器行可供分配時,在有效可用行資訊表中對應於該可供分配的中繼暫存器行的標誌為0;當中繼暫存器模組中的某一中繼暫存器行不可供分配時,例如已經被分配或佔用,在有效可用行資訊表中對應於該不可供分配的中繼暫存器行的標誌為1。對應地,當將該可供分配的中繼暫存器行分配給某一任務時,將該中繼暫存器行在有效可用行資訊表中的標誌變更為1。
通過這種方式,可以給每個任務動態地分配中繼暫存器行。
在一種可能的實現方式中,所述可用行包括索引值,所述任務包括編號,所述方法還包括:獲取所述任務的編號和分配給相應任務的可用行的索引值並將所述編號和所述索引值記錄在行位址表中,其中,所述編號用於管理所述行位址表。
示例性地,每個任務在任務調度器中都被分配一個編號waveid,並且任務調度器中每個任務的編號不同於其他任務的編號,也即通過該編號可以識別該任務。示例性地,每個可用行對應於一個索引值bitid。在一個示例中,將有效可用行資訊表設置成一個48bit的有效標記表,每1bit表示一個中繼暫存器行有效可用。一般用1表示可使用,0表示已使用。實質上就是查找第x-bit有效,然後將這個x與任務的編號waveid一起填到行位址表中。示例性地,任務的編號waveid可以被用於管理所述行位址表,這樣管線在訪問中繼暫存器時只需要發送任務的編號就可以對中繼暫存器進行訪問。示例性地,可以根據分配給任務的中繼暫存器數量,連續查找有效可用行資訊表,配置多行中繼暫存器供該任務使用,可以一次遍歷一遍進行填充。
通過這種方式,可以將任務的編號與中繼暫存器模組中的可用的中繼暫存器行關聯,使得在管線訪問中繼暫存器時只需要提供任務的編號。
在一種可能的實現方式中,所述方法還包括:回應於接收對所述中繼暫存器模組的訪問請求,根據所述訪問請求包括的任務的編號和所述行位址表,生成所述訪問請求對應的中繼暫存器的物理位址,其中,所述物理位址用於對所述中繼暫存器模組進行訪問。
示例性地,由於行位址表是通過任務的編號進行管理的,當接收對所述中繼暫存器模組的訪問請求,通過任務的編號就可以確定分配給該任務的中繼暫存器行的索引值,通過該索引值就可以確定分配給該任務的中繼暫存器行的物理位址(LineID和BankID),通過該物理位址就可以對中繼暫存器的實際儲存區域進行訪問。
通過這種方式,可以實現對中繼暫存器的實際儲存區域的簡單且高效訪問。
在一種可能的實現方式中,所述方法還包括:回應於接收到任務結束信號,回收分配給所述任務結束信號對應任務的中繼暫存器。
示例性地,任務調度器在收到管線執行相應任務結束的信號之後,釋放該任務在任務調度器中所佔用的空間並且將一個包含任務編號的任務結束信號發送給中繼暫存器控制器。該中繼暫存器控制器回應於接收到該任務結束信號,通知分配單元來回收分配給該任務編號的中繼暫存器行。示例性地,分配單元將該任務編號對應的索引值所指向的有效可用行資訊表中的位元從0變更為1,表示可供分配。
通過該方式,可以實現中繼暫存器儲存空間的迴圈利用。
圖2示出中繼暫存器與任務(wave)固定綁定的示意圖。
如圖2中所示,中繼暫存器與wave固定綁定,屬於固定配置,無需分配。中繼暫存器數量也是按照內核支持的最大wave數量固定配置,每個wave所分配的中繼暫存器數量無法根據啟動wave數量變化而變化,導致wave需要使用大量通用資料暫存器資源而啟動wave數量少時,這些空閒的wave部分的中繼暫存器區域仍然無法使用,導致資源浪費。
圖2中示意了n個wave,每個wave綁定m個中繼暫存器,總的開銷就是n*m*SIMD實例數量。這個大小始終固定不變,即使啟動1個wave,也只能使用m個中繼暫存器。受限於中繼暫存器開銷大,因此一般每個中繼暫存器的數量m會固定為2或者4。
圖3示出根據本公開的一個實施例的配置中繼暫存器模組的裝置300的框圖。該裝置300解決問題的原理與前文所述的實施例的方法類似,因此其具體的實施可以參考前文所述的實施例。
如圖3中所示,裝置300可以包括中繼暫存器控制器301、分配單元302和通知單元303。中繼暫存器控制器301可以被配置用於接收任務調度器發送的至少一個任務的啟動分配請求;並且基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量。在一個示例中,任務調度器發送多個任務的啟動分配請求,這些任務可以包括wave32和wave128。替代地或附加地,任務也可以包括wave64等。示例性地,wave32的啟動分配請求可以包括該任務的工作模式、即wave32模式和待分配給任務中每個工作項實例的中繼暫存器的數量,該數量可以根據同時啟動的任務的數量被設置為2、4、6、 8等。進一步地,中繼暫存器控制器301可以被配置用於根據任務的工作模式對應的細微性以及待分配給任務中每個工作項實例的中繼暫存器的數量,確定待分配給每個任務的中繼暫存器的數量,其中所述細微性表徵相應任務包括的工作項實例的最大數量。示例性地,wave32模式對應的細微性為32,並且如果待分配給wave32中每個工作項實例的中繼暫存器的數量為4,則分配給該wave32的中繼暫存器的數量為32*4=128。示例性地,wave128模式對應的細微性為128,並且如果待分配給wave128中每個工作項實例的中繼暫存器的數量為2,則分配給該wave128的中繼暫存器的數量為128*2=256。此外,即使wave32中所包括的工作項實例的數量小於32,也給該wave32分配128個中繼暫存器。同樣,即使wave128中所包括的工作項實例的數量小於128,也給該wave128分配256個中繼暫存器。
示例性地,待分配給任務中每個工作項實例的中繼暫存器的數量是基於同時啟動的任務的限定數量確定的。例如,在編譯器編譯時就根據任務佔用通用資料暫存器資源的多少而同時啟動任務的數量來決定分配給每個工作項實例的中繼暫存器數量。通過這種方式,能夠實現對中繼暫存器資源的更高效的利用。
示例性地,不同工作模式的任務中每個工作項實例待分配有不同數量的中繼暫存器,並且相同工作模式的任務中每個工作項實例待分配有相同或不同數量的中繼暫存器。例如,wave128模式的任務中每個工作項實例所分配的中繼暫存器的數量小於wave32模式的任務中每個工作項實例所分配的中繼暫存器的數量。例如,wave128模式的任務中每個工作項實例所分配的中繼暫存器的數量為2,而wave32模式的任務中每個工作項實例所分配的中繼暫存器的數量為4。當然,也可以給兩種模式下的每個工作項實例分別分配其他數量的中繼暫存器,這視同時啟動的任務數量來確定。附加地,還可以根據同時啟動的任務的工作模式來確定。此外,相同工作模式的不同任務中每個工作項實例所分配的中繼暫存器的數量也可以不同。例如,一個wave32中每個工作項實例分配的中繼暫存器的數量為2,而另一wave32中每個工作項實例分配的中繼暫存器的數量為4。當然,也可以給相同模式下的每個工作項實例分別分配其他數量的中繼暫存器,這視同時啟動的任務數量來確定。附加地,還可以根據同時啟動的任務的工作模式來確定。在一些可選的實施例中,相同工作模式的不同任務中每個工作項實例所分配的中繼暫存器的數量可以是相同的。通過這種方式,能夠實現對中繼暫存器資源的更高效的利用。
示例性地,待分配給每個任務的中繼暫存器的數量小於或等於參考數值,其中,所述參考數值是基於中繼暫存器的總數量、所述任務的工作模式以及配置的最大中繼暫存器使用量確定的。例如,假設總的中繼暫存器數量K = M個bank * N個任務 * SIMD_Numb,每個任務配置最大中繼暫存器使用量T,aligned_size表示對齊的單個實例對應的中繼暫存器行所包含的DW數,aligned_line表示分配的中繼暫存器行數。中繼暫存器的數量所能支援的純wave128模式的任務的數量為Num_of_Wave128= K/(SIMD_128 *aligned_size * ((T+ aligned_size - 1)/ aligned_size)),超過此數量的Wave將因分配不到中繼暫存器而進入阻塞狀態;中繼暫存器的數量所能支援的純wave32模式的任務的數量為Num_of_Wave32= K/(SIMD_32 * aligned_size * ((T+ aligned_ size - 1)/ aligned_ size)),超過此數量的Wave將因分配不到中繼暫存器而進入阻塞狀態。通過這種方式,在給每個任務配置了最大中繼暫存器使用量的情況下,使每個任務所分配的中繼暫存器的數量在一個範圍內靈活選擇,既保證了中繼暫存器的更高效利用,又避免了某個任務分配過多中繼暫存器,從而影響新的任務的啟動。
分配單元302可以被配置用於針對每個任務,分配對應數量的中繼暫存器。示例性地,分配單元302可以基於待分配給所述任務的中繼暫存器的數量,確定所述中繼暫存器模組中用於分配給所述任務的可用行,所述可用行為可供分配的中繼暫存器行;將所述可用行的中繼暫存器分配給所述任務,並將所述可用行標記為已分配的中繼暫存器行。示例性地,通過一個有效可用行資訊表來管理中繼暫存器模組的中繼暫存器行。當中繼暫存器模組中的某一中繼暫存器行可供分配時,在有效可用行資訊表中對應於該可供分配的中繼暫存器行的標誌為1;當中繼暫存器模組中的某一中繼暫存器行不可供分配時,例如已經被分配或佔用,在有效可用行資訊表中對應於該不可供分配的中繼暫存器行的標誌為0。示例性地,當將該可供分配的中繼暫存器行分配給某一任務時,將該中繼暫存器行在有效可用行資訊表中的標誌變更為0。替代地,當中繼暫存器模組中的某一中繼暫存器行可供分配時,在有效可用行資訊表中對應於該可供分配的中繼暫存器行的標誌為0;當中繼暫存器模組中的某一中繼暫存器行不可供分配時,例如已經被分配或佔用,在有效可用行資訊表中對應於該不可供分配的中繼暫存器行的標誌為1。對應地,當將該可供分配的中繼暫存器行分配給某一任務時,將該中繼暫存器行在有效可用行資訊表中的標誌變更為1。通過這種方式,可以給每個任務動態地分配中繼暫存器行。
所述可用行包括索引值,所述任務包括編號,分配單元302還可以被配置用於獲取所述任務的編號和分配給相應任務的可用行的索引值並將所述編號和所述索引值記錄在行位址表中,其中,所述編號用於管理所述行位址表。
示例性地,每個任務在任務調度器中都被分配一個編號waveid,並且任務調度器中每個任務的編號不同於其他任務的編號,即通過該編號可以識別該任務。示例性地,每個可用行對應於一個索引值bitid。在一個示例中,將有效可用行資訊表設置成一個48bit的有效標記表,每1bit表示一個中繼暫存器行有效可用。一般用1表示可使用,0表示已使用。實質上就是查找第x-bit有效,然後將這個x與任務的編號waveid一起填到行位址表中。示例性地,任務的編號waveid可以被用於管理所述行位址表,這樣管線在訪問中繼暫存器時只需要發送任務的編號就可以對中繼暫存器進行訪問。示例性地,可以根據分配給任務的中繼暫存器數量,連續查找有效可用行資訊表,配置多行中繼暫存器供該任務使用,可以一次遍歷一遍進行填充。通過這種方式,可以將任務的編號與中繼暫存器模組中的可用的中繼暫存器行關聯,使得在管線訪問中繼暫存器時只需要提供任務的編號。
分配單元302還可以被配置用於,回應於接收對所述中繼暫存器模組的訪問請求,根據所述訪問請求包括的任務的編號和所述行位址表,生成所述訪問請求對應的中繼暫存器的物理位址,其中,所述物理位址用於對所述中繼暫存器模組進行訪問。示例性地,由於行位址表是通過任務的編號進行管理的,當接收對所述中繼暫存器模組的訪問請求,通過任務的編號就可以確定分配給該任務的中繼暫存器行的索引值,通過該索引值就可以確定分配給該任務的中繼暫存器行的物理位址(LineID和BankID),通過該物理位址就可以對中繼暫存器的實際儲存區域進行訪問。通過這種方式,可以實現對中繼暫存器的實際儲存區域的簡單且高效訪問。
分配單元302還可以被配置用於,回應於接收到任務結束信號,回收分配給所述任務結束信號對應任務的中繼暫存器。示例性地,任務調度器在收到管線執行相應任務結束的信號之後,將一個包含任務編號的任務結束信號發送給中繼暫存器控制器301。該中繼暫存器控制器301回應於接收到該任務結束信號,通知分配單元302來回收分配給該任務編號的中繼暫存器行。任務調度器在收到中繼暫存器控制器301的釋放回收完成信號後才釋放該任務在任務調度器中所佔用的空間,完成任務的結束釋放操作。示例性地,分配單元302將該任務編號對應的索引值所指向的有效可用行資訊表中的位元從0變更為1,表示可供分配。通過該方式,可以實現中繼暫存器儲存空間的迴圈利用。
由於所述任務包括至少一個工作項實例,每個工作項實例分配至少一個中繼暫存器,分配單元302還可以被配置用於,在中繼暫存器中第一指令的計算結果已使用完畢的情況下,在所述中繼暫存器中儲存第二指令的計算結果,其中,所述第一指令和所述第二指令為同一工作項實例的指令,第二指令為所述第一指令的後續指令。示例性地,wave32可以包括大於等於1個工作項實例且小於等於32個工作項實例,而wave128可以包括大於等於1個工作項實例且小於等於128個工作項實例。替代地,wave128也可以包括大於等於33個工作項實例且小於等於128個工作項實例。示例性地,每個工作項實例都分配至少一個中繼暫存器,例如1個、2個、4個、6個等。同一個任務內的每個工作項實例具有自己的中繼暫存器空間,同一個任務前面指令寫回後,通過任務內部指令調度隱藏延遲後,可立即提供給後一條指令使用,再次寫回時,只要保證前面指令使用完成,即可直接覆蓋前面的結果。通過這種方式,可以保證中繼暫存器的迴圈利用,避免了給每個工作項實例分配過多的中繼暫存器(如果沒必要的情況下)。
通知單元303可以被配置用於在分配完成的情況下,發送喚醒信號至所述任務調度器,所述喚醒信號用於所述任務調度器啟動已分配中繼暫存器的任務。示例性地,由於中繼暫存器並沒有與各個工作項實例固定綁定,因此在確定分配給每個任務的中繼暫存器數量後,需要將相應數量的中繼暫存器分配給相應任務。在分配完成的情況下,發送喚醒信號至任務調度器,以便任務調度器啟動已分配中繼暫存器的任務。示例性地,任務調度器中的任務如果需要配置中繼暫存器,則任務調度器將該任務阻塞住,直至收到已對該任務完成中繼暫存器配置的喚醒信號之後,任務調度器才允許該任務參與調度。
圖4示出根據本公開的另一實施例的配置中繼暫存器模組的裝置400的框圖。
裝置400可以包括中繼暫存器控制器、配置管理器、位址轉換器和讀/寫埠。在一種替代的實施方式中,裝置400也可以僅包括中繼暫存器控制器、配置管理器和位址轉換器。中繼暫存器控制器可以被配置用於接收上游(例如任務調度器)發送的至少一個任務的啟動分配請求(如包含任務的任務編號、工作模式及任務包括的工作項實例數量以及待分配給每個工作項實例的中繼暫存器的數量等)。中繼暫存器控制器可以根據所接收的任務的啟動分配請求來確定待分配給每個任務的所需的中繼暫存器行的數量,並且將所需的中繼暫存器行的數量發送給配置管理器。配置管理器可用被配置用於根據所需的中繼暫存器行的數量對所述中繼暫存器進行動態分配。當配置管理器分配完成回應時,中繼暫存器控制器將會發送喚醒通知,告知任務調度器該任務所需的中繼暫存器分配完成,可以啟動該任務參與調度執行。
所述中繼暫存器控制器在確定所需的中繼暫存器行的數量時根據多模式混合狀態下的不同任務所需要的中繼暫存器行的不同數量,對不同任務進行動態分配。特別是,所述中繼暫存器控制器可以根據由於具體使用場景而減少/增加同時啟動任務的數量的情況下,增加/減少相應任務所使用的中繼暫存器行的數量。
配置管理器維護一個有效可用行資訊表,查找和管理表中相關資訊,獲取可用有效可分配的資訊,並更新有效可用行資訊表中內容。在一個示例中,配置管理器從頭到尾查找有效可用行資訊表,查到第x-bit為標識可使用時(如設置為1表示該行可使用),則將該bit置為標識已使用(如設置為0表示該行已使用),其不能被其他任務佔用。在將可用行分配給所述任務之後,配置管理器將任務編號和有效位元索引值發送給位址轉換器。然後,位址轉換器將任務編號和有效位元索引值記錄在行位址表中。同時,配置管理器對可釋放任務的中繼暫存器進行回收,更新有效可用行資訊表中相關內容,回收供後續任務使用。在一個示例中,當所述任務執行結束時,所述配置管理器將所述可用行資訊表中的對應行的標識置為可使用(如設置為1表示該行可使用)。
位址轉換器按照任務編號來管理所述行位址表。在一個示例中,所述位址轉換器配置最大歸屬於一個任務的表項數量來限制一些應用場景中單次最多可啟動的任務數量。
附加地,當管線訪問中繼暫存器模組時,所述位址轉換器根據訪問請求並且根據所述行位址表來映射產生中繼暫存器的物理位址,例如行編號(Line ID)和塊編號(Bank ID)。示例性地,由於行位址表是通過任務的編號進行管理的,當接收對所述中繼暫存器模組的訪問請求,通過任務的編號就可以確定分配給該任務的中繼暫存器行的索引值,通過該索引值就可以確定分配給該任務的中繼暫存器行的物理位址(LineID和BankID),通過該物理位址就可以對中繼暫存器的實際儲存區域進行訪問。通過這種方式,可以實現對中繼暫存器的實際儲存區域的簡單且高效訪問。
附加地,讀/寫埠可以被配置用於,ALU管線經由所述讀/寫埠根據所述物理位址對所述中繼暫存器進行訪問。在一種替代的實施方式中,讀/寫埠也可以設置在中繼暫存器模組上。
圖5示出根據本公開的另一實施例的配置中繼暫存器模組的裝置500的框圖。
如圖5中所示,裝置500可以包括中繼暫存器控制器、配置管理器、位址轉換器、行位址表和讀/寫埠。在一種替代的實施方式中,裝置500也可以僅包括中繼暫存器控制器、配置管理器、位址轉換器和行位址表。在這種情況下,讀/寫埠可以設置在中繼暫存器模組上。裝置500可以如裝置400那樣來實施,它們的區別在於,在圖5中行位址表從配置管理器中分離出來,單獨來實施。
在圖5中,示例性地按照wave32、wave128相容模式來進行中繼暫存器分配:總的中繼暫存器數量K = M個bank * N個任務 * SIMD_Numb。程式啟動時,首先配置最大中繼暫存器使用量,如最大設置為T。aligned_size表示對齊的單個實例中繼暫存器行所包含的DW數。當中繼暫存器控制器從任務調度器接收到任務的啟動分配請求時,從該啟動分配請求中獲取中繼暫存器行的數量,表示要分配幾行中繼暫存器。在確定需要配置中繼暫存器的情況下,確定所述任務存在阻塞資訊,所述阻塞資訊包括需要配置中繼暫存器;在確定不需要配置中繼暫存器的情況下,確定所述任務為就緒狀態的任務。這裡wave128模式可配置成1,表示每個段(Seg)只能分配1個中繼暫存器行,4個段(Seg0、Seg1、Seg2、Seg3)對應4個中繼暫存器行。當wave32模式時,可以配置成((T+ aligned_size - 1)/ aligned_size)行,一般該計算結果為0、1、2、3、4個中繼暫存器行,對應每個工作項實例的中繼暫存器使用量為0、2、4、6、8個。示例性地,當一個任務被分配中繼暫存器行未完成時,可以理解成,暫時沒有空閒的中繼暫存器行可供分配,該任務可以一直等待,直至有其他任務執行完成後釋放出可供分配的中繼暫存器行,才給該任務分配中繼暫存器行。但是,當釋放的中繼暫存器行的數量不滿足啟動分配請求所要求的中繼暫存器行的數量時,配置管理器將使該任務分配繼續等待,直至釋放的中繼暫存器行的數量滿足啟動分配請求所要求的中繼暫存器行的數量。
在一些可選的實施例中,還可以針對任務執行部分中繼暫存器行分配步驟。示例性地,當一個任務需要分配4個中繼暫存器行,當前空閒2個中繼暫存器行,則可以執行2個中繼暫存器行的分配步驟,並在存在其他任務執行完成後釋放出可供分配的中繼暫存器行的情況下,執行剩餘2個中繼暫存器行的分配步驟,在待分配給該任務的所有中繼暫存器行均已分配的情況下,發送喚醒信號至所述任務調度器。
如wave32需要配置2個中繼暫存器行時,配置管理器通過從頭到尾查找有效可用行資訊表,查到第x-bit標識為可使用(例如1)時,則置為已使用標識(例如0),該bit不能被其他任務佔用。此時,將x值作為索引值連同任務編號一起填入行位址表的對應項中。在一個示例中,將有效可用行資訊表設置成一個48bit的有效標記表,每1bit表示一個中繼暫存器行有效可用。一般用1表示可使用,0表示已使用。實質上就是查找第x-bit有效,然後將這個x與任務的編號waveid一起填到行位址表中。示例性地,任務的編號waveid可以被用於管理所述行位址表,這樣管線在訪問中繼暫存器時只需要發送任務的編號就可以對中繼暫存器進行訪問。示例性地,可以根據分配給任務的中繼暫存器數量,連續查找有效可用行資訊表,配置多行中繼暫存器供該任務使用,可以一次遍歷一遍進行填充。通過這種方式,可以將任務的編號與中繼暫存器模組中的可用的中繼暫存器行關聯,使得在管線訪問中繼暫存器時只需要提供任務的編號。當任務結束釋放所分配的中繼暫存器行時,通過行位址表中表項將有效可用行位址表中對應bit置為可使用即可。
圖6示出根據本公開的一個實施例的動態分配中繼暫存器的示意圖。
如圖6中所示,在完成動態分配後,wave32 分配2個中繼暫存器行,wave128的每個段分配一個中繼暫存器行,映射結構如圖6所示。顯而易見的是,在同時啟動的任務比較少的情況下,可以給每個任務分配更多的中繼暫存器行。示例性地,wave32 分配4個中繼暫存器行(用於特殊優化),wave128的每個段分配2個中繼暫存器行。相較於固定綁定的情況,針對任務對通用資料暫存器使用量多而導致同時啟動任務的數量比較少的應用,可以動態分配更多中繼暫存器資源給每個任務或者動態分配更多中繼暫存器資源作為通用資料暫存器使用,有利於減輕多管線同時對通用資料暫存器的訪問壓力,同時提高了中繼暫存器資源利用率。
如圖6中所示,同一個任務內的每個工作項實例具有自己的中繼暫存器空間,同一個任務前面指令寫回後,通過任務內部指令調度隱藏延遲後,可立即提供給後一條指令使用,再次寫回時,只要保證前面指令使用完成,即可直接覆蓋前面的結果。
圖7示出根據本公開的一個實施例的任務調度器與中繼暫存器配置裝置之間的交互的示意圖。
如圖7中所示,程式實現通過編譯器編譯後,配置使用中繼暫存器的使用量。完成後,軟體或驅動模組會將它配置進命令控制流,然後通過中間各模組的調度管理並傳遞中間暫存器的使用量。直到傳導進任務調度器儲存wave儲存中。此時任務調度器將根據這個中繼暫存器使用量是否為0,這裡可以根據wave配置執行模式不同,設置為不同的使用量。若為0, 則不分配中繼暫存器,將wave狀態直接設置為就緒狀態進入調度資訊佇列進行調度執行;當不為0時,該wave需要通過中繼暫存器配置裝置進行配置,同時設置配置未完成的阻塞狀態。當該wave配置完成後,監視器檢測到該wave完成配置,清除阻塞狀態,更新wave條目為就緒狀態,將wave狀態更新為就緒狀態進入調度資訊佇列進行調度執行。
圖8示出根據本公開的另一實施例的任務調度器與中繼暫存器配置裝置之間的交互的示意圖。
如圖8中所示,當wave執行結束時,wave結束單元執行了結束指令後,會發出該wave編號的結束信號給任務調度器。任務調度器收到該結束信號,會發送釋放信號給中繼暫存器配置裝置。當完成釋放並回收中繼暫存器後,再返回wave編號的釋放回收完成信號,然後才會釋放該wave儲存資訊,完成wave的結束釋放操作。
在各種實施例中,裝置300、400、500可以用於執行如上文所描述的任何方法的步驟。因此,根據該方法的任意特徵適用於該裝置300、400、500並且反之亦然。
附加地或可替換地,可以使用電腦處理器、記憶體單元、存放裝置、電腦軟體和其他元件在一台或更多台電腦或伺服器或類似設備上實現本申請的上述方法、通用對接模組、服務平臺或協力廠商平臺。這種電腦或伺服器的高級框圖在圖9中示出。在此,電腦、伺服器或其他包括處理器的設備統稱為計算設備。計算設備902包含處理器904,處理器904通過執行定義了整體操作的電腦程式指令來控制電腦902的操作。可以將電腦程式指令儲存在儲存設備912(例如磁片)中並在需要執行電腦程式指令時將其載入到記憶體910中。因此,參照圖1的方法的步驟可以由儲存在記憶體910和/或儲存設備912中的電腦程式指令定義,並由執行該電腦程式指令的處理器904控制。計算設備902還包括一個或更多個網路介面906,用於經由網路與其他設備進行通信。計算設備902還包括使使用者能夠與電腦902進行交互的其他輸入/輸出設備908(例如,顯示器、鍵盤、滑鼠、揚聲器、按鈕等)。本領域的技術人員將認識到,實際電腦的實施例也可以包含其他元件,並且圖9是用於說明目的的這種電腦的一些元件的高級表示。
儲存設備912和記憶體910均包括有形的非暫時性電腦可讀儲存媒介。儲存設備912和記憶體910均可包括高速隨機存取記憶體,諸如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、雙倍數據速率同步動態隨機存取記憶體(DDR RAM)或其他隨機存取固態記憶體設備,並且可以包括非易失性記憶體,諸如一個或多個磁片存放裝置(諸如內部硬碟和抽取式磁碟)、磁光碟存放裝置、光碟存放裝置、快閃記憶體設備、半導體記憶體設備(諸如可擦除可程式設計唯讀記憶體(EPROM)、電可擦可程式設計唯讀記憶體(EEPROM)、緊湊盤唯讀記憶體(CD-ROM)、數位多功能盤唯讀記憶體(DVD-ROM)盤或其他非易失性固態存放裝置。
在另一實施例中,可以在基於網路的雲計算系統中實現上述方法、通用對接模組、服務平臺或協力廠商平臺。在這樣的基於網路的雲計算系統中,伺服器經由網路與一個或更多個用戶端電腦通信。用戶端電腦可以例如經由駐留在用戶端電腦上並在其上運行的網路瀏覽器應用與伺服器進行通信。用戶端電腦可以將資料儲存在伺服器上,並經由網路訪問該資料。用戶端電腦可以經由網路將資料請求或線上服務請求傳送到伺服器。伺服器可以實施所請求的服務,並將資料提供給(一個或多個)用戶端電腦。伺服器還可以傳送被適配為使用戶端電腦實施指定功能(例如,實施計算,在螢幕上顯示指定資料等)的資料。上述方法的某些步驟可以由伺服器或由基於網路的雲計算系統中的其他電腦/處理器實施。上述方法的某些步驟可以由基於網路的雲計算系統中的用戶端電腦本地實施。上述方法的步驟可以由基於網路的雲計算系統中的一個或更多個設備或者由本地用戶端電腦以任何組合來實施。
應認識到為了清楚起見在單獨實施例的上下文中描述的本申請的某些特徵還可以在單個實施例中以組合的方式提供。相反,為了簡便起見在單個實施例的上下文中描述的本申請的各種特徵還可以單獨地或以任何適當的子組合或在本申請的任何其他所述實施例中適當地提供。不應將在各種實施例的上下文中描述的某些特徵視為那些實施例的必要特徵,除非該實施例在沒有那些元素的情況下無效。
雖然已結合本申請的具體實施例描述了本申請,但是很明顯,許多替換、修改和變更對於本領域的技術人員來說將是顯而易見的。因此,旨在涵蓋屬於隨附申請專利範圍的精神和廣泛範圍內的所有此類替換、修改和變更。
本說明中提及的所有公開、專利和專利申請通過引用整體地結合於本文中,引用的程度如同具體且特別地指示每個單獨的公開、專利或專利申請以通過引用結合於本文一樣。另外,不應將本申請中的任何參考的引用或識別理解為允許此類參考作為現有技術可用於本申請。在使用分段標題的情況下,不應將其理解為一定是限制性的。
300:裝置
301:中繼暫存器控制器
302:分配單元
303:通知單元
400:裝置
500:裝置
902:計算設備
904:處理器
906:網路介面
908:輸入/輸出設備
910:記憶體
912:儲存設備
S100~S400:步驟
本發明之其他的特徵及功效,將於參照圖式的實施方式中清楚地呈現,其中:
圖1示出根據本公開的一個實施例的配置中繼暫存器模組的方法的流程圖。
圖2示出中繼暫存器與任務(wave)固定綁定的示意圖。
圖3示出根據本公開的一個實施例的配置中繼暫存器模組的裝置的框圖。
圖4示出根據本公開的另一實施例的配置中繼暫存器模組的裝置的框圖。
圖5示出根據本公開的另一實施例的配置中繼暫存器模組的裝置的框圖。
圖6示出根據本公開的一個實施例的動態分配中繼暫存器的示意圖。
圖7示出根據本公開的一個實施例的任務調度器與中繼暫存器配置裝置之間的交互的示意圖。
圖8示出根據本公開的另一實施例的任務調度器與中繼暫存器配置裝置之間的交互的示意圖。
圖9示出根據本公開一個實施例的計算設備的框圖。
S100~S400:步驟
Claims (22)
- 一種配置中繼暫存器模組的方法,所述方法包括: 接收任務調度器發送的至少一個任務的啟動分配請求; 基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量; 針對每個任務,分配對應數量的中繼暫存器; 在分配完成的情況下,發送喚醒信號至所述任務調度器,所述喚醒信號用於所述任務調度器啟動已分配中繼暫存器的任務, 其中,所述中繼暫存器模組用於儲存基於任務的指令運算得到的中間結果。
- 根據請求項1所述的方法,其中,所述啟動分配請求包括任務的工作模式和待分配給任務中每個工作項實例的中繼暫存器的數量,其中,所述基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量,包括: 根據任務的工作模式對應的細微性以及待分配給任務中每個工作項實例的中繼暫存器的數量,確定待分配給每個任務的中繼暫存器的數量,其中所述細微性表徵相應任務包括的工作項實例的最大數量。
- 根據請求項2所述的方法,其中,所述待分配給任務中每個工作項實例的中繼暫存器的數量是基於同時啟動的任務的限定數量確定的。
- 根據請求項2或3所述的方法,其中,不同工作模式的任務中每個工作項實例待分配有不同數量的中繼暫存器, 相同工作模式的任務中每個工作項實例待分配有相同或不同數量的中繼暫存器。
- 根據請求項1所述的方法,其中,待分配給每個任務的中繼暫存器的數量小於或等於參考數值,其中,所述參考數值是基於中繼暫存器的總數量、所述任務的工作模式以及配置的最大中繼暫存器使用量確定的。
- 根據請求項1所述的方法,其中,所述任務包括至少一個工作項實例,每個工作項實例分配至少一個中繼暫存器,所述方法還包括: 在所述中繼暫存器中第一指令的計算結果已使用完畢的情況下,在所述中繼暫存器中儲存第二指令的計算結果,其中,所述第一指令和所述第二指令為同一工作項實例的指令,所述第二指令為所述第一指令的後續指令。
- 根據請求項1所述的方法,其中,所述針對每個任務,分配對應數量的中繼暫存器,包括: 基於待分配給所述任務的中繼暫存器的數量,確定所述中繼暫存器模組中用於分配給所述任務的可用行,所述可用行為可供分配的中繼暫存器行; 將所述可用行的中繼暫存器分配給所述任務,並將所述可用行標記為已分配的中繼暫存器行。
- 根據請求項7所述的方法,其中,所述可用行包括索引值,所述任務包括編號,所述方法還包括: 獲取所述任務的編號和分配給相應任務的可用行的索引值並將所述編號和所述索引值記錄在行位址表中,其中,所述編號用於管理所述行位址表。
- 根據請求項8所述的方法,其中,所述方法還包括: 回應於接收對所述中繼暫存器模組的訪問請求,根據所述訪問請求包括的任務的編號和所述行位址表,生成所述訪問請求對應的中繼暫存器的物理位址, 其中,所述物理位址用於對所述中繼暫存器模組進行訪問。
- 根據請求項1所述的方法,其中,所述方法還包括: 回應於接收到任務結束信號,回收分配給所述任務結束信號對應任務的中繼暫存器。
- 一種配置中繼暫存器模組的裝置,所述裝置包括: 中繼暫存器控制器,其用於接收任務調度器發送的至少一個任務的啟動分配請求;並且基於所述啟動分配請求,確定待分配給所述至少一個任務中每個任務的中繼暫存器的數量; 分配單元,其針對每個任務,分配對應數量的中繼暫存器; 通知單元,其在分配完成的情況下,發送喚醒信號至所述任務調度器,所述喚醒信號用於所述任務調度器啟動已分配中繼暫存器的任務; 其中,所述中繼暫存器模組用於儲存基於任務的指令運算得到的中間結果。
- 根據請求項11所述的裝置,其中,所述啟動分配請求包括任務的工作模式和待分配給任務中每個工作項實例的中繼暫存器的數量,其中所述中繼暫存器控制器被配置用於根據任務的工作模式對應的細微性以及待分配給任務中每個工作項實例的中繼暫存器的數量,確定待分配給每個任務的中繼暫存器的數量,其中所述細微性表徵相應任務包括的工作項實例的最大數量。
- 根據請求項12所述的裝置,其中,所述待分配給任務中每個工作項實例的中繼暫存器的數量是基於同時啟動的任務的限定數量確定的。
- 根據請求項12或13所述的裝置,其中,不同工作模式的任務中每個工作項實例待分配有不同數量的中繼暫存器,相同工作模式的任務中每個工作項實例待分配有相同或不同數量的中繼暫存器。
- 根據請求項11所述的裝置,其中,待分配給每個任務的中繼暫存器的數量小於或等於參考數值,其中,所述參考數值是基於中繼暫存器的總數量、所述任務的工作模式以及配置的最大中繼暫存器使用量確定的。
- 根據請求項11所述的裝置,其中,所述任務包括至少一個工作項實例,每個工作項實例分配至少一個中繼暫存器,其中所述分配單元被配置用於在所述中繼暫存器中第一指令的計算結果已使用完畢的情況下,在所述中繼暫存器中儲存第二指令的計算結果,其中,所述第一指令和所述第二指令為同一工作項實例的指令,所述第二指令為所述第一指令的後續指令。
- 根據請求項11所述的裝置,其中,所述分配單元被配置成,基於待分配給所述任務的中繼暫存器的數量,確定所述中繼暫存器模組中用於分配給所述任務的可用行,所述可用行為可供分配的中繼暫存器行; 將所述可用行的中繼暫存器分配給所述任務,並將所述可用行標記為已分配的中繼暫存器行。
- 根據請求項17所述的裝置,其中,所述可用行包括索引值,所述任務包括編號,其中所述分配單元還被配置成,獲取所述任務的編號和分配給相應任務的可用行的索引值並將所述編號和所述索引值記錄在行位址表中,其中,所述編號用於管理所述行位址表。
- 根據請求項18所述的裝置,其中,所述分配單元還被配置成,回應於接收對所述中繼暫存器模組的訪問請求,根據所述訪問請求包括的任務的編號和所述行位址表,生成所述訪問請求對應的中繼暫存器的物理位址,其中,所述物理位址用於對所述中繼暫存器模組進行訪問。
- 根據請求項11所述的裝置,其中,所述分配單元還被配置成,回應於接收到任務結束信號,回收分配給所述任務結束信號對應任務的中繼暫存器。
- 一種計算設備,包括:處理器; 用於儲存處理器可執行指令的記憶體; 其中,所述處理器被配置為調用所述記憶體儲存的指令,以執行請求項1至10中任意一項所述的方法。
- 一種其上儲存有指令的電腦可讀媒介,所述指令當被執行時使得計算設備執行根據請求項1-10中任一項所述的方法。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202310607003.0A CN116400982B (zh) | 2023-05-26 | 2023-05-26 | 配置中继寄存器模块的方法和装置、计算设备和可读介质 |
| CN2023106070030 | 2023-05-26 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW202447429A TW202447429A (zh) | 2024-12-01 |
| TWI881835B true TWI881835B (zh) | 2025-04-21 |
Family
ID=87020140
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW113119350A TWI881835B (zh) | 2023-05-26 | 2024-05-24 | 配置中繼暫存器模組的方法和裝置、計算設備和電腦可讀媒介 |
Country Status (3)
| Country | Link |
|---|---|
| CN (1) | CN116400982B (zh) |
| TW (1) | TWI881835B (zh) |
| WO (1) | WO2024245142A1 (zh) |
Families Citing this family (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN116400982B (zh) * | 2023-05-26 | 2023-08-08 | 摩尔线程智能科技(北京)有限责任公司 | 配置中继寄存器模块的方法和装置、计算设备和可读介质 |
| CN117971437B (zh) * | 2024-03-26 | 2025-01-24 | 摩尔线程智能科技(北京)股份有限公司 | 任务分配方法、电路、设备、介质及程序 |
Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20160232112A1 (en) * | 2015-02-06 | 2016-08-11 | Futurewei Technologies, Inc. | Unified Memory Bus and Method to Operate the Unified Memory Bus |
| US20170140800A1 (en) * | 2007-06-25 | 2017-05-18 | Sonics, Inc. | Various methods and apparatus for configurable mapping of address regions onto one or more aggregate targets |
| TW201839758A (zh) * | 2017-03-27 | 2018-11-01 | 美商美光科技公司 | 用於記憶體內操作之裝置及方法 |
| TW201926052A (zh) * | 2017-11-23 | 2019-07-01 | 英業達股份有限公司 | 計算機裝置及其控制方法 |
| TW202013985A (zh) * | 2018-09-21 | 2020-04-01 | 英業達股份有限公司 | 具有多個參數配置模式的中繼裝置及其參數配置方法 |
Family Cites Families (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| GB0002848D0 (en) * | 2000-02-08 | 2000-03-29 | Siroyan Limited | Communicating instruction results in processors and compiling methods for processors |
| CN102968379B (zh) * | 2012-10-24 | 2015-05-06 | 无锡江南计算技术研究所 | 一种寄存器分配方法、系统及处理器 |
| KR20150063745A (ko) * | 2013-12-02 | 2015-06-10 | 삼성전자주식회사 | 레지스터 페어링을 이용한 simd 연산 방법 및 장치 |
| CN105373492A (zh) * | 2014-08-19 | 2016-03-02 | 西安慧泽知识产权运营管理有限公司 | 一种面向任务流的基于寄存器文件的快速数据交换结构 |
| US10558460B2 (en) * | 2016-12-14 | 2020-02-11 | Qualcomm Incorporated | General purpose register allocation in streaming processor |
| CN108052379B (zh) * | 2017-12-07 | 2021-03-09 | 北京兆易创新科技股份有限公司 | Spi-nand的多任务操作方法和装置 |
| US11288072B2 (en) * | 2019-09-11 | 2022-03-29 | Ceremorphic, Inc. | Multi-threaded processor with thread granularity |
| CN112559169B (zh) * | 2020-11-25 | 2022-11-08 | 成都海光微电子技术有限公司 | 资源分配方法以及装置 |
| CN113298245B (zh) * | 2021-06-07 | 2022-11-29 | 中国科学院计算技术研究所 | 一种基于数据流架构的多精度神经网络计算装置以及方法 |
| GB2605665B (en) * | 2021-09-30 | 2023-11-01 | Imagination Tech Ltd | Graphics processor |
| CN114090081B (zh) * | 2021-11-19 | 2025-12-23 | 海光信息技术股份有限公司 | 数据处理方法及数据处理装置 |
| CN116400982B (zh) * | 2023-05-26 | 2023-08-08 | 摩尔线程智能科技(北京)有限责任公司 | 配置中继寄存器模块的方法和装置、计算设备和可读介质 |
-
2023
- 2023-05-26 CN CN202310607003.0A patent/CN116400982B/zh active Active
-
2024
- 2024-05-24 WO PCT/CN2024/095218 patent/WO2024245142A1/zh active Pending
- 2024-05-24 TW TW113119350A patent/TWI881835B/zh active
Patent Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20170140800A1 (en) * | 2007-06-25 | 2017-05-18 | Sonics, Inc. | Various methods and apparatus for configurable mapping of address regions onto one or more aggregate targets |
| US20160232112A1 (en) * | 2015-02-06 | 2016-08-11 | Futurewei Technologies, Inc. | Unified Memory Bus and Method to Operate the Unified Memory Bus |
| TW201839758A (zh) * | 2017-03-27 | 2018-11-01 | 美商美光科技公司 | 用於記憶體內操作之裝置及方法 |
| TW201926052A (zh) * | 2017-11-23 | 2019-07-01 | 英業達股份有限公司 | 計算機裝置及其控制方法 |
| TW202013985A (zh) * | 2018-09-21 | 2020-04-01 | 英業達股份有限公司 | 具有多個參數配置模式的中繼裝置及其參數配置方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN116400982B (zh) | 2023-08-08 |
| TW202447429A (zh) | 2024-12-01 |
| WO2024245142A1 (zh) | 2024-12-05 |
| CN116400982A (zh) | 2023-07-07 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| TWI881835B (zh) | 配置中繼暫存器模組的方法和裝置、計算設備和電腦可讀媒介 | |
| KR102371916B1 (ko) | 가상 머신을 지원하는 스토리지 장치, 그것을 포함하는 스토리지 시스템 및 그것의 동작 방법 | |
| CN102508638B (zh) | 用于非一致性内存访问的数据预取方法和装置 | |
| CN107851004B (zh) | 用于在图形处理单元gpu上执行指令的方法和装置 | |
| CN103218208B (zh) | 用于实施成形的存储器访问操作的系统和方法 | |
| JP7539202B2 (ja) | コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス | |
| US20170371654A1 (en) | System and method for using virtual vector register files | |
| KR20100112099A (ko) | 데드락이 없는 파이프라이닝을 위한 시스템 및 방법 | |
| KR20130010442A (ko) | 가상 gpu | |
| CN103197916A (zh) | 用于源操作数收集器高速缓存的方法和装置 | |
| US8806168B2 (en) | Producer-consumer data transfer using piecewise circular queue | |
| US9448934B2 (en) | Affinity group access to global data | |
| CN102231121A (zh) | 基于内存映射的大数据文件快速并行提取方法 | |
| US20230100573A1 (en) | Memory device, memory device operating method, and electronic device including memory device | |
| Hartmann et al. | Gpuart-an application-based limited preemptive gpu real-time scheduler for embedded systems | |
| CN115885254A (zh) | 用于纹理/加载指令块的推迟的gpr分配 | |
| CN116414464A (zh) | 调度任务的方法和装置、电子设备和计算机可读介质 | |
| CN103197918B (zh) | 多通道时间片组 | |
| US10235208B2 (en) | Technique for saving and restoring thread group operating state | |
| CN116414541B (zh) | 兼容多种任务工作模式的任务执行方法和装置 | |
| KR20190138365A (ko) | 멀티 프로세서 시스템 및 그 구동 방법 | |
| TW202119215A (zh) | 共用代碼之系統與代碼共用方法 | |
| CN113703841B (zh) | 一种寄存器数据读取的优化方法、装置及介质 | |
| WO2022242777A1 (zh) | 一种调度方法、装置、系统和计算设备 | |
| CN119829300A (zh) | Gpgpu计算任务处理方法、装置、设备及介质 |