基于gpgpu體系結構的協同調度方法及系統的制作方法
【技術領域】
[0001]本發明屬于高性能計算技術領域,尤其涉及一種基于GPGPU體系結構的協同調度方法及系統。
【背景技術】
[0002]通用計算圖形處理器(GeneralPurpose Graphic Processing Unit,GPGPU)是一種高性能、并行計算的處理器。
[0003]從硬件資源角度來說,以NVIDIA公司的Fermi架構GPGPU為例,它在硬件上是一塊單獨的較大的板卡,上面由PCI插槽與主機系統相連。微觀上,GPGPU包含若干個SM,SM即Streaming Multiprocessor中文意義是流多處理器,每個SM是硬件上的一個獨立的行動單元。每個SM上可以包含若干個SP,SP是指Scalar Processor,是硬件的計算單元,計算單元除了 SP之外,還包括若干個SFU計算單元,SFU是用來完成特殊計算功能的部件。除了計算單元以外,每個SM還包含有自己的寄存器文件,共享內存,LI數據緩存和指令緩存。為了支持多線程并行執行,SM上的寄存器文件通常都是比較大的。共享內存是一塊特殊的內存,它的速度可以與LI緩存一樣快,并且只能被軟件概念的一個線程塊中的線程訪問,可以用來進行一個線程塊內的數據交互。除此之外,GPGPU還提供了紋理緩存和常量緩存,這是完全不同于CPU架構的設計。紋理緩存用于文理類圖形算法的數據快速存取。常量內存緩存用于只讀變量的存儲。顯存DRAM作為GPGPU的主存,在SM片外,因此直接訪問主存的時間延遲是最尚的。
[0004]GPGPU軟件編程的CUDA架構是NVIDIA公司提出的一個統一計算架構。在CUDAGPGPU編程模型中,線程被組織成兩個層次,分為格和線程塊。用戶定義的線程可以被分成許多格,每個格中又可以包含許多線程塊,每個線程塊包含許多線程。線程塊內包含的線程數量,格內包含的線程塊數量都是用戶可定義的。具體執行時,一個線程塊的線程可以通過共享內存快速的交換數據,可以通過同步原語進行線程塊內的執行同步。對于GPGPU而言資源的分配單元是線程塊,而執行單元則是Warp,不是單個線程。GPGPU以Warp為最小執行單位,Warp是一組連續的32個線程,每次執行一條指令,都是一個Warp內所有的線程同時執行,一般來說一條指令每時每刻都會有32個線程同時執行,這就是單指令多數據(SIMD)的數據處理方式,從線程并行角度也可以理解成單指令多線程(SMT)架構。但是由于Warp內的32個線程可能出現分支的情況,如果出現分支,那么Warp內的32個線程就會依照分支分組串行執行,此時會造成一些資源的閑置。在內存層次上,GPGPU有LI數據緩存和L2數據緩存,DRAM主存。LI數據緩存是每個SM上的線程塊共用,L2數據緩存是所有SM上的線程塊共用。當LI緩存不命中時,請求會被發送到L2緩存,當L2緩存不命中時,請求會被發送請求到DRAM。當用戶指定一個kernel執行時,這個kernel的所有線程塊被逐個分配給各個SM,因為每個線程塊都要占用一定資源,因此每個SM上能夠同時駐留的線程塊是有限的。這也就導致了不是所有的線程塊都能同時駐留在SM上,因為資源限制,要等到某個線程塊結束,才可以將一個新的線程塊發射到這個資源空閑的SM上。
[0005]GPGPU內部流水線階段主要包括Fetch (取指令),Decode (指令解碼),Issue (發射指令),Execute (指令執行),Writeback(結果寫回)。Fetch階段是取指令階段,在這個階段Fetch部件為一個滿足條件的Warp從指令緩存取一條或者兩條指令到1-BufTer (指令臨時緩存)。隨后Decode (指令解碼)部件對剛剛取回的指令進行解碼。每個Warp都有與之對應的1-Buffer,用來存儲剛剛解碼的指令。Issue階段是指令的發射階段,在這個階段中調度器根據優先級算法,從待發射隊列中找到一個Warp進行發射。發射的效果就是經這條指令放到后端的流水線中開始執行。Execute階段代指指令在計算流水線和訪存流水線中執行的階段。Writeback階段負責將剛剛執行的指令結果寫回到指定位置。在整個流水線過程中,有兩個階段發生了調度,一個是Fetch階段,它負責選取為哪一個Warp取指令;另一個是Issue階段,它負責選擇一個Warp進行發射。
[0006]GPGPU內部基本Warp調度策略分為輪詢調度策略(Lrr),年老優先調度策略(Oldest),年輕優先調度策略(Youngest)。輪詢調度策略就是Lrr (Loose Round Robin)調度策略,它是一種最簡單的調度策略,它的實現是基于輪詢機制的,利用它可以使得被調度個體獲得均等的調度機會。輪詢調度策略的基本算法是將本輪次被選中的成員的下一個緊鄰成員作為下一輪優先級隊列優先級最高的成員。其余成員的相對順序不變。Oldest調度策略是我們依據現有的Gto調度策略提出來的一種基本調度策略,年老優先調度策略的核心是按照時間排序Warp,先被發射到GPU SM上的Warp也即“老的” Warp具有高的優先級。這是一個以時間為優先級標準的調度策略。在這種調度策略中先發射到SM上的Warp始終排在優先隊列的前面。這種策略的優勢是能夠集中資源促使最先發射的Warp盡快地執行完。而不同于Lrr策略的使得每個Warp都獲得均衡的機會。年輕優先調度策略是與年老優先調度策略相反的調度策略。年輕優先調度策略中把較晚到達SM上的Warp放在較高優先級,較早到達SM上的Warp放到較低優先級。因此年輕優先調度策略的優先級調度隊列可以看做是一個按照Warp Id降序排列的一個隊列。以上的三種調度策略Lrr,Oldest以及Youngest都可以和Greedy (貪心)的思想相結合形成Gt lrr (Greedy The Lrr),Gto (Greedy Then Oldest),Gty (Greedy Then Youngest)三種調度策略。以 Gto 為例,Gto調度策略是建立在Oldest策略基礎上的,唯一不同的是它對上一次剛被Issue的Warp實行貪心策略,實行的方式是將這個Warp排在調度隊列最高優先級位置。其余Warp的優先級排列仍然按照Oldest策略執行。Gto,Gtlrr,Gty策略都是對前一次剛被選中的Warp實行Greedy策略使得這個Warp排在隊列最前面。這種策略的特點是盡可能使得某個Warp一直處于高的調度優先級,盡量使其先執行完畢。GPGPU硬件在Fetch階段采用的是Lrr策略,在Issue階段采用的是Lrr或者Gto策略。
[0007]在現有技術中,關于GPGPU Warp調度策略的優化,基本上都是在研宄如何在Issue階段進行針對內存訪問或者Cache方向的優化,而沒有提及Fetch階段調度策略的優化,Fetch階段都默認采用簡單的輪詢(Lrr)調度策略。
【發明內容】
[0008]鑒于此,本發明實施例提供一種基于GPGPU體系結構的協同調度方法及系統,以在Fetch階段能夠最大限度的滿足Issue階段的需求,充分發揮Issue階段的策略能力,從整體上提升GPGPU的計算性能。
[0009]本發明實施例是這樣實現的,一種基于GPGPU體系結構的協同調度方法,所述方法包括:
[0010]將Issue階段的兩個優先級調度隊列合并為一個優先級調度隊列,并將合并后的優先級調度隊列作為Fetch階段的優先級調度隊列;
[0011]在Fetch階段,從所述合并后的優先級調度隊列中獲取指令;
[0012]對獲取的指令進行解碼;
[0013]在Issue階段,通過Issue階段的兩個調度器并行執行解碼后的指令,并按照所述調度器各自的調度策略發射所述解碼后的指令;
[0014]在所述發射后的指令進入流水線后開始執行;
[0015]將執行后的指令結果寫回到指定位置。
[0016]本發明實施例的另一目的在于提供一種基于GPGPU體系結構的協同調度系統,所述系統包括:
[0017]合并單元,用于將Issue階段的兩個優先級調度隊列合并為一個優先級調度隊列,并將合并后的優先級調度隊列作為Fetch階段的優先級調度隊列;
[0018]取指令單元,用于在Fetch階段,從所述合并后的優先級調度隊列中獲取指令;
[0019]指令解碼單元,用于對獲取的指令進行解碼;
[0020]指令發射單元,用于在Issue階段,通過Issue階段的兩個調度器并行執行解碼后的指令,并按照所述調度器各自的調度策略發射所述解碼后的指令;
[0021]指令執行單元,用于在所述發射后的指令進入流水線后開始執行;
[0022]結果寫回單元,用于將執行后的指令結果寫回到指定位置。
[0023]本發明實施例與現有技術相比存在的有益效果是:本發明實施例將Issue階段的兩個優先級調度隊列合并為一個優先級調度隊列,并將合并后的優先級調度隊列作為Fetch階段的優先級調度隊列,使得Fetch階段能夠最大限度的滿足Issue階段的需求,充分發揮Issue階段的策略能力。而且,通過建立Fetch階段優先級調度隊列與Issue階段優先級調度隊列之間的聯系,使得Fetch階段有能力訪問Issue階段的優先級調度隊列,從而可以有目的進行指令預取,減少將要發射的指令沒有被取回的可能性,提高GPGPU性能,具有較強的易用性和實用性。
【附圖說明】
[0024]為了更清楚地說明本發明實施例中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
[0025]圖1是本發明實施例一提供的基于GPGPU體系結構的協同調度方法的實現流程圖;
[0026]圖2是本發明實施例一提供的實現協同調度的體系架構示意圖;
[0027]圖3是本發明實施例二提供的基于GPGPU體系結構的協同調度系統的組成結構圖。
【具體實施方式】
[0028]以下描述中,為了說明而不是為了限定,提出了諸如特定系統結構、技術之類的具體細節,以便透切理解本發明實施例。然而,本領域的技術人員應當清楚,在沒有這些具體細節的其它實施例中也可以實現本發明。在其它情況中,省略對眾所周知的系統、裝置、電路以及方法的詳細說明,以免不必要的細節妨礙本發明的描述。
[0029]為了說明本發明所述的技術方案,下面通過具體實施例來進行說明。
[0030]實施例一:
[0031]圖1示出了本發明實施例二提供的基于GPGPU體系結構的協同調度方法的實現流程,該方法過程詳述如下:
[0032]在步驟SlOl中,將Issue階段的兩個優先級調度隊列合并為一個優先級調度隊列,并將合并后的優先級調度隊列作為Fetch階段的優先級調度隊列;
[0033]在步驟S102中,在Fetch階段,從所述合并后的優先級調度隊列中獲取指令;
[0034]在步驟S103中,對獲取的指