GPGPU體系結構優化方向 [下]
繼續之前的文章,我們介紹GPGPU的優化方向:1)增強GPGPU的可編程性 2)CPU-GPU異構架構
增強GPGPU的可編程性
增強GPGPU的可編程性可以增加GPGPU相對其他平臺,比如FPGA的優勢。主要有以下三個方向:
1.Coherence and Consistency model
3.Memory Management
Coherence and Consistency model
目前的GPU缺乏cache一致性,需要diable 線程private的L1 cache,或者采用基于軟件的bulk coherence決策(比如在同步點,flush掉所有的private L1 cache。
不同于CPU的一致性模型,GPU存在大量的線程,如果也按照CPU的方式維護一致性,那么代價很大。文章【Cache Coherence for GPU Architectures】通過使用全局同步計數器來self-invalidate cache block,不需要顯性的信息來維護一致性,稱為Temporal Coherence(TC)。
【Exploring Memory Consistency for Massively-Threaded Throughput-Oriented Processors】分析了硬件一致性模型,通過比較了sequential consistency, total store order and relaxed memory model,他們發現硬件一致性在GPU上的代價很小,可以維護strongly ordered,而只需要很小的代價。
Transactional memory
GPU中,跨線程的通信是通過在同一個thread block內的thread的scratch-pad memory進行的。最新的GPU也可以使不同的線程通過全局的原子操作來訪問進行全局thread block的通信。
原子操作可以用于實現軟件同步原語,比如fine-grain lock,可以簡化編程,但是lock-based的同步容易導致死鎖。KILO TM (KILO TM: Hardware Transactional Memory for GPU Architecture) 不依賴cache一致性或者原子操作,而是通過細粒度的基于值的方法檢測沖突。
Memory management
GPUdmmGPUdmm: A High-performance andMemory-Oblivious GPU ArchitectureUsing Dynamic Memory Management通過將GPU的內存看作是CPU的內存的緩存,來進行動態的內存管理。有以下優勢:
簡化了軟件編程對memory的管理
給編程人員一個CPU的memory編程視圖
將GPU執行和CPU-GPU數據傳輸overlap
【Architectural Support for Address Translation on GPUs】通過基于GPU的特性修改了傳統的TLB和PTW來減少對虛擬地址物理地址轉換的overhead。
通過在GPGPU內部支持virtual-physical address的轉換可以支持unified memory,文章的作者通過比較與CPU TLB和page table walker的不同,主要進行了以下改進:
warp內的線程公用TLB,而不是每個線程獨占一個
地址coaleacing之后再進行虛實地址轉換
提出了page divergence的觀點,即一個warp內只需要3個讀口即可滿足常用的情況
TLB采用非阻塞tlb
Cache Conscious Warp Scheduling
CPU-GPU與異構架構
CPU-GPU集成
【Redefining the role of the CPU in the era of CPU–GPU integration】文章展示了在將代碼部分CPU執行,部分卸載到GPU上執行之后,在CPU執行的代碼和傳統的CPU優化過的代碼完全不同。
他們展示了剩余給CPU的代碼有更低的指令層并行性,更復雜的load store操作,更難進行預取和分支預測。并且剩下的順序執行的代碼不會從SIMD指令獲益,也不會從更多的CPU核數上受益,因為線程并行和數據并行都被卸載到GPU上了。
CPU-GPU 編程
【Heterogeneous system coherence for integrated CPU–GPU system】提出以前的基于目錄一致性的CPU-GPU的顆粒度是64Byte,可以將其增加到1KB。因為很多GPU程序是有高度的spatial locality的,大多數的請求是不需要訪問region directory的。
利用異構架構
【CPU-Assisted GPGPU on Fused CPU-GPU Architectures】提出可以通過在CPU將程序卸載到GPU之后,在編譯器的輔助下另起一個線程,這個線程用于專門給GPU預取數據,因為CPU有更高的時鐘頻率,因此預取提高l3 cache的命中率,可以取得很好的效果。
Shared resources management
因為CPU和GPU越來越趨近于共享memory資源,包括last level cache, 片上網絡和內存。因為GPU可以產生大量的內存請求,可以競爭掉CPU對內存的請求。主要有兩種方式來減少CPU和GPU之間的干擾:
application-aware resource managerment
throttling-based management
【Staged memory scheduling: Achieving high performance and scability in heterogeneous systems】提出了staged memory scheduling策略。在內存的層面對cpu gpu的mem req進行平衡。
第一個stage是基于row-buffer locality,第二個stage通過平衡 “偏向CPU的shortest job first調度策略” 和 “偏向GPU的round robin調度策略”來保證CPU和GPU的平衡。 【TAP: A TLP-Aware Cache Management Policy for a CPU-GPU Heterogeneous】發現并不是所有的GPU應用都是對latency不敏感,也存在對cache 敏感,對latency敏感的應用,并且發現GPU core會通常比CPU core更頻繁地訪問Cache。他們引入了cache block lifetime normalization策略來使得對于CPU和GPU,cache都有相似的lifetime。 【Managing GPU concurrency in heterogeneous architectures】通過增加或減少GPU的active warp,來減少其與CPU的競爭。
總結:
增強GPU的可編程性
1. Coherence and Consistency model 通過使用計數器,避免顯示的維護cache一致性,self-invalidate。另外硬件維護strongly ordered內存一致性,代價也可以很小。
2. Transactional Memory 可以使用基于value檢測沖突。
3. Memory Management 可以將GPU的memory視為CPU memory的cache。另外也有對虛實轉換TLB和page table walker的優化工作。
CPU-GPU異構架構
1.CPU的代碼特性在將并行性高的代碼offload到GPU之后完全不同
2.同樣是對CPU,GPU一致性的優化,將顆粒度從64B增加到1KB
3.利用異構架構,CPU執行對GPU數據的預取工作
4. 針對CPU和GPU對資源競爭的平衡,可以平衡對memory,cache的訪問,也可以調節GPU的active warp。
-
FPGA
+關注
關注
1629文章
21736瀏覽量
603319 -
編程
+關注
關注
88文章
3615瀏覽量
93731 -
線程
+關注
關注
0文章
504瀏覽量
19682 -
GPGPU
+關注
關注
0文章
29瀏覽量
4903
原文標題:GPGPU 體系結構優化方向 [下]
文章出處:【微信號:處理器與AI芯片,微信公眾號:處理器與AI芯片】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論