GPU與顯卡
一.什么是GPU?
GPU這個概念是由Nvidia公司於1999年提出的。GPU是顯卡上的一塊芯片,就像CPU是主板上的一塊芯片。那么1999年之前顯卡上就沒有GPU嗎?當然有,只不過那時候沒有人給它命名,也沒有引起人們足夠的重視,發展比較慢。
自Nvidia提出GPU這個概念后,GPU就進入了快速發展時期。簡單來說,其經過了以下幾個階段的發展:
1)僅用於圖形渲染,此功能是GPU的初衷,這一點從它的名字就可以看出:Graphic Processing Unit,圖形處理單元;
2)后來人們發現,GPU這么一個強大的器件只用於圖形處理太浪費了,它應該用來做更多的工作,例如浮點運算。怎么做呢?直接把浮點運算交給GPU是做不到的,因為它只能用於圖形處理(那個時候)。最容易想到的,是把浮點運算做一些處理,包裝成圖形渲染任務,然后交給GPU來做。這就是GPGPU(General Purpose GPU)的概念。不過這樣做有一個缺點,就是你必須有一定的圖形學知識,否則你不知道如何包裝。
3)於是,為了讓不懂圖形學知識的人也能體驗到GPU運算的強大,Nvidia公司又提出了CUDA的概念。
二.顯卡工作原理
視頻顯示流程圖
1.顯卡工作流程
圖像或者視頻數據一旦離開CPU,必須通過4個步驟,才會到達顯示器:
1)從總線進入GPU(Graphics Processing Unit,圖形處理器):將CPU送來的數據總線,再從總線送到GPU里面進行處理。
2)從GPU進入幀緩沖存儲器(或稱顯存):將GPU芯片處理完的數據送到顯存。
3)從顯存進入視頻控制器:視頻控制器有可能是DAC(Digital Analog Converter,隨機讀寫存儲數—模轉換器),從顯存讀取出數據再送到RAM DAC進行數據轉換的工作(數字信號轉模擬信號);但是如果是DVI接口類型的顯卡,則不需要經過數字信號轉模擬信號。而直接輸出數字信號。
4)從視頻控制器進入顯示器:將轉換完的模擬信號送到顯示屏。
2.顯卡的類型
1)集成顯卡
集成的顯卡一般不帶有顯存,而是使用系統的一部分主內存作為顯存,具體的數量一般是系統根據需要自動動態調整的。顯然如果使用集成顯卡運行需要大量占用內存的空間,對整個系統的影響會比較明顯,此外系統內存的頻率通常比獨立顯卡的顯存低很多,因此集成顯卡的性能比獨立顯卡要遜色一些。
2)獨立顯卡
獨立顯卡,簡稱獨顯,港澳台地區稱獨立顯示卡,是指成獨立的板卡,需要插在主板的相應接口上的顯卡。獨立顯卡分為內置獨立顯卡和外置顯卡。獨立顯卡是指以獨立板卡形式存在,可在具備顯卡接口的主板上自由插拔的顯卡。獨立顯卡具備單獨的顯存,不占用系統內存,而且技術上領先於集成顯卡,能夠提供更好的顯示效果和運行性能。
3)核心顯卡
英文原名Core graphics card,核心圖形卡,意思是集成在核心中的顯卡。核心顯卡是新一代的智能圖形核心,它整合在智能處理器當中,依托處理器強大的運算能力和智能能效調節設計,在更低功耗下實現同樣出色的圖形處理性能和流暢的應用體驗。需要注意的是,核心顯卡雖然與傳統意義上的集成顯卡並不相同,工作方式的不同決定了它的性能比早期的集成顯卡有所提升,但是它仍然是一種集成顯卡,集成在核心中的顯卡。
關於顯存
用來存儲屏幕上像素的顏色值,簡稱幀緩沖器,俗稱顯存。幀緩沖器中的單元數目與顯示器上的像素數目相同,單元與像素一一對應,各單元的數值決定了其對應的像素的顏色。
三.關於GPU
GPU(graphics processing unit,圖形處理器),又稱顯示核心、視覺處理器、顯示芯片或繪圖芯片,是一種專門在個人計算機、工作站、游戲機和一些移動設備(如平板電腦、智能手機等)上運行繪圖運算工作的微處理器。換句話說,就是把CPU的數據翻譯成顯示器能讀懂的數據。
CPU與GPU的結構對比如下圖:
CPU是一個有多種功能的優秀領導者。它的優點在於調度、管理、協調能力強,計算能力則位於其次。而GPU相當於一個接受CPU調度的“擁有大量計算能力”的員工。換言之,CPU擅長統領全局等復雜操作,GPU擅長對大數據進行簡單重復操作。CPU是從事復雜腦力勞動的教授,而GPU能進行大量並行計算。
GPU加速
GPU加速計算是指同時利用圖形處理器(GPU)和CPU,加快科學、分析、工程、消費和企業應用程序的運行速度。
GPU加速計算可以提供非凡的應用程序性能,能將應用程序計算密集部分的工作負載轉移到GPU,同時仍由CPU運行其余程序代碼。從用戶的角度來看,應用程序的運行速度明顯加快。
理解GPU和CPU之間區別的一種簡單方式是比較它們如何處理任務。CPU由專為順序串行處理而優化的幾個核心組成,而GPU則擁有一個由數以千計的更小、更高效的核心(專為同時處理多重任務而設計)組成的大規模並行計算架構。
四、視頻渲染器
視頻渲染器,Video Renderer是接收CPU的RGB/YUV裸數據,然后在顯示器上顯示的Filter。
運行在顯卡上的一個驅動程序。完成將CPU發送視頻數據顯示到顯示器的一個軟件。使用potplay可以查看系統支持的選擇渲染器種類。
SDL是一個封裝庫,對opengl/directD3D的封裝。SDL使用統一的接口,在編譯的時候,系統自動匹配最優的渲染方案。
opengl/directD3D是3D規范,各個GPU廠商需要按照這個3D規范實現接口調用,便於業務層使用。
備注
有獨立顯卡的主機后面有兩個接顯示器的口。
編號1口:使用的是Intel的集成顯卡。
編號2口:是AMD或者英偉達的獨立顯卡。
只有當顯示器線接到指定顯卡后,才會使用該顯卡。
五.什么是CUDA?
CUDA(Compute Unified Device Architecture),通用並行計算架構,是一種運算平台。它包含CUDA指令集架構以及GPU內部的並行計算引擎。你只要使用一種類似於C語言的CUDA C語言,就可以開發CUDA程序,從而可以更加方便的利用GPU強大的計算能力,而不是像以前那樣先將計算任務包裝成圖形渲染任務,再交由GPU處理。
注意,並不是所有GPU都支持CUDA。
CPU和GPU的關系
在沒有GPU之前,基本上所有的任務都是交給CPU來做的。有GPU之后,二者就進行了分工,CPU負責邏輯性強的事物處理和串行計算,GPU則專注於執行高度線程化的並行處理任務(大規模計算任務)。為什么這么分工?這是由二者的硬件構成決定的。
可以看出,CPU是“主(host)”而GPU是“從(device)”,GPU無論發展得多快,都只能是替CPU分擔工作,而不是取代CPU。
附1:獨立顯卡和集成顯卡的區別。
所謂集成,是指顯卡集成在主板上,不能隨意更換。而獨立顯卡是作為一個獨立的器件插在主板的AGP接口上的,可以隨時更換升級。
另外,集成顯卡使用物理內存,而獨立顯卡有自己的顯存。一般而言,同期推出的獨立顯卡的性能和速度要比集成顯卡好、快。
值得一提的是,集成顯卡和獨立顯卡都是有GPU的。
附2:Nvidia顯卡分類。
GeForce系列:家庭娛樂。打游戲必備;
Quadro系列:專業繪圖設計。視頻渲染,經常使用3ds Max、Maya等軟件的必備。
Tesla系列:高端顯卡,用於大規模的並行計算。土豪必備。
另外,目前比較流行的物理引擎PhysX,並不是所有顯卡都支持。官方文檔上說GeForce 8及之后的顯卡都支持。
CUDA只是一種並行計算架構,相關的概念還有OpenCL、OpenMP等。