OpenCL

OpenCL

開放運算語言
OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向異構系統通用目的并行編程的開放式、免費标準,也是一個統一的編程環境,便于軟件開發人員為高性能計算服務器、桌面計算系統、手持設備編寫高效輕便的代碼,而且廣泛适用于多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信号處理器(DSP)等其他并行處理器,在遊戲、娛樂、科研、醫療等各種領域都有廣闊的發展前景。OpenCL最初蘋果公司開發,擁有其商标權,并在與AMD,IBM,英特爾和nVIDIA技術團隊的合作之下初步完善。
    中文名:開放運算語言 外文名:Open Computing Language,OpenCL 所屬學科: 開發者:蘋果公司

定義

為異構平台編寫程序的框架,可由CPU,GPU或其他類型的處理器組成。

優勢

OpenCL™标準是首個開放式、統一的免費編程模型,能夠在異構系統上加快算法速度。OpenCL™應用程序支持在不同的平台(如CPU、GPU和FPGA)上使用基于C語言的編程語言開發代碼。OpenCL™應用程序的一個關鍵優勢在于,它是一項可移植、開放式、免費的标準,這是與專有編程模型相比的一個關鍵差異化因素。OpenCL™标準對軟件工程師來說是一種編程模型,對系統架構師來說是一種方法。它基于标準 ANSI C(C99)及擴展來提取并行度。此外,OpenCL™平台還包括一個應用編程接口(API),支持主機與硬件加速器進行通信(一般通過PCI Express*)或内核之間進行通信,而無需主機交互。

支持現狀

2009年6月NVIDIA首家發布了支持OpenCL 1.0通用計算規範的驅動程序,支持Windows和Linux操作系統。

2009年8月初AMD首次發布了可支持IA處理器(x86和amd64/x64)的OpenCL SDK——ATI Stream SDK v2.0Beta,立即交由業界标準組織KHRONOS進行審核。目前,該SDK更名為AMD APP SDK。

2012年2月,intel發布了The Intel® SDK for OpenCL* Applications 2012,支持OpenCL 1.1基于帶HD4000/2500的顯示核心的第三代酷睿CPU(i3,i5,i7).和GPU。

2013年6月,intel發布了第四代酷睿CPU haswell 其内置的HD4600/4400/4200 Iris(銳矩)5000/5100/pro 5200(自帶eDRAM緩存)支持OpenCL 1.2(未來可能升級到OpenCL 2.0)

NVIDIA顯卡方面Geforce 80009000100200300400500600700800900均支持OpenCL 1.0-1.2

AMD顯卡方面Radeon HD 4000500060007000Rx 200 均支持OpenCL 1.0-1.2,除Radeon HD4000系列外,其餘均會支持OpenCL 2.0

移動平台方面目前高通adreno320/330提供了Android上的OpenCL1.1支持,NVIDIA的Tegra K1也提供了OpenCL支持。

組織成員

OpenCL工作組的成員包括:3Dlabs、AMD、蘋果、ARM、Codeplay、愛立信、飛思卡爾、華為、HSA基金會、GraphicRemedy、IBM、Imagination Technologies、Intel、諾基亞、NVIDIA、摩托羅拉、QNX、高通,三星、Seaweed、德州儀器、布裡斯托爾大學、瑞典Ume大學。

像Intel、NVIDIA和AMD都是這個标準的支持者,不過微軟并不在其列。

使用介紹

目前,NVIDIA顯卡對OpenCL技術支持得比較到位,所以這裡僅用NVIDIA的Geforce(精視)系列顯卡作解釋。

中國用戶可以登錄英偉達中文官方網站上下載到最新的驅動程序,隻要您下載的驅動是195.62版本或更高,就可以在Geforce(精視)8系列或更高級的顯卡中開啟OpenCL,在安裝好新版本的顯卡驅動程序并重新啟動後,OpenCL就自動開啟了。當有需要使用CPU來完成的工作如轉換視頻時,GPU就會幫助CPU進行運算,以提高轉換速度。但是在3D遊戲中應該是不會調用OpenCL的,因為顯卡有自己的硬件加速功能以及物理引擎,所以Geforce(精視)8系列及以上的顯卡就不需要CPU輔助進行渲染了。這時候,您就可以一邊玩遊戲,一邊進行消耗CPU的工作了。

當然同樣,在NVIDIA的Quadro系列專業顯卡中,同樣能夠使用OpenCL技術。隻要您的顯卡能夠達到CUDA的要求,就能夠正常使用OpenCL,以獲得優異的CPU運算效率。

在AMD-ATI的Stream技術中(現已經改名為AMD APP并行加速技術),已經為日常使用、辦公、遊戲等提供物理加速。基于OpenCL标準開發,其中,ATI Radeon HD 4000-5000、AMD Radeon HD 6000系列同時支持ATI Stream和AMD APP(由于Stream基于CAL和Brook+語言開發,更适合VLIW5和VLIW4這樣的SIMD架構),AMD Radeon HD7000和Radeon Rx 200系列支持AMD APP,運算效率較老架構提升十分明顯。

OpenCL 1.0

OpenCL 1.0主要由一個并行計算API和一種針對此類計算的編程語言組成,此外還特别定義了:

1、C99編程語言并行擴展子集;

2、适用于各種類型異構處理器的坐标數據和基于任務并行計算API;

3、基于IEEE 754标準的數字條件;

4、與OpenGL、OpenGL ES和其他圖形類API高效互通。

OpenCL 1.1

Khronos Group2010年6月15日宣布,OpenCL通用計算标準的1.1版本已經發放,開發者可以免費下載,并依照新标準開始進行編程。

OpenCL 1.1标準向下兼容1.0版,提供了更多的新功能,并對性能進行了改善。主要新特性包括:

-支持新數據類型,如3維矢量和新增圖像格式。

-支持處理多Host指令以及跨設備Buffer處理。

-Buffer區域操作,包括對1D、2D、3D三角形區域的讀、寫和拷貝操作。

-改進驅動和控制指令執行的事件應用。

-增加OpenCL内建C功能。

-通過鍊接OpenCL和OpenGL事件,高效共享圖像和Buffer,改進與OpenGL的互操作性。

OpenCL标準由Khronos Group的OpenCL工作組制定,完全開放,任何開發者都可免費使用。OpenCL工作組成員包括(英文首字母排序):3DLABS、動視暴雪、AMD、蘋果、ARM、Broadcom、CodePlay、EA、愛立信、飛思卡爾、富士通、通用電氣、GraphicRemedy、HI、IBM、Intel、Imagination Technologies、美國Los Alamos國家實驗室、摩托羅拉、Movidia、諾基亞、NVIDIA、Petapath、QNX、高通、RapidMind、三星、Seaweed、S3、意法半導體、Takumi、德州儀器、東芝和Vivante。

OpenCL 2.0

Khronos Group2013年11月19日宣布了OpenCL通用計算标準的2.0版本特性,其中對共享虛拟内存的支持是一大亮點(此前NVIDIA發布了CUDA 6規範也同樣支持共享虛拟内存,但目前僅限Kepler和Maxwell架構的N卡。此外,AMD的GCN架構顯卡同樣支持。AMD的Kaveri APU支持HSA異構計算和hUMA統一物理尋址,較虛拟共享更加先進。)

1、共享虛拟内存

主機和設備内核可以直接共享複雜的、包含指針的數據結構,大大提高編程靈活性,避免冗餘的數據轉移。

2、動态并行

設備内核可以在無需主機交互的情況下進行内核排隊,實現靈活的工作調度,避免數據轉移,大大減輕主處理器的負擔。

3、通用内存空間

無需指定地址空間名稱即可為引數(argument)編寫函數,不用再為程序裡的每一個地址空間名稱編寫函數。

4、圖像

改進圖像支持,包括sRGB、3D,内核可以讀寫同一圖像。

5、C11原子操作

新的C11原子和同步操作子集,分配在同一工作組内

6、Pipes

以FIFO格式組織數據的内存對象,可以直接讀寫,數據結構可簡單編程、高度優化。

7、安卓可安裝客戶端驅動擴展

安卓系統上可将OpenCL作為共享對象進行載入

框架組成

OpenCL平台API:平台API定義了宿主機程序發現OpenCL設備所用的函數以及這些函數的功能,另外還定義了為OpenCL應用創建上下文的函數。

OpenCL運行時API:這個API管理上下文來創建命令隊列以及運行時發生的其他操作。例如,将命令提交到命令隊列的函數就來自OpenCL運行時API。

OpenCL編程語言:這是用來編寫内核代碼的編程語言。它基于ISO C99标準的一個擴展子集,因此通常稱為OpenCL C編程語言。

把上述單獨的部分彙集起來,形成OpenCL的一個全景圖,如下圖所示:

首先是一個定義上下文的宿主機程序。如上圖中中的上下文包含兩個OpenCL設備、一個CPU和一個GPU。接下來定義了命令隊列。這裡有兩個隊列,一個是面向GPU的有序命令隊列,另一個是面向CPU的亂序命令隊列。然後宿主機程序定義一個程序對象,這個程序對象編譯後将為兩個OpenCL設備(CPU和GPU)生成内核。接下來宿主機程序定義程序所需的内存對象,并把它們映射到内核的參數。最後,宿主機程序将命令放入命令隊列來執行這些内核。

上一篇:福特GT

下一篇:紅磚

相關詞條

相關搜索

其它詞條