CPU和GPU擅長和不擅長的方面
今天討論的論題是CPU和GPU“擅長和不擅長”的各個(gè)方面,而不是誰取代誰的問題。我試著從它們執(zhí)行運(yùn)算的速度與效率的方面來探討這個(gè)論題。
CPU和GPU都是具有運(yùn)算能力的芯片,CPU更像“通才”——指令運(yùn)算(執(zhí)行)為重+ 數(shù)值運(yùn)算,GPU更像“專才”——圖形類數(shù)值計(jì)算為核心。在不同類型的運(yùn)算方面的速度也就決定了它們的能力——“擅長和不擅長”。芯片的速度主要取決于三個(gè)方面:微架構(gòu),主頻和IPC(每個(gè)時(shí)鐘周期執(zhí)行的指令數(shù))。
1.微架構(gòu)
從微架構(gòu)上看,CPU和GPU看起來完全不是按照相同的設(shè)計(jì)思路設(shè)計(jì)的,當(dāng)代CPU的微架構(gòu)是按照兼顧“指令并行執(zhí)行”和“數(shù)據(jù)并行運(yùn)算”的思路而設(shè)計(jì),就是要兼顧程序執(zhí)行和數(shù)據(jù)運(yùn)算的并行性、通用性以及它們的平衡性。CPU的微架構(gòu)偏重于程序執(zhí)行的效率,不會(huì)一味追求某種運(yùn)算極致速度而犧牲程序執(zhí)行的效率。
CPU微架構(gòu)的設(shè)計(jì)是面向指令執(zhí)行高效率而設(shè)計(jì)的,因而CPU是計(jì)算機(jī)中設(shè)計(jì)最復(fù)雜的芯片。和GPU相比,CPU核心的重復(fù)設(shè)計(jì)部分不多,這種復(fù)雜性不能僅以晶體管的多寡來衡量,這種復(fù)雜性來自于實(shí)現(xiàn):如程序分支預(yù)測(cè),推測(cè)執(zhí)行,多重嵌套分支執(zhí)行,并行執(zhí)行時(shí)候的指令相關(guān)性和數(shù)據(jù)相關(guān)性,多核協(xié)同處理時(shí)候的數(shù)據(jù)一致性等等復(fù)雜邏輯。
GPU其實(shí)是由硬件實(shí)現(xiàn)的一組圖形函數(shù)的集合,這些函數(shù)主要用于繪制各種圖形所需要的運(yùn)算。這些和像素,光影處理,3D 坐標(biāo)變換等相關(guān)的運(yùn)算由GPU硬件加速來實(shí)現(xiàn)。圖形運(yùn)算的特點(diǎn)是大量同類型數(shù)據(jù)的密集運(yùn)算——如圖形數(shù)據(jù)的矩陣運(yùn)算,GPU的微架構(gòu)就是面向適合于矩陣類型的數(shù)值計(jì)算而設(shè)計(jì)的,大量重復(fù)設(shè)計(jì)的計(jì)算單元,這類計(jì)算可以分成眾多獨(dú)立的數(shù)值計(jì)算——大量數(shù)值運(yùn)算的線程,而且數(shù)據(jù)之間沒有像程序執(zhí)行的那種邏輯關(guān)聯(lián)性。
GPU微架構(gòu)復(fù)雜度不高,盡管晶體管的數(shù)量不少。從應(yīng)用的角度看,如何運(yùn)用好GPU的并行計(jì)算能力主要的工作是開發(fā)好它的驅(qū)動(dòng)程序。GPU驅(qū)動(dòng)程序的優(yōu)劣很大程度左右了GPU實(shí)際性能的發(fā)揮。
因此從微架構(gòu)上看,CPU擅長的是像操作系統(tǒng)、系統(tǒng)軟件和通用應(yīng)用程序這類擁有復(fù)雜指令調(diào)度、循環(huán)、分支、邏輯判斷以及執(zhí)行等的程序任務(wù)。它的并行優(yōu)勢(shì)是程序執(zhí)行層面的,程序邏輯的復(fù)雜度也限定了程序執(zhí)行的指令并行性,上百個(gè)并行程序執(zhí)行的線程基本看不到。GPU擅長的是圖形類的或者是非圖形類的高度并行數(shù)值計(jì)算,GPU可以容納上千個(gè)沒有邏輯關(guān)系的數(shù)值計(jì)算線程,它的優(yōu)勢(shì)是無邏輯關(guān)系數(shù)據(jù)的并行計(jì)算。
2.主頻
另外,GPU執(zhí)行每個(gè)數(shù)值計(jì)算的速度并沒有比CPU快,從目前主流CPU和GPU的主頻就可以看出了,CPU的主頻都超過了1GHz,2GHz,甚至3GHz,而GPU的主頻最高還不到1GHz,主流的也就500~600MHz。要知道1GHz = 1000MHz。所以GPU在執(zhí)行少量線程的數(shù)值計(jì)算時(shí)并不能超過CPU。
目前GPU數(shù)值計(jì)算的優(yōu)勢(shì)主要是浮點(diǎn)運(yùn)算,它執(zhí)行浮點(diǎn)運(yùn)算快是靠大量并行,但是這種數(shù)值運(yùn)算的并行性在面對(duì)程序的邏輯執(zhí)行時(shí)毫無用處。
3.IPC(每個(gè)時(shí)鐘周期執(zhí)行的指令數(shù))
這個(gè)方面,CPU和GPU無法比較,因?yàn)镚PU大多數(shù)指令都是面向數(shù)值計(jì)算的,少量的控制指令也無法被操作系統(tǒng)和軟件直接使用。如果比較數(shù)據(jù)指令的IPC,GPU顯然要高過CPU,因?yàn)椴⑿械脑?。但是,如果比較控制指令的IPC,自然是CPU的要高的多。原因很簡單,CPU著重的是指令執(zhí)行的并行性。
另外,目前有些GPU也能夠支持比較復(fù)雜的控制指令,比如條件轉(zhuǎn)移、分支、循環(huán)和子程序調(diào)用等,但是GPU程序控制這方面的增加,和支持操作系統(tǒng)所需要的能力CPU相比還是天壤之別,而且指令執(zhí)行的效率也無法和CPU相提并論。
最后總結(jié)一下:
CPU擅長的:操作系統(tǒng),系統(tǒng)軟件,應(yīng)用程序,通用計(jì)算,系統(tǒng)控制等等;游戲中人工智能,物理模擬等等;3D建模-光線追蹤渲染;虛擬化 #p#page_title#e#技術(shù)——抽象硬件,同時(shí)運(yùn)行多個(gè)操作系統(tǒng)或者一個(gè)操作系統(tǒng)的多個(gè)副本等等。
GPU擅長的:圖形類矩陣運(yùn)算,非圖形類并行數(shù)值計(jì)算,高端3D游戲。
綜上所述,在一臺(tái)均衡計(jì)算的計(jì)算機(jī)系統(tǒng)中,CPU和GPU還是各司其職,除了圖形運(yùn)算,GPU將來可能主要集中在高效率低成本的高性能并行數(shù)值計(jì)算,幫助CPU分擔(dān)這種類型的計(jì)算,提高系統(tǒng)這方面的性能。而當(dāng)前的典型應(yīng)用還是高端3D游戲,一個(gè)高效的GPU配合一個(gè)高效的CPU,3D游戲的整體效率才能得到保證。“高端3D游戲只需要高端顯卡”或者“高端3D游戲只需要CPU”都是無稽之談。