當前位置: 華文星空 > 知識

CUDA和OpenCL有什麽區別?

2011-07-21知識

從很多方面來看,CUDA和OpenCL的關系都和DirectX與OpenGL的關系很相像。如同DirectX和OpenGL一樣,CUDA和OpenCL中,前者是配備完整工具包、針對單一供應商(NVIDIA)的成熟的開發平台,後者是一個開放的標準。

雖然兩者抱著相同的目標:通用平行計算。但是CUDA僅僅能夠在NVIDIA的GPU硬件上執行,而OpenCL的目標是面向任何一種Massively Parallel Processor,期望能夠對不同種類的硬件給出一個相同的編程模型。由於這一根本區別,二者在很多方面都存在不同:

1)開發者友好程度。CUDA在這方面顯然受更多開發者青睞。原因在於其統一的開發套件(CUDA Toolkit, NVIDIA GPU Computing SDK以及NSight等等)、非常豐富的庫(cuFFT, cuBLAS, cuSPARSE, cuRAND, NPP, Thrust)以及NVCC(NVIDIA的CUDA編譯器)所具備的PTX(一種SSA中間表示,為不同的NVIDIA GPU器材提供一套統一的靜態ISA)程式碼生成、離線編譯等更成熟的編譯器特性。相比之下,使用OpenCL進行開發,只有AMD對OpenCL的驅動相對成熟。

2)跨平台性和通用性。這一點上OpenCL占有很大優勢(這也是很多National Laboratory使用OpenCL進行科學計算的最主要原因)。OpenCL支持包括ATI,NVIDIA,Intel,ARM在內的多類處理器,並能支持執行在CPU的並列程式碼,同時還獨有Task-Parallel Execution Mode,能夠更好的支持Heterogeneous Computing。這一點是僅僅支持數據級並列並僅能在NVIDIA眾核處理器上執行的CUDA無法做到的。

3)市場占有率。作為一個開放標準,缺少背後公司的推動,OpenCL顯然沒有占據通用平行計算的主流市場。NVIDIA則憑借CUDA在科學計算、生物、金融等領域的推廣牢牢把握著主流市場。再次想到OpenGL和DirectX的對比,不難發現公司推廣的高效和非盈利機構/標準委員會的低效(抑或謹慎,想想C++0x)。

我接觸的很多開發者(包括我本人)都認為,由於目前獨立顯卡市場的萎縮、新一代處理器架構(AMD的Graphics Core Next (GCN)、Intel的Sandy Bridge以及Ivy Bridge)以及新的SIMD編程模型(Intel的ISPC等)的出現,未來的通用平行計算市場會有很多不確定因素,CUDA和OpenCL都不是終點,我期待未來會有更好的並列編程模型的出現(當然也包括CUDA和OpenCL,如果它們能夠持續發展下去)。