前言:在熟悉了CPU-Z和GPU-Z的使用和參數之後,大多數愛好者已經能分辨自己的硬體配置和基本性能,不過最新推出的CUDA-Z你又是否了解呢?在我們的網站博客裡,已經有網友開始了對NVIDIA顯卡GPU功能的進一步挖掘,不但玩了很多新奇的軟體,也使用GPU加速了很多經典老軟體。但是對於CUDA-Z這款基礎測試軟體,很多網友顯然比較難下手,雖然參數不多,但是這款軟體涉及到專業性較強的CUDA架構特點和名詞解釋。今天希望用這篇文章和大家交流,更好地了解我們身邊的GPU,了解正在成長中的GPU通用計算能力。
● CUDA通用計算代表GPU發展新方向
CUDA是NVIDIA公司於2007年推出的GPU通用計算產品。CUDA是Compute Unified Device Architecture(統一計算架構)的簡稱,是建立在GPU基礎之上的通用計算開發平臺,它是一個全新的軟硬體架構,可以將GPU視為一個並行數據計算的設備,對所進行的計算進行分配和管理。利用CUDA能夠充分的將GPU的高計算能力開發出來,並使得GPU的計算能力獲得更多的應用。
CUDA最為關鍵也最受推崇的原因很簡單——它是業界第一款不需要圖形學API就能使用類C語言進行通用計算的開發環境和軟體體系。這大大增強了CUDA的普及速度和普及成本。
NVIDIA提出的CUDA通用計算方案
CUDA能夠有效利用GPU強勁的處理能力和巨大的存儲器帶寬進行圖形渲染以外的計算,廣泛應用於圖像處理、視頻傳播、信號處理、人工智慧、模式識別、金融分析、數值計算、石油勘探、天文計算、流體力學、生物計算、分子動力學計算、資料庫管理、編碼加密等領域,並在這些領域中對CPU獲得了一到兩個數量級的加速。取得了令人矚目的成績。
CUDA應用範圍廣泛
CUDA從發布開始,到目前已經到了3.0版,從NVIDIA提出CUDA這個概念,已經有三年多時間,在這一年時間裡CUDA發展迅速,在NVIDIA CUDA網站上每天都有很多網友提交自己的CUDA軟體作品。在輕量級的小軟體中,CUDA已經如雨後春筍般的湧現,從IE圖象插件PICLENS,到PHOTOSHOP CS4 開始支持CUDA的插件。視頻編碼解碼是CUDA發展最迅速的方面之一,目前已經有大量的軟體開始支持CUDA GPU加速,同時支持CUDA應用大型軟體也出現了不少。
我們今天的測試正是使用了不同時期的4代NVIDIA顯卡代表之作,將它們圍繞CUDA-Z軟體做性能分析,通過CUDA-Z測試的底層計算能力,來判斷顯卡架構變革帶來的性能提升。
● 傳統意義上的超級計算機與GPU編程
在傳統的GPU種,Shader單元從出現(2001年DirectX 8發布標誌著Shader單元出現)到運算能力迅速提升(2007年Geforce 8800GTX發布,通用計算影響力顯著擴大)經過了很長時間。在這段時間裡,顯卡對於高端大規模並行運算是毫無價值的,即使有少量業界先行者開始了思考和研究,也無法形成對整個產業的影響力。
這個階段在超級計算機與集群中,往往要拆除「多餘的」顯卡以節能功耗,而自從AMD公司的Stream架構NVIDIA公司的CUDA架構奠定了GPU通用計算地位之後,現在的設計開始逐漸採用大量GPU來獲得更加廉價和綠色的計算能力。CUDA的強大性能引發了一場通用計算革命,這場革命將極大地改變計算機的面貌。
中國天河一號超級計算機
2009年10月29日,國防科技大學成功研製出的峰值性能為每秒1206萬億次的「天河一號」超級計算機在湖南長沙亮相。我國成為繼美國之後世界上第二個能夠研製千萬億次超級計算機的國家。天河一號採用6144個Intel通用多核處理器和5120個AMD圖形加速處理器GPU,其中GPU的型號正是大家熟悉的ATI上一代高端GPU產品HD 4870X2。截止2009年11月17日,「天河一號」超級計算機在第34屆TOP500榜單中排名第五,這也是中國超級計算機目前為止達到的最高排名成績。
隨著GPU的可編程性不斷增強,GPU的應用能力已經遠遠超出了圖形渲染任務,利用GPU完成通用計算的研究逐漸活躍起來,將GPU用於圖形渲染以外領域的計算成為GPGPU(General Purpose computing on graphics processing units,基於GPU的通用計算)。GPGPU計算通常採用CPU+GPU的異構模式,但是傳統的GPGPU受硬體可編程性和開發方式的制約,應用領域受到了限制,開發難度也很大。
2007年6月推出的CUDA是一種將GPU作為數據並行計算設備的軟硬體體系。CUDA不需要藉助於圖形學API,並採用了比較容易掌握的類C語言進行開發。開發人員能夠從熟悉的C語言比較平穩地從CPU過度到GPU,而不必重新學習語法。當然,要開發高性能的GPU通用計算程序,開發人員仍然需要掌握並行算法和GPU架構方面的基本知識。
● CUDA-Z軟體界面解析
CUDA-Z就像我們常用的CPU-Z或者GPU-Z,但是具體參數就變成了針對CUDA應用方面的信息,支持CUDA信息查詢,還可以測試電腦CUDA的速度。目前該軟體更新到了0.5.95版,該程序需要與NVIDIA公司的GeForce 8000,9000,GT100和GTX200系列,或者Quadro和Tesla卡和ION離子晶片顯卡相搭配。該程序僅2.25MB,屬於免費版系統檢測軟體。
CUDA-Z的啟動界面 它識別到筆者安裝的GeForce GTS 250顯卡
此版本可以顯示GPU核心運算能力和性能、顯存容量和帶寬。它顯示了所有CUDA技術的單精度浮點和整數運算性能。同時它也顯示了支持雙精度操作的GT200晶片的最新顯卡特性。該軟體還可以生成一個HTML格式和TXT純文本文件報告,方便用戶參考。
打開CUDA-Z軟體後,可以很清楚地看到上面的4個選項卡,分別是Core(核心)、Memory(內存,這裡值本地顯存)、Performance(性能)、About(相關信息)。通過這4個界面,我們可以很清楚地了解到自己的NVIDIA顯卡在通用計算方面的性能,當然這些都是硬體配置和理論性能。
下面,我們逐一分析每個頁面的參數及其所表示的含義。
● CUDA-Z軟體Core核心界面
這個界面是CUDA-Z軟體首先呈現給我們的界面,我們可以在這裡看到自己的GPU基本信息。在開始具體的講解之前,我們有必要簡單了解CUDA的硬體單元映射。
CUDA計算單元示意圖
1、計算單元:上圖是CUDA GPU計算單元簡圖。其中,SM代表流多處理器(Stream Multiprocessors),即CUDA的計算核心部件。每個SM又包括8個標量流處理器SP(Stream Multiprocessor),以及少量的其他計算單元。在商業宣傳中,GPU往往被說成擁有數百個「核」,這裡的「核」指的通常是SP單元的數量。實際上SP只是執行單元並不是完整的處理核心。擁有完整前端(Front-End)的處理核心,必須包括取指、解碼、分支邏輯和執行單元。因此,將SM稱為「核」更加貼切。隸屬於同一SM的8個SP共用一套取指與發射單元,也共用一塊共享存儲器。
2、線程結構:CUDA將計算任務映射為大量的可以並行執行的線程,並且硬體動態調度和執行這些線程。Kernel以線程網格(Grid)的形式組織,每個線程網格由若干個線程塊(block)組成,每個線程塊又由若干個線程(thread)組成。實質上,kernel是以block為單位執行的,CUDA引入grid只是用來表示一系列可以被並行執行的block的集合。各block是並行執行的,block間無法通信,也沒有執行順序。目前一個kernel函數中有一個grid,而未來支持DX11的硬體採用了MIMD(多指令多數據)架構,允許在一個kernel中存在多個不同的grid。
3、Block:CUDA中的kernel函數實質上是以block為單位執行的,同一block中的線程需要共享數據,因此它們必須在同一個SM中發射,而block中的每一個線程(thread)則被發射到一個SP上執行。一個block必須被分配到一個SM中,但是一個SM中同一時刻可以有多個活動線程塊(active block)在等待執行,即在一個SM中可以同時存在多個block的上下文。當一個block進行同步或者訪問顯存等高延遲操作時,另一個block就可以「趁虛而入」,佔用GPU資源,最大限度利用SM的運算能力。
4、Warp:在實際運行中,block會被分割為更小的線程束,這就是warp。線程束的大小由硬體的計算能力版本決定。在目前所有的NVIDIA GPU中,一個線程束由連續的32個線程組成。warp中的線程只與thread ID有關,而與block的維度和每一維的尺度沒有關係,這種分割方式是由硬體決定的。簡單地說,warp中包含32條線程是因為每發射一條warp指令,SM中的8個SP會將這條指令執行4遍。在硬體中實際運行程序時,warp才是真正的執行單位。雖然warp是一個由硬體決定的概念,在抽象的CUDA編程模型中並不存在,但是其影響力絕對不容忽略。
線程關係與存儲結構示意圖
5、執行模型:CUDA採用了SIMT(Single Instruction,Multiple Thread,單指令多線程)執行模型,SIMT是對SIMD(Single Instruction,Multiple Data,單指令多數據)的一種改進。SIMD中的向量寬度受到硬體制約,是顯式的,固定的,數據必須打包成向量後才能被處理。而在SIMT中,執行數據的寬度將作為硬體細節被隱藏起來,硬體可以自動地適應不同的執行寬度。例如一個block有若干個warp組成,執行寬度可以在1~512線程之間變化。如果按照SIMD模型設計CUDA,每個block的執行寬度都必須是一個warp,即32個線程,這無疑會大大降低編程的靈活性。另外一個不同是SIMD的向量中的元素相互之間可以自由通信,因為它們存在於相同的地址空間(位於同一寄存器);而SIMT中的每個線程的寄存器都是似有的,線程之間只能通過共享存儲器和同步機制進行通信。
● CUDA-Z軟體核心界面分析(二)
下面結合剛才所提及到的重要概念,讓我們進入CUDA-Z的具體界面中。第一個參數Name表示NVIDIA給GPU的命名,這裡的Name不是複雜難懂的核心代號,而是市場上經常能看到的GPU核心型號名稱。
Compute Capability翻譯為計算能力,它表示該GPU的運算層級而不是性能。在下表中大家可以找到自己的GPU型號並做對比,表中僅列出桌面級GPU,專業級GPU用戶請和桌面級晶片對對比,找到自己的計算能力定位。
GF100
2.0Compute Capability 計算能力說明計算能力1.0規格說明每個Block中的最大線程數量為512;
一個線程塊的x、y和z維最大規格為512、512和64;
線程塊網格各維度的最大規格為65535;
Warp 塊的大小是32個線程;
每個多處理器的寄存器數量是8192;
每個多處理器可用的共享存儲器數量是 16KB,組織為 16 個存儲體;
固定存儲器的總量是64KB;
固定存儲器的緩存工作區是每個多處理器8KB;|
紋理存儲器緩存工作區介於每個多處理器6到8KB之間;
每個多處理器的最大活動塊數是8;
每個多處理器的最大活動warp塊數是24;
每個多處理器的最大活動線程數是768;
對於綁定到一維CUDA數組的紋理參考,最大寬度為213;
對於綁定到二維CUDA數組的紋理參考,最大寬度為216,最大高度為215;
對於綁定到三維CUDA數組的紋理參考,最大寬度為211,最大高度為211,最大深度為 211;
對於綁定到線性存儲器的紋理參考,最大寬度為227;
內核大小限制為200萬PTX指令;
每個多處理器都由8個處理器組成,因此一個多處理器能夠在 4 個時鐘周期內處理一個warp塊的32個線程。
在計算能力1.0的基礎上;
支持在全局存儲器的32位字上操作的原子函數。
在計算能力1.1的基礎上;
支持在共享存儲器中操作的原子函數以及在全局存儲器的 64 位字上操作的原子函數;
支持warp vote函數;
每個多處理器的寄存器數量是16384;
每個多處理器的最大活動warp塊數量是32;
每個多處理器的最大活動線程數是1024。
在計算能力1.2的基礎上;
支持雙精度浮點數。
在Clock Rate中,我們可以看到自己的CUDA設備運行頻率,當然這裡的頻率已經不是GPU的核心頻率,而是流處理器頻率。因為CUDA的運算部件就是GPU中曾今的著色器——流處理器。當然這個說法也不是完全準確,因為GPU核心中的某些單元,比如說仲裁器和Atomic單元工作頻率還是和固定單元(也就是GPU核心)一樣,這些單元為流處理器提供的源源不斷的數據支持和控制,當然他們幾乎沒有參與實際的運算工作。
CUDA-Z軟體的Core核心界面
Multiprocessors代指流多處理器,也被稱為SM(Stream Multiprocessors),在CUDA架構GPU,8個流處理器為一組,當然每個SM還包括兩個SFU(Super Function Unit)特殊運算單元,GTX200架構中每個SM中增加了一個DPU(Double Precision Unit)雙精度運算單元。
Warp Size表示每個warp塊包含的線程數,也可以稱作粒度。線程發射粒度越小,代表GPU線程管理能力越強,但這會付出很大的硬體開銷代價。目前市面上的所有N卡Warp Size都是32,但特殊情況下存在Half Warp,也就是說可以16個指令發射一次,這樣可以進一步提高線程管理能力。
Regs per Block代表每個多處理器的寄存器數量。
Threads per Block代表每個Block中的最大線程數量。
Watchdog Enabled代表GPU「監護人」能力,是一種特殊的防火牆功能。
最下方的Threads Dimentions代表一個線程塊的 x、y 和 z 維最大規格。
Grid Dimentions則代表線程塊網格各維度的最大規格。
● CUDA-Z軟體Memory存儲器界面
第二個界面表示了GPU的存儲器能力,實際上也就是本地顯存狀態。
除了編程模型和執行模型,CUDA也規定了存儲器模型,線程在執行時,將會訪問到處於多個不同存儲空間的數據。
每一個線程擁有自己的私有存儲器寄存器和局部存儲器;每一個線程塊擁有一塊共享存儲器(Shared memory);最後,grid中所有的線程都可以訪問同一塊全局存儲器(Global memory)。除此之外,還有兩種可以被所有線程訪問的只讀存儲器:常數存儲器(Constant memory)和紋理存儲器(Texture memory),它們分別為不同的應用進行了優化。全局存儲器、常數存儲器和紋理存儲器中的值在一個內核函數執行完成後,將被保持,可以被同一程序中的其他內核函數調用。
最新的GF100存儲架構
寄存器(Register)是GPU片上高速緩存器,執行單元可以以極低的延遲訪問。寄存器的基本單元式寄存器文件(register file),每個寄存器文件大小為32bit。對於每個線程,局部存儲器(Local memory)也是私有的。如果寄存器被消耗完,數據將被存在局部存儲器中。共享存儲器(Shared memory)也是GPU片內的高速存儲器。它是一塊可以被同一block中的所有線程訪問的可讀寫存儲器。它的訪問速度幾乎和寄存器一樣快,所以是實現線程間通信的延遲最小的方法。全局存儲器(Global memory)位於顯存(佔據了顯存的絕大部分),CPU和GPU都可以對其進行讀寫訪問。常數存儲器(Constant memory)中的數據位於顯存,但擁有緩存加速以節約帶寬,常數存儲器是只讀的地址空間。紋理存儲器(Texture memory)也是一種只讀存儲器,由GPU負責紋理渲染的圖形專用單元發展而來,具備一些特殊功能。
存儲器界面
Total Global代表本地顯存容量,這是是扣除了2D幀後緩存的顯存容量。
Shared Per Block代表每個block的緩存容量。
Pitch代表最高點,可以理解為最大線性單位緩存,就是每個SM可以在單位周期內使用的緩存總數。
Total Constant代表連續緩存塊數。
Texture Alignment代表紋理簇大小。
GPU Overlap翻譯為GPU重疊,實際上可以理解為GPU的SLI擴展能力。
● CUDA-Z軟體Performacne性能界面
這個界面為我們展示了GPU的存儲器速度和整數浮點運算能力。是CUDA-Z最有價值的一個界面,也是它相對於其他信息類軟體最為不同的方面。
性能界面分為存儲性能和核心性能兩個部分,在介紹這部分之前,我們要先熟悉幾個專有名詞。
CUDA編程模型將CPU作為主機(Host),GPU作為協處理器(co-processor)或者稱為設備(Device),在一個系統中可以存在一個主機和多個設備。
在這個模型中,CPU與GPU協同工作各司其職。CPU負責進行對邏輯性強的事物處理和串行計算,GPU則專注於執行高度線程化的並行處理任務。CPU和GPU擁有各自獨立的存儲器地址空間:主機端的內存和設備端的顯存。CUDA對內存的操作與一般的C程序基本相同,但是增加了一種新的Pinned memory;操作顯存則需要調用CUDA API中的存儲器管理函數,這些管理操作包括開闢、釋放和初始化顯存空間,以及在主機端和設備端進行數據傳輸等。
Performacne性能界面
CUDA-Z的存儲性能測試,包括主機到設備(Host to Device)、設備到主機(Device to Host)、設備到設備(Device to Device)3個方面。其中的Pinned指頁鎖定內存(也被稱為page-locked),而Pageable指可分頁內存,它們都位於主機(CPU)端。
第二部分GPU核心性能分別測試了單精度浮點運算能力Single-precision Float、雙精度浮點運算能力Double-precision Float、32位整數運算能力32-bit Integer和24位浮點運算能力24-bit Integer。G92核心的GTS250沒有雙精度運算能力,所以這一欄為不支持。GTX200系列以上顯卡測試後可以得到相關數據。
需要注意的是這裡的測試數據都是理論值,實際運算時,會有很多不同情況出現。比如運算程序中循環和分支過多,都會嚴重影響GPU的運算能力。衰減程度視架構設計和運算器周邊資源配備而定。
下方的選項是:Update Results in Background(後臺更新測試數據),選擇後數據會實時更新。而Export按鈕則可以由用戶自行選擇生成一個TXT或者HTML報告。
最後的About界面顯示了CUDA-Z軟體的製作信息,有興趣的朋友可以點擊連結去他們的網站進行了解。
對於CUDA-Z的了解到此為止,在通用計算飛速發展的基礎上,各種對於GPU通用計算性能的測試軟體也會不斷湧現,在以後的顯卡測試中,我們會將通用計算作為重要的一個項目。
下面讓我們進入實測階段,看看NVIDIA通用計算概念提出之後誕生的四代產品(G80G92、GT215、GT200、GF100)中,誰擁有最強的通用計算性能,不同架構在遇到不同運算精度的衰減程度到底如何。
實際上在最初策劃中,本次測試應該包含G80架構的Geforce 8800GTX顯卡,但是非常遺憾我們在文章發布之前沒能及時找到這款4年前的顯卡。鑑於G80到G92架構在通用計算層面的改進非常有限,我們覺得暫時忽略這款元老級別的顯卡,下次更詳細的測試一定會彌補這個遺憾,希望讀者體諒。
性能測試的硬體、軟體平臺狀況
● 測試系統硬體環境
性能測試使用的硬體平臺由Intel Core i7-975 Extreme Edition、ASUS P6T Deluxe主板和2GB*3三通道DDR3-1600內存構成。細節及軟體 環境設定見下表:
G.SKILL F3-12800CL9T-6GBNQ
AcBel R8 ATX-700CA-AB8FB
Thermalright Ultra-120 eXtreme
我們的硬體評測使用的內存模組、電源供應器、CPU散熱器均由COOLIFE玩家國度俱樂部提供,COOLIFE玩家國度俱樂部是華碩(ASUS)玩家國度官方店、英特爾(Intel)至尊地帶旗艦店和芝奇(G.SKILL)北京旗艦店,同時也是康舒(AcBel)和利民(Thermalright)的北京總代理。
● 測試系統的軟體環境
操 作 系 統 及 驅 動作業系統Microsoft Windows 7 Ultimate RTM(中文版 / 版本號7600)主板晶片組2560*1600_32bit 60Hz
測 試 平 臺 軟 件通用計算各類合成測試軟體和直接測速軟體都用得分來衡量性能,數值越高越好,以時間計算的幾款測試軟體則是用時越少越好。
● CUDA-Z理論性能測試:設備到設備帶寬
在第一個測試中,我們將檢測4代顯卡的設備到設備(Device to Device)帶寬性能,同時為了消除頻率和計算單元數量對GPU的影響,讓讀者更好地體會架構更替帶來的變化,我們將頻率和計算單元數量全部除掉,最後形成的1個流處理器1MHz性能,是架構變化的最公正體現。
在這項測試中,我們看到GT200架構體現出了最高性能,GT240顯卡則因為頻率和規模影響沒能戰勝其他對手。但是當我們去除頻率和運算單元數量影響後,發現Fermi架構的GTX480表現最差,這個效率還無法和G80或G92架構的產品相抗衡。
● CUDA-Z理論性能測試:單精度浮點性能
第二個測試屬於更為重要的底層運算單元性能測試,它測試了GPU的單精度浮點能力,這個能力主要由流處理器結構影響。
基於同樣原因,我們將頻率和計算單元數量全部除掉,最後形成了1個流處理器1MHz性能供讀者參考。
我們從測試結果看到,Fermi架構代號為GF100的GTX480在單精度浮點運算中取得了巨大提升。這個提升大約是GT200架構的兩倍,單純從這個數據來看,這是一個可喜的結果。
但是精細到1個流處理器1MHz效率方面,我們看到情況發生了一些變化,實際上NVIDIA從G92到GF100的架構更替中,單個運算單元的單精度浮點性能沒什麼增長,如果忽略測試誤差可以得知,GT200是靠提升晶片規模或者說運算器數量來實現單精度性能提升,GF100同樣是靠這種手段。
● CUDA-Z理論性能測試:雙精度浮點性能
第三個測試同樣屬於的底層運算單元性能測試,它測試了GPU的雙精度浮點能力,這個能力主要由流處理器結構影響。在GT200架構之前,NVIDIA的通用計算GPU是沒有雙精度運算能力的,而在GT200和GF100中,雙精度能力出現並不斷提升。
基於同樣原因,我們將頻率和計算單元數量全部除掉,最後形成了1個流處理器1MHz性能供讀者參考。
按照最後的效率值看,我們認為Fermi架構的GF100桌面產品Geforce系列,在雙精度能力上和上一代產品是幾乎相同的。GT240和GTS250由於沒有雙精度計算能力,很遺憾在這項測試中只能得到0分。
當然我們知道,NVIDIA已經在Fermi架構中改進了雙精度運算單元,讓雙精度能力提升到單精度的1/2,但是NVIDIA同時發表聲明稱:Fermi提供給圖形處理的GPU產品中,這個衰減度還是1/8,和GT200一樣。只有專門面向通用計算市場的Tesla產品,才擁有1/2的衰減度。我們的測試印證了這個結果。
● CUDA-Z理論性能測試:24位整數性能
第四個測試同樣屬於的底層運算單元性能測試,它測試了GPU的24位整數運算能力,這個能力主要由流處理器結構影響。
我們知道GPU是從Shader Model 2.0時代開始從整數運算轉向浮點運算的,而此後浮點運算能力快速提升,整數性能卻被忽略。實際上在通用計算中,整數運算能力也顯得尤為重要,所以我們做了這項測試向大家展示GPU的整數性能。
基於同樣原因,我們將頻率和計算單元數量全部除掉,最後形成了1個流處理器1MHz性能供讀者參考。
不知道是我們使用的軟體版本對Fermi架構的支持問題,還是Fermi架構效率真的是這樣,在最傳統的24位整數性能測試中,GTX480面對自己的前輩顯現出了比較弱小的狀態,不但在實際性能中輸給GT200架構,最後的效率值更是不足前三代產品1/2。
我們這次測試使用的是0.5.95版本的軟體,我們期待在未來的軟體升級後,能對GTX480提供更好的支持。
關於這項結果的分析,我們暫時保留意見,在以後的文章中向各位讀者詳細講解。
● CUDA-Z理論性能測試:32位整數性能
第五個測試同樣屬於的底層運算單元性能測試,它是第四個測試的補充和完善。
GPU最初擁有的整數能力就是24位,隨後運算位數出現了提升,當然這種提升是在周邊控制單元和寄存器規模不斷提升的前提下完成的。越充裕的周邊資源,在精度提升時將帶來越小的性能衰減。
基於同樣原因,我們將頻率和計算單元數量全部除掉,最後形成了1個流處理器1MHz性能供讀者參考。
看到這個結果,相信各位讀者都會有不小的驚喜,Fermi架構的特性和設計飛方向體現地淋漓盡致,在更為科學的運算單元組織形式和更充裕的周邊資源配合下,GTX480遠遠超越了對手。這種超越不但來自於規模的放大,而且來自於底層運算單元的改進。
細心的讀者已經發現,GTX480的32位整數性能和24位整數性能實際上是一樣的,這款GPU已經達到了完整的32位整數運算能力,我們得到的差距只是測試誤差。當然我們還是不能排除軟體版本的問題,同時我們暫時保留意見,在以後的文章中向各位讀者詳細講解。
● CUDA-Z理論性能測試:性能衰減測試
最後我們要做兩個測試,測試的具體數值並不是重點,而對於趨勢的分析和認識,才是我們想讓讀者看到的。
這兩個測試分別是整數計算性能衰減和浮點計算性能衰減,為了讓大家理解更方便,圖表中的表述分別是32位整數衰減和雙精度衰減,測試結果也就是衰減比率,都是越小越好。
第一個結果,解釋了32位整數性能大幅度領先的原因,它體現出Fermi架構的GTX480可以提供和24位整數性能幾乎相同的32位整數性能,這是非常難得的,也是NVIDIA和對手AMD這幾年不斷追求的目標。
第二個結果,解釋了GTX480在雙精度方面的運算能力變化,我們認為Fermi架構應該擁有1/2的單精度/雙精度能力,只是如NVIDIA所說,這項能力在面向圖形計算的產品中,被「限制」了。基於G80核心演化的G92和GT215核心,則沒有任何雙精度浮點運算能力,也談不上衰減了。
畢竟基於市場劃分的考慮,如果廉價的Geforce產品擁有和高端Tesla產品相同的底層運算性能,將會讓Tesla銷售大打折扣,所以我們能夠理解NVIDIA在Geforce產品中做出的雙精度限制。
● CUDA-Z理論性能測試總結
今天我們和所有關注GPU發展的用戶一道體會了CUDA-Z軟體的界面、硬體架構和使用,同時在測試部分我們列出了NVIDIA近4年間,具備通用計算能力的GPU產品性能。
在性能測試中,我們不強調單個數據對產品的影響,而是使用了兩種方法讓大家對架構更替帶來的底層性能提升更加明確。首先是推算了1個流處理器1MHz性能,這個結果可以有效避免GPU運算單元規模堆砌帶來的性能提升。其次是測試了性能衰減,這個結果可以有效反映運算單元周邊資源的充裕度變化。
NVIDIA和AMD兩家公司都意識到了通用計算的重要性
值得注意的是今天我們測試的全部為底層運算單元性能,而非GPU在實際的科學運算中表現出來的性能。也就是說今天的測試偏重存儲資源對運算器效率的影響,而忽略了運算器組織結構對全局速度的影響。
從測試結果中,各位讀者可以看到這樣一條主線,那就是NVIDIA支持通用計算的GPU運算精度不斷提升,高精度下的性能衰減不斷下降。雖然在這條發展道路上有不少坎坷和曲折,但是這樣的發展方向可以保證GPU適應更多計算環境,基於GPU通用計算的軟體也會不斷增加。
在以後的通用計算測試中,我們準備逐漸開始測試一些經典的通用計算項目,如基於GROMACS分子動力學引擎的Folding@home項目等,這些項目能夠檢測到GPU在複雜運算環境下實際能力。
數不清的應用和測試在等待我們挖掘
從下周開始,中關村在線顯卡頻道將持續推出一些大家看得見用得上的顯卡通用計算程序,比如讓你的標清視頻在播放時變為高清規格;網頁打開更為流暢,Flash動畫佔用更少CPU資源;更快捷地處理視頻與照片;圖形畫質效果與遊戲AI不斷提升;甚至包括用GPU暴力破解密碼等等。
不要懷疑自己的眼睛,一個本來面向圖形世界設計的GPU,經過十多年演化已經變成了一顆並行計算處理器。它能夠做的工作,正在迅速膨脹,越來越多的軟體將基於GPU通用計算編程。在這個過程中用戶能得到的,將是越來越豐富的使用體驗和更多種多樣的產品選擇。