誰主沉浮 OpenCL與CUDA架構深入解析

最近,Khronos公佈了OpenCL(Open Computing Language)的第一個測試版本,一經發布便在通用計算領域掀起來軒然大波!OpenCL是由蘋果公司發起,業界衆多著名廠商共同製作的面向異構系統通用目的並行編程的開放式、免費標準,也是一個統一的編程環境。便於軟件開發人員爲高性能計算服務器、桌面計算系統、手持設備編寫高效輕便的代碼,而且廣泛適用於多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP)等其他並行處理器,在遊戲、娛樂、科研、醫療等各種領域都有廣闊的發展前景。

 
  那麼OpenCL與NVIDIA的CUDA架構是什麼關係,是否是外界認爲的競爭關係?目前衆多的通用計算標準中,比如NVIDIA的CUDA、Khronos的OpenCL、AMD的Stream,CAL、Brook+、微軟下一代的Computer shader等,他們之間有什麼異同,看完這篇文章,相信你就會有一個大概的瞭解……
  OpenCL來了!
  Khronos是一個開發組織,著名的OpenGL就是出自Khronos之手,Khronos有很多廠商組成,OpenCL工作組同時也是 OpenCL的一個協調機構,來負責制定OpenCL的規格、架構等等各方面。業界最主要的和圖形或者和計算相關的廠商都是Khronos的成員。
  OpenCL實際上是針對異構系統進行並行編程的一個全新的API,OpenCL可以利用GPU進行一些並行計算的工作。我們知道,圖形裏面有很多 API,比如OpenGL是針對圖形的,而OpenCL則是針對並行計算的API。 OpenCL開發人員可以利用GPU和CPU的計算能力,把GPU和CPU異構的系統運用在很多並行計算的領域。

  OpenCL對於業界來說是非常重要也是非常好的一個標準,這樣業界有一個共同的標準可以利用GPU的強大計算能力,然後應用在圖形以外各種各樣的並行計算方面。NVIDIA公司的副總裁Neil Trevett是OpenCL工作組的主席,引導很多OpenCL的開發,NVIDIA公司很多員工都在參與這項工作。
  OpenCL最早由Apple公司提出的,OpenCL發起NVIDIA就和Apple公司進行非常緊密的合作。OpenCL開發的過程中,技術平臺均爲NVIDIA的GPU,實際上OpenCL是基於NVIDIA GPU的平臺進行開發的。另外OpenCL在大概兩個多月以前進行了第一次演示,也是運行在NVIDIA的GPU上。

  對於Apple公司來說是把GPU計算當成一種未來的趨勢,他們非常重視OpenCL,在新一代的產品裏面選擇了最適合於OpenCL運行的平臺。所以新一代蘋果的筆記本電腦全都採用了NVIDIA的平臺,不管是MacBook Pro還是MaBook。實際上這也是從另外一個方面證明NVIDIA的GPU對於OpenCL的支持。
  OpenCL與CUDA並非敵對關係
  很多人對什麼是CUDA可能還有一些疑慮,並沒有搞清楚CUDA到底是什麼。實際上CUDA最主要的包含兩個方面:一個是ISA指令集架構;第二硬件計算引擎;實際上是硬件和指令集。 也就是說我們可以把CUDA看做是與X86或者cell類似的架構,但是是基於是GPU,而不是傳統的CPU。
  這個其實很好理解,把它和傳統的和CPU的架構比較下相信就更容易理解,傳統X86是包含一套指令集和執行X86各種各樣的CPU,對於CUDA也是一樣,CUDA有一套指令集ISA,還有執行指令集各種各樣的硬件引擎。CUDA到目前爲止包含了一個C語言的編譯器,當然CUDA架構還可以支持其他的 API,包括OpenCL或者DirectX,同時CUDA還會有其他的語言,包括Fortran、Java、Python等各種各樣的語言,可以說 CUDA架構是原生的,專門爲計算接口而建造的這樣的一個架構,這種硬件架構包括指令集都是非常適合於這種並行計算,爲異構計算而設計的一整套的架構。


OpenCL與CUDA的關係
  上圖很好的解釋CUDA和OpenCL的關係,他們並不是衝突關係,而是包容關係。OpenCL是一個API,在第一個級別,CUDA架構是更高一個級別,在這個架構上不管是OpenCL還是DX11這樣的API,還是像C語言、Fortran、DX11計算,都可以支持。作爲程序開發員來講,一般他們只懂這些語言或者API,可以採用多種語言開發自己的程序,不管他選擇什麼語言,只要是希望調用GPU的計算能,在這個架構上都可以用CUDA來編程。
  CUDA編程的道理和CPU的編程很類似,比如有了X86的指令集,又有X86各種各樣的CPU,那麼我們只需要對這個指令集編程即可。X86架構上有各種各樣的開發工具,當然也有C語言,Fortran語言,Python語言,Java或者以前的Pascal語言,不論你使用什麼語言進行開發,最後還是在X86的架構上執行。CUDA也是一樣,有了CUDA的指令集,有了支持CUDA的硬件,我們就可以採用不同的途徑來進行開發,比如可以採用 OpenCL或者DirectX這樣的API,也可以用C語言或者Fortran或者Java開發,最終都可以在CUDA架構上運行。

發佈了17 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章