大幅修改過的串流多重處理器

除了數目增加,每個多重處理器也歷經數次最佳化。第一項改進是提高每個多重處理器的使用中執行緒數目,從768個增加到1,024個(也就是從24個32執行緒warp增加到32個)。執行緒數目增加特別有助於縮短紋理運算的等待時間。在繪圖處理器中,使用中執行緒的總數由12,288個增加到30,720個。

每個多重處理器的暫存器數目也增加了一倍,從8,192個提高到16,384個。由於執行緒數目隨同增加,因此一個執行緒可同時使用的暫存器數目也由10個增加到16個。在G8x/G9x中,我們的測試演算法使用了67%的處理單元,在GT200上,這個數字會增加到100%。再加上兩個紋理單元的協助,效能應該會明顯高於我們用來進行測試的G80。可惜的是,CUDA2.0必須使用目前仍是beta版本的驅動程式,而且無法辨識出GeForce 200 GTX。等到驅動程式的主要部分提供支援時,我們會再做一次測試。

這點不是多重處理器唯一的改良之處。Nvidia表示他們已將dual-issue模式加以最佳化。您可能還記得從G80開始,多重處理器理論上可在一次循環中執行兩個指令,分別是一個MAD和一個浮點MUL。我們用了「理論上」這個詞,是因為當時我們在綜合測試中看不出這個特性,也不清楚這是硬體或驅動程式造成的限制。經過數個月及驅動程式改版數次之後,現在我們知道MUL指令在G80中不一定容易找出,因此我們認為這個問題應該是硬體所造成的。

但dual-issue模式是如何運作的?Nvidia在G80推出時沒有提供詳細資料,但後來我們研究過專利資料,稍微多了解一些多重處理器執行指令的方式。專利資料首先明確地表示,多重處理器在一次繪圖處理器循環(也就是「慢」頻率)中只能發動執行一個指令。那麼這個著名的dual-issue模式在哪裡呢?事實上它是一種硬體特殊功能:一個指令使用2個繪圖處理器循環(4個ALU循環),在1個warp上執行(8通道SIMD單元執行的32個執行緒),但如果指令屬於不同種類,例如一個是MAD,另一個是SFU,多重處理器的前端每次循環就只能發動執行1個指令。

除了transcendental運算和推算每個頂點的值,SFU還能執行浮點乘法。交替執行MAD和MUL指令時,不同指令的執行時間會有一段重疊。繪圖處理器循環透過這種方式,產生出warp中的MADMUL運算結果,也就是32個純量值。雖然從Nvidia的說明看來,你可能會認為每2次繪圖處理器循環可產生MADMUL運算的結果。不過實際上,結果是相同的,但從硬體觀點看來,它可大幅簡化管理發動執行指令的前端,每次循環發動一次。

是什麼因素使我們在G8x/G9x上沒辦法這麼做,但在GT200上已經修正了?令人失望的是,Nvidia並沒有明確說明,只說他們修改了暫存器分配以及指令的排程與執行這幾個點。不過我們會繼續追查下去。現在來看看Nvidia所做的更改在綜合性測試中—也就是GPUBench—是否有實際效用。Benchl 為了進行比較,我們在圖中加入了9800 GTX的分數。這次結果相當清楚,您可以看出MUL指令的速率比MAD指令來得高。不過這個值跟兩倍的差距仍然相當大,只比MAD指令的速率提昇大約32%。但目前這樣已經足夠。我們必須說明,DP3或DP4指令的結果不應該列入考量,因為這些分數並不一致。POW指令的結果也是一樣,原因很可能是驅動程式問題。

串流多重處理器的最後一項更改,是支援雙精度(浮點數為64位元,而非32位元)。這裡必須說明一下,精度提高對於圖形演算其實幫助不大。但就我們所知,Nvidia越來越重視GPGPU,而在某些科學應用方面,雙精度更是毫無疑問的必要需求。

Nvidia不是第一家注意到這一點的公司。IBM日前也修改了該公司的Cell處理器,針對這類資料提高了SPU的效能。就效能方面而言,GT200的製作方式還有可以改進之處,雙精度浮點運算是由專屬的串流多重處理器單元負責管理。就每次循環可執行1個雙精度MAD計算的單元而言,其最高效能為:1.296 x 10 (TPC) x 3 (SM) x 2 (Multiply+Add) = 77.78 Gflops,或可說是單精度效能的1/8到1/12之間。AMD提供支援的方法是使用同樣的處理單元以數個循環運作,所得的結果明顯較佳,只比單精度運算慢2 4倍。


Google 廣告
廣告
Ads
的文章和評比
smartad
Recherches populaires