从Folding@home项目看GPU通用计算发展
GPU通用計算發展歷程簡析
前言:Folding@home(蛋白質折疊過程研究)項目GPU客戶端的推廣,使得普通玩家也有機會體會GPU通用運計算能力,讓顯卡也能成為支持公益事業的重要力量。分布式計算的原理讓普通PC在安裝一個簡單的軟件后,即可與互聯網相連接,變身為強大的超級計算機,高深的大規模并行計算由此變得平易近人。在體會GPU通用計算能力之后,我們對當今GPU的發展方向和整個行業的變化速度感慨萬千……
?
??? ● GPU通用計算發展歷程簡析
??? Folding@Home是一款基于分布式原理的蛋白質折疊計算軟件,通過這個軟件可以讓全球眾多空閑的PC連接起來,一起并行計算各種蛋白質折疊,從而縮短人類對于癌癥、阿茲海默癥、帕金森氏癥等的攻克過程。該項目在幾年前一直是依靠CPU運算提供支持,而自從AMD和NVIDIA的顯卡加入運算后,項目進行速度獲得了極大提升。全世界無數玩家用自己的顯卡為醫學研究做出了重大貢獻。
10年前我們所有人都認為顯卡服務于制圖、動畫、游戲等電子娛樂領域,這沒有錯。因為GPU(Graphic Processing Unit 圖形處理器)發明的目的就是為了應對繁雜的3D圖像處理。GPU的工作通俗的來說就是完成3D圖形的生成,將圖形映射到相應的像素點上,對每個像素進行計算確定最終顏色并完成輸出。但是誰都沒有想到10年后的今天,GPU的內部架構和應用范圍已經發生了翻天覆地的變化。
NVIDIA和ATI在通用計算方面競爭激烈
最早的圖形處理器其實就是在卡上搭配了一個幾何加速器,用來提高頂點的吞吐量和加速幾何變換、打光等操作,這樣的搭配方式成本很高,只有在工作站產品上才會看到。3dfx的Voodoo1當初之所以能取代巨大反響,在于它能在當時的制造工藝條件下提供一個可以解決3D渲染流水線大部分問題的方案:Setup、紋理映射、Z-buffer等等。但此時的GPU依然沒有解決圖形處理中CPU負擔過重的問題,同時GPU還不具備著色器(Shader)單元。
NVIDIA公司在1999年發布GeForce 256圖形處理芯片時首先提出GPU的概念。GPU使顯卡減少了對CPU的依賴,并進行部分原本CPU的工作,尤其是在3D圖形處理時。GPU所采用的核心技術有硬體T&L、立方環境材質貼圖和頂點混合、紋理壓縮和凹凸映射貼圖、雙重紋理四像素256位渲染引擎等,而硬體T&L技術可以說是GPU的標志。
傳統的GPU渲染流水線
過去10年間,圖形處理器(GPU)在臺式電腦中的使用已非常普遍。GPU具有強大的計算能力和很高的存儲帶寬,而這兩點對于高性能三維圖形應用是至關重要的。以往GPU計算都是專用于這些應用的,但現在新型的GPU允許具備一定的用戶可編程性,這就使得GPU能夠面向更通用的計算。
2001年,NIVIDA公司的GeForce 3首先引入了可編程的頂點著色器(Vertex Shader)單元。緊接著在2002年,可編程的像素著色器(Pixel Shader)單元也加入了GPU。對GPU通用計算進行深入研究從2003年開始,并提出了GPGPU概念,前一個GP則表示通用目的(General Purpose),所以GPGPU一般也被稱為通用圖形處理器或通用GPU。
GPU逐漸體現出強大的浮點運算能力
隨著GPU計算能力的不斷增長,一場GPU革命的時機也成熟了。GPU已經從由若干專用的固定功能單元(Fixed Function Unit)組成的專用并行處理器,進化為了以通用計算資源為主,固定功能單元為輔的架構,這一架構的出現奠定了GPGPU的發展基礎。在SIGGRAPH 2003大會上,許多業界泰斗級人物發表了關于利用GPU進行各種運算的設想和實驗模型。SIGGRAPH會議還特地安排了時間進行GPGPU的研討交流。
可惜的是當時的GPU大多只能支持Shader Model 2,無論在指令長度還是流控制方面都無法滿足最基本的通用計算需要,這讓GPGPU的研究進度變得緩慢。到了DirectX 9 Shader Model 3.0時代,新的Shader Model在指令槽、流控制方面的顯著增強使得對應GPU的可編程性能得到了大大的提升。GPGPU的研究由此進入快車道。
SIGGRAPH 2003大會開始深入研究GPU通用計算
GPGPU項目研究中的先行者是英國劍橋大學的BionicFx課題組。早在2004年9月,劍橋大學的BionicFx課題組便宣布在NVIDIA的GeForce FX 5900產品中實現了專業的實時音頻處理功能,并且準備進行商業化的運作,對其產品進行銷售,給音樂創作者帶來實惠。
??? 在隨后的一段時間,GPGPU進入了深入研究階段,但是由于編程語言架構和編程環境都難以通用,該領域的發展能力受到廣泛質疑。就在人們認為GPGPU的研究即將偃旗息鼓的時候,ATI在2006年8月驚人地宣布即將聯手斯坦福大學在其Folding@Home項目中提供對ATI Radeon X1900的支持。在顯卡加入Folding@Home項目后,科研進展速度被成倍提升,人們第一次感受到了GPU的運算威力。
??? 毫無疑問,在GPGPU研究上,ATI跨出了極具意義的一步。同時將GPGPU的應用領域和普及程度推向高潮。隨后NVIDIA憑借GeForce 8800GTX這款業界首個DirectX 10 GPU,在GPU通用計算方面實現了大步跨越,特別是CUDA概念的提出(該工具集的核心是一個C語言編譯器),在新的通用計算領域后來居上。
GPU計算開始在更多領域發揮作用
如圖,GPU在很多領域的研究中已經開始發揮作用。支持DirectX 10顯卡的首次出現是一個分水嶺:過去只能處理像素或者只能處理頂點的專門功能處理單元被通用的統一著色器架構(Unified Shader Architecture)取代了,開發人員可以更輕松的對統一著色器進行控制。以AMD R600和NVIDIA G80為代表的DirectX10時代GPU能夠提供了超越以往任何GPU的能力:它們擁有數百個功能單元,能夠處理很多過去只能在CPU上運行的并行問題。
GPGPU將應用范圍擴展到了圖形之外,無論是科研教育、財務計算,還是在工業領域,GPGPU都得到了廣泛的使用,關于它的科研成果和新應用模式也層出不窮。許許多多令人鼓舞的結果已經表明:將GPU用于解決數據并行計算問題可以明顯提高系統的運行速度。
| 濮元愷所寫過的技術分析類文章索引(持續更新) | |||
| ?NVIDIA/ATI命運轉折 | 改變翻天覆地 | 顯卡只能玩游戲? 10年GPU通用計算回顧 | 通用計算對決? |
| 從裸奔到全身武裝 | AMD統一渲染架構 | 淺析DirectX11技術 | 摩爾定律全靠它 |
| 我就喜歡 | 別浪費你的電腦 分布式計算在中國 | 從Folding@home項目 | ?Computex獨家泄密 解析AMD下代GPU |
Folding@Home項目原理與特性
??? ● Folding@Home項目原理與特性
Folding@home是一個研究蛋白質折疊,誤折,聚合及由此引起的相關疾病的分布式計算項目。我們使用聯網式的計算方式和大量的分布式計算能力來模擬蛋白質折疊的過程,并指引我們近期對由折疊引起的疾病的一系列研究,找到相關疾病的發病原因和治療方法。
Folding@home能了解蛋白質折疊、誤折以及相關的疾病。目前進行中的研究有:癌癥、阿茲海默癥(老年失智癥)、亨廷頓病、成骨不全癥、帕金森氏癥、核糖體與抗生素。
Folding@Home項目簡介
您可以在斯坦福大學官方網頁上下載并運行客戶端程序,隨著更多志愿者的計算機加入,此項目計算的速度就越快,就會計算出蛋白質在更長時間內的折疊,距離科學家找到最終答案也就越來越近。如果蛋白質沒有正確地折疊將會使人得一些病癥:如阿茲海默氏癥(Alzheimers)、囊腫纖維化(Cystic fibrosis)、瘋牛病(Mad Cow, BSE)等, 甚至許多癌癥的起因都是蛋白質的非正常折疊。
??? Folding@home所研究的是人類最基本的特定致病過程中蛋白質分子的折疊運動。項目的核心原理在于求解任務目標分子中每一個原子在邊界條件限制下由肽鍵和長程力等作用所導致的運動方程,進而達到實現模擬任務目標分子折疊運動的目的。每一個原子背后都附庸這若干個方程,每一個方程都可以轉換成一組簡單的向量指令。同時由于長程力的影響,條件分支也隨處可見,Folding@home在GPU使用量上也要大于圖形編程。
??? Folding@home的客戶端利用了經修改的TINKER、GROMACS、AMBER及CPMD這四款分子模擬程式進行運算,并會在許可的情況下作出優化,以把運算速度加快。這四款模擬程式也被修改成多個不同版本,供多款作業平臺使用。Folding@Home中最主要的核心是GROMACS,這是一個經過特殊許可的非GPL版本的GROMACS作為客戶端。GROMACS全名為:GROningen MAchine for Chemical Simulations,這是一款由荷蘭Groningen大學開發的分子動力學模擬軟件包,現在則主要由Uppsala大學, 斯德哥爾摩大學 以及馬普學會聚合物研究所共同維護。
在分子動力學領域廣泛使用的GROMACS引擎
??? 由于針對不同的系統其代碼進行了高度優化,GROMACS是目前最快的分子動力學模擬軟件。此外,由于支持不同的分子力場以及按照GPL協議發行,GROMACS擁有很高的可定制性。GROMACS目前最新版本為4.07,可以到官方網站下載并自行編譯。GROMACS支持并行/網格計算擴展,可靈活搭配MPI規范的并行運算接口,如MPICH、MPICH2、MPILAM、DeoinMPI等。國內也有很多分子動力專業人員同樣使用GROMACS做研究,而且幾乎是全部,GROMACS幾乎成為模擬蛋白質折疊領域內的標準。
蛋白質在生物學中充當如此重要的角色, 科學家開始對人類的基因組開始排序。基因組實際上是一張跟蛋白質有關的“藍圖”——基因組包含遺傳密碼(DNA Code),這些密碼決定著氨基酸串成蛋白質長鏈的順序。最令人驚訝的不僅是蛋白質本身能夠自我組裝——折疊,而且是它們自我組裝的速度是如此之快:一些蛋白質能夠在百萬分之一秒之內完成自我折疊。
雖然這個時間在人的時間表中是非常快的,但是用計算機進行模擬,這個時間就顯得相當長了。實際上,計算機模擬1納秒(1/1,000,000,000秒) 需要花費大約一天的時間。不幸的是,蛋白質折疊是以數十毫秒(10000納秒)作為時間表的。所以我們必須借助分布動力學——一種“將工作單元分解成多個部分,使用多臺處理器來模擬”的辦法來沖破毫秒障礙。
產品:GTX480 極速版?索泰?顯卡?Folding@Home項目發展概況
????● Folding@Home項目在中國的發展與概況
2006年9月底,ATI宣布了通用計算GPGPU架構,并得到了斯坦福大學Folding@Home項目的大力支持,加入了人類健康研究。2007年3月22日,PS3正式加入史丹佛大學分布式運算研究計劃,至今已有超過百萬名 PS3 玩家注冊參與。NVIDIA于2008年6月宣布旗下基于G80及以上核心的顯卡產品都支持該項目的通用計算,更是對分布式計算的重要貢獻。
中關村在線搭建的單卡FAH項目運算平臺
Folding@home在自身定位明確、成功發展的基礎下,通過斯坦福大學的大力推廣,已經獲得了全世界廣泛認同。而近期PS3和GPU的參與更是將Folding@home的運算能力推向高峰。值得一提的是NVIDIA在2008年6月果斷宣布加入Folding@home項目,至今已經為該項目提供了超過2 PFlops運算能力。
??? 目前Folding@Home已經成為全世界最有影響力和公信力的項目,同時是各大廠商和機構鼎力支持的項目,當然它毫無疑問地擁有最廣大的志愿者團隊——截止2010年4月18日,全球共計1,396,683人參與該項目,最近的統計顯示志愿者貢獻的總運算能力已經達到了5PFlops,遠超現在全世界最快的超級計算機IBM Roadrunner(最高性能1.026PFlops)。
??? 該項目在中國擁有約2000多名參與者,其中最強大的China Folding@Home Power(Folding@Home中國力量,團隊編號3213)團隊已經擁有2585人,最近活躍用戶200人以上,目前貢獻計算量排名世界第47位,團隊整體運算能力約為50到100TFLOPS。
目前的GPU通用計算發展迅速,在通用性方面已經與CPU不相上下,在浮點運算量方面則遠超CPU。不僅僅是我們看到的Folding@home項目支持GPU運算,在2008年5月,法國原子能委員會等機構正準備打造一臺新的超級計算機,其中不但會有Intel的下一代四核心處理器,更會加入192顆GTX200圖形核心。在3GHz頻率下,每顆處理器的浮點運算能力為96GFLOPS,1068顆Nehalem Bloomfield四核心處理器合計約103TFLOPS,而192顆GT200則能提供192TFLOPS。雖然GPU的數量只有CPU的18%,但計算能力卻比后者高出86.4%,單顆對比的話更是將近10:1。
下面節選一段近期的Folding@home項目論文(第61號論文):
??? 利用計算篩選確定流感紅血球凝集素蛋白質重要變異并公開其結構(26XX任務段的成果):
??? 下載地址:http://psb.stanford.edu/psb-online/proceedings/psb09/kasson.pdf?
??? 流感紅血球凝集素蛋白質的主要作用是綁定目標細胞,并破壞細胞膜將病毒基因注入目標細胞。
??? 因為長時間以來H5N1和H1、H3以及乙型流感病毒外殼的細微差別很難被精確的區分出來,通過大致結構的區別并不能使人們對掌握H5N1對人類細胞的入侵過程。通過2600+任務段的模擬,目前斯坦福已經完成了各種流感病毒外殼結構來的比對和篩選,對應的病毒對人類細胞的完整侵蝕過程的模擬目前仍在繼續中。
產品:GTX480 極速版?索泰?顯卡?將GPU功能單元映射為通用單元
??? ● 將GPU功能單元映射為通用單元
基于GPU的計算從概念上講很容易理解,并且現有多種高級語言和軟件工具可以簡化GPU的編程工作。但是開發人員必須首先了解GPU在圖像繪制過程中是如何工作的,然后才能確定可用于計算的各個組件。為了著手把一般性的計算映射到GPU的專用硬件中,必須先確定GPU提供的各種計算資源,下面我們將簡單了解GPU通用計算中各硬件系統的作用。以下資料由英國NVIDIA公司的開發工程師Mark Harris提供。
NVIDIA和ATI的GPU流處理器設計
可編程并行處理器:GPU有兩類可編程處理器,即三角頂處理器和像素處理器。頂點處理器負責處理頂點數據流(由位置、顏色、標準向量和其它屬性),它們是組成三維幾何模型的元素。依據每個頂點相對于其視點的位置,頂點處理器用頂點漸變程序對其轉換。
??? 像素處理器將像素漸變程序用于處理每個輸出像素以確定其最后的顏色。頂點處理器和像素處理器是完全可編程的,可以對四個不同的數值同時執行一條指令。這是因為圖形的基本要素或者是位置(X、Y、Z、W)或者是顏色(紅、綠、藍、alpha)。
ATI最為喜歡的SIMD結構流處理器
光柵處理器:在頂點處理器轉換完頂點之后,每三個一組的頂點就用來計算一個三角形。從這個三角形出發,光柵處理器生成一個像素流。該光柵處理器的功能非常專一,就是表現這些三角形,因而不是用戶可編程的,但可將它看成是一個地址內插器和一個數據放大器(因為它根據幾個三角頂就可生成許多像素)。
紋理單元:頂點處理器和像素處理器能以紋理(圖像)的形式訪問存儲器。該紋理單元可被看成是一個只讀存儲器接口。當前的GPU可以將一個輸出圖像寫到紋理結構存儲器,而不是寫到幀緩存器。這個紋理渲染功能是基本的,因為它是將GPU輸出直接反饋到輸入的唯一現有機制,這個過程無須返回到宿主處理器。紋理渲染可被看成是一個只寫存儲器接口。
本次Fermi架構顯卡所使用的CUDA運算核心
數據類型:當涉及數據類型時,現有的GPU比CPU更受限制。它們只支持定點或浮點形式的實數。如果沒有一些圖形編程方面的知識,初涉GPU編程可能會感覺麻煩。在CPU和GPU之間做某些非常簡單的類比是有益的。
GPU紋理 = CPU矩陣:GPU上的基本矩陣數據結構是紋理(圖像)和頂點矩陣。在CPU上用到一個數據矩陣的地方,也就是在GPU上用到一個紋理的地方。
GPU漸變程序 = CPU內循環:在CPU中,一個循環可重復用于一個數據流(存在一個矩陣內)內的各個元素,用該循環體內的各條指令處理這些元素。在GPU中,類似的指令可寫在一個漸變程序之內,并自動應用到相應數據流的所有元素上。在這個計算中并行處理的數量取決于該GPU中處理器的數量。
紋理渲染 = 反饋:為了在GPU中實現反饋,紋理渲染功能必須用來將一個碎片程序的結果寫到存儲器中,該存儲器隨后可用做未來其它程序的輸入。
幾何光柵 = 計算啟動:為了啟動GPU中的計算,只需畫個簡單的幾何圖形。頂點處理器將轉換它,而光柵單元將決定它所涉及的輸出緩存器中的像素值,并為每個元素產生一個碎片。由于表示一個矩陣的方形碎片流中的每個元素一般都要經過處理,因此在GPU編程中啟動通用計算最常見的手段就是用一個方塊。
產品:GTX480 極速版?索泰?顯卡?GPU內部通用計算代碼運算過程
??? ● GPU內部通用計算代碼運算過程
在繪制圖像時,GPU首先接收宿主系統以三角頂點形式發送的幾何數據。這些頂點數據由一個可編程的頂點處理器進行處理,該處理器可以完成幾何變換、亮度計算等任何三角形計算。接下來,這些三角形由一個固定功能的光柵器轉換成顯示在屏幕上的單獨“碎片(fragment)”。在屏幕顯示之前,每個碎片都通過一個可編程的碎片處理器計算最終顏色值。
計算碎片顏色的運算一般包括集合向量數學操作以及從“紋理”中提取存儲數據,“紋理”是一種存儲表面材料顏色的位圖。最終繪制的場景可以顯示在輸出設備上,或是從GPU的存儲器重新復制到宿主處理器中。
兩向量相加的簡單Brook代碼示例
圖為執行兩向量相加的簡單Brook代碼示例。Brook支持所有帶附加流數據的C句法,流數據存儲于GPU的存儲器中,而核函數也在GPU上執行。可編程頂點處理器和碎片處理器提供了許多相同的功能和指令集。但是,大部分GPU編程人員只將碎片處理器用于通用計算任務,因為它通常提供更優的性能,而且可以直接輸出到存儲器。
利用碎片處理器進行計算的一個簡單例子是對兩個向量進行相加。首先,我們發布一個大三角形,其所包含的碎片數量和向量大小(容納的元素)相同。產生的碎片通過碎片處理器進行處理,處理器以單指令多數據(SIMD)的并行方式執行代碼。進行向量相加的代碼從存儲器中提取兩個待加元素,并根據碎片的位置進行向量相加,同時為結果分配輸出顏色。輸出存儲器保存了向量和,這個值在下一步計算中可以被任意使用。
可編程碎片處理器的ISA類似于DSP或Pentium SSE的指令集,由四路SIMD指令和寄存器組成。這些指令包括標準數學運算、存儲器提取指令和幾個專用圖形指令。
產品:GTX480 極速版?索泰?顯卡?更加優秀的通用計算API
??? ● 更加優秀的通用計算API
??? 優秀的編程模型能給幫助基于此架構的產品迅速發展,在這個領域各家廠商都盡全力推廣自己的編程架構,因為只有程序員認可這套編程模型,最終的產品才有生命力。目前的“OpenCL”、“Stream”、“Compute Shader”和“CUDA模型C語言包”都是面向異構系統通用目的并行編程的開放式、免費標準,也是統一的編程環境。便于軟件開發人員為高性能計算服務器、桌面計算系統、手持設備編寫高效輕便的代碼,而且廣泛適用于多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP)等其他并行處理器,在游戲、娛樂、科研、醫療等各種領域都有廣闊的發展前景。
眾多廠商鼎力相助的OpenCL工作組
OpenCL實際上是針對異構系統進行并行編程的一個全新的API,OpenCL可以利用GPU進行一些并行計算的工作。我們知道,圖形里面有很多API,比如OpenGL是針對圖形的,而OpenCL則是針對并行計算的API。OpenCL開發人員可以利用GPU和CPU的計算能力,把GPU和CPU異構的系統運用在很多并行計算的領域。
Stream是AMD提出的GPGPU編程接口。基本上還是基于一種傳統CPU的一種方式,Stream主要包括CAL與Brook+。CAL是一套指令集,可以用匯編語言的方式來開發軟件,然而我們匯編方式開發軟件的話,對搞計算的人來說不大現實,讓他們用匯編語言來說的話可能確實是一個折磨。Brook+是斯坦福大學開發的,它是類似于C語言的東西,是把底層GPGPU的計算方式類似于C的這種語言,這里要說明的是Brook+不是C語言而是類C語言,語法和C語言比較類似。
Compute Shader技術是微軟DirectX 11 API新加入的特性,在Compute Shader的幫助下,程序員可直接將GPU作為并行處理器加以利用,GPU將不僅具有3D渲染能力,也具有其他的運算能力,也就是我們說的GPGPU的概念和物理加速運算。多線程處理技術使游戲更好地利用系統的多個核心。Compute Shader主要特性包括線程間數據通信、一整套隨機訪問和流式I/O操作基本單元等,能加快和簡化圖像和后期處理效果等已有技術,也為DX11級硬件的新技術做好了準備,對于游戲和應用程序開發有著很重大的意義。
而NVIDIA提出的CUDA架構主要包含兩個方面:一個是ISA指令集架構;第二硬件計算引擎;實際上是硬件和指令集。也就是說我們可以把CUDA看作是與X86或者cell類似的架構,但是CUDA基于GPU,而不是傳統的CPU。實際上CUDA是NVIDIA的GPGPU模型,它使用C語言為基礎,可以直接以大多數人熟悉的C語言,寫出在顯示芯片上執行的程序,而不需要去學習特定的顯示芯片的指令或是特殊的結構。
OpenCL與CUDA在編程模式方面的區別
OpenCL是一個API,在第一個級別,CUDA架構是更高一個級別,在這個架構上不管是OpenCL還是DX11這樣的API,還是像C語言、Fortran、DX11 Computer Shader,都可以支持。作為程序開發員來講,一般他們只懂這些語言或者API,可以采用多種語言開發自己的程序,不管他選擇什么語言,只要是希望調用GPU的計算能,在這個架構上都可以用CUDA來編程。CUDA架構與OpenCL是包容關系,我們把他們放在同一級別進行討論本來就是錯誤的,與OpenCL在同一級別不是CUDA架構,而是CUDA的C語言包,也就是我們常說的CUDA版本。
Folding@home項目的GPU客戶端版本是最早利用Stream來開發的應用軟件之一,當然也是名氣最大的。NVIDIA進入以后使用CUDA的語言來寫Folding@home客戶端的軟件,CUDA的C語言包可以說是真正在GPU上運行的C語言,脫離了對圖形學API的依賴,它近乎完美地使用了C語言的存儲體系,把大部分的數據盡可能的在Shared memory上進行計算。極大提高GPU運算效率。
不管C語言還是Fortran,與OpenCL、Computer Shader這種API都是長期共存的關系。通過GPU通用編程語言的迅速發展,我們非常欣喜地看到越來越多的通用計算程序出現,顯卡已經遠遠不止是娛樂工具,而變身為高性能并行計算機。優秀的編程模型配合高性能硬件系統,讓個人和小型科研機構也可以非常輕松地配置自己的高性能計算機平臺。
產品:GTX480 極速版?索泰?顯卡?著色器模型變化歷程與總結
??? ● 著色器模型變化歷程與總結
??? 在圖形渲染中,GPU中的可編程計算單元被稱為著色器(Shader),著色器的性能由DirectX中規定的Shader Model來區分。GPU中最主要的可編程單元式頂點著色器和像素著色器。
??? 為了實現更細膩逼真的畫質,GPU的體系架構從最早的固定單元流水線到可編程流水線,到DirectX 8初步具備可編程性,再到DirectX 10時代的以通用的可編程計算單元為主、圖形固定單元為輔的形式,最新的DirectX 11更是明確提出通用計算API Direct Compute概念,鼓勵開發人員和用戶更好地將GPU作為并行處理器使用。在這一過程中,著色器的可編程性也隨著架構的發展不斷提高,下表給出的是每代模型的大概特點。
??? 表:Shader Model版本演化與特點
| Shader Model | GPU代表 | 顯卡時代 | 特點 |
| ? | 1999年第一代NV Geforce256 | DirectX 7 1999~2001 | GPU可以處理頂點的矩陣變換和進行光照計算(T&L),操作固定,功能單一,不具備可編程性 |
| SM 1.0 | 2001年第二代NV Geforce3 | DirectX 8 | 將圖形硬件流水線作為流處理器來解釋,頂點部分出現可編程性,像素部分可編程性有限(訪問紋理的方式和格式受限,不支持浮點) |
| SM 2.0 | 2003?年 ATI?R300 和第三代NV Geforce FX | DirectX 9.0b | 頂點和像素可編程性更通用化,像素部分支持FP16/24/32浮點,可包含上千條指令,處理紋理更加靈活:可用索引進行查找,也不再限制[0,1]范圍,從而可用作任意數組(這一點對通用計算很重要) |
| SM 3.0 | 2004年 第四代NV Geforce 6 和?ATI X1000 | DirectX 9.0c | 頂點程序可以訪問紋理VTF,支持動態分支操作,像素程序開始支持分支操作(包括循環、if/else等),支持函數調用,64位浮點紋理濾波和融合,多個繪制目標 |
| SM 4.0 | 2007年 第五代NV G80和ATI R600 | DirectX 10 2007~2009 | 統一渲染架構,支持IEEE754浮點標準,引入Geometry Shader(可批量進行幾何處理),指令數從1K提升至64K,寄存器從32個增加到4096個,紋理規模從16+4個提升到128個,材質Texture格式變為硬件支持的RGBE格式,最高紋理分辨率從2048*2048提升至8192*8192 |
| SM 5.0 | 2009年 ATI RV870 和2010年NV GF100 | DirectX 11 2009~ | 明確提出通用計算API Direct Compute概念和Open CL分庭抗衡,以更小的性能衰減支持IEEE754的64位雙精度浮點標準,硬件Tessellation單元,更好地利用多線程資源加速多個GPU |
??? 傳統的分離架構中,兩種著色器的比例往往是固定的。在GPU核心設計完成時,各種著色器的數量便確定下來,比如著名的“黃金比例”——頂點著色器與像素著色器的數量比例為1:3。但不同的游戲對頂點資源和像素資源的計算能力要求是不同的。如果場景中有大量的小三角形,則頂點著色器必須滿負荷工作,而像素著色器則會被閑置;如果場景中有少量的大三角形,又會發生相反的情況。因此,固定比例的設計無法完全發揮GPU中所有計算單元的性能。
??? 頂點著色單元(Vertex Shader,VS)和像素著色單元(Pixel Shader,PS)兩種著色器的架構既有相同之處,又有一些不同。兩者處理的都是四元組數據(頂點著色器處理用于表示坐標的w、x、y、z,但像素著色器處理用于表示顏色的a、r、g、b),頂點渲染需要比較高的計算精度;而像素渲染則可以使用較低的精度,從而可以增加在單位面積上的計算單元數量。在Shader Model 4.0之前,兩種著色器的精度都在不斷提高,但同期頂點著色器的精度要高于像素著色器。
??? Shader Model 4.0統一了兩種著色器,所以頂頂點和像素著色器的規格要求完全相同,都支持32位浮點數。這是GPU發展的一個分水嶺;過去只能處理頂點和只能處理像素的專門處理單元被統一之后,更加適應通用計算的需求。
??? DirectX 11提出的Shader Model 5.0版本繼續強化了通用計算的地位,微軟提出的全新API——Direct Compute將把GPU通用計算推向新的巔峰。同時Shader Model 5.0是完全針對流處理器而設定的,所有類型的著色器,如:像素、頂點、幾何、計算、Hull和Domaim(位于Tessellator前后)都將從新指令集中獲益。
產品:GTX480 極速版?索泰?顯卡?GPU通用計算正在快速普及
??? ● GPU通用計算正在快速普及
??? GPU是半導體芯片領域少數發展迅速同時應用范圍得到極大擴展的芯片。自誕生起,GPU就將摩爾定律的定義大大擴展。研究表明,從1993年開始,GPU的性能以每年2.8倍的速度增長,這個數字大大超過了PC其他子系統的發展速度。在高密度的大規模并行運算領域,GPU已經完全有實力和傳統的CPU競爭。
GPU運算能力約為同等級CPU十倍
??? 截止2008年末,全球擁有1億顆以上支持通用計算與編程的GPU產品,開發人員超過了2.5萬人,全世界有50多所大學開設了GPU并行編程與應用課程,包括中國科學院、清華大學等,一個基于GPU的計算生態圈已初步形成。普通玩家也應該順應潮流,不要固步自封只是把GPU當成娛樂工具,或者把CPU當作電腦中唯一的運算處理器,在更多領域大膽嘗試GPU這種高密度運算器的優勢。相信通用計算項目在不久的將來也必將成為顯卡決勝的新戰場。
中關村在線顯卡頻道搭建的平臺
??? 上圖為中關村在線顯卡頻道搭建的Folding@hemo項目協同工作平臺,我們使用了一顆超頻到3.5GHz的i7-870處理器和一塊索泰公版GTX480顯卡。這套平臺同時運行了最近的GPU3客戶端和CPU-SMP2客戶端,并且使用了第三方FAHSPY軟件進行管理監控。我們可以看到平臺的用戶名為zol.com.cn,加入團隊3213(中國隊)。借助于多線程處理器和Fermi架構顯卡的幫助,這套平臺總運算速度達到了27454PPD。
??? 如果你沒有條件或者沒有必要購買超級計算機,又非常希望體驗GPU運算帶來的快感,參與體驗分子動力學原理的生命科學類Folding@home項目就是最好的選擇。只需要在斯坦福官方下載一個GPU版本客戶端,并使用一塊Geforce 8系列或者Radeon HD2系列或更高級別的顯卡,你的電腦即可變身為一臺高性能計算機。同時該項目屬于志愿者分布式計算項目,加入這些有益于人類的開放性項目后,你的幫助可以改變世界。
這篇文章參考和引用了很多文獻,同時也是我個人通過Folding@home項目對GPU通用計算從淺顯認識到逐漸熟悉的過程,在這里感謝幫助過我的老師和朋友們,當然文章的完成更離不開China Folding@Home Power(Folding@Home中國3213團隊)那些充滿理想、守望信念的志愿者們。
??? 附:在中國分布式計算總站,我們為讀者提供了比較簡潔明快的參與教程,很適合新手加入Folding@home項目:
????http://www.equn.com/forum/thread-21586-1-1.html
=============================================================
本文參考文獻:
[1]?NVIDIA?GeForce 8800 GTX測試報告
[2] NVIDIA's GT200——Inside a Parallel Processor
[3] 如何通過編程將GPU用于通用計算任務
[4] 現代GPU可解決數據并行處理問題
[5] 誰主沉浮 Open CL與CUDA架構深入解析
總結
以上是生活随笔為你收集整理的从Folding@home项目看GPU通用计算发展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vf计算机教程,VF教程,打印版.pdf
- 下一篇: 第一次使用CoolEdit Pro将歌曲