顯卡的發展可以說是非常的快,人們對于視覺化上的要求也越來越高,隨著用戶對于圖像處理上面的要求不斷超出處理器的計算能力。另一方面CPU處理能力也不斷強大,但在進入3D時代后,人們發現龐大的3D圖像處理數據計算使得CPU越來越不堪重荷,并且遠遠超出其計算能力。圖形計算需求日益增多,作為計算機的顯示芯片也飛速發展。隨后人們發現顯示芯片的計算能力也無法滿足快速增長的圖形計算需求時,圖形,圖像計算等計算的功能被脫離出來單獨成為一塊芯片設計,這就是現在的圖形計算處理器——GPU(Graphics Processing Unit),也就是顯卡。
1999年8月,NVIDIA終于正式發表了具有跨世紀意義的產品NV10——GeForce 256。GeForce256是業界第一款256bit的GPU,也是全球第一個集成T&L(幾何加速/轉換)、動態光影、三角形設置/剪輯和四像素渲染等3D加速功能的圖形引擎。通過T&L技術,顯卡不再是簡單像素填充機以及多邊形生成器,它還將參與圖形的幾何計算從而將CPU從繁重的3D管道幾何運算中解放出來。在這代產品中,NVIDIA推出了兩個全新的名詞——GPU以GeForce。所以從某種意義上說,GeForce 256開創了一個全新的3D圖形時代,NVIDIA終于從追隨者走向了領導者。再到后來GeForce 3開始引出可編程特性,能將圖形硬件的流水線作為流處理器來解釋,基于GPU的通用計算也開始出現。
到了Nvidia GeForce6800這一代GPU,功能相對以前更加豐富、靈活。頂點程序可以直接訪問紋理,支持動態分支;象素著色器開始支持分支操作,包括循環和子函數調用,TMU支持64位浮點紋理的過濾和混合,ROP(象素輸出單元)支持MRT(多目標渲染)等。象素和頂點可編程性得到了大大的擴展,訪問方式更為靈活,這些對于通用計算而言更是重要突破。
真正意義的變革,是G80的出現,真正的改變隨著DX10到來發生質的改變,基于DX10統一渲染架構下,顯卡已經拋棄了以前傳統的渲染管線,取而代之的是統一流處理器,除了用作圖像渲染外,流處理器自身有著強大的運算能力。我們知道CPU主要采用串行的計算方式,由于串行運算的局限性,CPU也正在向并行計算發展,比如目前主流的雙核、四核CPU,如果我們把這個概念放到現在的GPU身上,核心的一個流處理相當于一個“核”,GPU的“核”數量已經不再停留在單位數,而是幾十甚至是上百個。下面看看G80的架構圖:
步入DX10時代,shader(流處理器)單元數量成為衡量顯卡級別的重要參數之一
G80中擁有128個單獨的ALU,因此非常適合并行計算,而且數值計算的速度遠遠優于CPU。
GPU運算能力越來越快,甚至超越CPU
早期的3D游戲,顯卡只是為屏幕上顯示像素提供一個緩存,所有的圖形處理都是由CPU單獨完成。圖形渲染適合并行處理,擅長于執行串行工作的CPU實際上難以勝任這項任務。直到1995年,PC機領域第一款GPU 3dfx Voodoo出來以后,游戲的速度、畫質才取得了一個飛躍。GPU的功能更新很迅速,平均每一年多便有新一代的GPU誕生,運算速度也越來越快。
綜上所述,GPU并行處理的理論性能要遠高于CPU。同時,我們也可以通過上面這組NVIDIA統計的近兩年來GPU與CPU之間浮點運算能力提升對比表格來看一下。
Intel Core2Due G80 Chip 運算能力比較
24 GFLOPS 520 GFLOPS GPU快21.6倍
雖然我們看到CPU和GPU在運算能力上面的巨大差距,但是我們要看看他們設計之初所負責的工作。CPU設計之初所負責的是如何把一條一條的數據處理玩,CPU的內部結構可以分為控制單元、邏輯單元和存儲單元三大部分,三個部分相互協調,便可以進行分析,判斷、運算并控制計算機各部分協調工作。其中運算器主要完成各種算術運算(如加、減、乘、除)和邏輯運算( 如邏輯加、邏輯乘和非運算); 而控制器不具有運算功能,它只是讀取各種指令,并對指令進行分析,作出相應的控制。通常,在CPU中還有若干個寄存器,它們可直接參與運算并存放運算的中間結果。CPU的工作原理就像一個工廠對產品的加工過程:進入工廠的原料(程序指令),經過物資分配部門(控制單元)的調度分配,被送往生產線(邏輯運算單元),生產出成品(處理后的數據)后,再存儲在倉庫(存儲單元)中,最后等著拿到市場上去賣(交由應用程序使用)。在這個過程中,從控制單元開始,CPU就開始了正式的工作,中間的過程是通過邏輯運算單元來進行運算處理,交到存儲單元代表工作的結束。數據從輸入設備流經內存,等待CPU的處理。
而GPU卻從最初的設計就能夠執行并行指令,從一個GPU核心收到一組多邊形數據,到完成所有處理并輸出圖像可以做到完全獨立。由于最初GPU就采用了大量的執行單元,這些執行單元可以輕松的加載并行處理,而不像CPU那樣的單線程處理。另外,現代的GPU也可以在每個指令周期執行更多的單一指令。例如,在某些特定環境下,Tesla架構可以同時執行MAD+MUL or MAD+SFU。
CPU和GPU的架構區別
可以看到GPU越來越強大,GPU為顯示圖像做了優化之外,在計算上已經超越了通用的CPU。如此強大的芯片如果只是作為顯卡就太浪費了,因此NVidia推出CUDA,讓顯卡可以用于圖像計算以外的目的,也就是超于游戲,使得GPU能夠發揮其強大的運算能力。
N年前NVIDIA發布CUDA,這是一種專門針對GPU的C語言開發工具。與以往采用圖形API接口指揮GPU完成各種運算處理功能不同,CUDA的出現使研究人員和工程師可以在熟悉的C語言環境下,自由地輸入代碼調用GPU的并行處理架構。這使得原先需要花費數天數周才能出結果的運算大大縮短到數幾小時,甚至幾分鐘之內。
CUDA是用于GPU計算的開發環境,它是一個全新的軟硬件架構,可以將GPU視為一個并行數據計算的設備,對所進行的計算進行分配和管理。在CUDA的架構中,這些計算不再像過去所謂的GPGPU架構那樣必須將計算映射到圖形API(OpenGL和Direct 3D)中,因此對于開發者來說,CUDA的開發門檻大大降低了。CUDA的GPU編程語言基于標準的C語言,因此任何有C語言基礎的用戶都很容易地開發CUDA的應用程序。
那么,如何使得CPU與GPU之間很好的進行程序之間的銜接呢?以GPGPU的概念來看,顯卡仍然需要以傳統的DirectX和OpenGL這樣的API來實現,對于編程人員來說,這樣的方法非常繁瑣,而CUDA正是以GPGPU這個概念衍生而來的新的應用程序接口,不過CUDA則提供了一個更加簡便的方案——C語言。
-
芯片
+關注
關注
456文章
50967瀏覽量
424923 -
cpu
+關注
關注
68文章
10882瀏覽量
212252 -
gpu
+關注
關注
28文章
4754瀏覽量
129081
發布評論請先 登錄
相關推薦
評論