1. 程式人生 > >OpenCL 與CUDA的關係

OpenCL 與CUDA的關係

通用計算新銳OpenCL CUDA來助陣

        GPU經過多年的發展,從功能單一的3D計算逐步擴充了視訊解碼、通用計算等,而且值得一提的是通用計算這個目前最璀璨的技術新星被科研單位及個人消費者普遍關注。

眾所周知,NVIDIAGPU的通用計算技術先驅者,它的CUDA架構產品深入人心。而在通用計算的API層面不止NVIDIA一家獨秀,Apple(蘋果)公司主導的OpenCL也贏得了業界同行的大力支援,當然NVIDIA也是OpenCL的核心成員之一。


        2008129日,2008亞洲SIGGRAPH大會上,全球視覺計算技術的行業領袖NVIDIA公司於今日正式宣佈,完全支援

Khronos Group新近釋出的OpenCL 1.0技術規範。OpenCL(開放式計算語言)是一種全新計算應用程式介面 (API),它讓開發人員能夠利用GPU內部巨大的平行計算動力。OpenCL的加入是GPU革命史上又一重大的里程碑,為NVIDIA開發人員提供了另一個功能強大的程式設計選擇。

        Khronos Group是一個非營利的,會員組織的行業協會;Khronos 致力於創造免授權費用的應用程式介面 API 及相關標準生態系統,並將其標準及相關技術應用於包括手持裝置,控制檯以及嵌入式系統中的高階動態多媒體應用,以提供用以將這些多媒體技術轉化為現實生產力的基礎。例如

OpenGL ESOpenKODEOpenMAXOpenVGOpenSL ESCOLLADA等,當然還有今天的主角OpenCL

        OpenCL一經提出就得到了全球頂級軟硬體廠商的廣泛支援,尤其是已經走在通用計算前沿的NVIDIA公司更是大力支援,NVIDIA公司嵌入式內容副總裁Neil Trevett就在Khronos機構中擔任OpenCL工作組主席一職。

        Neil Trevett先生表示:"OpenCL技術規範是NVIDIA等行業領袖意識到這一機遇之後所取得的成果。憑藉其開放式、跨平臺的標準,該技術規範將在整個異構平行計算市場中得到更多的認可。

NVIDIA將繼續活躍於OpenCL工作組以便推動該技術規範的發展,並在所有NVIDIA平臺中提供對OpenCL的支援,從而為開發人員提供另外一種方式來利用我們GPU中的超強計算動力。"

OpenCL是什麼?與CUDA關係如何?


    OpenCL實際上是針對異構系統(一般指cpu與GPU(顯示卡)一同進行計算,因為是兩種不同裝置但要一同工作.所以需要設計可以讓他們協同工作.把這樣的CPU GPU群稱作同步異構處理器群.)進行並行程式設計的一個全新API,簡單來說OpenCL它可以利用GPU進行一些平行計算方面的工作。這是API應用程式的程式設計介面,圖形裡面也有很多API,比如OpenGL、DirectX是針對圖形的,OpenCL是針對平行計算的API
								

        OpenCL開發人員可以利用GPUCPU的計算能力,把GPUCPU異構的系統運用在很多平行計算的領域裡面。Khronos就是這樣一個組織,它由很多廠商組成,並有非常多的成員,這個工作組同時也是OpenCL的一個協調機構,也就是Khronos這個工作組它來負責制定OpenCL的規格、架構等等各方面。業界最主要的和圖形或者和計算相關的廠商都是Khronos的成員。

值得一提的是OpenCL得到Khronos組織裡很多成員的支援,同時也驗證大家對開發GPU平行計算的能力這個需求越來越多,也正是因為有這個需求成就了OpenCL

那麼NVIDIAOpenCL是一個怎樣的關係呢?

實際上OpenCL對於業界來說是非常重要也是非常好的一個標準,它的出現令業界擁有了一個共同的標準利用GPU的強大計算能力,然後應用在圖形以外各種各樣的平行計算中。其中NVIDIA一直也參與OpenCL的工作,正如前文所提及的NVIDIA副總裁Neil Trevett先生,他現在就任OpenCL工作組的主席,引導很多OpenCL的開發,當然這個組織中還有很多其他開發公司。

        OpenCL最早是Apple公司提出來的,從OpenCL一開始NVIDIA就和Apple公司進行非常緊密的合作。OpenCL開發的過程中,它的技術平臺都是NVIDIAGPU,實際上OpenCL是基於NVIDIA GPU的平臺進行開發的。另外OpenCL的第一次演示,也是在NVIDIAGPU上演示的,可以說到目前為止NVIDIA GPU幾乎是進行OpenCL程式的唯一的平臺。

另外還有非常重要的一點,對於Apple公司來說,他們是把GPU計算當成一種未來的趨勢,他們非常重視OpenCL,他們將會在新一代的產品裡面選擇最適合於OpenCL執行的平臺。所以說他們新一代蘋果的膝上型電腦全都採用了NVIDIA的平臺,不管是MacBook ProMac OSX都是採用了NVIDIA公司的平臺。實際上這也是從另外一個方面證明NVIDIAGPU對於OpenCL的支援,到目前為止是最好的一個硬體的平臺。

徹底瞭解CUDA架構/OpenCL存在意義


        CUDA是什麼?很多人認為它是一個由NVIDIA設計的一種新軟體或者新API,不過筆者在此要告訴大家,CUDA是一種硬體架構,也就是說目前NVIDIAGeForce產品全都基於CUDA架構設計。CUDA架構最主要的包含兩個方面:一個是ISA(工業標準架構體系Industry Standard Architecture,通常簡稱ISA)是IBM PC相容機上的一種匯流排)指令集架構;第二硬體計算引擎。實際上它就是硬體和指令集,這兩個方面是CUDA的架構。

        NVIDIA GPU的架構就是CUDA的架構,舉例來說,你可以把它看成是跟IntelX86或者IBMCell,他們都是CPU架構,而CUDA架構是基於GPU的架構。

        CUDAGPU架構和CPU架構很類似,比如X86是包含一套指令集和執行X86各種各樣的CPU,而對於CUDA也是一樣的,NVIDIA有一套指令集ISA,還有各種各樣執行指令集和各種各樣的硬體引擎。另外CUDA到目前為止,它包含了一個C語言的編譯器,就是在CUDA上面的C語言,CUDA這個架構還可以支援其他的API,包括OpenCL或者DirectX,同時以後NVIDIACPU還支援其他語言,包括FortranJavaPython等各種各樣的語言,可以說這種架構是原生的,專門為計算介面而建造的這樣的一個架構。CUDA硬體架構包括指令集都是非常適合於平行計算,為異構計算而設計的一整套架構。

也許會有人疑問,既然有了CUDA為何還需要OpenCL,或者類似OpenCLAPI呢?

簡單來說,對於程式設計人員他可以選擇不同的方式來進行程式設計,他們可以選擇OpenCL API程式設計也可以選擇C for CUDA語言來程式設計。

API和語言的程式設計、開發存在著本質的不同,API是一個程式設計介面,它的核心是函式庫和應用程式開發的一個硬體介面。用API來程式設計的話它有一個好處,那就是可以訪問比較低層次的硬體資源,但這樣的最大化控制硬體資源帶來了很多

弊端

       例如在

記憶體管理上就必須靠程式設計人員手動控制

       這就需要程式設計人員要擁有高超的程式設計技術和深厚的經驗積累。而就C for CUDA來說,程式設計人員在利用C for CUDA語言來程式設計的時候,無需考慮過多與自身程式設計目的以外的因素。再拿前文提及的記憶體管理來說,C for CUDA使用Runtime進行管理。

不過不管OpenCL還是C for CUDA語言來程式設計,最終它都是需要通過一個驅動程式來變成一個PTX的程式碼,PTX相當於CUDA的指令集來進行執行,然後交給圖形處理其或者交給硬體來進行執行。這兩個最終達到都是使用PTX或者在我們GPU上進行執行。

簡單來說,如果你想獲得更多的對硬體上的控制權,你可以使用API來進行變成。而如果你對API不是十分了解,或者說無法很好的掌控API程式設計,這時你可以用CUDA C語言來程式設計。二者是兩種不同程式設計的方式,它們有相同點也有不同點,但是有一點OpenCLCUDA C語言進行開發的時候,在平行計算方面它們的概念十分接近,這也就奠定了程式之間的相互移植會比較容易。

C語言程式設計瞭解的讀者應該知道,C語言利用的驅動程式就是API,也許談及這個很抽象,實際上C for CUDA就是一種C語言的擴充套件,而針對擴充套件的主要方面就是並行運算程式設計,這些是通過C的擴充套件來獲得。基本上認為CUDA的程式也是一種標準的C語言的程式,然後你使用一些關鍵字然後來對並行這方面計算,然後做一些區分。C語言最終編譯會成為PTX的程式碼,然後在GPU上執行。

        OpenCL是一個API,就是應用程式的程式設計介面,OpenCLOpenGL很像,這種API你可以呼叫API裡面的函式庫,通過程式開發呼叫各種各樣的函式,實現各種各樣的功能。對於API來說一般它對硬體裝置有比較完整的訪問權,你可以訪問硬體裝置,可以對記憶體進行管理,最後OpenCL通過編譯和驅動程式可以生成PTX程式碼在GPU上進行執行。

OpenCL未來發展目標激進


通過OpenCL的路線圖我們能夠看出,目前OpenCL還處於Alpha版本,但NVIDIA的產品已經可以非常好的支援OpenCL。明年第一季度Khronos Group會發布OpenCL Beta版本,而OpenCL1.0正式版也可能在明年正式推出。不過OpenCL最開始可能出現在Mac OS上,不過隨著以後的逐漸擴充套件,例如Windows或者Linux等系統都將會得以支援。

對於CUDA C語言,NVIDIA一直不斷地對其進行更深層次的開發,同時也不斷的有新版本的出現,到目前為止已經是CUDA 2.0CUDA C語言NVIDIA研發已經超過5年時間,基本上從2003年左右就開始開發這個語言開發。

並且到目前為止,開發人員的數量已經是超過25000人,應用程式超過100個,特別在科學計算的領域裡CUDA的應用極為廣泛,幾乎涉及到各種各樣的HPC高效能運算的領域。甚至現在進入排行榜前100的高效能運算機裡面也有使用NVIDIA基於CUDATesla系統,它的開發語言正是使用了CUDA C語言。目前GPU叢集組成的高效能運算機叢集數量已經達到了30個,在中國也有相關產品。

        CUDA C語言是一個跨作業系統開發工具,現在支援WindowsLinuxMac OS,幾乎把控了目前最主流的作業系統。NVIDIACUDA C語言提供了很多的庫,這些庫主要包括FFTBLAS等,它們可以提供各種各樣現成的程式碼讓程式設計人員使用。

也許有這樣的開發者,他可能對CUDA並不熟悉,但他又想要使用CUDA的高效能運算該怎麼辦?很簡單,他就把現有的應用軟體,例如FFT,使用CUDAFFT的程式碼直接替換,就這樣他便可以獲得20倍以上的效能提升。也就是說,這些庫是CUDA C語言非常重要的資源,可以讓大家縮短研發週期、體驗CUDA帶來的高效能,例如一些數學軟體像MatlabMathematicaLabView都有CUDA的外掛,可以使用C語言的外掛讓他更容易的利用CUDA

CUDA/OpenCL共進退前途無量


這是NVIDIACUDA C語言路線圖,現在CUDA正處於2.0版本,到今年年底NVIDIA可能會推出CUDA 2.1版本,到明年會有CUDA 2.2CUDA2.3版本,最後迎來CUDA 3.0。隨著CUDA版本的升級,它的功能也在不斷地升級,比如最早的CUDA只能支援單精度的浮點計算,現在可以支援雙精度,還可以支援各種各樣的庫。

總結的來說,OpenCL無論對開發人員還是業界人員、消費者來說,都是一個非常好的API,一個應用程式的介面。它可以使開發者更容易的開發出跨平臺GPU計算程式,並將GPU強大的計算能力利用到各種各樣應用計算中。

對於NVIDIA來說,現在CUDA架構上除了C語言以外,現在新增加了OpenCL或者DX11這樣的API,對於開發人員來說也是提供了一種更好的GPU計算的開發環境。因為對API很熟悉的開發人員,他們肯定會很高興的看到OpenCL或者新的API的加入,對於這些人來說他們很容易利用這種API進行各種各樣GPU計算程式開發。對於NVIDIA來說還會繼續對C語言包括其他語言的支援,實際上對NVIDIA CUDA C語言來說Runtime C仍是目前唯一的語言環境。今後除了C語言外,NVIDIA還會推出更多的CUDA語言,這包括Fortran,還會有Java等。


相關推薦

OpenCL CUDA關係

通用計算新銳OpenCL CUDA來助陣         GPU經過多年的發展,從功能單一的3D計算逐步擴充了視訊解碼、通用計算等,而且值得一提的是通用計算這個目前最璀璨的技術新星被科研單位及個人消費者普遍關注。 眾所周知,NVIDIA是GPU的通用計算技術先驅者,它的CUDA架構產品深入人心。而在通

TensorFLow的GPU實現CUDA,cuDNN的關係

TensorFLow的GPU 只採用CPU在大規模資料集中訓練卷積神經網路的速度很慢,因此可以結合圖處理單元(Graphic Processing Unit,GPU)進行加速。GPU具有單指令多資料流結構,非常適合用一個程式處理各種大規模並行資料的計算問題。最常用的GPU是英偉達(nvidia)

GPU程式語言選擇(OpenCLCUDA C++ AMP)

       其實在C++ AMP之前已經有了兩個異構程式設計框架:CUDA與OpenCL。CUDA(Compute Unified Device Architecture)是顯示卡廠商Nvidia於2007年推出的業界第一款異構並行程式設計框架。在Nvidia的大力支援下,CUDA擁有良好的開發環境,豐富的

論cudnncuda之間的關係,和實際例子測試。

1、其中cudnn是一個常見的神經網路層加速庫檔案,其能夠很大程度的把載入到顯示卡上的網路層資料進行優化計算。cuda就像一個傻大粗的加速庫,其主要是依靠的是顯示卡 計算速度跟一些演算法的優化,而且其

OpenGLCUDA互操作方式總結

source 紋理貼圖 cnblogs 過程 嘗試 cuda _array vao 開始 一、介紹 CUDA是Nvidia推出的一個通用GPU計算平臺,對於提升並行任務的效率非常有幫助。本人主管的項目中采用了OpenGL做圖像渲染,但是在數據處理方面比較慢,導致幀率一直上

論cudnncuda之間的關系,和實際例子測試。

網絡 log IT 算法 enter sdn pod uda 例子 1、其中cudnn是一個常見的神經網絡層加速庫文件,其能夠很大程度的把加載到顯卡上的網絡層數據進行優化計算。cuda就像一個傻大粗的加速庫,其主要是依靠的是顯卡 計算速度跟一些算法的優化,而且其也是進行顯卡

Oracle:事務關係

事務與鎖是不同的。 事務具有ACID( 原子性、一致性、隔離性和永續性),鎖是用於解決隔離性的一種機制。 事務的隔離級別通過鎖的機制來實現。 另外鎖有不同的粒度,同時事務也是有不同的隔離級別的 (一般有四種:讀未提交Read uncommitted, 讀已提交Read committ

Hibernate_day03---表關係建立、一對多配置及操作、多對多配置及操作

一、表與表關係建立思路 一對多關係 關係舉例: (1)分類和商品關係。 一個分類裡面有多個商品,一個商品只能屬於一個分類 (2)公司和員工關係 一個公司有多個員工,每個員工屬於一個公司 一對多建表:通過外來鍵建立關係 圖示: 多對多關係 關係舉例

關係資料庫關係資料庫的區別

當前主流的關係型資料庫有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。 非關係型資料庫有 NoSql、Cloudant。 nosql和關係型資料庫比較? 優點: 1)成本:nosql資料庫簡單易部署,基本都是

HisTVOS關係

關係     社群開發分支由廣科院負責,主要是通過Gerrit作為媒介。SPC010是his在TVOS穩定的tag上的修改,單獨分離出補丁檔案給到客戶開發分支進行專案開發,再把開原始碼貢獻到TVOS的主線分支。 TVOS下載     需向廣科

python 依賴關係 關聯關係

#簡單版本(依賴關係) # class Daxiang(): # def open(self,door): # print('我是大象,我想開門') # door.open() # print('謝謝,你幫我開門!!!') # # def

Andorid 詳解-佈局優化,AndroidLinux關係

這篇文章的由來——閒來無事隨便翻找了下Boss 招聘,發現一家公司,在騰訊創業大廈,距離住所很近。最主要的是招聘簡介裡所介紹的內容:團隊成員來自 北大,清華,北郵 BAT等知名網路公司。。。然後我膨脹的自信心,想嘗試下看看自己的水平,抽了一天調休,就過去了。結果 被完虐,各種完虐,第一個問題

linux之iptables中PREROUTINGPOSTROUTING關係

PREROUTING 和 POSTROUTING 的簡單關係 源地址傳送資料--> {PREROUTING-->路由規則-->POSTROUTING} -->目的地址接收到資料 當你使用:iptables -t nat -A PREROUTING -i eth1 -d 1

Kafka整體結構圖 Consumertopic關係 Kafka訊息分發 Consumer的負載均衡 Kafka檔案存

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

中國貨幣指標股市關係

從歷史來看,1997年亞洲金融危機爆發後,央行大幅降低了存款準備金率和存貸款利率,向市場釋放流動性。1998年6月,在降息後的第八個月,M1、M2增速觸底反彈。2008年9月份之後,央行連續5次降息189基點。在降息6個月之 後,2009年3月份起,M1增速-M2增速達到階段性底部,並推動市

雙目立體視覺中的座標系轉換關係 [留意~攝影測量學計算機視覺學科中的差異]

文章目錄 前言 影像座標系 相機座標系 世界座標系 影像座標系與相機座標系之間的相互轉換 相機座標系與世界座標系之間的相互轉換 前言   通過模擬人眼立體視覺,兩個攝像機拍攝

OpenCV3 比較CPU, OpenCLcuda效能

#include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/core/ocl.hpp> #include <opencv2/core/cuda.hpp&g

java面向物件,類物件關係

1.java面向物件 面向物件是一種開發模式,但最早使用的開發模式是面向過程 面向過程:指的是針對某一個問題單獨提出解決方案以及程式碼開發 即是:面向過程的方法寫出來的程式是一份蛋炒飯 恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼唯一的辦法就是全部倒掉,重新做一份青菜

vuereact關係和Angular的區別

一、為什麼學習vue.js vue.js兼具angular.js和react的優點,並且剔除了他們的缺點 官網:http://cn.vuejs.org/ 手冊:http://cn.vuejs.org/v2/api/ 二、vue.js是什麼 Vue是一個"MVVM

大資料、雲端計算和人工智慧的深度剖析相互關係,值得入行者典藏

雲端計算、大資料和人工智慧,這三個東西現在非常火,並且它們之間好像互相有關係:一般談雲端計算的時候會提到大資料、談人工智慧的時候會提大資料、談人工智慧的時候會提雲端計算……感覺三者之間相輔相成又不可分割。但如果是非技術的人員,就可能比較難理解這三者之間的相互關係,所以有必要解釋一下。