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