OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。

OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成。OpenCL由一门用于编写kernels (在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分割和数据分割的并行计算机制。
OpenCL类似于另外两个开放的工业标准OpenGL和OpenAL,这两个标准分别用于三维图形和计算机音频方面。OpenCL扩展了GPU用于图形生成之外的能力。OpenCL由非盈利性技术组织Khronos Group掌管。
OpenCL最初苹果公司开发,拥有其商标权,并在与AMD,IBM,英特尔和NVIDIA技术团队的合作之下初步完善。随后,苹果将这一草案提交至Khronos Group。

2008年6月的WWDC大会上,苹果提出了OpenCL规范,旨在提供一个通用的开放API,在此基础上开发GPU通用计算软件。随后,Khronos Group宣布成立GPU通用计算开放行业标准工作组,以苹果的提案为基础创立OpenCL行业规范。5个月后的2008年11月18日,该工作组完成了OpenCL 1.0规范的技术细节。2010年6月14日,OpenCL 1.1 发布。2011年11月15日,OpenCL 1.2 发布。2013年11月19日,OpenCL 2.0发布。

    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 8000\9000\100、GTX200-1000,RTX2000均支持OpenCL 1.0-1.2
AMD显卡方面 Radeon HD 4000-7000\Rx 200\Rx 300\RX 400-500/Fury系列,Vega系列 均支持OpenCL 1.0-1.2,除Radeon HD4000-6000系列外,其余均会支持OpenCL 2.0移动平台方面目前高通adreno320/330/400系列/500系列提供了Android上的OpenCL1.2或者2.0支持,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)生成内核。接下来宿主机程序定义程序所需的内存对象,并把它们映射到内核的参数。最后,宿主机程序将命令放入命令队列来执行这些内核。

OpenCL 简单概念相关推荐

  1. 20211110:DC综合的一些简单概念总结(2)

    DC综合的一些简单概念总结(2) 问题描述 分析与解答 每日总结 这些概念皆为一些必须理解的基础,经济基础决定上层建筑,学习也是同理.务必深化这些简单但是很基础的东西.做到别人问起时你可以侃侃而谈的效 ...

  2. 20211109:DC综合的一些简单概念理解记录

    DC综合的一些简单概念总结 问题描述 分析与解答 每日总结 首先写在最前面,关于我的个人博客只是一个学习记录,方便我在需要回顾时可以更快的找出这些知识点来回顾,而不是单纯的为了记录而记录.各位共勉! ...

  3. 大数据与云计算学习计划 (一) 云计算系统管理 1 TCP/IP简单概念 (概念性)

    大数据与云计算学习计划 (一) 云计算系统管理 1 TCP/IP简单概念 (概念性) 一.前言 二.服务器架构 典型服务模式 三.TCP/IP协议 1.简介 2.主机对主机通信三要素 IP地址 子网掩 ...

  4. GPU编程--OpenCL基本概念

    本篇结构: 背景 OpenCL是什么 框架组成 基本概念 编写OpenCL程序的基本步骤 参考博文 一.背景 在过去利用GPU对图像渲染进行加速的技术非常成熟,因为GPU是典型的单指令多数据(SIMD ...

  5. 【图论】简单 概念 及 公式 入门 ( 完全图 | 二部图 | 连通图 | 欧拉回路 | 哈密顿圈 | 平面图 | 欧拉定理 )

    文章目录 一.完全图 二. 二部图 三.完全二部图 四. 连通性概念 五.连通图 六. 图的分支 七. 欧拉回路 ( 闭迹 / 回路 ) [ 遍历图中所有的边 | 每个边只经过一次 | 顶点可经过多次 ...

  6. 推荐系统笔记(简单概念)

    本部分思维导图: 推荐系统从搜索引擎借鉴很多技术和思想,比如内容推荐有不少技术就来自搜索引擎, 基于用户和基于物品的协同过滤将推荐系统技术从内容延伸到协同关系,超越内容本身,后来Netflix举行一个 ...

  7. 系统移植(系统移植环境搭建及简单概念)

    linux系统 = linux内核 + 根文件系统; 根文件系统 = 库(/lib和/usr/lib) + 命令( /bin和/usr/bin) + 配置文件( /etc) + GUI(图形化界面,如 ...

  8. OpenCL入门二:OpenCL基础概念

    基础概览 原理建议阅读下面文章,文中介绍了OpenCL相关名词概念: https://www.cnblogs.com/yxwkf/p/4552029.html 简介 http://opencl.cod ...

  9. 模糊系统—模糊数学简单概念

    模糊数学描述:是描述模糊集的描述方式,模糊数学也可以用于判断,评价,推理. 简单来说:模糊数学就是用一个元素对每个集合隶属度来描述对于集合的归属程度,然后进行一系列操作,得到最终的隶属度,再比较隶属度 ...

  10. 树的存储结构一 (一些简单概念)

    目录:        一.节点的度        二.树的深度        三.有序树        四.森林        五.二叉树        六.二叉树的性质        七.满二叉树 ...

最新文章

  1. 数学思想 —— 低维与高维的统一
  2. SBB:土壤微生物群落的特征究竟由什么决定
  3. 冰刃——IceSword
  4. Maven快照机制(SNAPSHOT)
  5. 【 || 短路运算】if语句的简化:短路原理、短路效应
  6. gt爵士变形步骤_代码广播简介:您可以编码为24/7的爵士节拍
  7. angular input_快速地上手Angular组件开发
  8. ensp完成chap配置_广域网链路安全认证CHAP,一分钟了解下
  9. C++ 梳理(一):跑通简单程序
  10. python open写入_Python IO操作文件读取和写入、open函数的mode参数、buffering,文件缓冲区...
  11. Python网络爬虫系列(一)
  12. 灵活应对算法大赛新挑战,极清晰比赛思路你值得拥有
  13. Vue-动态组件和插槽
  14. java 按分割为数组中_[Java教程]JS中,split()用法(将字符串按指定符号分割成数组)...
  15. App项目实战之路(一):概述篇
  16. 大数据面试题知识点分析(十一)之Flume面试真题及答案
  17. windows怎样运行wmi服务器,windows系统wmi服务器
  18. 两数互素有什么性质_两个数互质是什么意思 判断互质数的方法有哪些
  19. win10希望计算机做什么取消,主编设置win10设置和取消定时关机的解决形式
  20. koa-redis + ioredis

热门文章

  1. 全国计算机二级重难点,计算机二级office重难点.doc
  2. 固态硬盘SSD与机械硬盘HDD
  3. SAP 离散,流程,重复制造
  4. visio2003中、origin中、matlab中,字体的大小以pt为单位,与word中的几号字大小是如何对应?
  5. Mac删除文件时显示“不能完成此操作,因为项目‘xxxx’正在使用中”(添加/删除新用户引发的问题)
  6. 小猪短租陈驰:共享经济不是简单的资本游戏
  7. linux如何打开22端口?如何开启ssh远程链接
  8. 华为语音网关iad208e(m)华为8口语音网关web界面
  9. 前后端RSA加密梳理
  10. b-spline学习-系数计算及程序实践