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