張 軍 謝竟成 沈凡凡 譚 海 汪呂蒙 何炎祥
1(東華理工大學江西省放射性地學大數據技術工程實驗室 南昌 330013)2(東華理工大學信息工程學院 南昌 330013)3(東華理工大學創新創業學院 南昌 330013)4(武漢大學計算機學院 武漢 430072)5(南京審計大學 南京 211815)
圖形處理器(graphics processing unit, GPU)最初是一種專門用于圖像處理的微處理器,隨著圖像處理需求的不斷提升,其圖像處理能力也得到迅速提升.2006年12月4日英偉達(NVIDIA)公司發布新一代顯卡Geforce 8800時,首次在公開發布的技術參數中使用了流多處理器(streaming multi-processor, SM)的概念.自此統一的渲染部件顛覆了傳統可編程部件組織的像素渲染管線(pixel pipelines)和頂點著色單元(vertex pipelines),形成了當今通用圖形處理器(general purpose graphics processing units, GPGPU)[1]的基本雛形.隨后,流式圖形處理器為GPU在通用計算領域的發展奠定了基礎.隨著CUDA和OpenCL這些編程模型的出現,在GPU中設計并行程序進行通用計算已經不再困難.
在如今的高性能、高通量通用計算領域,GPGPU已經得到極其廣泛的應用,并正在日益擴大其應用范圍.強大的并行計算能力和高能效比亦使GPGPU成為構建高性能計算系統的首選.2019年11月公布的超算Top500中,位于榜首的Summit[2]由美國IBM公司制造,它使用近28 000塊NVIDIA Volta GPU,為其提供了95%的算力.榜單的第2名Sierra也使用了17 280個NVIDIA Tesla V100 GPU構建異構計算平臺.在GPGPU強大算力的幫助下,它們的計算能力均超越了我國排在榜單第3位的神威·太湖之光,尤其是Summit在理論計算能力上超越了神威·太湖之光計算能力的60%[注]1SC19世界超算大會發布第53屆超算TOP500榜單:美國超算Summit蟬聯世界超算冠軍,https://www.top500.org/lists/2019/11/.
現代GPGPU支持單指令多數據流(single instruction multiple data, SIMD)[3-4]的執行模式.目前主流的GPGPU內部內置了大量的寄存器,其大小通常達到數KB,能夠很好地支持數以萬計的并發線程的同時執行,因此,其執行模式又可以稱為單指令多線程(single instruction multiple thread, SIMT)[5-6]執行模式.該執行模式下,執行同樣任務的線程被組織在一起,以獲得很高的線程級并行(thread level parallelism, TLP).
與CPU相比,GPGPU內部的流水結構可以有效實現3個并行級別[7-8],即指令級并行(instruc-tion level parallelism, ILP)、數據級并行(data level parallelism, DLP)與TLP,從而很好地滿足高性能、高吞吐量應用場景的計算需求.
通過設立大量的寄存器和片上緩存,GPGPU支持成千上萬高度并發線程的執行.如有線程出現長延時操作,則立即切換至其他活躍的并發線程執行,從而實現對長延時訪存操作的隱藏.然而,如此多的并發線程可能會同時發出大量的訪存請求,容易出現對片上緩存資源的爭用現象.同時,不規則訪存模式的存在使得并發線程的訪存變得離散,并導致產生更多的訪存請求,使得片上緩存資源的爭用現象會進一步加劇,嚴重時甚至會產生訪存“抖動”現象.這使得GPGPU緩存中的數據局部性受到破壞,影響整個存儲子系統的訪問效率.另外,片上的訪存隊列資源也因此會迅速用盡,造成部分線程后續的訪存操作無法得到及時的服務而被阻塞.當SM產生空閑時,整個GPGPU的性能將會下降.因此,優化緩存子系統的性能,對保證GPGPU穩定發揮高計算性能具有重大意義.
采用更合理的線程調度策略、存儲訪問策略、更優秀的緩存子系統架構設計,可有效改善GPGPU緩存子系統的訪問性能.有學者早在十年前就展開了能增強GPGPU緩存子系統性能的調度方法優化研究[9-10]和體系結構優化研究[11].本文從優化TLP調節、優化訪存順序、數據通量增強、LLC優化、基于NVM的新型緩存架構設計等方面,重點分析并討論近幾年來國內外關于提升GPGPU緩存子系統性能的優化方法.
目前,主流GPGPU生產廠商主要有NVIDIA、超微半導體(AMD)和英特爾(Intel),它們的產品有著相似的宏觀結構.為統一論述,本文以NVIDIA公司發布的GPGPU體系結構為基礎,并使用其術語進行問題的描述和分析.
為了高效地管理和調度GPGPU中線程的執行,GPGPU并發執行的線程被組織為線程網格、線程塊、線程組3個層次結構[12-13],如圖1[13]所示.

Fig.1 Organization of threads in GPGPUs圖1 GPGPU中線程的組織
GPGPU中32個相鄰的、執行同一條指令的多個線程組成一個線程組,稱之為warp,它是GPGPU調度任務并行執行的基本單位.在同一個warp中,所有線程均按照鎖步方式執行.當某個warp中不同的線程執行不同的分支指令,需要該warp中所有的線程均執行完各自分支路徑上的所有指令后,該warp才能繼續向后執行.
多個相互協作的warp被組織成一個CTA(collaborate thread array).同一個CTA中的線程之間可以相互通信.同時,CTA是被分發調度的任務單位.通常情況下,CTA通過輪轉的方式被依次分配到各個SM中執行,每個SM獨立對CTA中的數個warp調度執行.CTA的大小通常由程序員指定,其規模一旦確定就不再變化.為了更好地組織、管理和調度線程,多個CTA又被組織成線程網格(thread grid, TG).
關于GPGPU的宏觀和微觀架構,已有諸多文獻[14-19]詳細描述,在此不再贅述.
通常,GPGPU的緩存子系統主要由片上一級緩存(L1 cache)、二級緩存(L2 cache,由于主流的GPGPU中只設計了兩級的片上緩存,因此又可以稱為LLC)和片上互聯網絡(network-on-chip,NoC)組成.如圖2所示,每個SM都具有4種不同的片上一級存儲器,包括可以存放CTA內共享數據的共享存儲器(shared memory)、為本地訪存服務的私有數據緩存(private data cache)、存放紋理數據的紋理緩存(texture cache)以及存放常量和參數的常量緩存(constant cache).其中,前兩者是可讀寫的,后兩者是只讀的(在現有的GPGPU性能優化研究中,后者基本未被分析考慮).

Fig.2 The basic logical structure of GPGPUs圖2 GPGPU的基本邏輯結構
正常情況下,GPGPU上的數據緩存每周期至少能處理一個訪問請求.當訪問請求未命中時,通過有限規模的訪問失效狀態保留寄存器(missing status hold register, MSHR)記錄和合并對同一緩存行的失效請求,并據此向低一級的緩存進行訪問.MSHR被設計為一個包含多個表項的全相聯寄存器,其中的每個表項服務一個緩存行的訪問失效.
從圖2可以看出,GPGPU中的數個SM組成一個簇,并通過NoC連接到LLC.NoC只傳遞4種類型的數據:1)從SM發送到LLC的讀請求和;2)寫請求;3)從LLC發送到SM的讀應答和;4)寫確認.通過NoC,可以實現片上一級緩存和二級緩存之間的數據訪問.
GPGPU中的運算部件所需要的數據如果無法從寄存器中得到,則會直接從片上緩存子系統中申請訪問.因此,緩存子系統的性能高低對GPGPU的性能影響很大.
GPGPU緩存子系統性能的下降通常是由緩存資源競爭和訪存行為不規則這2個主要原因引起.雖然GPGPU片上的緩存容量較大,但由于GPGPU上同時執行的并發線程數量過于龐大,使得GPGPU的緩存資源顯得非常緊張.如果執行訪存密集型應用程序,則很容易引起GPGPU片上資源的爭用.另外,目前有很多應用在GPGPU上執行的過程中,即使是在同一個warp內部,也存在不同線程訪問的數據屬于不同的數據塊,這種離散的訪存行為進一步加劇了片上緩存資源的爭用.
目前解決上述問題的常用方法主要包括:1)通過TLP調節技術,使得片上可以執行合適數量的并發線程;2)在TLP一定的條件下,通過調整線程的執行順序,改變線程間的訪存順序,從而有效提升GPGPU緩存子系統隱藏訪存長延遲的能力;3)通過數據通量增強技術,提高NoC的數據訪問服務能力,從而提高服務密集訪存行為的能力;4)提高LLC對片上一級緩存數據訪問服務的能力;5)利用NVM新型存儲材料存儲密度高、讀性能好的優勢,優化GPGPU緩存子系統結構設計,可以大大提高GPGPU的片上緩存容量,從而更好地提升緩存子系統的數據訪問效率.因此,本節將從上述5個方面展開論述.
在一個SM中,只要有一個warp可以繼續執行計算任務,其他線程的訪存延遲就可以被有效隱藏.并行線程數量的上升將有利于提升GPGPU隱藏訪存延遲的能力,并且更多的并發線程也可以更好地保持資源的高利用率.因此,GPGPU應盡量維持高的TLP.但是,當出現片上緩存資源的爭用加劇時,應適當降低TLP.
在現有針對TLP調節技術的研究中,更多的是傾向于基于不同類型任務的特點,充分利用GPGPU隱藏長延時訪存操作的能力,既可以有效提升系統計算資源的利用率,又能使有限的緩存資源滿足盡可能多并發線程的訪存需求.
根據不同任務的計算/訪存占比,大致可以將任務分為計算密集型任務和訪存密集型任務2類[20].其中,計算密集型任務的計算操作次數相對訪存操作次數更多,訪存密集型任務則與計算密集型任務相反.對于訪存密集型任務,如遇到緩存命中率低的情況,則會頻繁地更新緩存(尤其是一級緩存)中的數據.
為了很好地分析說明TLP對GPGPU性能的影響,我們使用目前流行的GPGPU性能分析模擬器GPGPU-Sim[19]開展了相關實驗.實驗中采用的基準體系架構基于NVIDIA的Fermi[15,21]架構,基準測試程序包括BFS,MUM,NN.圖3描述了在每個SM上逐步增加可并發執行的CTA數量時這3個應用程序性能的變化情況.此處的性能用每周期指令數(instruction per cycle, IPC)表示.從圖3可以看出,BFS的性能隨TLP的變化不大;MUM的性能則是當SM中并發的CTA數量為2時最大,隨著CTA數量的繼續增加,其性能呈現不斷下降的趨勢;NN的性能則隨著TLP的增大而不斷提升.通過分析發現,MUM的訪存次數明顯高于其他2個應用,TLP的增加會加劇片上緩存資源的爭用.

Fig.3 Changes in average IPC with CTA number圖3 平均IPC隨CTA數目的變化
對于多應用并發執行的情形,應針對不同應用的特點,為不同的應用分配不同的資源.對于計算密集型任務,可以適當調高TLP,讓其能更好地利用計算資源.而對于訪存密集型任務,應適當調低其TLP,從而在保持高資源利用率的情況下,防止片上緩存資源被過度地爭用.因此,此類問題的研究中,通常都傾向組合不同特性的任務并發執行,這樣的技術被稱為CKE(concurrent kernel execution)技術.該技術也是目前TLP調節技術的研究熱點.
目前,針對GPGPU緩存子系統性能提升的TLP調節技術主要從CTA和warp兩個不同的粒度層次進行研究.這些研究主要集中在3個方面:1)增大TLP;2)通過cache繞行技術,在不降低TLP的前提下避免稀缺資源擁塞;3)限制各并行任務的TLP,以避免過度的資源爭用.
2.1.1 提升TLP技術
正如圖3所示,對于有的應用程序來說,增大計算任務的TLP可以帶來更強的延遲隱藏能力,可以容忍更長的訪存延遲和更密集的訪存請求,這意味著可以增強對不規則訪存行為的處理能力.
近幾年,不少研究人員發現提升TLP可以有效提升GPGPU的性能,此類研究主要集中于CKE技術.
在Fermi架構之前,單一時刻一個GPGPU上只支持單kernel的運行,片上資源的利用率普遍較低,甚至可能造成某些硬件資源剩余.在推出Fermi架構后,可以利用片上的剩余資源運行其他的kernel.較早的CKE技術[22-24]主要關注多kernel的并行性和公平性,但未注重片上緩存子系統的狀態,因此GPGPU的整體性能難以達到最大.
為了使不同類型的kernel互補性地使用SM的片上資源,Xu等人[25]和Wang等人[26]分別提出了Warped-Slicer及SMK算法,實現了對不同類型kernel的組合優化執行.在SM資源分配接近耗盡時,SMK會將大量占用最稀缺資源的CTA換出,換入占用稀缺資源較少的、規模更大的CTA,進一步提高TLP.同時,SMK使用的搶占技術需要在GPGPU中進行上下文切換,產生了大量的緩存數據交換[27],造成性能損失.Park等人[28]提出精確控制開銷的協同搶占方法Chimera,采用了CTA的flush、上下文切換和drain等3種搶占方式,有效降低了由于搶占帶來的性能開銷.Li等人[29]提出提前保存狀態的方法PEP,也較好地減少了上下文切換的開銷.Park等人[30]則在SMK的基礎上,與空間多kernel并發處理框架[22]相結合,使資源分區更合理,超過了SMK性能的13.9%.此外,Liang等人[31]提出了將不能充分利用的資源分配給其他已經正在運行的kernel,提升了整體的運行速度.
CKE技術通常會受到固定的資源分配方案和任務組織方案的限制,靈活調整這些規則,有利于提升片上資源利用率.分立結構的片上存儲器各自固定不同層次的緩存容量,使用可調節的統一片上存儲器[32]替代,可以根據任務需求調節不同類型存儲器的容量,有利于將SM上的CTA數量分配到極限.但SM上并發的CTA數量是受到嚴格限制的,若所有并發CTA所使用的緩存資源都較少時,片上的緩存等資源將得不到充分利用,造成片上資源的浪費.Yoon等人[33]提出了一種虛擬線程(virtual thread, VT)體系結構,將每個SM上并發執行的CTA數量分配至硬件容量的極限,并將這些并發的CTA置為活動和非活動狀態,活動并發執行的CTA數量仍然符合硬件物理限制.當處于活動狀態的某個CTA中的所有warp到達一個較長的訪存延遲時,該CTA的狀態變為不活躍,下一個就緒的處于不活躍狀態的CTA將取代它,從而有效地保持緩存資源的利用率.相比SMK,VT避免了保存和恢復塊狀態以及交換大量緩存數據所產生的較大開銷.此外,與VT相似的VTB技術[34]將2個CTA合為一個大的CTA,考慮到shared memory資源訪問的壓力,只有在CTA中的warp訪問shared memory時才予以分配shared memory,一旦使用完畢,則立即釋放對shared memory的使用.
在提升TLP水平的同時,還要使并發執行的線程保持高度活躍的狀態,才能保持片上資源的高利用率.Kim等人[35]提出warp預執行,對處在長延遲訪存操作的warp繼續對后續指令進行獲取和解碼,識別并預先執行不依賴長延遲訪存操作的指令,能夠更好地保持處于活躍狀態的線程數量.Xiang等人[36]指出資源的分配和回收若總是采用CTA級,它所占用的全部資源則需等到最后的warp之行結束才能回收,其占用的緩存在第一時間未得到及時釋放.因此,他們提出了warp級的資源分配回收機制,使得更多的warp得到提前執行的機會,可以更大限度地提升片上資源的利用率.
表1對比了5種提升TLP技術的主要特征.從表1可以看出,Park等人提出的Maestro多任務調度框架從空間和時間上同時考慮多任務調度資源分配的合理性,使得其資源的利用率和性能收益在這5個方法中最好.Warped-Slicer方法主要是使用了更小的任務調度單位,使得資源利用率得到了較好的提升.但是,由于需要CTA的換入換出,其性能收益也不高.SMK由于需要在上下文之間切換,開銷很大,其性能收益相對最低.

Table 1 Features Comparison of the Main Strategies with TLP Enhancing表1 提升TLP的主要策略的特點對比
特此說明,各表中程度由低到高依次表示為:Lower 2.1.2 保持TLP技術 提升TLP可以有效地保持甚至提高片上資源的利用率.但是,TLP的提升也可能帶來更激烈的緩存爭用,甚至會造成無法迅速解除的訪存阻塞.cache繞行技術可在緩存出現訪問失效時,將訪問下一級存儲器所獲取的數據直接傳送給寄存器.因此,在出現片上緩存資源激烈爭用時,采用cache繞行技術既可以有效保持SM上的TLP及NoC等片上其他資源的利用率,又能有效避免片上緩存資源爭用的加劇. 由于采用cache繞行訪問得到的數據保存在寄存器中,其獲得的數據可重用性很低.因此,對低重用的數據訪問更適合采取cache繞行技術.及時分析掌握運行時的訪存行為特征,可以動態地找出繞行緩存的合適時機.Jia等人[37]提出內存請求優先級緩沖(MRPB)策略,通過區分請求的來源分析預測為其提供服務是否會導致緩存抖動或阻塞,并判斷相應的訪存請求是否繞行cache.但是,MRPB并未真正分析訪問請求的數據是否被重用,也即并未根據請求訪問數據的特征來選擇被繞行的對象.Koo等人[38]提出訪問模式感知的緩存調度架構APCM,則依據warp load指令的特征識別低重用的數據,并選擇需要繞行cache的訪存請求.Lee等人[39]提出Ctrl-C cache繞行框架,通過訪存指令感知算法更細致地識別每條指令的緩存重用行為,并做出cache繞行決策.Li等人[40]和Chen等人[41]提出的cache繞行策略則主要考慮了訪存數據的重用距離特征.不同于預測重用,Dai等人[42]提出通過預測是否能命中緩存來決定是否繞行,其實驗結果表明,該方法優于Chen等人[41]提出的cache繞行策略.與直接識別數據的重用特征不同,Liang等人[43]在并行的多任務中,以CTA為單位采取繞行,通過對增加繞行塊帶來的效果進行采樣分析,逐步找到最合適的繞行方案. 也有學者通過編譯技術靜態分析訪存的行為特征,可以提前識別是否適合采取cache繞行的訪存操作.Liang和Xie等人[44-48]分別提出了一種編譯時框架和一種編譯運行時相結合的緩存繞行框架.后者在編譯時識別局部性好和局部性差的訪存指令,并標識需要cache繞行的load指令,其余的訪存指令則在運行時分析處理. 有一類應用程序,它們在運行過程中使用的運算數據絕大部分都只被訪問一次,其訪問的數據通常被稱為流式數據.流式數據的局部性非常差,因此對這種類型的數據訪問非常適合采用cache繞行技術.Choi等人[49]提出了一種針對于讀取操作的cache繞行方法,避免沒有重用特征的流式數據進入LLC.Tian等人[50]提出的自適應cache繞行策略,有效預測并避免流式數據進入一級緩存. 此外,有一些綜合性的緩存管理方案[51-52]也有效結合了繞行技術. 表2對比了6種主要的使用cache繞行技術的優化策略的特點.從表2中可以發現,利用數據的重用特征選擇合適的繞行cache對象是提高cache繞行效率的重要方式.其中,MRPB和TLP modulation and cache bypassing未采用重用特征提取機制,其性能收益相對一般.APCM精細地利用了每個load指令的局部性特征,獲得了較高的性能收益.Liang和Xie等人利用編譯時預測和運行時感知的重用特征提取機制實現的Coordinated static and dynamic cache bypassing緩存繞行策略獲得了不錯的性能收益. Table 2 Features Comparison of the Main Strategies with Cache Bypassing表2 使用cache繞行的主要策略的特點對比 2.1.3 TLP限制策略 隨著SM上的TLP逐漸升高,緩存資源也逐漸變得緊張.若在硬件資源的限制范圍內繼續提升TLP,緩存爭用將加劇,甚至出現緩存訪問“抖動”,直至出現訪存阻塞.此時緩存子系統性能出現嚴重損失,而TLP的升高帶來的隱藏訪存延遲的好處不足以彌補這一損失,GPGPU總體性能將會受到下降的影響.因此,在緩存資源競爭加劇的情況下適當限制TLP,可以有效防止GPGPU的性能下降. 通過前面對圖3的分析可以知道,有些任務運行時因大量消耗其他硬件資源只能產生有限的TLP,TLP即使達到物理上限,也不足以使緩存產生抖動;有些任務雖可繼續增加TLP,但由于其占用的片上資源過多,繼續提升TLP,反而導致系統性能下降.Bakhoda等人[19]觀察到一些任務通過降低TLP減少了緩存爭用,并提高了系統性能. 另外,Narasiman等人[57]提出的兩級warp調度策略將SM上所有活躍的warp分為2組.同一時刻只有一組warp執行,當活躍warp組中所有的warp被阻塞時,另一組warp才被調度執行.兩級調度策略使得活躍的并發線程數減少了一半,因此片上緩存的爭用將得到有效的降低.與他們稍有不同的是,Jog等人[58]提出的線程調度策略OWL以CTA為粒度進行兩級調度. 當前,多任務并發執行已成為GPGPU性能優化研究的熱點.多任務并發執行無疑會大大增加線程對片上緩存資源的爭用.動態分析不同任務的執行特點,實時調節不同任務對不同資源的使用度,可以實現不同執行任務對各種硬件資源進行互補性地使用.尤其是對片上資源占用率高的執行任務,應動態限制其并發執行的線程數量,并通過利用限制TLP調節技術,有效減少片上資源的訪問爭用情形.Dublish等人[59]針對多任務情形下的緩存爭用,提出了線程調度策略Poise,利用了機器學習的方法,分析出不同特征任務運行時的最佳TLP,取得了較好的性能效果. 另外,一些綜合性的緩存管理方案[51-52]和線程調度方法[60]也有效結合了TLP限制策略.表3歸納了4種TLP限制策略的主要特征.其中,CCWS和Poise都是在運行時對數據的重用特征進行被動感知,獲得的性能提升較為有限.DAWS和CBWT則是在運行時主動預測重用特征,其準確性更佳,因此獲得了相對較好的性能提升. Table 3 Features Comparison of the Main TLP Limitation Strategies表3 幾種TLP限制策略的特點對比 對GPGPU緩存子系統來說,增強訪存延遲的隱藏能力是改善訪存效率的一種重要方式.除了使用TLP調節技術,還可以通過訪存順序調節技術增強隱藏訪存延遲的能力,而預取和訪存請求重排序正是2種主要的訪存順序調節技術. 2.2.1 預取 預取技術利用當前warp的訪存操作,一并將該warp或其他warp后續訪存的數據提前讀取到片上緩存中,其本質上是改變了后續訪存操作的順序.通過預取,一方面可以有效降低cache的強制失效率,避免過多的計算停頓;另一方面,由于一次訪存操作可以滿足當前和后續多次訪存請求的需要,整體上也降低了對片外訪存的開銷.因此,預取技術在某種程度上可以有效提升存儲子系統的訪問效率. 預取面臨準確性和及時性兩大主要問題,這兩大問題可以通過準確計算預取地址和選擇合適的預取時機來解決. 如果預取地址計算錯誤,該失效的預取操作會帶來緩存資源爭用的壓力.有些應用的訪存請求體現出了明顯的規律,例如大量使用線程ID引用內存地址[9]、運行相同代碼的線程具備相似的訪存特征[61]等.這些規律方便對訪存預取的步長進行分析,從而可以準確計算預取數據的地址. 對于計算比較規則的應用來說,預取策略可以實現非常高的準確度.Lee等人[9]提出了多線程感知預取的策略,利用應用程序中大量使用線程ID訪問內存地址的特點,為其他線程預取所需數據,并自適應地限制預取,以避免預取帶來過大的緩存壓力.Oh等人[61]提出了WASP的預取機制,在了解了相關warp之間的訪存差異后,選擇執行相同訪存指令且比當前warp執行速度慢的warp進行數據預取.Koo等人[62]提出的CAPS預取策略,則使用了每個CTA的基地址來計算后續warp的預取偏移量,其預取準確率超過了97%,并通過定期發出訪存請求的方式,獲取了更多合并訪存請求的機會,可為大部分任務帶來平均8%的性能提升. 然而,預取到緩存中的數據不一定能立即被傳送到寄存器參與運算,通常需要等待任務執行到相應的指令時才能被訪問,這樣則有可能被后續的訪存數據置換出去.因此,預取的時機選取很重要.預取過早,對應需求的任務還未被調度執行,可能導致預取訪問的數據還未被使用就被置換掉.預取過晚,任務發出訪存請求時,數據未被及時預取至緩存中,導致相應任務訪問cache失效. 為連續warp執行預取時,由于片外訪存的延時相對較大,預取的時機往往過晚.Jog等人[63]提出了預取感知的warp調度策略,在兩級warp調度的基礎上,為不連續的warp選擇合適的預取時機,使得系統平均性能提高了7%.Caragea等人[10]提出的數據預取機制RAP,可根據資源使用情況動態調整預取距離,使資源緊張狀態下的預取更為有效.與他們不同的是,Oh等人[64]提出的warp調度框架APRES將訪存特征相似的warp成組調度,若組中的第1個warp訪問cache失效,則由該warp為全組其他的warp進行數據預取. 此外,Jog等人[58]提出的數據預取機制中重點考慮如何提高片上二級緩存的命中率.Sethia等人[65]提出的自適應預取技術則重點考慮了如何提高GPGPU的能效. 表4對主要的緩存預取策略進行了對比.其中,CAPS,WASP和MT-prefetching預取準確度較高,因此獲得了較好的性能收益.RAP雖然實現了較為復雜的軟件預取,但只考慮了預取步長因素,其預取準確度較低,由此獲得的性能收益相對較低. Table 4 Features Comparison of the Main Strategies with Prefetching表4 主要的應用數據預取策略的特征對比 2.2.2 訪存請求重排序 當計算所需的數據無法命中片上cache時,將產生片外訪存請求.由于片外訪存的延時大大超過緩存提供數據服務的時間,因此應盡可能減少片外訪存次數.對此,GPGPU實現了兩級訪存合并機制,即warp內的訪存合并和warp間的訪存合并. 當片上緩存訪問失效增多時,warp的執行性能必然受到影響.同時,片外訪存請求會相應增加.根據每個片外訪存的特點,適當調整發出片外訪存的順序,及時滿足需求量大的訪存請求或局部性好的訪存請求,可以有效提升及時服務后續計算任務的能力,訪存延遲也可以更有效地隱藏在計算過程之中. 通常情況下,CTA中所有的warp運行結束后,才能給SM調度分配新的CTA執行.但是,CTA中有些warp的執行速度比較慢,會拖累整個CTA的執行,可以把它們稱為CTA中的關鍵warp.因此,應優先服務CTA中關鍵warp的訪存請求.Lee等人[66]提出的線程調度CAWS,就是優先服務CTA中的關鍵warp,使其利用緩存的機會大大增加,加速了關鍵warp的執行,從而也加速了整個CTA的執行.為了提升CAWS的適應性,Lee等人又聯合Arunkumar[67]提出了CAWA線程調度策略,將線程調度與緩存使用的優先級進行了結合. 通過對訪存請求重排序,可以增加訪存請求的合并機會,并減少對下一級存儲器的訪問,從而降低GPGPU緩存子系統的訪存壓力.Jia等人[37]提出了一種內存請求優先級緩沖(MRPB)的硬件結構,采用數個隊列對訪存請求重新排序,將來自同一warp的訪存請求分組,很好地開發了warp內的數據局部性.Kloosterman等人[68]提出WarpPool合并來自多個warp的緩存請求,開發了warp間的數據局部性,也有效減少了多次發出同一訪存請求的概率.與他們的思想不同的是,Sethia等人[69]提出了基于訪存感知的線程調度策略Mascar,當片上訪存排隊資源處于飽和狀態時,通過打破嚴格按照隊列次序進行訪存服務的限制,優先服務緩存可以滿足數據訪問請求的warp,提升了緩存中數據的重用能力. 另外,每一種線程調度方式都有自己的局限性和優勢,例如對于具有warp間局部性的工作負載,公平的輪轉調度器性能要比貪婪的warp調度器更優秀.為此,Lee等人[70]提出了iPAWS,根據warp的指令發射模式在2種調度器之間進行動態適配,實質上也是對warp間的訪存順序進行動態調整.此外,對各個SM輪轉分配CTA的調度方法在均衡硬件負載的同時,也可能破壞了連續block之間存在的局部性.為此,Lee等人[71]提出的線程調度策略BCS,盡量將2個連續的CTA分配給同一個SM,使連續warp的訪存數據可以更好地重用,開發了CTA間的數據局部性. 表5對比了主要的訪存請求重排序策略的特征.其中,BC的優化粒度是線程塊級的,獲得訪存請求合并的機會最少,因此性能收益相對最低.iPAWS通過對訪存指令Load模式的分析,動態調正warp調度策略,獲得了較高的性能收益.MRPB通過對訪存請求進行重排序,開發了warp內的數據局部性,并結合緩存繞行機制,也獲得了較高的性能收益. Table 5 Features Comparison of the Main Strategies with Memory Accesses Reordering表5 主要的訪存請求重排序策略的特征對比 隨著GPGPU的計算性能逐漸增強,SM可以支持更高的TLP,運算所需的數據量大大增加,這要求緩存子系統能夠承載更高的數據通量.然而對GPGPU緩存子系統而言,簡單增加其容量,會使硬件規模急劇上升.為此,研究者們提出了數據通量增強的技術,利用更優秀的結構改進緩存子系統,實現了更高的訪存效率. NoC在緩存子系統中擔負著傳遞數據的任務,增加單位時間內數據傳輸的通量有助于應對更密集的訪存請求. 通常情況下,數據的請求和應答都在同一網絡上傳輸.Kim等人[72]提出DA2mesh網絡架構,將訪存請求和訪存應答在不同的片上網絡上傳輸,使得系統整體性能提升了36%,同時片上網絡的能耗降低了15%.在實際的片上網絡中,訪存請求的數據量明顯低于訪存數據回傳的數據量.Jang等人[73]采用不對稱片上網絡的設計,較好地提升了片上緩存子系統的數據訪問效率,使得系統性能提高了25%.另外,Cheng等人[74]試圖在不增加規模的情況下最大化不對稱NoC設計的性能.Ziabari等人[75]對幾種不對稱的NoC設計進行了比較. 來自各個SM的訪存請求中,可能存在訪問同一行LLC的、可以被進一步合并的訪存請求.Zhao等人[76]提出簇內合并訪存請求的策略,降低了NoC的通信壓力,提升了緩存子系統承載高數據通量的能力.Zhao等人還提出了2種二級路由設計[77-78],縮減了NoC的總體規模. 表6對比了7種主要的NoC優化方案的特點.其中,Zhao等人[77]的方法還涉及對LLC的優化.一些為進一步降低NoC成本的方案[11,72]試圖在資源分配更少的情況下最小化性能丟失,而Zhao等人[79]試圖在減小功耗的情況下保持性能. 從表6可以看出,將訪存請求和訪存應答在不同的片上網絡上傳輸,對提升NoC的性能較為有利,這是因為可以針對2個網絡所傳數據的不同特點進行優化,DA2mesh NoC和Packet Pump NoC都因此獲得了相對較高的性能收益.而采用二級路由的NoC設計方案利于帶來較好的能效收益,Adaptive LLC和CD-Xbar都因此受益.另外,Adaptive LLC可以動態地繞行靠近LLC的路由結構,可以獲得比CD-Xbar更高效的訪問速度. Table 6 Features of Seven NoC Optimization Strategies表6 7種NoC優化策略的特征 與目前主流的CPU不同的是,目前主流的GPGPU通常只包含二級片上緩存.因此,GPGPU中的L2緩存也即LLC. 由于數據在LLC中只存在唯一的一份,LLC一次不能服務訪問對同一數據的多個請求,因此,這些訪存請求只能串行執行.Zhao等人[77]提出的方法可以動態改變LLC的狀態,支持將集中訪問的數據復制多份,并放在不同的位置同時進行訪存,從而實現了對這些數據串行訪問的并行化,提高了對LLC的訪問效率. 保護LLC中數據的局部性同樣可以提高訪存效率.Choi等人[49]提出了一種讀取繞行的策略,可以有效避免局部性差的流數據進入LLC.Mu等人[80]提出的緩存管理方案也考慮提高LLC重用數據的駐留機會.Dublish[81]提出將更多的LLC帶寬提供給那些片上緩存爭用不激烈的SM.為了減小LLC的帶寬壓力,Dublish等人[82]又提出將一級緩存通過輕量級環形網絡連接以支持數據共享,減少了29%的LLC流量,這些帶寬可以用于服務其他的訪存請求.Candel等人[83]提出在LLC中加入類緩存的緩沖結構(FRC,Fetch and Replacement Cache-like structure),延緩LLC中被置換數據的換出,提高了這部分數據的訪問命中率.此外,為了打破有關數據局部性利用方法的層次局限,Vijaykumar等人[84]協調NUMA與CTA調度,將訪問同一批數據的CTA集中在同一個SM運行. 另外,一些研究者們還謀求將少量計算單元集成在較低層次的存儲器件(如主存[85])中,避免移動低計算需求的數據集,減少了SM對LLC的訪存數量.類似地,Pattnaik等人[86]提出的NDP解決方案將少量計算單元集成在LLC中,也減少SM與LLC之間的數據傳輸.與基準GPU相比,該策略減少了44%的片上數據移動,提供了平均31%的性能提升和16%的能效改進. 表7比較了5種LLC性能改進策略的特點.其中,Mu等人基于對重用數據的保護提高LLC性能,由于LLC中的數據重用特征會受到數據頻繁替換的影響,因此獲得的性能提升相對有限.而FRC利用添加類似于緩存的結構,減小了數據頻繁替換的影響.雖然增加了硬件開銷,但是FRC換取了良好的重用特征提取能力,因此獲得了相對更好的性能提升. Table 7 Five Features of LLC Performance Improvement Strategies表7 5種LLC性能改進策略的特點 采用傳統SRAM設計的緩存子系統規模和功耗都很大,且容量小.隨著NVM(non-volatile memory)非易失性存儲器件的廣泛應用,為GPGPU上的緩存系統架構設計注入了新的活力.NVM具有更高存儲密度和良好的讀數據性能,但是其存在著寫功耗大、寫速度慢、壽命相對有限的缺陷. 隨著研究人員的不斷努力,NVM的性能缺陷和壽命缺陷有了很大改善,研究人員試圖將NVM融入到GPGPU上的緩存子系統設計架構中,并逐漸形成了NVM混合傳統緩存材料、完全使用NVM材料構建緩存子系統的兩大發展方向.表8列舉了近幾年5種具有代表性的應用于GPGPU緩存的NVM材料的特性,并與傳統存儲材料作了對比. Table 8 Five Features of NVM Material Used on GPGPU Cache表8 5種使用在GPGPU緩存上的NVM材料的特性 多數NVM材料在寫入速度方面達不到傳統材料的水平,但在讀取速度方面十分接近傳統材料.對此,研究者們考慮在傳統緩存中混合使用NVM,利用NVM存儲讀取頻次更高的數據,發揮其讀取速度的優勢;同時使用傳統材料緩存,為寫入次數較多的數據提供緩存,平衡NVM寫入壽命和寫入速度的缺陷.設計這樣的混合緩存,需要充分考慮使用的NVM種類、NVM緩存的容量比例等因素,滿足緩存在整體規模、壽命、容量和功耗等方面的要求. Goswami等人[87]提出將STT-MRAM作為只讀存儲器件融入到SRAM緩存系統中,充分利用了STT-MRAM較好的讀性能,顯著改善了shared memory的只讀數據訪問性能.Zhang等人[88]提出的SRAM與STT-MRAM混合的緩存結構,通過在運行時識別數據在讀寫次數方面的特征,預測和推斷需要緩存的數據應該使用哪種材料的緩存. 采用NVM與傳統材料混合的解決方案較好地平衡了NVM的優勢與缺陷.然而,完全采用NVM構建緩存可以更好地利用其高密度的優勢,其進一步擴大的緩存空間帶來的不只是更長的數據保持時間和更小的緩存抖動,還有利于支撐更高的TLP. Satyamoorthy等人[89]提出了一種在固定規模和功率約束下用MRAM代替SRAM shared memory的設計,并通過設計寫緩沖區隱藏寫入延遲.Zhang等人[90]提出使用電阻隨機存取存儲器(RRAM)取代基于SRAM的LLC緩存,將片上緩存的空間擴大了30倍,很好地緩解了LLC的抖動問題.Samavatian等人[91]設計了一種基于STT-RAM的LLC,也帶來了系統16%的平均性能增幅. 傳統SRAM的替代方案之中,DWM是極少數在讀寫性能上近乎持平于傳統存儲材料的電子自旋式存儲技術.Venkatesan等人[92]提出了一種新的片上緩存架構STAG,首次嘗試以DWM組織GPGPU的片上存儲.DWM通過訪問晶體管共享電路實現了數據存儲的高密度,但由于對其訪問需要做出類似移動磁帶帶頭的動作,也會帶來一定的訪問延遲. 另外,NVM技術也可獨立用在更高層次的寄存器中.基于STT-RAM的寄存器[93-94]和混合寄存器[95]均已被提出.Mittal等人[96]更是提出了一種基于SOT-RAM的寄存器設計方案,它在保持與SRAM寄存器相同性能的同時,比SRAM和STT-RAM寄存器提供了更高的能效比.Gebhart等人[32]提出的統一片上存儲器結構將存儲器靜態地劃分為寄存器和L1數據緩存.Jing等人[97]提出將寄存器和數據緩存融合在一起,通過對寄存器地址轉換實現緩存仿真寄存器的功能,具有統一尋址和管理策略,大大提高了訪存敏感型任務的性能. 表9對比了應用于GPGPU緩存組織架構的6種主要NVM技術的特征.從表9可以看出,通過傳統材料混合NVM的緩存組織方式能獲得較佳的性能提升.在STAG中,DWM代替了傳統的cache,雖然DWM材料存儲密度高,有利于增加片上緩存的容量,但是其訪問時需要移動磁帶帶頭,因此其帶來的性能提升相對較低. Table 9 Features Comparison of Several NVM Technologies Used on GPGPU Cache表9 幾種GPGPU緩存上使用的NVM技術的特征對比 研究者們提出的不同緩存子系統性能優化方法均在一定程度上提升了GPGPU緩存子系統的效率,有利于GPGPU的性能提升.但由于各種方法考慮問題角度的局限性,緩存子系統的性能潛力仍未得到充分開發. GPGPU的不斷發展使得緩存子系統性能優化方法在5方面還存在挑戰: 1) 隨著單GPU計算能力的不斷提升以及GPU集群技術的不斷發展,GPU上支持的并發kernel數的增長速度遠遠超過緩存容量的增長速度,片上緩存資源爭用問題愈發突出.對此,需對高并發的多個計算任務進行更有效地調度,并有效結合編譯技術,從時間和空間上更好地開發緩存中數據的局部性,有效解決片上緩存爭用問題. 2) 由于寫性能、功耗以及壽命方面的缺陷,傳統緩存的替代方案依然存在不足,部分材料的讀性能和壽命雖然能與傳統材料相媲美,但大大犧牲了其存儲密度和功耗方面的優勢.在此方面的研究中,一方面可以開發密度更高、功耗及讀寫性能與傳統緩存相當甚至超越的新型存儲材料,以全面替代現有的傳統存儲器件;另一方面,針對傳統材料和新型材料融合的片上緩存子系統解決方案,需要開發更有效的任務調度算法,并有效結合編譯技術,更好地利用傳統存儲材料和新型存儲材料各自的優勢,在保證性能的前提下,提高存儲密度和使用壽命,同時有效降低片上存儲子系統的功耗. 3) 目前,為了更有效地解決CPU與GPGPU之間的數據傳輸長延時問題,不少研究提出CPU和GPGPU融合的體系架構,且目前已有相關的商用處理器產品.在該體系架構下,CPU和GPGPU共用片上存儲,片上存儲資源的爭用問題變得更加突出,對其進行性能優化需要面對更高的復雜性,目前針對此類體系結構中緩存子系統的優化工作并不多. 4) 由于GPGPU上并發執行的線程數以萬計,片上數據傳輸的數據量也非常巨大,現有的片上網絡NoC由于其結構問題,當遇到訪存請求過多的情況下,存在傳輸效率不高、功耗較大、無法有效區分冗余訪存請求等問題,使得訪存請求的數據傳輸時延增加,降低了片上緩存子系統的性能.為此,一方面可以對現有的NoC結構進行優化設計;另一方面需要更好地對冗余訪存進行合并,提高NoC的數據傳輸效率,以更好地提升片上緩存子系統的數據訪問效率. 5) 功耗問題始終是制約GPGPU發展的重要瓶頸.眾多研究表明,片上緩存是GPGPU功耗產生的主要來源之一,這很大程度上限制了GPGPU片上緩存子系統的發展.結合任務調度,利用DVFS以及門控功耗等技術,實現對片上緩存子系統的功耗優化,以有效提升GPGPU片上緩存子系統的容量,從而緩解片上緩存的爭用問題.

2.2 訪存順序調節技術


2.3 數據通量增強技術

2.4 針對LLC的優化

2.5 NVM在GPGPU緩存子系統中的應用


3 結束語