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