可作CPU的GPU NV GT300顯卡架構(gòu)詳細(xì)解紹
著AMD在北京時(shí)間9月23日正式推出了Cypress(RV870),從而拉開了DX11時(shí)代的序幕《三大至尊特性 HD5800顯卡發(fā)布會(huì)報(bào)道》,而作為老競爭對(duì)手,NVIDIA全新支持DX11技術(shù)的顯卡Fermi(GT300)也在10月3日的國慶假期內(nèi)在國外GPU技術(shù)會(huì)議上曝光《黃仁勛親展示NV Fermi GT300實(shí)物卡》,那么這款NVIDIA的新一代顯卡究竟有什么跨時(shí)代的技術(shù)呢,今天就讓我們一起來看看。
相信大家已經(jīng)了解了有關(guān)Fermi(GT300)——NVDIA下一代GPU架構(gòu)的一些概況,我們已經(jīng)知道,新的GPU核心,是在現(xiàn)有的GT200架構(gòu)上進(jìn)行升級(jí),并且在早期已經(jīng)公布了某些重要的新設(shè)計(jì)。
雖然Fermi(GT300)和早前的GT200系列有很多相同的功能,但是Fermi(GT300)完全是一個(gè)全新的產(chǎn)品。 NVIDIA的技術(shù)白皮書描述了新的結(jié)構(gòu)如下:“GT300是一個(gè)統(tǒng)一的圖形和計(jì)算并行處理器。GT300的功能是GT200最初設(shè)想性能的擴(kuò)展。我們已經(jīng)采取了一切我們之前兩個(gè)處理器的技術(shù)和所有那些為他們編寫的應(yīng)用程序,并采用了全新的方法來設(shè)計(jì),以創(chuàng)造世界上第一個(gè)可以實(shí)現(xiàn)處理器運(yùn)算的GPU。“
“計(jì)算圖形處理器”,“一個(gè)數(shù)字處理能手”都可以很恰當(dāng)?shù)姆Q呼Fermi(GT300)。將Fermi(GT300)制造成一個(gè)擁有512個(gè)流媒體處理器,ECC內(nèi)存保護(hù),以及IEEE 754-2008浮點(diǎn)算法(Cypress也是如此)和完整的32位整數(shù)算法。
關(guān)于下一代Fermi(GT300)芯片的關(guān)鍵設(shè)計(jì)包括以下內(nèi)容:
晶體管個(gè)數(shù)超過30億
使用臺(tái)積電40納米工藝
512個(gè)著色處理器(NVIDIA 公司可稱之為“CUDA技術(shù)核心”)
32個(gè)CUDA cores per Shader Cluster
384 bit GDDR5顯存
1 MB的L1緩存,768 KB二級(jí)高速緩存
最多達(dá)到6GB顯存,1.5GB的消費(fèi)級(jí)顯存
IEEE 754二進(jìn)制浮點(diǎn)數(shù)算術(shù)標(biāo)準(zhǔn)
本地支持執(zhí)行CUDA技術(shù)、C ++,F(xiàn)ortran語言,支持DirectCompute 11,DirectX 11,OpenGL3.1和OpenCL
從數(shù)據(jù)上我們知道NVIDIA 公司宣稱Fermi(GT300)為“最重要的跨越式發(fā)展的GPU架構(gòu)”確實(shí)相當(dāng)?shù)膹?qiáng)悍,但是試想,晶體管個(gè)數(shù)超過30億,512著色處理器的核心,那會(huì)是多么大的一個(gè)核心,要知道相比之下同樣工藝的AMD Cypress也才不過21.5億個(gè)。如果二者核心面積是等比例的(當(dāng)然這不可能),那么GT300將有大約500平方毫米,至少比GT200 576平方毫米小多了,所以可想而知Fermi(GT300)的體積。
Fermi(GT300)采用的NVIDIAGPU無疑在運(yùn)算上要垮一大步,這顯然是新架構(gòu)的主要目標(biāo)。我們將會(huì)看到,NVIDIA公司已經(jīng)在實(shí)現(xiàn)諸如二進(jìn)制浮點(diǎn)數(shù)算術(shù)的重點(diǎn)項(xiàng)目,如支持ECC和高速緩存、切換GPU應(yīng)用程序之間上下功夫,同時(shí)甚至開始了CUDA技術(shù)體系結(jié)構(gòu),同時(shí)NVIDIA 公司認(rèn)為內(nèi)存技術(shù)是并行計(jì)算的未來趨勢,那么除去性能不說,F(xiàn)ermi(GT300)在某種程度上就像是處理器行業(yè)當(dāng)時(shí)的雙核心技術(shù),代表著一個(gè)行業(yè)的未來趨勢。
附GT200架構(gòu)圖:
Fermi(GT300)架構(gòu)詳細(xì)介紹(一)CUDA技術(shù)
如果往高了看,F(xiàn)ermi(GT300)架構(gòu)的目的直接反映出目前NVIDIA的CUDA技術(shù)在向前發(fā)展。在這個(gè)程序中的執(zhí)行模式有threads, thread blocks,和grids of thread blocks ,所有都是一種與眾不同的內(nèi)存訪問和內(nèi)核技術(shù),完全和目前的技術(shù)不同。
最核心的流處理器(Streaming Processor/SP)現(xiàn)在不但數(shù)量大增,而且還有了個(gè)全新的名字CUDA核心(CUDA cores per Shader Cluster)。而線程塊(thread block)就是有能力相互合作和溝通的線程(thread)集合,通過每塊共享內(nèi)存組。每塊可支持多達(dá)1536并發(fā)線程,各自有獨(dú)立通道,獨(dú)立記憶,計(jì)數(shù)器,etc等;其實(shí)每一個(gè)控制極(grids of thread blocks)都是一個(gè)線程塊停止后在運(yùn)行另外一個(gè)相同的線程塊,但有能力從整個(gè)內(nèi)存中陣列讀寫(但只有在內(nèi)核范圍同步)。
這些軟件技術(shù)與 NVIDIA目前流體處理器和CUDA內(nèi)核的GPU的形式匹配,在GPU本身對(duì)線程塊控制極起到調(diào)配,每個(gè)SM(也可以說是SMs)的組合操作執(zhí)行一個(gè)或多個(gè)線程塊和CUDA核心(如NVIDIA 公司他們現(xiàn)在所稱的那樣)執(zhí)行線程。將32個(gè)線程組稱為一個(gè)“Warp”,這樣有助于提高GPU的效率。
這一架構(gòu)的首次實(shí)施,讓我們相當(dāng)盼望GT300的到來,并且會(huì)出現(xiàn)一些令人印象深刻的規(guī)格: GPU是由30億個(gè)晶體管組成,并采用512個(gè)CUDA技術(shù)核心(也就是著色處理器)為16組32個(gè)流媒體處理器組。該記憶體架構(gòu)是圍繞一個(gè)新的GDDR5顯存實(shí)施的,有6通道64bits,總數(shù)為384bits的顯存帶寬。新的顯存系統(tǒng)可以在技術(shù)上支持的高達(dá)6GB的顯存容量——這是高性能計(jì)算應(yīng)用的關(guān)鍵#p#page_title#e#
Fermi(GT300)架構(gòu)詳細(xì)介紹(二)雙精度浮點(diǎn)
每個(gè)SP都包括了32個(gè)CUDA技術(shù)處理內(nèi)核(相當(dāng)于GT200的4倍),可以看到上面也引入了一些新功能,以幫助提高性能。每個(gè)處理器包括一個(gè)完全流水線整數(shù)和浮點(diǎn)單元,它實(shí)現(xiàn)了都符合IEEE 754-2008浮點(diǎn)算法和完整的32位整數(shù)算法,。AMD公司的Cypress核心也實(shí)現(xiàn)了這一標(biāo)準(zhǔn),因?yàn)樗黾恿藢?duì)積和熔加運(yùn)算(Fused Multiply-Add/FMA)的支持,每循環(huán)操作數(shù)單精度512個(gè)、單精度256個(gè)(G200僅支持單精度FMA)。所有一切都符合業(yè)界標(biāo)準(zhǔn),計(jì)算結(jié)果不會(huì)產(chǎn)生意外偏差。
此外,在每個(gè)SM包括16個(gè)加載和存儲(chǔ)單元和4個(gè)特殊功能單元處理正弦和余弦計(jì)算(圖形計(jì)算領(lǐng)域,所有可見圖像都是由無數(shù)個(gè)三角形組成,所以正弦和余弦計(jì)算的能力也就是反映出了GPU的處理能力)。
NVIDIA 公司聲稱GT300架構(gòu)雙精度性能將大大超過現(xiàn)有GT200的設(shè)計(jì)改進(jìn)。
與NVIDIA 聲稱Fermi(GT300)將要比GT200快4.25倍,這使其雙精度預(yù)計(jì)可達(dá)660 GFLOPS的雙精度性能的GT300,雙精度浮點(diǎn)(FP64)性能大大提升,峰值執(zhí)行率可以達(dá)到單精度浮點(diǎn)(FP32)的1/2,而過去只有1/8,AMD現(xiàn)在也不過1/5,比如Radeon HD 5870分別為單精度2.72TFlops、雙精度544GFlops。由于最終核心頻率未定,所以暫時(shí)還不清楚Fermi的具體浮點(diǎn)運(yùn)算能力。
Fermi(GT300)架構(gòu)詳細(xì)介紹(三)“Warp”
先前我們提到的“warps”——將32個(gè)線程組稱為一個(gè)“Warp”。我們知道,CPU和GPU執(zhí)行的都是被稱作線程的指令集合。而目前高端CPU現(xiàn)在每次最多只能執(zhí)行8個(gè)線程(Intel Core i7),而這樣看來,GPU的并行計(jì)算能力就是天文數(shù)字了,像G80可實(shí)現(xiàn)12288個(gè)、GT200可實(shí)現(xiàn)30720個(gè)、而Fermi(GT300)可實(shí)現(xiàn)24576個(gè)。
可以看到,F(xiàn)ermi(GT300)的線程還沒有GT200多,這是因?yàn)镹VIDIA 發(fā)現(xiàn)GPU計(jì)算的瓶頸在于共享內(nèi)存大小,而不是線程數(shù),所以將共享內(nèi)存從16KB翻兩番達(dá)到64KB,而將線程減少了20%,每個(gè)SM經(jīng)調(diào)度和指派可以控制兩個(gè)“Warp”,使被命令的CUDA技術(shù)核心可同時(shí)進(jìn)行工作。換句話說,就像是一條雙車道,16個(gè)核心控制和16個(gè)加載/存儲(chǔ)單元一起工作,然后在執(zhí)行的情況下實(shí)現(xiàn)獨(dú)立調(diào)度和援助。這種雙重結(jié)構(gòu)的設(shè)計(jì)顯然讓Fermi(GT300)將達(dá)到接近其理論性能極限的標(biāo)準(zhǔn)。
而在G80和GT200上,每個(gè)時(shí)鐘周期只有一半Warp被送至SM,換言之SM需要兩個(gè)循環(huán)才能完整執(zhí)行32個(gè)線程;同時(shí)SM分配邏輯和執(zhí)行硬件緊密聯(lián)系在一起,向SFU發(fā)送線程的時(shí)候整個(gè)SM都必須等待這些線程執(zhí)行完畢,嚴(yán)重影響整體效率。如果說要論真實(shí)水平的話,F(xiàn)ermi(GT300)的線程可實(shí)現(xiàn)24576*2個(gè),性能提升相當(dāng)?shù)目捎^。
這種線程架構(gòu)也不是沒有缺點(diǎn),就是要求Warp的每個(gè)線程都必須同時(shí)執(zhí)行同樣的指令,否則會(huì)有部分單元空閑。每組SM每個(gè)循環(huán)內(nèi)可以執(zhí)行的不同操作數(shù):FP32 32個(gè)、FP64 16個(gè)、INT 32個(gè)、SFU 4個(gè)、LD/ST 16個(gè)。#p#page_title#e#
Fermi(GT300)架構(gòu)詳細(xì)介紹(四)GPU緩存
上圖可以看到總數(shù)為64KB的共享內(nèi)存和L1緩存,此內(nèi)存是獨(dú)一無二的,它是可配置為16KB共享內(nèi)存和48KB的L1緩存或者48KB共享內(nèi)存和16KB的L1緩存自由靈活組成的。此功能是為了保證100%兼容現(xiàn)有的基于GPU的應(yīng)用技術(shù),同時(shí)還還提供了靈活性。
GT200的每組TPC還有一個(gè)一級(jí)紋理緩存,不過當(dāng)GPU出于計(jì)算模式的時(shí)候就沒什么用了,故而Fermi并未在這方面進(jìn)行增強(qiáng)。
整個(gè)芯片擁有一個(gè)容量768KB的共享二級(jí)緩存,執(zhí)行原子內(nèi)存操作(AMO)的時(shí)候比GT200快5-20倍。
在這里你可以看到新的GPU架構(gòu)和G80和GT200的規(guī)范對(duì)比。此時(shí)來看NVIDIA確實(shí)有和AMD新推出的產(chǎn)品競爭的實(shí)力,但是光從參數(shù)上看沒有意義,至于市場如何還需要時(shí)間檢驗(yàn)。
Fermi(GT300)架構(gòu)詳細(xì)介紹(五)指令集架構(gòu)
除了這些原始的計(jì)算能力,當(dāng)然NVIDIA 公司希望Fermi(GT300)還有一些別的競爭優(yōu)勢。第一個(gè)就是是新的ISA(指令集架構(gòu)),這是一個(gè)全新的技術(shù),以支持目前最流行的編程語言C++。通過包括建立統(tǒng)一的尋址空間,簡化為一種指令,內(nèi)存地址取決于存儲(chǔ)位置:最低位是本地,然后是共享,剩下的是全局。這種統(tǒng)一尋址空間是支持C++的必需前提。NVIDIA的架構(gòu)可以支持對(duì)象和不受限制的無限指針位置面向?qū)ο缶幊棠P偷闹С?。僅此功能就可以幫助到CUDA和GPU計(jì)算的許多開發(fā)者。
NVIDIA 公司還指出,這一新的ISA完全是為了OpenCL和DirectCompute準(zhǔn)備的。并且像線程,線程塊和線程塊控制器以及共享內(nèi)存等等,都是為這些即將到來的計(jì)算語言做支持的。而且NVIDIA 宣布了一個(gè)名為“Nexus”的插件,可以在Visual Studio里執(zhí)行CUDA代碼的硬件調(diào)試,相當(dāng)于把GPU當(dāng)成CPU看待,難度大大降低。能提高游戲和GPU計(jì)算代碼的性能。該功能聽起來非常類似于分支預(yù)測單元
Fermi(GT300)架構(gòu)詳細(xì)介紹(六)內(nèi)存子系統(tǒng)創(chuàng)新
前面我們已經(jīng)討論了共享內(nèi)存和L1緩存的好處,其實(shí)從其他應(yīng)用程序上來說共享內(nèi)存有很大的靈活性。另外,L1將存儲(chǔ)臨時(shí)數(shù)據(jù),從而可以提高整體內(nèi)存訪問時(shí)間。
NVIDIA 也包括了768KB的二級(jí)緩存,在16個(gè)SM中。二級(jí)緩存可改善了應(yīng)用程序在32個(gè)CUDA技術(shù)核心和各個(gè)SM中連接的作用,工作效率大大提高。
NVIDIA還采取新的技術(shù),以執(zhí)行ECC內(nèi)存錯(cuò)誤校驗(yàn)。雖然不是普通消費(fèi)者的問題,但是對(duì)與服務(wù)器的處理有非常大的作用,ECC是一個(gè)穩(wěn)定環(huán)境的重要組成部分。L1和L2緩存、和GDDR5內(nèi)存控制器中都支持ECC
Fermi(GT300)架構(gòu)詳細(xì)介紹(七)GigaThread調(diào)度
同時(shí)更新的線程調(diào)度是Fermi(GT300)值得討論的新功能。首先是將切換功能低至10-20微秒。切換功能可以應(yīng)用在GPU使用需要上,還可以應(yīng)用在程序之間的交換,例如渲染和PhysX物理處理圖形之間的轉(zhuǎn)換上。這可能讓開發(fā)人員可以使用GPU來做更多的計(jì)算能力應(yīng)用這些非圖形的目的。
第二個(gè)主要的更新是與內(nèi)核同時(shí)執(zhí)行的,可以稱為GPU的超線程。其實(shí)就是允許一個(gè)程序,只使用一個(gè)內(nèi)核(以及它們控制的SMs和CUDA核心),超線程技術(shù)讓GPU增加稍許的裸晶面積,就可以換來較高的效能提升。這樣確實(shí)是對(duì)GPU技術(shù)的顛覆。