決戰(zhàn)性能之巔!NV雙芯旗艦GTX590評(píng)測
10.4 統(tǒng)一尋址空間實(shí)現(xiàn)完全的C++支持
Fermi是第一個(gè)支持新并行線程執(zhí)行(PTX)2.0指令集的體系結(jié)構(gòu)。PTX是級(jí)別較低的虛擬機(jī)和ISA,目的是為了支持并行線程處理器的運(yùn)作。在程序安裝的時(shí)候,PTX指令會(huì)被GPU驅(qū)動(dòng)轉(zhuǎn)譯成機(jī)器代碼。
PTX的主要目標(biāo)包括:
1. 提供一個(gè)能跨越數(shù)代GPU的穩(wěn)定ISA
2. 讓經(jīng)過編譯的應(yīng)用程序充分利用GPU的性能
3. 提供一個(gè)支持 C、C++、Fortran以及其他編譯器對(duì)象并且與機(jī)器無關(guān)的ISA
4. 為應(yīng)用程序和中間件開發(fā)者提供一個(gè)代碼分發(fā)ISA
5. 為優(yōu)化映射PTX 代碼至對(duì)象機(jī)器的代碼產(chǎn)生器和轉(zhuǎn)移器提供一個(gè)一般化的ISA
6. 讓庫以及性能核心程序(performance kernel)代碼編寫更容易
7. 提供一個(gè)可以跨越GPU內(nèi)核規(guī)模(從幾個(gè)到多個(gè))的可伸縮編程模型
PTX2.0具備許多新的特性,大大提升了GPU(圖形處理器)的可編程性、精度及性能。這些特性包括:完全的IEEE 32位浮點(diǎn)精度;所有變量和指針都有統(tǒng)一的尋址空間;64位尋址;以及針對(duì)OpenCL和DirectCompute的新指令。尤為重要的是,PTX2.0完全支持C++編程語言。
Fermi和PTX 2.0 ISA采用統(tǒng)一的尋址空間,將存取操作的三個(gè)不同的尋址空間(線程的私有局部空間、線程塊的共用空間、全局空間)進(jìn)行了統(tǒng)一。在PTX 1.0中,存取指令都具體對(duì)應(yīng)這三個(gè)尋址空間中的一個(gè),程序就可以在一個(gè)編譯時(shí)確知的指定尋址空間中存取數(shù)值。這樣很難為C和C++指針提供完全的支持,因?yàn)橐粋€(gè)指針的目標(biāo)尋址空間在編譯時(shí)可能根本無從知曉而只有在運(yùn)行時(shí)才能動(dòng)態(tài)確定。
PTX 2.0把三個(gè)尋址空間都統(tǒng)一為一個(gè)單獨(dú)、連續(xù)的尋址空間,因此只需一套存取指令,而不再需要三套針對(duì)不同尋址空間(局部的、共用的及全局存儲(chǔ)器)的存取指令。統(tǒng)一尋址空間為40位,可以支持1 Terabyte的可設(shè)定地址的內(nèi)存,而存取ISA支持64位以適應(yīng)未來的增長。
采用統(tǒng)一的尋址空間讓Fermi可以真正支持C++程序。在C++中,所有的變量和函數(shù)都存在于對(duì)象中,而對(duì)象又通過指針進(jìn)行傳遞。有了PTX 2.0,就可以利用統(tǒng)一的指針傳遞任意存儲(chǔ)空間里的對(duì)象。Fermi的硬件地址轉(zhuǎn)譯單元自動(dòng)將指針參考映射到正確的存儲(chǔ)空間。
Fermi和PTX 2.0 ISA還支持C++虛擬函數(shù)、函數(shù)指針、針對(duì)動(dòng)態(tài)對(duì)象分配、解除分配的“new”和“delete”操作以及針對(duì)異常處理的“try”和“catch” 操作。
● 針對(duì)OpenCL和DirectCompute的優(yōu)化
OpenCL及DirectCompute同CUDA的編程模型有非常密切的對(duì)應(yīng)關(guān)系,CUDA里的線程、線程塊、線程塊格、障柵同步、共用存儲(chǔ)器、全局存儲(chǔ)器以及原子操作都能在OpenCL和DirectCompute中看到,可以說OpenCL和DirectCompute的整個(gè)框架就是照搬CUDA的,因此基于CUDA的Fermi天生就已經(jīng)為OpenCL和DirectCompute提供了優(yōu)化。
此外,F(xiàn)ermi還為OpenCL和DirectCompute的表面(surface)格式轉(zhuǎn)換指令提供了硬件支持,允許圖形與計(jì)算程序能簡單地對(duì)相同的數(shù)據(jù)進(jìn)行操作。PTX 2.0 ISA還為DirectCompute提供了population count、append以及bit-reverse 指令的支持。
關(guān)注我們
