GPU挑戰CPU地位!詳解CUDA+OpenCL威力
較多核CPU確實很誘人,但只能存在于實驗室中,距離我們似乎非常遙遠。由于較多核CPU的架構與目前的雙核/四核CPU有很大的不同,因此大家不必拘泥于傳統處理器的概念。其實較多核處理器“遠在天邊、近在眼前”——高配置電腦當中肯定擁有一顆GPU(顯卡),9800GTX+是128核心、GTX280則擁有240顆核心,GPU的每一個流處理器就是一顆核心。
目前X86架構的處理器經過30年的發展,指令集、平臺、系統和軟件支持已經接近完美,因此使用CPU處理數據是天經地義的。GPU雖然也誕生了近20年,但它從來都只能渲染圖形,想要讓他進入全新并行計算領域,無論硬件架構還是軟件平臺都需要作相應的調整。
● GPU在硬件架構方面的進步
傳統GPU的核心組成部分是Shader(著色器),分為Pixel Shader(像素單元)和Vertex Shader(頂點單元),每一個Shader是一個4D或5D的矢量運算單元,之所以設計成這樣是因為在圖形處理中,最常見的像素都是由RGB(紅黃藍)三種顏色構成的,加上它們共有的信息說明(Alpha),總共是4個通道。而頂點數據一般也是由XYZW四個坐標構成,這樣也是4個通道。在3D圖形進行渲染時,其實就是改變RGBA四個通道或者XYZW四個坐標的數值。為了一次性處理1個完整的像素渲染或幾何轉換,GPU的像素著色單元和頂點著色單元從一開始就被設計成為同時具備4次運算能力的運算器(ALU)。

傳統Shader結構的GPU只適合做圖形渲染
這樣的4D矢量運算單元在渲染3D圖形時會有很高的效率,但在處理復雜指令時的效率會大打折扣,比如DX10新引入的幾何著色、物理加速等,尤其在面對非圖形渲染指令時優勢全無。
NVIDIA的科學家對圖形指令結構進行了深入研究,它們發現標量數據流所占比例正在逐年提升,如果渲染單元還是堅持SIMD(單指令多數據流)設計會讓效率下降。為此NVIDIA在G80中做出大膽變革:流處理器不再針對矢量設計,而是統統改成了標量ALU單元。用通俗的話說就是:Shader單元內部ALU完全打散,設計成為各自獨立的流處理器,并分配相應的指令發射端和控制單元,這樣的架構在面對任何形式的指令(包括組合指令)時都能保證最高的執行效率,這也就是NVIDIA在DX10時代游戲性能大幅領先于競爭對手的根本原因!
隨著圖形畫面越來越復雜,1D、2D、3D指令所占比例正在逐年增多,而G80在遇到這種指令時可說是如魚得水,與普通4D指令一樣不會有任何效能損失,指令轉換效率高并且對指令的適應性非常好,這樣G80就將GPU Shader執行效率提升到了新的境界!
這種富有彈性的架構不僅擁有很強的圖形渲染能力,而且能夠處理以往不敢奢想的非圖形運算指令,理論上來講只要是浮點運算指令都可以交給GPU來處理。而在以往,程序員必須針對GPU的架構特點,對指令重新分類打包并模擬圖形指令交給GPU處理器,工作量可想而知,效率也極為低下。
G80的架構無論對于圖形渲染還是并行計算都是革命性的,但NVIDIA并沒有滿足于此,為了進一步提高GPU的并行計算效能,把GPU改造成為一顆真正的通用處理器,NVIDIA在GTX200核心大規模擴充流處理器數量的同時,也對內核架構進行了諸多優化與改進,使之更適合做超大規模并行數據處理。

GTX200核心的主要改進有:
- 每個SM(8個流處理器為一簇)可執行線程從768提升至1024條;
- 每個SM的指令寄存器容量翻倍,從16K提升至32K;
- 將雙指令執行(Dual-Issue)效率提升至94%,接近于理論值;
- 512Bit顯存控制器,4GB顯存容量支持,防止指令排隊溢出;
- 支持雙精度64Bit浮點運算,55nm版GTX200的雙精度運算能力提高4倍!
以上所有的改進(顯存位寬除外)并不會讓GTX200核心的圖形渲染能力得到提高,但卻能夠大幅提升GPU在進行海量數據處理時的效率。由此我們可以看出NVIDIA的野心與實力——G80與GTX200已經不再是一顆圖形處理器,而是較多核通用處理器!而NVIDIA這種圖形架構與并行計算架構合二為一的架構就被稱為CUDA。
關注我們


