1.1.3 CPU+GPU異構(gòu)并行 目前主流計(jì)算機(jī)的處理能力主要來(lái)自CPU和GPU。CPU與GPU一般經(jīng)北橋 通過(guò)AGP或者PCI-E總線連接,各自有獨(dú)立的外部存儲(chǔ)器,分別是內(nèi)存和顯存。在一些芯片組中使用的集成GPU沒(méi)有采用獨(dú)立的顯存芯片,直接從內(nèi)存中分出一塊區(qū)域作為顯存。Intel和AMD提出的CPU-GPU融合產(chǎn)品還準(zhǔn)備直接將CPU和GPU通過(guò)QPI或者HT總線連接,集成在一塊芯片內(nèi)??梢灶A(yù)見,受面積、功耗和散熱的限制,此類融合產(chǎn)品不大可能集成性能很高的GPU,并且有可能不為GPU提供獨(dú)立顯存。 傳統(tǒng)的CPU+GPU異構(gòu)并行處理的典型任務(wù)是圖形實(shí)時(shí)渲染。在這類應(yīng)用中,CPU負(fù)責(zé)根據(jù)用戶的輸入和一定的規(guī)則(如游戲的AI)確定在下一幀需要顯示哪些物體,以及這些物體的位置,再將這些信息傳遞給GPU,由GPU繪制這些物體并進(jìn)行顯示。兩者的計(jì)算是并行的:在GPU繪制當(dāng)前幀的時(shí)候,CPU可以計(jì)算下一幀需要繪制的內(nèi)容。 在這些處理中,CPU負(fù)責(zé)的是邏輯性較強(qiáng)的事務(wù)計(jì)算,GPU則負(fù)責(zé)計(jì)算密集度高的圖形渲染。為了滿足事務(wù)計(jì)算的需要,CPU的設(shè)計(jì)目標(biāo)是使執(zhí)行單元能夠以很低的延遲獲得數(shù)據(jù)和指令,因此采用了復(fù)雜的控制邏輯和分支預(yù)測(cè),以及大量的緩存來(lái)提高執(zhí)行效率;而GPU必須在有限的面積上實(shí)現(xiàn)很強(qiáng)的計(jì)算能力和很高的存儲(chǔ)器帶寬,因此需要大量執(zhí)行單元來(lái)運(yùn)行更多相對(duì)簡(jiǎn)單的線程,在當(dāng)前線程等待數(shù)據(jù)時(shí)就切換到另一個(gè)處于就緒狀態(tài)等待計(jì)算的線程。簡(jiǎn)而言之,CPU對(duì)延遲將更敏感,而GPU則側(cè)重于提高整體的數(shù)據(jù)吞吐量。CPU和GPU的設(shè)計(jì)目標(biāo)的不同決定了兩者在架構(gòu)和性能上的巨大差異,具體來(lái)說(shuō)有: 1.CPU線程與GPU線程 CPU的一個(gè)核心通常在一個(gè)時(shí)刻只能運(yùn)行一個(gè)線程的指令。CPU的多線程機(jī)制通過(guò)操作系統(tǒng)提供的API實(shí)現(xiàn),是一種軟件粗粒度多線程。當(dāng)一個(gè)線程中斷,或者等待某種資源時(shí),操作系統(tǒng)就保存當(dāng)前線程的上下文,并裝載另外一個(gè)線程的上下文。這種機(jī)制使得CPU切換線程的代價(jià)十分高昂,通常需要數(shù)百個(gè)時(shí)鐘周期。某些具有超線程功能的CPU可以將一個(gè)物理核心虛擬成多個(gè)核心,但每個(gè)虛擬核心在一個(gè)時(shí)刻也只能運(yùn)行一個(gè)線程。 GPU采用的則是由硬件管理的輕量級(jí)線程,可以實(shí)現(xiàn)零開銷的線程切換。線程的切換在這里成為一件好事:當(dāng)一個(gè)線程因?yàn)樵L問(wèn)片外存儲(chǔ)器或者同步指令開始等待以后,可以立即切換到另外一個(gè)處于就緒態(tài)的線程,用計(jì)算來(lái)隱藏延遲。當(dāng)線程中的計(jì)算指令需要的時(shí)間較多,而訪存相對(duì)較少,即計(jì)算密集度比較高時(shí),延遲就可以被計(jì)算隱藏,而且線程越多,延遲隱藏得更好。 2.多核與眾核 當(dāng)前的主流CPU中一般有2~8個(gè)核心,每個(gè)核心中有3~6條執(zhí)行流水線。這些核心極采用了很多提高指令級(jí)并行的技術(shù),如超標(biāo)量超深流水線、亂序執(zhí)行、預(yù)測(cè)執(zhí)行,以及大容量緩存等,也采用了如SSE、3Dnow!一類的數(shù)據(jù)級(jí)并行技術(shù)。由于緩存和控制邏輯需要很大面積,因此在一塊芯片上能夠集成的核心數(shù)量也就被限制了。 當(dāng)前的NVIDIA GPU中有1~30個(gè)包含完整前端的流多處理器,每個(gè)流多處理器可以看成一個(gè)包含8個(gè)1D流處理器的SIMD處理器。CUDA就利用了多個(gè)流多處理器間的粗粒度任務(wù)級(jí)或數(shù)據(jù)級(jí)并行,以及流多處理器內(nèi)的細(xì)粒度數(shù)據(jù)并行。 盡管GPU的運(yùn)行頻率低于GPU,但更多的執(zhí)行單元數(shù)量還是使GPU能夠在浮點(diǎn)處理能力上獲得優(yōu)勢(shì),即使是芯片組里集成的低端GPU,在單精度浮點(diǎn)處理能力上也能和主流的CPU打成平手,而主流GPU的性能則可以達(dá)到同時(shí)期主流CPU性能的10倍左右,如圖1-4所示。
3.外部存儲(chǔ)器 GT200 GPU的顯存帶寬達(dá)到了140GB/s,是同時(shí)期CPU最高內(nèi)存帶寬的5倍,圖1-5是CPU與GPU同期帶寬的比較。造成GPU與CPU外部存儲(chǔ)器帶寬差異的主要原因有兩個(gè):
首先,顯存中使用的GDDR存儲(chǔ)器顆粒與內(nèi)存的DDR存儲(chǔ)器顆粒在技術(shù)上基本相同,但顯存顆粒是直接固化在顯卡的PCB板上的,而內(nèi)存則為了兼顧可擴(kuò)展性的需要,必須通過(guò)DIMM插槽與主板相連。直接焊在PCB板上的顯存的信號(hào)完整性問(wèn)題比通過(guò)插槽連接的內(nèi)存更容易解決,顯存的工作頻率也通常比使用相同技術(shù)的內(nèi)存要高一些。 其次,目前的CPU存儲(chǔ)器控制器一般基于雙通道或者三通道技術(shù)的,每個(gè)通道位寬64bit;而GPU中則存在數(shù)個(gè)存儲(chǔ)器控制單元,例如GTX280 GPU中就有8個(gè)存儲(chǔ)器控制器,每個(gè)控制兩片位寬32bit的顯存芯片,使總的存儲(chǔ)器位寬達(dá)到512bit。這樣,盡管內(nèi)存中的DDR存儲(chǔ)器顆粒比顯卡上的GDDR存儲(chǔ)器顆粒還要多,但CPU能夠同時(shí)訪問(wèn)的存儲(chǔ)器顆粒反而少于GPU。 4.緩存 CPU中的緩存主要用于減小訪存延遲和節(jié)約帶寬。緩存在多線程環(huán)境下會(huì)發(fā)生失效反應(yīng):在每次線程上下文切換之后,都需要重建緩存上下文,一次緩存失效的代價(jià)是幾十到上百個(gè)時(shí)鐘周期。同時(shí),為了實(shí)現(xiàn)緩存與內(nèi)存中數(shù)據(jù)的一致性,還需要復(fù)雜的邏輯進(jìn)行控制。 在GPU中則沒(méi)有復(fù)雜的緩存體系與替換機(jī)制。GPU緩存是只讀的,因此也不用考慮緩存一致性問(wèn)題。GPU緩存的主要功能是用于過(guò)濾對(duì)存儲(chǔ)器控制器的請(qǐng)求,減少對(duì)顯存的訪問(wèn)。所以GPU上緩存的主要功能不是減小訪存延遲,而是節(jié)約顯存帶寬。 從上面的分析可以看出,GPU的主要設(shè)計(jì)目標(biāo)是以大量線程實(shí)現(xiàn)面向吞吐量的數(shù)據(jù)并行計(jì)算,適合于處理計(jì)算密度高、邏輯分支簡(jiǎn)單的大規(guī)模數(shù)據(jù)并行任務(wù)。而CPU則有復(fù)雜的控制邏輯和大容量的緩存減小延遲,能夠適應(yīng)各種不同的情況,尤其擅長(zhǎng)復(fù)雜邏輯運(yùn)算。使用GPU處理數(shù)據(jù)并行任務(wù),而由CPU進(jìn)行復(fù)雜邏輯和事務(wù)處理等串行計(jì)算,就可以最大限度地利用計(jì)算機(jī)的處理能力,實(shí)現(xiàn)桌面上的超級(jí)計(jì)算。CPU+GPU并行不只是計(jì)算能力的提高,也不只是節(jié)省了成本和能源;將高性能計(jì)算普及到桌面,使得許多以往不可能的應(yīng)用成為了現(xiàn)實(shí),這種靈活性本身就是一種革命性的進(jìn)步。 【責(zé)任編輯:董書 TEL:(010)68476606】
|
|
來(lái)自: 昵稱17588304 > 《分布式計(jì)算my》