?
1999年,NVIDIA推出了首款圖形處理器(GPU),它是迄今為止使用最廣的并行處理器。源于對(duì)逼真及實(shí)時(shí)圖像的渴求,GPU已成為既可以浮點(diǎn)運(yùn)算又可以編程的處理器;如今的GPU在計(jì)算吞吐量和內(nèi)存帶寬上遠(yuǎn)優(yōu)于CPU,使其成為加速數(shù)據(jù)并行應(yīng)用程序的理想處理器。
2003年起,NVIDIA開始對(duì)GPU進(jìn)行非圖形應(yīng)用程序方面的探索。通過使用高級(jí)圖形語言如DirectX、OpenGL和Cg,將各種數(shù)據(jù)并行算法移植于GPU。像蛋白質(zhì)折疊、股票期權(quán)定價(jià)、SQL查詢及MRI重建等問題都能通過GPU獲得非凡的加速表現(xiàn)。這些早期將圖形API用于通用計(jì)算的嘗試被我們稱為GPGPU程序。
雖然GPGPU模型顯示出不俗的加速性能,但依舊面臨諸多問題。首先,它要求程序員具備有關(guān)圖形API以及GPU架構(gòu)的相關(guān)知識(shí)。其次,問題必須按照頂點(diǎn)坐標(biāo)、紋理及著色程序的方式表達(dá)出來,極大地增加了程序的復(fù)雜性。第三,不支持諸如隨機(jī)讀寫內(nèi)存等基礎(chǔ)的編程特性,大大限制了編程模型。最后,缺少對(duì)雙精度運(yùn)算的支持(直到最近)意味著有些科學(xué)應(yīng)用程序不能運(yùn)行在GPU上。
為解決這些問題,NVIDIA采用了兩項(xiàng)關(guān)鍵技術(shù)——G80統(tǒng)一圖形與計(jì)算架構(gòu)(最先采用于GeForce 8800、Quadro FX 5600與Tesla C870 GPU)和CUDA。CUDA作為一種軟硬件架構(gòu),可采用多種高級(jí)編程語言對(duì)GPU進(jìn)行編程。同時(shí),這兩種技術(shù)也代表著一種新的GPU應(yīng)用方式。相比以前通過編程將專業(yè)圖形單元與圖形API結(jié)合不同,程序員可通過CUDA擴(kuò)展來編寫C語言程序,針對(duì)通用的大規(guī)模并行處理器。我們把這種新型GPU編程模式稱之為“GPU計(jì)算”,它意味著更廣泛的應(yīng)用程序支持,更多編程語言的支持,是與初期GPGPU編程模型的本質(zhì)分離。
G80架構(gòu)
NVIDIA旗下GeForce 8800是被賦予了新型GPU計(jì)算模型的產(chǎn)品。2006年11月推出,基于GeForce 8800的G80為GPU計(jì)算所帶來了的是一些關(guān)鍵性的創(chuàng)新:
G80是首款支持C語言的GPU,允許程序員使用GPU所帶來的計(jì)算力,而又無須再學(xué)習(xí)一門新的編程語言。
G80是首款以單個(gè)、統(tǒng)一處理器取代頂點(diǎn)與像素管線的GPU,這種處理器可以執(zhí)行頂點(diǎn)、幾何、像素及計(jì)算程序。
G80是首款利用標(biāo)量線程處理器的GPU,從而消除了程序員手動(dòng)管理向量寄存器。
G80采用了單指令、多線程(SIMT)的執(zhí)行模型,多個(gè)相互獨(dú)立的線程可并行執(zhí)行單條指令。
G80對(duì)內(nèi)部線程通訊采用了共享內(nèi)存和柵障同步。
2008年6月,NVIDIA對(duì)G80架構(gòu)進(jìn)行了重大改進(jìn)。第二代統(tǒng)一架構(gòu)——GT200(首次采用是在GeForce GTX 280,Quadro FX5800 和Tesla T10 GPU上)——將流處理器的核心數(shù)量(以下稱其為 CUDA核心)從128增加至240。每個(gè)處理器的寄存器組都擴(kuò)大了一倍,允許更多的線程任何時(shí)候在芯片上執(zhí)行。增加硬件內(nèi)存的聯(lián)合存取以改善內(nèi)存訪問效率。另外,還添加了對(duì)雙精度浮點(diǎn)運(yùn)算的支持,以處理科學(xué)和高性能計(jì)算(HPC)應(yīng)用。
在設(shè)計(jì)每款新一代GPU時(shí),NVIDIA都以改善現(xiàn)有應(yīng)用性能與GPU可編程性為宗旨;更快速的應(yīng)用性將能帶來直接的效益,GPU在可編程性上的不斷進(jìn)步,使得它發(fā)展成為我們當(dāng)下最通用的并行處理器。正是基于這樣的理念,促使我們又著手研發(fā)GT200架構(gòu)的繼任者。
NVIDIA的下一代CUDA計(jì)算與圖形框架Fermi
從最初的G80起,F(xiàn)ermi架構(gòu)在GPU架構(gòu)上做出了最重大的飛躍。G80是統(tǒng)一圖形與計(jì)算并行處理器的雛形,而GT200是對(duì)G80在性能及功能性方面的延伸。對(duì)于Fermi,我們?nèi)谌肓松蟽煽钐幚砥饕约盀樗鼈兙帉憫?yīng)用程序中所獲得的經(jīng)驗(yàn),應(yīng)用了一種全新的方法,設(shè)計(jì)和創(chuàng)造出世界上第一款計(jì)算型GPU。在Fermi的研發(fā)準(zhǔn)備過程中,我們收集了自推出G80和GT200以來廣泛使用GPU計(jì)算的用戶的反饋,并將以下關(guān)鍵領(lǐng)域作為改進(jìn)重點(diǎn):
改善雙精度浮點(diǎn)運(yùn)算的性能——單精度的性能大約是臺(tái)式CPU的10倍,而有些GPU計(jì)算應(yīng)用程序還需要更高的雙精度浮點(diǎn)運(yùn)算性能。
ECC支持——ECC允許GPU計(jì)算用戶在數(shù)據(jù)中心的安裝中安全地部署大規(guī)模的GPU,并確保數(shù)據(jù)敏感型應(yīng)用程序,如醫(yī)學(xué)影像及財(cái)務(wù)期權(quán)定價(jià)等不出現(xiàn)內(nèi)存錯(cuò)誤。
真正的緩存層次——有些并行算法無法使用GPU的共享內(nèi)存,用戶需要一個(gè)真正的緩存架構(gòu)來輔助他們。
更大的共享內(nèi)存——許多CUDA程序員需要超過16KB的SM共享內(nèi)存來加速他們的應(yīng)用程序。
更快速的上下文轉(zhuǎn)換——用戶需要在應(yīng)用程序之間實(shí)現(xiàn)更快速的上下文切換,和圖形與計(jì)算應(yīng)用之間更快速的相互操作。
更快速的原子操作——用戶需要為他們的并行算法實(shí)現(xiàn)更快速的“讀-修改-寫”原子操作。
針對(duì)這些需求,F(xiàn)ermi工作小組設(shè)計(jì)了一款處理器,原始計(jì)算力得到了極大的提升,通過架構(gòu)上的創(chuàng)新還大大增加了可編程性以及計(jì)算效率。Fermi在架構(gòu)上的閃光點(diǎn)體現(xiàn)在:
第三代流式多處理器(SM)
每個(gè)SM有32個(gè)CUDA核心,是GT200的4倍
雙精度浮點(diǎn)運(yùn)算的峰值性能是GT200的8倍
雙Warp調(diào)度器同時(shí)調(diào)度和分配來自兩個(gè)不同warp的指令
64 KB的RAM,可配置為共享存儲(chǔ)器和L1緩存
第二代并行線程執(zhí)行ISA
統(tǒng)一尋址空間,提供完整的C++支持
優(yōu)化OpenCL和DirectCompute
完整的IEEE 754-2008 32-bit和64-bit精度支持
完整的32-bit整數(shù)路徑,以及64-bit擴(kuò)展
內(nèi)存存取指令支持向64-bit尋址的轉(zhuǎn)換
通過Predication提升性能
改進(jìn)的內(nèi)存子系統(tǒng)
NVIDIA Parallel DataCacheTM層次,擁有可配置的L1和統(tǒng)一的L2緩存
首款提供ECC內(nèi)存支持的GPU
顯著改善原子內(nèi)存操作性能
NVIDIA GigaThreadTM Engine
相比早先產(chǎn)品10倍以上的應(yīng)用程序上下文切換
同步執(zhí)行多核心程序
線程塊亂序執(zhí)行
雙重疊式內(nèi)存?zhèn)鬏斠?/p>
評(píng)論
查看更多