OpenCL通用异构开放环境
OpenCL通用異構開放環境
OpenCL全稱Open Computing Language,第一個面向異構系統通用目的并行編程的開放式、免費標準,一個統一的編程環境,便于軟件開發人員為高性能計算服務器、桌面計算系統、手持設備編寫高效輕便的代碼,廣泛適用于多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP)等其他并行處理器,在游戲、娛樂、科研、醫療等各種領域都有廣闊的發展前景。
OpenCL 1.0主要由一個并行計算API和一種針對此類計算的編程語言組成,此外還特別定義了:
1、C99編程語言并行擴展子集;
2、適用于各種類型異構處理器的坐標數據和基于任務并行計算API;
3、基于IEEE 754標準的數字條件;
4、與OpenGL、OpenGL ES和其他圖形類API高效互通。
OpenCL是由蘋果首次提出的,隨后Khronos Group成立相關工作組,以蘋果草案為基礎,聯合業界各大企業共同完成了標準制定工作。工作組的26個成員來自各行各業,且都是各自領域的領導者,具體包括3DLABS、 Activision Blizzard、AMD、蘋果、ARM、Barco、博通、Codeplay、EA、愛立信、飛思卡爾、HI、IBM、Intel、 Imagination、Kestrel Institute、摩托羅拉、Movidia、諾基亞、NVIDIA、QNX、RapidMind、三星、Seaweed、TAKUMI、德州儀器、瑞典于默奧大學。
標準倡導者蘋果將是最先應用OpenCL技術的廠商之一,代號Snow Leopard的新版操作系統Mac OS X 10.6就會集成該標準。相比之下,微軟沒有參與OpenCL的制定工作,Windows自然也不會提供支持,不過DirectX 11有類似的Computer Shader技術,很可能會重演DirectX與OpenGL之戰。
同時,AMD Stream SDK、Codeplay Sieve C++等進行改革,適配OpenCL 1.0標準,NVIDIA的CUDA技術也借機大展拳腳。
OpenCL 3.0 的 C++ 內核
在 OpenCL 3.0 中,OpenCL 工作組已經從最初在 OpenCL 2.1 中定義的原始 OpenCL C++ 內核語言過渡,推薦社區 OpenCL開源前端編譯器開發C++,提供改進的功能和與 OpenCL C 兼容性的開發人員,使用 C++17 編寫內核程序。
C++ for OpenCL 結合了 OpenCL 和 C++17 的功能
C ++針對OpenCL是支持和使用LLVM編譯器基礎設施。在 Clang 中的實現,通過OpenCL 支持進行跟蹤。使開發人員能夠使用 OpenCL 內核中的大多數 C++17 功能,通過離線編譯越來越多的 OpenCL,實現攝取的 SPIR-V 中間表示形式生成代碼。
基本概念
OpenCL程序分為兩部分。
? 在主機(以CPU為核心)上運行
? 在設備(以GPU為核心)上運行
設備有一個或多個計算單元,計算單元又包含一個或多個處理單元。在設備上運行的程序被稱為核函數。但是對于核函數的編寫,CUDA一般直接寫在程序內,OpenCL是寫在一個獨立的文件中,并且文件后綴是.cl,由主機代碼讀入后執行,這一點OpenCL跟OpenGL中的渲染程序很像。
OpenCL平臺由兩部分組成,宿主機和OpenCL設備:
宿主機Host: CPU,扮演組織者的角色。包括kernel、kernel上下文、NDRange和隊列等;隊列控制著kernel如何執行,以及何時執行等。
設備Device:計算設備,可以是CPU、GPU、DSP或硬件提供以及OpenCL開發商支持的任何處理器。
SIMT(Single Instruction Multi Thread): 單指令多線程,GPU并行運算的主要方式,很多線程同時執行相同的運算指令,每個線程的數據有所不同,但執行的操作一致。
核函數(Kernel):在設備程序上執行運算的入口函數,在主機上調用。
工作項(Work-item): 類似于CUDA中的線程(Threads),多個工作項(線程)執行同樣的核函數,每個Work-item都有一個ID號,通過ID號來區分處理數據。
工作組(Work-group):類似于CUDA中的線程塊(Block),多個工作項組成一個工作組,Work-group內Work-item可以通信和協作。
ND-Range: 類似于CUDA中的網格,定義了Work-group的組織形式。
上下文(Context):整個OpenCL的運行環境,包括Kernel、Device、程序和內存。
設備:OpenCL程序調用的計算設備。
內核:在計算設備上執行的并行程序。
程序:內核程序的源代碼(.cl文件)和可執行文件。
內存:計算設備執行OpenCL程序所需的變量。
總結
以上是生活随笔為你收集整理的OpenCL通用异构开放环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LLVM IR 理解
- 下一篇: TVM/Relay 的 Partitio