革命性DX11架構(gòu)!GTX480/470權(quán)威評(píng)測
第五章 Fermi計(jì)算架構(gòu)解析
第五章/第一節(jié) Fermi計(jì)算架構(gòu)解析:GPU并行計(jì)算的歷史
自從NVIDIA于1999年發(fā)布第一顆GPU(GeForce 256)開始,GPU就已經(jīng)與并行計(jì)算結(jié)下了不解之緣,GPU被擴(kuò)展成為可進(jìn)行浮點(diǎn)運(yùn)算的可編程處理器,而不僅僅是圖形處理器。GPU無論計(jì)算能力還是內(nèi)存帶寬都要遠(yuǎn)勝于CPU,其性能不應(yīng)該被限制在游戲和3D渲染之中。
GPU的性能遠(yuǎn)遠(yuǎn)超出了CPU的想想
針對(duì)非圖形應(yīng)用程序的GPU編程的探索始于2003年。通過使用高級(jí)繪制語言如DirectX、OpenGL和Cg,將多種數(shù)據(jù)平行算法導(dǎo)入GPU。諸如蛋白質(zhì)折疊、股票期權(quán)定價(jià)、SQL查詢及MRI重建等問題都能通過GPU獲得非凡的加速表現(xiàn)。早期將圖形API用于通用計(jì)算的努力被稱之為GPGPU(GPU通用計(jì)算)。
雖然GPGPU模型展現(xiàn)了不俗的加速性能,但仍然有不少缺陷:
首先,它要求程序員全面掌握與圖形API以及GPU架構(gòu)相關(guān)的知識(shí);
其次,問題必須以頂點(diǎn)坐標(biāo)、紋理及著色器程序的形式表達(dá)出來,這就大大增加了程序的復(fù)雜程度;
第三,不支持基礎(chǔ)的編程特性如面向內(nèi)存的隨機(jī)讀寫,極大地限制了編程模型;
最后,缺乏雙精度支持(直到最近才具備這一特性)意味著有些科學(xué)應(yīng)用程序?qū)⒉荒茉贕PU上運(yùn)行。
為了解決這些問題,NVIDIA采用了兩種關(guān)鍵技術(shù)——G80統(tǒng)一圖形及計(jì)算架構(gòu)和CUDA。CUDA是一種軟硬件架構(gòu),可以使用多種高級(jí)編程語言來針對(duì)GPU進(jìn)行編程。這兩種技術(shù)代表著一種新的應(yīng)用GPU的方式。跟以前通過編程將專門的圖形單元同圖形API結(jié)合到一起不同,程序員可以利用CUDA的擴(kuò)展來編寫C語言程序,并面向一個(gè)通用的平行處理器。NVIDIA將這種新的GPU編程方式稱為“GPU計(jì)算”,它意味著更廣泛的應(yīng)用程序支持、更多編程語言的支持以及同早期GPGPU編程模型的徹底分離。
G80標(biāo)量流處理器架構(gòu)的誕生使得全新的GPU計(jì)算成為可能,并創(chuàng)造了無數(shù)項(xiàng)第一:
第一款支持C語言的GPU,它讓程序員可以利用GPU的運(yùn)算能力而無需掌握一門新的編程語言;
第一款以單一的非統(tǒng)一的處理器取代分離式頂點(diǎn)及像素管線的GPU,這種處理器可以執(zhí)行頂點(diǎn)、幾何、像素及計(jì)算程序;
第一款利用標(biāo)量線程處理器的GPU,從而使得程序員無需手工操控向量寄存器。
G80還采用了單指令、多線程(SIMT)的執(zhí)行模型,多個(gè)獨(dú)立線程同時(shí)執(zhí)行單個(gè)指令,并針對(duì)線程間通信采用了共用存儲(chǔ)器和障柵同步。
之后NVIDIA又對(duì)G80架構(gòu)進(jìn)行了重大改進(jìn),第二代統(tǒng)一架構(gòu)GT200將流處理器的數(shù)量從128增加到了240個(gè)。每一個(gè)處理器的寄存器數(shù)量增倍,使得任何時(shí)候都可以在芯片上處理更多的線程。采用了硬件存儲(chǔ)器存取合并技術(shù)以提高存儲(chǔ)器存取的效率。此外,還采用了雙精度浮點(diǎn)運(yùn)算支持以滿足那些科學(xué)及高性能計(jì)算(HPC)應(yīng)用程序的需求。
在設(shè)計(jì)每款新一代GPU時(shí),都必須遵循這樣的原則——提高當(dāng)前應(yīng)用程序的性能及GPU的可編程性。應(yīng)用程序的速度提高會(huì)立竿見影地帶來諸多好處。正是GPU在可編程性方面的不斷進(jìn)步才使得它演變成為當(dāng)前最通用的并行處理器。也正是基于這樣的理念,GT200架構(gòu)的繼任者又被賦予了更多新的功能。
關(guān)注我們



