王 鋒,杜云飛,陳 娟
(國防科學技術(shù)大學計算機學院,湖南 長沙 410073)
隨著GPU 性能和可編程性的不斷提高,GPU越來越多地被應用于通用計算,具備這類特點的GPU 被稱為通用GPU,即GPGPU(General Purpose GPU)。使用GPGPU 加速的系統(tǒng)越來越多,這種CPU 和GPGPU 相互配合的異構(gòu)系統(tǒng)在高性能計算領(lǐng)域已經(jīng)受到越來越多的關(guān)注[1]。我國在大規(guī)模異構(gòu)系統(tǒng)體系結(jié)構(gòu)方面取得了重大突破,2010年11月份超級計算機TOP500排名,我國有兩臺異構(gòu)系統(tǒng)的計算機排名前五,其中天河-1 更是排名世界第一[2]。并且異構(gòu)系統(tǒng)在能耗比(FLOPS/W)上也遠遠優(yōu)于同構(gòu)系統(tǒng),例如天河-1的能耗比是同時期同構(gòu)系統(tǒng)美洲虎(排名第二)的2.5倍,是構(gòu)建下一代Exascale級超級計算機系統(tǒng)最有前景的技術(shù)之一。
但是,異構(gòu)系統(tǒng)上用戶程序的應用開發(fā)和執(zhí)行效率一直是制約其發(fā)展的瓶頸。GPU 的性能發(fā)揮與許多要素密切相關(guān),包括程序本身的特性以及GPU 的特性。其中程序的特性包括并行性、訪存局部性以及占用的寄存器資源等,GPU 本身的特性包括與CPU 的通訊帶寬、訪存帶寬、訪存延遲、支持的線程數(shù)量等。如此眾多的因素造成程序優(yōu)化時搜索空間巨大,單靠經(jīng)驗無法確定最佳優(yōu)化方案,需要對GPU 性能進行建模,在此基礎上輔助編程人員或者自動完成優(yōu)化策略的選擇。除了更好地發(fā)揮GPU 的性能外,CPU 和GPU 之間的任務劃分也是整個系統(tǒng)發(fā)揮性能的關(guān)鍵。在CPU和GPU 協(xié)同工作的過程中,為了發(fā)揮各自的性能,必須考慮負載平衡問題,根據(jù)兩者不同的性能分配不同的任務。因此,也需要對GPU 的性能進行建模。在此基礎上,可以用于指導GPU 的性能優(yōu)化算法以及CPU 和GPU 間的任務負載平衡。同時,這一策略可以與支持異構(gòu)系統(tǒng)的編程框架編程環(huán)境相結(jié)合,為其優(yōu)化算法提供支持。
因此,GPU 性能模型的研究受到研究者的廣泛關(guān)注,美國喬治亞理工學院的Luk C K 等[3]研發(fā)的異構(gòu)系統(tǒng)并行任務映射框架Qilin 采用了GPU 性能模型在任務訓練階段建立性能數(shù)據(jù)庫。他們還將性能模型應用于GPGPU 的功耗優(yōu)化中,能夠幫助用戶獲得更好的性能功耗比優(yōu)化方法[4]。Sim J[5]基于性能模型開發(fā)了性能優(yōu)化分析框架GPUPerf,能夠提供潛在的性能優(yōu)化方向,指導用戶進行編譯優(yōu)化。Samadi M[6]將性能模型應用于GPGPU 的編譯器中,為編譯優(yōu)化方法提供指導。除了這些通用的性能模型以外,研究人員也建立了大量和具體應用程序相關(guān)的性能模型,Xue J[7]的研究小組針對DOACROSS循環(huán)建立的分塊算法的性能模型,能夠發(fā)現(xiàn)接近最優(yōu)的分塊大小。Choi J W[8]研究了稀疏矩陣-向量乘SpMV(Sparse Matrix-Vector multiply)在GPGPU 上的性能模型,用于指導輸入的矩陣塊大小的自動選擇,代價只有完全搜索算法的15%。
本文重點針對CPU 和GPU 負載平衡問題,對GPGPU 性能模型進行了研究,主要貢獻在于:(1)對當前GPGPU 性能解析模型的研究進展進行了深入分析,對其優(yōu)缺點進行了描述,指出其在指導負載平衡方面存在的問題;(2)實現(xiàn)了一個基于統(tǒng)計信息的插值擬合性能模型,用于指導CPU 和GPGPU 的負載平衡。接下來的內(nèi)容按照如下順序進行組織:第2節(jié)首先從體系結(jié)構(gòu)和執(zhí)行模型開始,介紹GPGPU 的性能及其影響因素;然后在第3節(jié)詳細分析并評估現(xiàn)有的性能解析模型;第4節(jié)介紹我們實現(xiàn)的基于統(tǒng)計的曲線擬合模型;最后給出了當前研究存在的問題與挑戰(zhàn)。
2004年GPU 開始采用PCIE 總線與主機連接,大大增加了通訊帶寬,并且支持64 位浮點數(shù)據(jù),支持紋理內(nèi)存訪問。隨后,更高級的GPU 編程語言出現(xiàn),例如Brook 和Sh。2006 年GPU 全部開放給程序員控制,包括頂點、像素、多級存儲層次等等,這類產(chǎn)品有NVIDIA 的G80[9]等。大量的軟件編程語言開始出現(xiàn),例如CUDA、Brook+、CTL等等[10]。2009年GPU 開始擴展至高性能計算領(lǐng)域,例如AMD 的Firestream、NVIDIA 的GTX295。在這一年國防科學技術(shù)大學研制的天河-1采用了GPU 作為加速器,在TOP500排名第五[11,12]。2010 年GPU 開始支持ECC、增 加 了Cache大小、支持多內(nèi)核并行,更加適應高性能計算,代表產(chǎn)品有AMD 的HD5870 和NVIDIA 的Fermi。支持異構(gòu)計算的框架開始出現(xiàn),例如Qilin[3]、FLAME[13]、Merge[14]等等。國防科學技術(shù)大學研制的天河-1A 采用Fermi作為加速器,Linpack性能在TOP500排名第一。從2011年開始,GPGPU 在性能、功耗、穩(wěn)定性等方面繼續(xù)優(yōu)化,編程調(diào)試環(huán)境更加豐富,有OpenCL 1.2[15],CUDA 4.2[16]以及OpenACC[17]等。
目前GPGPU 的典型結(jié)構(gòu)[18]如圖1所示。
每個GPGPU 設備中包含多個流處理器SM(Streaming Multiprocessors),每個流處理器內(nèi)部又包含多個流處理單元SP(Streaming Processors)和特殊處理單元SFU(Special Functional Unit)。所有的流處理器共享片外全局內(nèi)存和L2 Cache,每個流處理器內(nèi)部有單獨的L1Cache和共享存儲器,每個流處理單元配備獨立的線程運行環(huán)境(主要是寄存器)。運行在GPGPU 上的內(nèi)核程序以SPMD(Single Program Multi Data)的并行方式在流處理器上執(zhí)行,在每一個流處理器上又以SIMD 的方式映射到流處理單元上執(zhí)行。從程序員角度看,內(nèi)核程序以數(shù)據(jù)并行方式運行在GPGPU 設備上,數(shù)據(jù)按照二維或三維方式劃分成線程塊,線程塊被自動調(diào)度到流處理器上執(zhí)行,執(zhí)行過程中以線程的方式調(diào)度到每一個流處理單元上。如果一個線程塊在執(zhí)行時遇到全局內(nèi)存訪存指令,則此線程塊可以被流處理器切換出去,執(zhí)行其他線程塊指令。等數(shù)據(jù)取到寄存器或共享存儲器中后,此線程塊繼續(xù)被調(diào)度執(zhí)行。這種線程塊的調(diào)度在GPGPU 上是零開銷的。這樣,GPGPU 可以通過大量的并發(fā)線程隱藏訪存開銷,從而充分利用強大的計算能力,這是GPGPU 對比傳統(tǒng)處理器的主要優(yōu)勢。
Figure 1 Architecture of the GPGPU圖1 GPGPU 的體系結(jié)構(gòu)圖
GPGPU 的這種SPMD 和SIMD 的執(zhí)行方式以及線程調(diào)度方式能夠充分利用其計算部件,但是也為其性能發(fā)揮增加了編程難度。GPGPU 的實際性能與多種因素相關(guān),例如線程塊的大小、線程塊內(nèi)部線程的劃分、線程所占資源多少等等。為了準確預測內(nèi)核程序的性能,為內(nèi)核程序優(yōu)化提供指導,必須研究GPGPU 的性能模型。本文所涉及的性能主要從下面三個方面衡量:一是程序執(zhí)行時間T,單位是秒;二是加速比S;三是單位時間內(nèi)平均執(zhí)行的浮點操作數(shù)F,單位是FLOPS。它們從不同角度反映了程序在GPGPU 上的執(zhí)行情況。執(zhí)行時間T 是指從程序加載到程序結(jié)束這一時間段,是對程序性能最直接的度量,適合所有類型的測試程序,但是在做對比的時候無法直觀反映出性能差異的比例;加速比S 是以某種平臺和軟件配置下程序運行時間為基準,其他配置下運行時間規(guī)格化后的數(shù)據(jù),能夠直觀給出不同配置下程序優(yōu)化提高的比例。在GPGPU 性能測試中一般取同時期主流CPU 平臺上的運行時間TCPU為基準,測量GPGPU 平臺上程序運行時間TGPGPU,獲取加速比S=(TCPU/TGPGPU)。但是,這種度量很難反映出程序繼續(xù)優(yōu)化的潛力,也就是能否繼續(xù)優(yōu)化以獲得程序性能的提升。單位時間內(nèi)平均執(zhí)行的浮點數(shù)能夠準確反映一段時間內(nèi)程序持續(xù)的浮點性能,與設備理論上的浮點性能可以進行比較,從而反映程序優(yōu)化的潛力。這種度量方法特別適合浮點計算密集型程序,例如矩陣乘、LU 分解等等。
影響GPGPU 程序性能的因素有很多,其優(yōu)化搜索空間非常巨大,如果按照窮舉法遍歷搜索空間找到最優(yōu)值將非常耗時。例如矩陣乘算法中主要的影響因素有塊大小、循環(huán)展開次數(shù)、預取距離和溢出(Spilling)寄存器的個數(shù)等。另外,由于硬件體系結(jié)構(gòu)的限制,程序的配置必須符合一定的約束條件,例如CUDA 中計算能力2.0的設備(Fermi)和3.5的設備(Kepler)限制條件如表1所示。
Table1 Feature support of CUDA compute capability 2.0and 3.5表1 支持CUDA計算能力2.0和3.5設備的限制條件
有了這些限制條件,影響性能的因素并不是獨立的,它們之間互相影響。例如循環(huán)展開次數(shù)會影響到線程資源,進而影響到線程塊大小,最終影響到數(shù)據(jù)的局部性,因此對GPGPU 上的程序性能進行建模是個巨大的挑戰(zhàn)。為了對程序優(yōu)化進行指導,縮小搜索空間,從2008年以來大量的研究工作在性能模型上展開,從不同的角度試圖解決這個問題。這些對GPGPU 的性能模型研究大致可以分為兩種方法,一種是基于統(tǒng)計測量的方法進而建立曲線擬合模型,一種是性能解析模型。這兩種方法各有優(yōu)缺點,下面分別進行介紹。
性能解析模型綜合硬件的體系結(jié)構(gòu)、軟件編程模型和執(zhí)行模型,對應用程序的執(zhí)行進行細致觀察和分析,從而獲得影響程序性能的因素,最后建立程序性能模型。GPGPU 的性能解析模型從研究方法上可以分為三類:一類不是直接研究各種因素對性能的影響,而是通過觀察建立與性能相關(guān)的度量值,這些度量值能夠間接反映出程序的最終性能;第二類是基于GPGPU 的抽象體系結(jié)構(gòu),從程序的執(zhí)行模型建立性能模型,并且通過程序(真實的應用程序或小的測試程序)運行進行驗證;第三類是設計小的測試程序,通過觀察運行結(jié)果獲取影響性能的各個要素,然后綜合考慮導出性能模型。下面我們將分別介紹這三種典型的性能解析模型。
在2008年CGO 會議上Ryoo S 教授[19]領(lǐng)導的研究小組提出了將性能度量模型用于裁剪GPGPU 程序的優(yōu)化空間,提出了兩個性能度量值用于指導程序優(yōu)化,這兩個值分別代表了程序特性和GPGPU 的資源利用情況,其中一個度量值Efficiency 的計算如公式(1)所示:
其中,Instr 是單個線程的動態(tài)指令數(shù),可以從生成的PTX 代碼中得到;Threads 是GPGPU 程 序總的線程數(shù),是由用戶指定的。這個度量值反映了GPGPU 程序本身的效率,完成同樣的問題規(guī)模,指令數(shù)越少,線程數(shù)越少,則效率越高。另一個度量值Utilization 度量的是除了當前正在執(zhí)行的Warp外,GPGPU 平均可供調(diào)用的低延遲指令數(shù),反映了GPGPU 資源利用的大小,如公式(2)所示:
其中,Regions是線程指令中被長延遲指令分割開的指令塊的個數(shù)。長延遲指令包括全局和紋理內(nèi)存操作、同步指令以及特殊浮點單元SFU 指令。WTB指的是一個線程塊中的Warp數(shù),BSM是分給每個流處理器的線程塊的數(shù)目。公式(2)的括號里面的部分是除了正在執(zhí)行的Warp外,還可供調(diào)用的Warp數(shù)。其中前一部分是同一線程塊內(nèi)的其他Warp數(shù),除以2的目的是如果長延遲指令為同步操作,那么平均有一半的Warp尚未執(zhí)行到同步點。括號內(nèi)后一部分是其他線程塊內(nèi)的Warp數(shù)。
理想情況下,這兩個度量值越大越好,但在實際情況下無法同時做到這一點。同樣的優(yōu)化方法可以使一個度量值升高,而另一個降低。為了使用這兩個度量值指導優(yōu)化參數(shù)的選擇,作者使用了帕累托優(yōu)化搜索算法,只選擇那些使得效率和利用率同時變化不大的配置來進行測試,從而獲得近似最優(yōu)值,而選擇的這些配置也稱為帕累托子集。實驗表明,使用這種統(tǒng)計學的搜索算法可以減少74%~98%的搜索空間。
但是,這種模型過于簡單和粗略,是以全局內(nèi)存訪問延遲完全被隱藏為前提的,并且沒有對程序瓶頸進行分析。另外,對于影響性能的其他因素例如Cache、內(nèi)存訪問合并等也沒有進行分析。
這類模型首先由美國喬治亞理工學院Kim H[20,2.]領(lǐng)導的研究小組發(fā)表在ISCA 2009 會議上,隨后又對其進行了擴充,用于指導GPGPU 的功耗研究并發(fā)表在ISCA 2010會議上。研究的出發(fā)點在于GPGPU 的特性就是依靠大量的并發(fā)線程以及線程間零開銷的切換機制隱藏程序的訪存延遲,線程級并發(fā)能否完全隱藏訪存延遲決定最終的程序性能。研究者結(jié)合GPGPU 的實際調(diào)度單位Warp,提出了內(nèi)存Warp并行性MWP(Memory Warp Parallelism)和計算Warp 并行性CWP(Computation Warp Parallelism)的概念。MWP和CWP 指的是每個流處理器中在一次內(nèi)存訪問延遲期間可以重疊訪存的最大Warp數(shù)和可以重疊執(zhí)行的最大Warp數(shù)。結(jié)合GPGPU 的內(nèi)存系統(tǒng)模型,由如下因素決定:訪存延遲、帶寬、訪存類型、連續(xù)兩次訪存之間的延遲、GPGPU 設備的流處理器個數(shù)、每個流處理器支持的最大Warp 數(shù)等。其中的訪存類型指的是可合并類型(Coalesced)和非合并類型(Uncoalesced),如果一個Warp中同時包含了這兩種訪存類型,則根據(jù)各自出現(xiàn)的次數(shù)占總的訪存次數(shù)的比例計算一個權(quán)值,綜合考慮這兩種情況。CWP 的計算相對簡單,計算出一個Warp訪存和計算總的指令周期數(shù),然后除以計算所用的指令周期數(shù),得到的結(jié)果與每個流處理器支持的最大Warp 數(shù)相比,最小值就是CWP。
根據(jù)MWP 和CWP 我們就可以對程序的執(zhí)行進行建模,總共分為三種情況:MWP 小于或等于CWP、MWP 大于CWP 和可供調(diào)度的Warp數(shù)小于MWP 和CWP 的最小值。
當MWP 小于或等于CWP 時,表明程序是以訪存為主,計算完全被訪存隱藏。假定每個流處理器中活躍的Warp數(shù)為N,那么這N 個Warp執(zhí)行的總指令周期數(shù)如公式(3)所示:
其中,Mem-cycles 指訪存所用的指令周期數(shù);Comp_p 是每次計算平均所用的指令周期數(shù),其計算公式為Comp_p=Comp_cycles/#Mem_insts,Comp_cycles為計算所用的指令數(shù),#Mem_insts是訪存的指令個數(shù)。
如果MWP 大于CWP,表明程序受限于計算資源。N 個Warp執(zhí)行的總指令周期數(shù)如公式(4)所示:
其中,Mem_p 是平均每次訪存的指令周期數(shù),由合并類型和非合并類型的訪存延遲以及它們的權(quán)值計算得到。
如果可供調(diào)度的Warp 數(shù)不夠,也就是小于MWP 和CWP 的最小值,那么系統(tǒng)就無法充分利用Warp的并行性。N 個Warp執(zhí)行的總指令周期數(shù)如公式(5)所示:
實驗表明,這種性能模型在微測試程序(Micro-benchmark)上平均誤差為5.4%,實際的GPGPU 程序Merge Benchmark 平均誤差為13.3%。
將GPGPU 程序的基本調(diào)度單位Warp 的執(zhí)行分別從訪存和計算的并行性來建立性能模型,對于預測程序的執(zhí)行時間有比較好的精度。但是,該模型也存在一些不足:首先,對于分支情況的考慮太過簡單,只是將分支兩邊的指令數(shù)都計算上,這與實際程序的執(zhí)行不相符;其次,沒有考慮Cache失效帶來的影響;最后,與性能度量模型一樣,沒有分階段的性能分析,也就無法定位程序的瓶頸。
中國科學院軟件研究所的袁良、張云泉等[21]提出的基于延遲隱藏因子的GPU 計算模型,也從計算和訪存重疊的角度對GPGPU 的程序執(zhí)行建立了性能模型,首次提出了延遲隱藏因子的概念,并分為連續(xù)計算延遲隱藏因子以及同步延遲隱藏因子兩種,用以描述算法隱藏延遲的能力。實驗表明該模型能夠較好地預測算法性能。
這類模型是由加州大學戴維斯分校的Zhang Y 和Owens J D[22]在HPCA 2011會議上提出的,其思想是認為GPGPU 性能由以下三個部件的性能決定,一是指令的流水線,二是共享內(nèi)存,三是全局內(nèi)存,認為這三個部件的性能是相互獨立的并且用時最長的部件就是整個性能的瓶頸。這樣分析的原因是因為GPGPU 支持這三個部件的同時執(zhí)行,并且GPGPU 的設計思想就是通過切換不同Warp的上下文隱藏訪存開銷。這樣就把整個程序的性能模型分解為三個部件的性能模型。通過設計小的測試程序能夠得到這三個部件的性能影響因素,從而分別建立模型。實驗表明,這類模型能夠準確定位程序瓶頸,并且能給出是否還有優(yōu)化空間,另外還能夠?qū)PGPU 的體系結(jié)構(gòu)提出可改進的地方。三種典型測試程序表明,這種模型的性能誤差在5%~15%。
這種性能模型的不足之處在于沒有考慮新的GPGPU 體系結(jié)構(gòu)中的Cache系統(tǒng)的影響,受限于模擬器的限制不能精確分析共享內(nèi)存Bank沖突對性能的影響,對線程塊內(nèi)部Warp之間的同步操作也沒有考慮,另外對于這三種部件無法完全重疊的情況也沒有進行研究。
從上面的分析我們可以得出結(jié)論,目前的性能解析模型無法解決CPU 和GPGPU 間的負載平衡問題。性能度量模型可以作為一種優(yōu)化策略,但是無法預估GPGPU 的性能。訪存和計算并行性感知的解析模型在微測試程序(Micro-benchmark)上的平均誤差為5.4%,實際的GPGPU 程序Merge Benchmark的平均誤差為13.3%,這對于負載分配來說精度太低。分部件定量分析性能模型對于三種典型測試程序的誤差在5%~15%,同樣對負載分配來說無法忍受。
因為目前GPGPU 雙精度浮點運算峰值速度已經(jīng)超過1TFLOPS,即使5%的誤差也會造成50 GFLOPS的性能損失。對于負載分配,性能解析模型無法提供有效支持。
與性能解析模型不同,基于統(tǒng)計的插值和曲線擬合模型不拘泥于GPGPU 的內(nèi)部的執(zhí)行細節(jié),而是從程序的歷史運行信息預測下次的運行情況。由于需要大量的運行信息,一般只適合對一個或少數(shù)幾個因素進行建模。插值是指將相鄰采樣值用線段連接起來,用于預測采樣值以外的性能。實際上相當于一組線性方程。曲線擬合是指用單一函數(shù)描述所有采樣點的趨勢,主要有多項式擬合、指數(shù)擬合、超越函數(shù)擬合等。
理論上如果我們測量的數(shù)據(jù)足夠多,就可以精確地預測其他問題規(guī)模的性能。由于這種模型直接從應用程序的角度對性能進行測量,而不單單關(guān)注于內(nèi)核程序,測量性能時也考慮了內(nèi)核程序與主機的通訊開銷,因此這種性能模型的準確性是其最大優(yōu)點。
測試平臺分別為Intel四核Xeon E5540、ATI Radeon HD4870 和AMD HD5870,后兩種為GPGPU。圖2中描述了雙精度方形矩陣乘在不同平臺上隨寬度變化的性能曲線。水平X 軸為矩陣的寬度Q;垂直Y 軸為測量的性能P,采用單位時間內(nèi)完成的浮點計算數(shù),單位為GFLOPS。假設矩陣乘的時間為T,性能計算公式為:
Figure 2 Performance of double precision floating-point matrix multiplication on CPU and GPGPU圖2 CPU 和GPGPU 雙精度矩陣乘性能
從圖2中可以看出CPU 性能非常穩(wěn)定,基本處于40GFLOPS左右;而GPGPU 平臺性能波動就比較大,而且在小規(guī)模矩陣情況下,其性能低于CPU,只有在矩陣規(guī)模大到一定值時,GPGPU 的性能才超過CPU,這反映了GPGPU 性能受問題規(guī)模也就是計算量的影響比較大。我們將這些測試的點用線段連接起來,就得到一個性能曲線圖,利用這個圖我們可以使用插值法推測得出其他問題規(guī)模的性能。假設新的矩陣寬度為M,距離M最近的兩個測量點Qi≤M <Qi+1,其對應的性能分別為Pi和Pi+1,則M 對應的性能PM由公式(7)得出。這樣在CPU 和GPGPU 之間進行任務劃分時,可以指導負載平衡。
但是,這種模型也存在如下不足,首先是需要測量大量數(shù)據(jù),在有的應用中因為代價過高而不可能做到;另外,這種方法針對一種性能影響因素的變化(一維)通常比較有效,但是對于多種因素同時影響性能的情況(多維)常常因為組合爆炸而不可行。
GPGPU 的性能模型已經(jīng)引起了研究者的廣泛關(guān)注,取得了大量的研究成果,使得人們對GPGPU 的體系結(jié)構(gòu)以及程序性能有了更深入的了解。但是,仍然存在許多未解決的問題,這些問題更具挑戰(zhàn)性,例如對GPGPU Cache系統(tǒng)的性能研究,對非規(guī)則訪存應用程序的性能分析。并且GPGPU 體系結(jié)構(gòu)本身也在不斷演化,新型眾核和多核融合的體系結(jié)構(gòu)紛紛出現(xiàn),例如Intel 的MIC、NVIDIA 的Kepler和AMD GCN,這些體系結(jié)構(gòu)之上的程序性能模型需要人們進一步完善。
[1]NVIDIA.GPUs are only up to 14times faster than CPUs says Intel,2010[EB/OL].[2010-06-01]http:∥blogs.nvidia.com/ntersect/2010/06/gpus-are-only-upto-14-timesfaster-than-cpus-says-intel.html.
[2]http:∥www.top500.org.
[3]Luk C-K,Hong S,Kim H.Qilin:Exploiting parallelism on heterogeneous multiprocessors with adaptive mapping[C]∥Proc of the 42nd Annual IEEE/ACM International Symposium on Microarchitecture,2009:45-55.
[4]Hong S,Kim H.An integrated GPU power and performance model[C]∥Proc of the 37th Annual International Symposium on Computer Architecture,2010:280-289.
[5]Sim J,Dasgupta A,Kim H,et al.A performance analysis framework for identifying potential benefits in GPGPU applications[C]∥Proc of the 17th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming,2012:11-22.
[6]Samadi M,Hormati A,Mehrara M,et al.Adaptive input-a-ware compilation for graphics engines[C]∥Proc of the 33rd ACM SIGPLAN Conference on Programming Language Design and Implementation,2012:13-22.
[7]Peng Di,Xue Jing-ling.Model-driven tile size selection for DOACROSS loops on GPUs[C]∥Proc of the 17th International Conference on Parallel Processing,2011:401-412.
[8]Choi J W,Singh A,Vuduc R W.Model-driven autotuning of sparse matrix-vector multiply on GPUs[C]∥Proc of the 15th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming,2010:115-126.
[9]http:∥en.wikipedia.org/wiki/Graphics_processing_unit.
[10]Owens J D,Luebke D,Govindaraju N,et al.A survey of general-purpose computation on graphics hardware[C]∥Proc of Eurographics 2005,2.05:21-51.
[11]Wang Feng,Yang Can-qun,Du Yun-fei,et al.Optimizing linpack benchmark on GPU-accelerated petascale supercomputer[J].J Comput Sci Technol,2011,2.(5):854-865.
[12]Yang Can-qun,Wang Feng,Du Yun-fei,et al.Adaptive optimization for petascale heterogeneous CPU/GPU computing[C]∥Proc of IEEE International Conference on Cluster Computing,2010:19-28.
[13]Quintana-OrtíG,Igual F D,Quintana-OrtíE S,et al.Solving dense linear systems on platforms with multiple hardware accelerators[C]∥Proc of the 14th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming,2009:121-130.
[14]Linderman M D,Collins J D,Wang Hong,et al.Merge:A programming model for heterogeneous multi-core systems[C]∥Proc of the 13th International Conference on Architectural Support for Programming Languages and Operating Systems,2008:287-296.
[15]http:∥www.khronos.org/opencl.
[16]http:∥developer.nvidia.com/cuda/cuda-toolkit.
[17]http:∥www.openacc-standard.org.
[18]Kim Jungwon,Seo Sangmin,Lee Jun,et al.SnuCL:An OpenCL framework for heterogeneous CPU/GPU clusters[C]∥Proc of the 26th ACM International Conference on Supercomputing,2012:341-352.
[19]Ryoo S,Rodrigues C I,Stone S S,et al.Program optimization space pruning for a multithreaded GPU[C]∥Proc of the 6th Annual IEEE/ACM International Symposium on Code Generation and Optimization,2008:195-204.
[20]Hong S,Kim H.An analytical model for a GPU architecture with memory-level and thread-level parallelism awareness[C]∥Proc of the 36th Annual International Symposium on Computer Architecture,2009:152-163.
[21]Yuan Liang,Zhang Yun-quan,Long Guo-ping,et al.A GPU computational model based on latency hidden factor[J].Journal of Software,2010,2.(zk):251-262.(in Chinese)
[22]Zhang Y,Owens J D.A quantitative performance analysis model for GPU architectures[C]∥Proc of IEEE 17th International Symposium on High Performance Computer Architecture,2011:382-393.
附中文參考文獻:
[21]袁良,張云泉,龍國平,等.基于延遲隱藏因子的GPU 計算模型[J].軟件學報,2010,2.(增刊):251-262.