GPU基本介紹

基本概念:

GPU: Graphic Processing Unit;圖形處理單元;

GPGPU: General Purpose computations on GPU;通用計算圖形處理單元;

CPU與GPU的相同點:

(1)都是計算機體系結構中的重要組成部分;

(2)都是超大規模集成電路元件;

(3)都能夠完成浮點運能功能;

CPU與GPU的不同之處:

(1)GPU的設計目的與CPU不同;CPU的微架構是按照兼顧“指令並行執行”和“數據並行運算”的思路而設計,其大部分晶體管主要用於構建控制電路和Cache,並且其內部有大約%5是ALU,控制電路則更爲複雜;二GPU的控制電路則相對簡單的對,而且對Cache的需求較小,所以可以把大部分的晶體管都用於計算單元。GPU的40%都是ALU;

(2)延遲不同,CPU的內存延遲是GPU的1/10;

(3)內存帶寬不同;GPGPU的內存帶寬是CPU的10倍;

(4)GPGPU具有更大的執行單元;

(5)線程輕重程度不同;CPU線程是軟件管理的粗粒度重線程,當 CPU 線程被中斷或者由於等待資源就緒狀態就變爲等待狀態,操作系統就需要保存當前線程的上下文,並裝載另外一個線程的上下文。這種機制使得CPU切換線程的代價十分高昂,通常需要數百個時鐘週期。而GPU線程是硬件管理的細粒度輕線程,可以實現零開銷的線程切換。當一個線程因爲訪問片外存儲器或者同步指令開始等待以後,可以立即切換到另外一個處於就緒狀態的線程,用計算來隱藏延遲,並且線程數目越多,隱藏延遲的效果越好。

(6)CPU屬於“多核”,而GPU則屬於“衆核”;CPU 的每個核心具有取指和調度單元構成的完整前端,因而其核心是多指令流多數據流(Multiple Instruction Multiple Data,MIMD)的,每個 CPU 核心可以在同一時刻執行自己的指令,與其他的核心完全沒有關係。但這種設計增加了芯片的面積,限制了單塊芯片集成的核心數量。GPU的每個流多處理器才能被看作類似於 CPU 的單個核心,每個流多處理器以單指令流多線程方式工作,只能執行相同的程序。儘管 GPU 運行頻率低於CPU,但由於其流處理器數目遠遠多於 CPU 的核心數,我們稱之爲“衆核”,其單精度浮點處理能力達到了同期 CPU 的十倍之多。

(7)內存與寄存器之間的不同;目前的 CPU 內存控制器一般基於雙通道或者三通道技術,每個通道位寬64bit;而GPU則有數個存儲器控制單元,這些控制單元具備同時存取數據的能力,從而使得總的存儲器位寬達到了 512bit。這個差異導致了GPU全局存儲器帶寬大約是同期CPU最高內存帶寬的5倍;

(8)緩存機制不同;CPU 擁有多級容量較大的緩存來儘量減小訪存延遲和節約帶寬,但緩存在多線程環境下容易產生失效反應,每次線程切換都需要重建緩存上下文,一次緩存失效的代價是幾十到上百個時鐘週期。同時,爲了實現緩存與內存中數據的一致性,還需要複雜的邏輯控制,CPU 緩存機制導致核心數過多會引起系統性能下降。在GPU 中則沒有複雜的緩存體系與一致性機制,GPU 緩存的主要目的是隨機訪問優化和減輕全局存儲器的帶寬壓力。

綜上,GPU 是以大量線程實現面向吞吐量的數據並行計算,適合於處理計算密度高、邏輯分支簡單的大規模數據並行負載;而 CPU 則有複雜的控制邏輯和大容量的緩存減小延遲,擅長複雜邏輯運算。

GPU的一些缺點:

1. 顯示芯片的運算單元數量很多,因此對於不能高度並行化的工作,所能帶來的幫助就不大。 

2. 顯示芯片目前通常只支持 32 bits 浮點數,且多半不能完全支持 IEEE 754 規格, 有些運算的精確度可能較低。目前許多顯示芯片並沒有分開的整數運算單元,因此整數運算的效率較差。 

3. 顯示芯片通常不具有分支預測等複雜的流程控制單元,因此對於具有高度分支的程序,效率會比較差。 

4. 目前 GPGPU 的程序模型仍不成熟,也還沒有公認的標準。例如 NVIDIA 和 AMD/ATI 就有各自不同的程序模型。 

        最後,需要提醒的是,GPU最近幾年的發展勢頭很兇猛,以至於OpenCV2.4已經開始考慮利用GPU來加速程序的運算了;而大名鼎鼎的NVIDIA公司前段時間也宣佈開始和OpenCV進行合作推進計算機視覺算法的GPU加速。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章