天天看點

CPU和GPU擅長和不擅長的方面

從它們執行運算的速度與效率的方面來探讨這個論題。

   CPU和GPU都是具有運算能力的晶片, CPU更像“通才”——指令運算(執行)為重+數值運算, GPU更像“專才”——圖形類數值計算為核心。在不同類型的運算方面的速度也就決定了它們的能力——“擅長和不擅長”。晶片的速度主要取決于三個方面:微架構,主頻和IPC(每個時鐘周期執行的指令數)。

1.微架構

   從微架構上看,CPU和GPU看起來完全不是按照相同的設計思路設計的,當代CPU的微架構是按照兼顧“指令并行執行”和“資料并行運算”的思路而設計,就是要兼顧程式執行和資料運算的并行性、通用性以及它們的平衡性。CPU的微架構偏重于程式執行的效率,不會一味追求某種運算極緻速度而犧牲程式執行的效率。

   CPU微架構的設計是面向指令執行高效率而設計的,因而CPU是計算機中設計最複雜的晶片。和GPU相比,CPU核心的重複設計部分不多,這種複雜性不能僅以半導體的多寡來衡量,這種複雜性來自于實作:如程式分支預測,推測執行,多重嵌套分支執行,并行執行時候的指令相關性和資料相關性,多核協同處理時候的資料一緻性等等複雜邏輯。

   GPU其實是由硬體實作的一組圖形函數的集合,這些函數主要用于繪制各種圖形所需要的運算。這些和像素,光影處理,3D坐标變換等相關的運算由GPU硬體加速來實作。圖形運算的特點是大量同類型資料的密集運算——如圖形資料的矩陣運算, GPU的微架構就是面向适合于矩陣類型的數值計算而設計的,大量重複設計的計算單元,這類計算可以分成衆多獨立的數值計算——大量數值運算的線程,而且資料之間沒有像程式執行的那種邏輯關聯性。

   GPU微架構複雜度不高,盡管半導體的數量不少。從應用的角度看,如何運用好GPU的并行計算能力主要的工作是開發好它的驅動程式。GPU驅動程式的優劣很大程度左右了GPU實際性能的發揮。

   是以從微架構上看, CPU擅長的是像作業系統、系統軟體和通用應用程式這類擁有複雜指令排程、循環、分支、邏輯判斷以及執行等的程式任務。它的并行優勢是程式執行層面的,程式邏輯的複雜度也限定了程式執行的指令并行性,上百個并行程式執行的線程基本看不到。 GPU擅長的是圖形類的或者是非圖形類的高度并行數值計算,GPU可以容納上千個沒有邏輯關系的數值計算線程,它的優勢是無邏輯關系資料的并行計算。

2.主頻

   另外,GPU執行每個數值計算的速度并沒有比CPU快,從目前主流CPU和GPU的主頻就可以看出了,CPU的主頻都超過了1GHz,2GHz,甚至3GHz,而GPU的主頻最高還不到1GHz,主流的也就500~600MHz。要知道1GHz= 1000MHz。是以GPU在執行少量線程的數值計算時并不能超過CPU。

目前 GPU數值計算的優勢主要是浮點運算,它執行浮點運算快是靠大量并行,但是這種數值運算的并行性在面對程式的邏輯執行時毫無用處。

3.IPC(每個時鐘周期執行的指令數)

   這個方面,CPU和GPU無法比較,因為GPU大多數指令都是面向數值計算的,少量的控制指令也無法被作業系統和軟體直接使用。如果比較資料指令的IPC,GPU顯然要高過CPU,因為并行的原因。但是,如果比較控制指令的IPC,自然是CPU的要高的多。原因很簡單,CPU着重的是指令執行的并行性。

另外,目前有些GPU也能夠支援比較複雜的控制指令,比如條件轉移、分支、循環和子程式調用等,但是GPU程式控制這方面的增加,和支援作業系統所需要的能力CPU相比還是天壤之别,而且指令執行的效率也無法和CPU相提并論。

最後總結一下:

   CPU擅長的:作業系統,系統軟體,應用程式,通用計算,系統控制等等;遊戲中人工智能,實體模拟等等;3D模組化-光線追蹤渲染;虛拟化技術——抽象硬體,同時運作多個作業系統或者一個作業系統的多個副本等等。

GPU擅長的: 圖形類矩陣運算,非圖形類并行數值計算,高端3D遊戲。

   綜上所述,在一台均衡計算的計算機系統中,CPU和GPU還是各司其職,除了圖形運算,GPU将來可能主要集中在高效率低成本的高性能并行數值計算,幫助CPU分擔這種類型的計算,提高系統這方面的性能。而目前的典型應用還是高端3D遊戲,一個高效的GPU配合一個高效的CPU,3D遊戲的整體效率才能得到保證。“高端3D遊戲隻需要高端顯示卡”或者“高端3D遊戲隻需要CPU”都是無稽之談。

繼續閱讀