GPGPU

在圖形處理器上進行通用計算

通用圖形處理器(General-purpose computing on graphics processing units,簡稱GPGPU),是一種利用處理圖形任務的圖形處理器來計算原本由中央處理器處理的通用計算任務。這些通用計算機常常與圖形處理沒有任何關係。由於現代圖形處理器強大的并行處理能力和可編程流水線,令流處理器可以處理非圖形數據。特別在面對單指令流多數據流(SIMD),且數據處理的運算量遠大於數據調度和傳輸的需要時,通用圖形處理器在性能上大大超越了傳統的中央處理器應用程序。

問題


目前擁有雙向發展的AMD更需要讓GPU有個完美的發展前景,在GPU中基於了一套完整的DirectX、OpenGL開放標準,並且在發布了開源工具、Linux開源驅動之後又繼續向外界公開GPU的微代碼。AMD認為只有開放的標準才能讓自己走得更遠。而且AMD也希望與其他廠商共同前進集思廣益,共同打造出一個完美開放式的通用計算標準,雖然NVIDIA也加入了開源的行列,但AMD認為CUDA方式並不符合自己的開放方向而放棄採用。
在通用計算和圖形處理領域裡可以說是三國鼎立。Intel堪稱通用計算的龍頭,但是只有CPU而沒有真正獨立的GPU,雖然在各種宣傳中一再強調CPU的重要性,但從其收購Havok來看,Intel自然也想在圖形處理領域裡分一杯羹。而圖形領域裡的龍頭NVIDIA則與Intel相反,其只擁有GPU而沒有完整獨立的CPU。但最近兩年的發展趨勢不難看出NVIDIA正在努力地向通用計算領域裡挺進。而AMD在成功收購ATI之後,則是同時即擁有完整獨立的GPU和CPU,而GPGPU的概念也再一次成為關注焦點。

第一個問題

GPU的競爭遠比CPU的競爭來得激烈。通用PC的CPU就只有英特爾和AMD兩家大廠。而在GPU方面領先的是Nvdia和ATi兩家廠商,但能生產中低端產品的還有Intel、S3等好幾家廠商。它們的產品雖然不如前兩家,但在很多應用方面也能滿足用戶的需要,所以N記和A記只有拚命往前跑才不會死掉。CPU廠商沒有採用GPU的先進工藝是因為CPU廠商都有自己投資的生產線,不可能一下把原來的生產線都淘汰了上新的生產線,那樣做可能連當初投入的資金都難以收回。而GPU廠商由於種種原因,一般都是自己設計由別人代工的,比如找台積電代工。代工廠商為了能接到業務,只有不停升級自己的生產設備,這樣才能生存下來。所以造成以上原因。

第二個問題

就如你所說的一樣,CPU除了處理遊戲的AI,情節等方面的數據外,對於有些圖像方面也是由它完成的。當微軟每次發布新的DirectX時,並不是每款GPU都能支持DirectX新的特性,所以有些圖像方面的任務還得由CPU來完成。還有有些特性比如重力特性以前是由CPU來完成,現在有些GPU也能支持了,這些任務就由GPU來完成了。

第三個問題

GPU相當於專用於圖像處理的CPU,正因為它專,所以它強,在處理圖像時它的工作效率遠高於CPU,但是CPU是通用的數據處理器,在處理數值計算時是它的強項,它能完成的任務是GPU無法代替的,所以不能用GPU來代替CPU。
另外
現在AMD收購了ATi顯卡晶元的設計廠商,AMD看到今後CPU和GPU只有走一條融合的道路才能在競爭中佔得先機。CPU和GPU如何配合默契才能最大地提高工作效率是AMD現在考慮的問題,也是英特爾的問題。

第四個問題

微軟發布windows7其中一個顯著特性就是聯合GPU和CPU的強大實力,提升GPU在硬體使用的價值,在Windows7中,CPU與GPU組成了協同處理環境。CPU運算非常複雜的序列代碼,而GPU則運行大規模并行應用程序。微軟利用DirectX Compute將GPU作為操作系統的核心組成部分之一。DirectX Compute。它讓開發人員能夠利用GPU的大規模并行計算能力,創造出引人入勝的消費級和專業級計算應用程序。簡單的說,DirectX Compute就是微軟開發的GPU通用計算介面,欲統一GPU通用計算標準。也就是說windows7以後GPU的硬體地位將僅次於CPU,發揮出更大的效用。

主要平台


目前廣泛使用的GPGPU平台有CUDA,OPENCL等,CUDA是基於nVIDIA公司自家GPU架構的虛擬機PTX的GPGPU平台,OpenCL是一個跨平台的GPGPU解決方案

OpenGL

開放圖形庫(英語:Open Graphics Library,縮寫為OpenGL)是個定義了一個跨編程語言、跨平台的應用程序介面(API)的規範,它用於生成二維、三維圖像。這個介面由近三百五十個不同的函數調用組成,用來從簡單的圖形比特繪製複雜的三維景象。而另一種程序介面系統是僅用於Microsoft Windows上的Direct3D。OpenGL常用於CAD、虛擬實境、科學可視化程序和電子遊戲開發。
OpenGL的高效實現(利用了圖形加速硬體)存在於Windows,很多UNIX平台和Mac OS。這些實現一般由顯示設備廠商提供,而且非常依賴於該廠商提供的硬體。開放源代碼庫Mesa是一個純基於軟體的圖形API,它的代碼兼容於OpenGL。但是,由於許可證的原因,它只聲稱是一個“非常相似”的API。
OpenGL規範由1992年成立的OpenGL架構評審委員會(ARB)維護。ARB由一些對創建一個統一的、普遍可用的API特別感興趣的公司組成。根據OpenGL官方網站,2002年6月的ARB投票成員包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans&Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems,Microsoft曾是創立成員之一,但已於2003年3月退出。

OpenCL

OpenCL(OpenComputingLanguage,開放計算語言)是一個為異構平台編寫程序的框架,此異構平台可由CPU,GPU或其他類型的處理器組成。OpenCL由一門用於編寫kernels(在OpenCL設備上運行的函數)的語言(基於C99)和一組用於定義並控制平台的API組成。OpenCL提供了基於任務分區和數據分區的并行計算機制。
OpenCL類似於另外兩個開放的工業標準OpenGL和OpenAL,這兩個標準分別用於三維圖形和計算機音頻方面。OpenCL擴充了GPU圖形生成之外的能力。OpenCL由非盈利性技術組織Khronos Group掌管。

CUDA

CUDA(ComputeUnifiedDeviceArchitecture,統一計算架構)是由NVIDIA所推出的一種集成技術,是該公司對於GPGPU的正式名稱。通過這個技術,用戶可利用NVIDIA的GeForce 8以後的GPU和較新的QuadroGPU進行計算。亦是首次可以利用GPU作為C-編譯器的開發環境。NVIDIA營銷的時候,往往將編譯器與架構混合推廣,造成混亂。實際上,CUDA可以兼容OpenCL或者自家的C-編譯器。無論是CUDA C-語言或是OpenCL,指令最終都會被驅動程序轉換成PTX代碼,交由顯示核心計算。

主要功能


通用圖形處理器(general-purpose graphics processing unit, GPGPU)是一種近年來出現的計算機晶元,它給航空航天以及防務應用中的高性能嵌入式計算帶來了重大突破。這種功能強大的晶元是在前一個十年裡作為高端計算機遊戲的圖形處理引擎引入的,是一種大規模并行處理器。它不僅有助於複雜的浮點計算處理,而且容易編程,對於廣泛的嵌入式軍用系統頗具吸引力。
同時,通用圖形處理器技術的進展基本上符合摩爾定律,也就是說,通用圖形處理器的處理能力每2年提高1倍,而尺寸每2年減小一半。現在美國的通用圖形處理器晶元的主要設計製造商有加利福尼亞州聖克拉拉的NVIDIA公司和加利福亞州桑尼維爾的先進微型器件公司(AMD公司)。AMD公司的通用圖形處理器的專門技術中,大多來自於它2006年併購的位於加拿大安大略省馬克姆的ATI技術公司

設計優勢


通用圖形處理器技術在航空航天和防務數字信號處理中得到越來越廣泛的使用,包括“開放性圖形庫”( Open Graphics Library, OpenGL)語言、NVIDIA公司創造的并行處理編程語言CUDA和最近出現的“開放性計算語言”( Open Computing Language, OpenCL)在內的軟體編程語言在其中起到了相當大的作用。
在OpenGL, CUDA和OpenCL這些軟體編程語言出現之前,大規模并行處理計算機的編程是一項困難的任務,只有為數不多的專家採用神秘的編程語言才能夠完成。這些新出現的軟體編程語言,尤其是OpenCL有助於熟悉C語言和C++語言的程序編製人員接受通用圖形處理器技術。而且,OpenCL仍在進一步開發之中,最終可能會在通用圖形處理器、CPU和FPGA中通用。這樣的開發有助於在將來開發涉及到CPU、FPGA和通用圖形處理器組合運用的嵌入式計算結構體系,全部用同樣的軟體語言編程和維護。庫圖爾認為,通用圖形處理器和FPGA不會直接而且迅速發生變化,因此CPU能夠在其中發揮重要作用,使得通用圖形處理器、CPU和 FPGA可以作為一種開放性的晶元來編程。
通用圖形處理器的開放性軟體庫的內容也在增加,使得通用圖形處理器的軟體得到更為廣泛的應用。現在也有許多Linux操作系統可以供下載和增加通用圖形處理器的材料。據斯坦說,已經採用FPGA和DSP之類的器件展開了多種類型的嵌入式計算方面的工作,這些系統採用一些專門化的處理技術。通用圖形處理器所使用的開放性的編程語言使情況發生了很大變化。雖然通用圖形處理器的編程類似於FPGA和DSP,但是使用OpenCL來編程,其專門化的程度就比較低了。
此外,通用圖形處理器的編程軟體也有助於它在嵌入計算中的發展。在通用圖形處理器中,多個處理核規則地排列在一起,因此隨著時間的推移,器件中處理核的數量會越來越多,但是通用圖形處理器的軟體沒有必要隨著處理核數量的增加而重新編寫。

工作原理


圖形處理器的實質
即使表面上看來運用通用圖形處理器進行數字信號處理並沒有利用其圖形處理能力,但是此類器件的圖形特性對於圖像裝置、雷達聲納、信號情報以及其它進行複雜計算的裝置中的信號處理具有根本性的影響。斯坦對此的解釋是,將通用圖形處理器應用於信號處理是使圖形卡逆向運行。富蘭克林說,通用圖形處理器可以用來解析事物以得到可利用的信息,傳遞周圍環境中的有用材料。通用圖形處理器所擅長的是完成兩方面的工作,一是表現事物,二是解析事物。
通用圖形處理器為軍用信號處理應用系統的設計人員提供了可以利用的圖形處理技術,幾乎免費地得到了極大的嵌入式并行處理能力。通用圖形處理器在航空航天和防務應用中的增長正是將現成的商用技術用于軍事技術領域的實例。富蘭克林說,圖形處理器的主要應用仍然是圖形處理,雖然圖形處理器製造商在計算機遊戲中所掙的美元數以十億計,但是像NVIDIA那樣的公司每研發一個系列的圖形處理器都要投入20億美元的成本。
現在,不僅通用圖形處理器晶元的應用領域從單一的圖形處理裝置擴展到了信號處理裝置,而且通用圖形處理器的軟體編程語言也在向著信號處理和通用處理擴展。類似於“開放性圖形庫”( OpenGL)那樣的圖形處理語言就可以用於通用處理。