什麼是OpenCL?程序員
是由蘋果(Apple)公司發起,業界衆多著名廠商共同製做的面向異構系統通用目的並行編程的開放式、免費標準,也是一個統一的編程環境。便於軟件開發人員爲高性能計算服務器、桌面計算系統、手持設備編寫高效輕便的代碼,並且普遍適用於多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP)等其餘並行處理器,在遊戲、娛樂、科研、醫療等各類領域都有廣闊的發展前景。編程
什麼是CUDA?服務器
CUDA是一個基於NvidiaGPU的並行計算的架構。CUDA最主要的包含兩個方面:一個是ISA指令集架構;第二硬件計算引擎;其實是硬件和指令集。也就是說咱們能夠把CUDA看作是與X86或者cell相似的架構,可是是基因而GPU,而不是傳統的CPU。架構
OpenCL其實是什麼?ide
OpenCL其實是針對異構系統進行並行編程的一個全新的API,OpenCL能夠利用GPU進行一些並行計算的工做。工具
OpenGL是針對圖形的,而OpenCL則是針對並行計算的API。性能
OpenCL開發的過程當中,技術平臺均爲NVIDIA的GPU,實際上OpenCL是基於NVIDIA GPU的平臺進行開發的。另外OpenCL的第一次演示也是運行在NVIDIA的GPU上。spa
從本質上來講,OpenCL就是一個至關於Windows平臺中DirectX那樣的技術。或者說,它是一個鏈接硬件和軟件的API接口。在這一點上,它和OpenGL相似,不過OpenCL的涉及範圍要比OpenGL大得多,它不只是用來做用於3D圖形。若是用一句話描述,OpenCL的做用就是經過調用處理器和GPU的計算資源,釋放硬件潛力,讓程序運行得更快更好。設計
CUDA其實是什麼?視頻
CUDA架構是原生的,專門爲計算接口而建造的這樣的一個架構,這種硬件架構包括指令集都是很是適合於這種並行計算,爲異構計算而設計的一整套的架構。CUDA架構能夠支持API,包括OpenCL或者DirectX,同時CUDA還支持C、C++語言,還包括Fortran、Java、Python等各類各樣的語言。
OpenCL與CUDA的關係是什麼?
CUDA和OpenCL的關係並非衝突關係,而是包容關係。OpenCL是一個API,在第一個級別,CUDA架構是更高一個級別,在這個架構上不論是OpenCL仍是DX11這樣的API,仍是像C語言、Fortran、DX11計算,均可以支持。做爲程序開發員來說,通常他們只懂這些語言或者API,能夠採用多種語言開發本身的程序,無論他選擇什麼語言,只要是但願調用GPU的計算能,在這個架構上均可以用CUDA來編程。
關於OpenCL與CUDA之間的技術區別,主要體如今實現方法上。基於C語言的CUDA被包裝成一種容易編寫的代碼,所以即便是不熟悉芯片構造的科研人員,也可能利用CUDA工具編寫出實用的程序。而OpenCL雖然句法上與CUDA接近,可是它更增強調底層操做,所以難度較高,但正由於如此,OpenCL才能跨平臺運行。
CUDA是一個並行計算的架構,包含有一個指令集架構和相應的硬件引擎。OpenCL是一個並行計算的應用程序編程接口(API),在NVIDIA CUDA架構上OpenCL是除了C for CUDA外新增的一個CUDA程序開發途徑。
若是你想得到更多的對硬件上的控制權的話,你可使用OpenCL這個API來進行編程,若是對API不是太瞭解,也能夠用CUDA C語言來編程,這是兩種不一樣編程的方式,他們有他們相同點和不一樣點。可是有一點OpenCL和CUDA C語言進行開發的時候,在並行計算這塊,他們的概念是差很少的,這兩種程序在程序上是有很大的類似度,因此程序之間的相互移植相對來講也是比較容易。
CUDA C語言與OpenCL的定位不一樣,或者說是用人羣不一樣。CUDA C是一種高級語言,那些對硬件瞭解很少的非專業人士也能輕鬆上手;而OpenCL則是針對硬件的應用程序開發接口,它能給程序員更多對硬件的控制權,相應的上手及開發會比較難一些。
程序員的使用習慣也是很是重要的一方面,那些在X86 CPU平臺使用C語言的人員,會很容易接受基於CUDA GPU平臺的C語言;而習慣於使用OpenGL圖形開發的人員,看到OpenCL會更加親切一些,在其基礎上開發與圖形、視頻有關的計算程序會很是容易。