|
GPU并行計(jì)算介紹當(dāng)前GPU并行計(jì)算十分火熱,在人工智能、大數(shù)據(jù)的應(yīng)用非常廣泛,在目前我們的工作中雖然很少接觸到并行計(jì)算,但了解GPU并行計(jì)算的一些簡(jiǎn)單原理有利于日后接觸的時(shí)候更快上手。 1GPU架構(gòu) 如今僅通過(guò)提高主頻的方式增強(qiáng)計(jì)算能力的方式已經(jīng)很難滿足海量數(shù)據(jù)的計(jì)算量需求,以GPU(圖形處理器)為代表的眾核計(jì)算不斷興起。在以前GPU僅僅只應(yīng)用于圖像顯示,而如今隨著GPU 中核心數(shù)和計(jì)算能力的不斷提升,計(jì)算架構(gòu)不斷完善,因此提出了利用圖形處理器來(lái)計(jì)算原本由中央處理器處理的計(jì)算任務(wù)。
GPU和CPU簡(jiǎn)單結(jié)構(gòu)示意圖 簡(jiǎn)單的講,如上圖中CPU結(jié)構(gòu)上比GPU復(fù)雜得多,但GPU最直觀的感受是計(jì)算單元非常多,這眾多的計(jì)算單元直接決定了GPU非常適用于計(jì)算而非邏輯判斷。例如在一些矩陣的運(yùn)算(在機(jī)器學(xué)習(xí)中大量應(yīng)用)是非常適用于GPU計(jì)算的。 2SIMT體系
SIMT執(zhí)行示意圖 GPU 的SIMT 的執(zhí)行模型,即單指令多線程的并行執(zhí)行模型。上圖即為GPU的SIMT的一個(gè)簡(jiǎn)單示例,其中warp是線程簇,下方為時(shí)間周期。上圖中每個(gè)周期運(yùn)行對(duì)多個(gè)線程運(yùn)行相同的指令。同時(shí)結(jié)合類似流水線的特性,當(dāng)前指令執(zhí)行完畢時(shí),即圖中前四個(gè)周期結(jié)束時(shí),下一個(gè)乘法指令已經(jīng)準(zhǔn)備就緒可以立即執(zhí)行了。 3線程分歧
線程分歧示意圖 由于GPU 并行計(jì)算中采用SIMT 的計(jì)算體系,相同線程簇中的線程在同一時(shí)間周期執(zhí)行相同的指令,因此當(dāng)設(shè)計(jì)的程序出現(xiàn)比較多的分支時(shí),會(huì)出現(xiàn)明顯的線程分歧,造成性能的下降。如上圖中當(dāng)程序出現(xiàn)分支時(shí),有一部分線程執(zhí)行當(dāng)前分支,其他線程需要等待。在下一個(gè)時(shí)序中,程序執(zhí)行另一個(gè)分支,部分線程執(zhí)行該分支,而其他不屬于該分支的線程需要等待。當(dāng)最后結(jié)束分支時(shí),所有線程才能繼續(xù)同時(shí)執(zhí)行其他代碼。我們可以得出在當(dāng)出現(xiàn)分支時(shí),是需要部分線程進(jìn)行等待的,不能最大化利用GPU 的計(jì)算資源,會(huì)造成效率的下降。 |


