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



