開(kāi)普勒之核心:SMX與SM的改動(dòng)細(xì)節(jié)
全新的Kepler相比上代的Fermi架構(gòu)改變了什么,看架構(gòu)圖就很清楚了:
GK104相比GF110,整體架構(gòu)沒(méi)有大的改變,GPU(圖形處理器集群)維持4個(gè),顯存控制器從6個(gè)64bit(384bit)減至4個(gè)64bit(256bit),總線接口升級(jí)至PCIE 3.0。剩下的就是SM方面的改變了:
這里之所以要把GF104這顆中端核心的SM架構(gòu)圖也列出來(lái),是因?yàn)镚F104相比高端的GF100核心做了一些細(xì)小的改動(dòng),這些改動(dòng)也被沿用到了GK104當(dāng)中。另外從核心代號(hào)上來(lái)看,GK104其實(shí)就是用來(lái)取代GF104的,而取代GF100的核心另有他人。
NVIDIA把GK104的SM(不可分割的流處理器集群)稱為SMX,原因就是暴增的CUDA核心數(shù)量。但實(shí)際上其結(jié)構(gòu)與上代的SM沒(méi)有本質(zhì)區(qū)別,不同的只是各部分單元的數(shù)量和比例而已。具體的區(qū)別逐個(gè)列出來(lái)進(jìn)行對(duì)比:
1. NVIDIA現(xiàn)在把流處理器稱為CUDA核心;
2. SFU(Special Function Units,特殊功能單元)是比CUDA核心更強(qiáng)的額外運(yùn)算單元,可用于執(zhí)行抽象的指令,例如正弦、余弦、倒數(shù)和平方根,圖形插值指令也在SFU上執(zhí)行;
3. Warp是并行線程調(diào)度器,每一個(gè)Warp都可以調(diào)度SM內(nèi)部的所有CUDA核心或者SFU;
4. Dispatch Unit是指令分派單元,分則將Warp線程中的指令按照順序和相關(guān)性分配給不同的CUDA核心或SFU處理;
5. LD/ST就是載入/存儲(chǔ)單元,可以為每個(gè)線程存儲(chǔ)運(yùn)算源地址與路徑,方便隨時(shí)隨地的從緩存或顯存中存取數(shù)據(jù);
6. TMU是紋理單元,用來(lái)處理紋理和陰影貼圖、屏幕空間環(huán)境光遮蔽等圖形后期處理;
通過(guò)以上數(shù)據(jù)對(duì)比不難看出,GK104暴力增加CUDA核心數(shù)量的同時(shí),SFU和TMU這兩個(gè)與圖形或計(jì)算息息相關(guān)處理單元也同比增加,但是指令分配單元 和線程調(diào)度器還有載入/存儲(chǔ)單元的占比都減半了。這也就是前文中提到過(guò)的削減邏輯控制單元的策略,此時(shí)如何保證把指令和線程填滿一個(gè)CUDA核心,將是一 個(gè)難題。