革命性DX11架構(gòu)!GTX480/470權(quán)威評測
講完了GPC(內(nèi)含光柵引擎)和SM(內(nèi)含多形體引擎)之后,就輪到了GF100的最小單元——流處理器,現(xiàn)在NVIDIA將它稱為CUDA核心。
第四章/第五節(jié) CUDA核心:第三代流處理器
論單個CUDA核心,GF100與GT200/G80的基本功能是相同的,沿用了之前的1D標量流處理器設(shè)計,無論程序要求什么類型的指令,都可以通過線程分配器打散之后交給CUDA核心處理,從而保證任何指令都能獲得100%的執(zhí)行效率。
GF100的SM與CUDA結(jié)構(gòu)
雖說像素和頂點等4D指令依然是主力,但在進入DX10時代后Z緩沖區(qū)(1D)或紋理存?。?D)等非4D指令所占比重越來越多,此時NVIDIA的標量流處理器架構(gòu)處理起來依然如魚得水,但對ATI的5D超標量流處理器架構(gòu)提出了嚴峻的考驗。
● CUDA核心的改進:
每一個CUDA核心都擁有一個完全流水線化的整數(shù)算術(shù)邏輯單元(ALU)以及浮點運算單元(FPU)。GF100采用了最新的IEEE754-2008浮點標準,2008標準的主要改進就是支持多種類型的舍入算法。新標準可以只在最終獲取數(shù)據(jù)時進行四舍五入,而以往的標準是每進行一步運算都要四舍五入一次,最后會產(chǎn)生較大的誤差。

GF100能夠為32bit單精度和64bit雙精度運算提供FMA(Fused Multiply-Add,積和熔加)指令,而GT200只在64bit時才能提供。FMA不僅適用于高性能計算領(lǐng)域,事實上在渲染緊密重疊的三角形時,新的FMA算法能夠最大限度的減少渲染誤差。
● 16個載入/存儲單元:
每一個SM都擁有16個載入/存儲單元,從而在每個時鐘周期內(nèi)均可為16個線程運算源地址與目標地址。支持的單元能夠?qū)⒚總€地址的數(shù)據(jù)載入和存儲到高速緩存或顯存中。
● 四個特殊功能單元:
GF100每個SM內(nèi)部還擁有額外的四個SFU(Special Function Units,特殊功能單元),可用于執(zhí)行抽象的指令,例如正弦、余弦、倒數(shù)和平方根,圖形插值指令也在SFU上執(zhí)行。每個SFU在一個時鐘周期內(nèi)針對每個線程均可執(zhí)行一條指令,一個Warp(32個線程)的執(zhí)行時間可超過八個時鐘周期。SFU流水線從分派單元中分離出來,讓分派單元能夠在SFU處于占用狀態(tài)時分發(fā)給其他執(zhí)行單元。復(fù)雜的程序著色器在特殊功能專用硬件上的運行優(yōu)勢尤為明顯。
RV870的Thread Processor結(jié)構(gòu)圖
而ATI的SFU則需要共享SP資源,在每一個Shader單元內(nèi)部擁有5個流處理器,其中比較“胖”的一個具有SFU的功能,也就是說ATI的架構(gòu)有1/5的流處理器可以零時充當SFU使用。在大量使用特殊函數(shù)運算時,A卡的處理能力會損失不少,而N卡則因為額外的SFU單元輔助效率會更高。
另外ATI所有的流處理器在執(zhí)行整數(shù)型加、乘指令時僅支持24bit精度,而NVIDIA CUDA核心支持所有整數(shù)指令全32位精度,符合標準編程語言的基本要求。整數(shù)ALU還經(jīng)過了優(yōu)化,可有效支持64位以及更高精度的運算,這一點是對手無法比擬的。
● 雙Warp調(diào)度器:
SM可對32個為一組的并行線程(又叫做Warp)進行調(diào)度。每個SM擁有兩個Warp調(diào)度器以及兩個指令分派單元。這樣就能夠同時發(fā)出和執(zhí)行兩個Warp。
GF100的雙Warp調(diào)度器可選出兩個Warp,從每個Warp發(fā)出一條指令到16個核心、16個載入/存儲單元或4個特殊功能單元。因為Warp是獨立執(zhí)行的,所以GF100的調(diào)度器無需檢查指令流內(nèi)部的依存關(guān)系。通過利用這種優(yōu)秀的雙指令執(zhí)行(Dual-issue)模式,GF100能夠?qū)崿F(xiàn)接近峰值的硬件性能。
大多數(shù)指令都能夠?qū)崿F(xiàn)雙路執(zhí)行,兩條整數(shù)指令、兩條浮點指令或者整數(shù)、浮點、載入、存儲的混合指令以及SFU指令均可同時執(zhí)行。但雙精度指令不支持與其它指令同時分派。
關(guān)注我們


