從CPU架構(gòu)和技術(shù)的演變看GPU未來發(fā)展
GPU內(nèi)部擁有很多種類型的緩存,不同的緩存都有各自特殊的用途,往往無法互相兼容,這完全不同與CPU內(nèi)部L1、L2、L3這樣簡單的層級關(guān)系。
★ Cypress的一級緩存:固定功能、固定容量的專用緩存
AMD的Cypress核心內(nèi)部的流處理器是按照SIMD(單指令多數(shù)據(jù)流)劃分的,每組SIMD陣列內(nèi)部包括了80個流處理器,這些流處理器擁有獨立的紋理單元和一級緩存(L1)以及本地數(shù)據(jù)共享緩存(Local Data Share)。
為了滿足DX11中DirectCompute 11的要求,AMD增加了本地數(shù)據(jù)共享緩存的大小(Local Data Share,LDS),容量達(dá)到了32KB,是RV770的兩倍。LDS用于同一個線程組(Thread Group)中的線程共享數(shù)據(jù)。從上圖中我們可以看到,每一個SIMD連接一個LDS,不同的SIMD是不能共享LDS的,因此所有屬于同一個線程組的線程都會被線程調(diào)度器發(fā)送到同一個SIMD上執(zhí)行。
如果不同的SIMD上的線程要共享數(shù)據(jù),需要用到全局?jǐn)?shù)據(jù)共享緩存(Global Data Share,GDS)。在Cypress中,GDS的容量也倍增了,達(dá)到64KB。到目前為止,我們對GDS的了解仍然有限,與LDS不同,并沒有指令能顯式的操作GDS。據(jù)Beyond3D的消息,在未來的OpenCL擴展中可能會提供對GDS的訪問,目前GDS只對編譯器可見。
★ GF100的一級緩存:可動態(tài)分配容量的多功能智能緩存
以往的GPU都是沒有一級緩存的,只有一級紋理緩存,因為這些緩存無法在通用計算中用于存儲計算數(shù)據(jù),只能用于在紋理采樣時暫存紋理。而在GF100當(dāng)中,NVIDIA首次引入真正的一級高速緩存,而且還可被動態(tài)的劃分為共享緩存。
在GF100 GPU中,每個SM除了擁有專用的紋理緩存外,還擁有64KB容量的片上緩存,這部分緩存可配置為16KB的一級緩存+48KB共享緩存,或者是48KB一級緩存+16KB共享緩存。這種劃分方式完全是動態(tài)執(zhí)行的,一個時鐘周期之后可自動根據(jù)任務(wù)需要即時切換而不需要程序主動干預(yù)。
一級緩存與共享緩存是互補的,共享緩存能夠為明確界定存取數(shù)據(jù)的算法提升存取速度,而一級緩存則能夠為一些不規(guī)則的算法提升存儲器存取速度。在這些不規(guī)則算法中,事先并不知道數(shù)據(jù)地址。
對于圖形渲染來說,重復(fù)或者固定的數(shù)據(jù)比較多,因此一般是劃分48KB為共享緩存,當(dāng)然剩下的16KB一級緩存也不是完全沒用,它可以充當(dāng)寄存器溢出的緩沖區(qū),讓寄存器能夠?qū)崿F(xiàn)不俗的性能提升。
而在并行計算之中,一級緩存與共享緩存同樣重要,它們可以讓同一個線程塊中的線程能夠互相協(xié)作,從而促進(jìn)了片上數(shù)據(jù)廣泛的重復(fù)利用并減少了片外的通信量。共享存儲器是使許多高性能CUDA應(yīng)用程序成為可能的重要促成因素。
★ 可動態(tài)分配的共享式一級緩存大幅提升并行計算效率
再來算算一級緩存的總?cè)萘浚珻ypress擁有8KBx20=160KB的一級緩存,和32KBx20=640KB的本地數(shù)據(jù)共享緩存,還有額外的64KB全局?jǐn)?shù)據(jù)共享緩存。
而GF100擁有64KBx16=1MB容量的一級緩存+共享緩存,他們可以被動態(tài)的劃分為256KB一級緩存+768KB共享緩存,或者768KB一級緩存+256KB共享緩存,另外還有12KBx16=192KB的紋理緩存,無論從哪個方面來比較,都要比Cypress強很多。
此次NVIDIA創(chuàng)新性的可動態(tài)劃分一級緩存設(shè)計,是以往CPU上面都不曾有過的先進(jìn)技術(shù),大幅提升了GPU并行計算的數(shù)據(jù)處理能力,使得GPU龐大的流處理器資源在高負(fù)荷密集型運算時不至于出現(xiàn)瓶頸,從而發(fā)揮出恐怖的浮點運算能力。
關(guān)注我們
