完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>
标签 > OpenCL
OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成。OpenCL由一门用于编写kernels (在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API组成。
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(全称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\200\300\400\500\600\700\800\900\1000均支持OpenCL 1.0-1.2AMD显卡方面 Radeon HD 4000\5000\6000\7000\Rx 200\Rx 300\RX 480 均支持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大学。[1] 像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.0OpenCL 1.0主要由一个并行计算API和一种针对此类计算的编程语言组成,此外还特别定义了:1、C99编程语言并行扩展子集;2、适用于各种类型异构处理器的坐标数据和基于任务并行计算API;3、基于IEEE 754标准的数字条件;4、与OpenGL、OpenGL ES和其他图形类API高效互通。OpenCL 1.1Khronos 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.0Khronos 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编程语言。[2] 把上述单独的部分汇集起来,形成OpenCL的一个全景图,如下图所示:
OpenCL全景图首先是一个定义上下文的宿主机程序。如上图中中的上下文包含两个OpenCL设备、一个CPU和一个GPU。接下来定义了命令队列。这里有两个队列,一个是面向GPU的有序命令队列,另一个是面向CPU的乱序命令队列。然后宿主机程序定义一个程序对象,这个程序对象编译后将为两个OpenCL设备(CPU和GPU)生成内核。接下来宿主机程序定义程序所需的内存对象,并把它们映射到内核的参数。最后,宿主机程序将命令放入命令队列来执行这些内核。
英特尔正式开源其专有的基于 CPU 的 OpenCL 运行时,首批开源代码共 718,996 行。现在这个巨大的合并请求正在等待进入 Intel 的 L...
在Linux系统进程中,分为内核空间和用户空间,当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(内核态)
Xilinx SDAccel开发环境在X86_64位工作站的运行情况
本视频演示了SDAccel开发环境在一个标准X86_64位工作站上运行的情况,以展示其为您所带来的生产力的提升;以及该开发环境对OpenCL,C,C +...
面向OpenCL,C和C ++的SDAccel开发环境利用FPGA将数据中心单位功耗性能提升高达25倍。作为SDx系列的成员,SDAccel是首个面向O...
用于异构计算的OpenCL标准为实现OpenCL标准的所有计算设备定义了基本编程模型。 该视频介绍了OpenCL应用程序的主机代码和内核元素。 这些...
武汉凌久微发布第二代图形芯片GP201,性能超越AMD E8860嵌入式平台
据悉,GP201在三维(3D)性能、二维(2D)多边形描绘、椭圆形绘制、像素及图像移动、窗口绘制以及对OpenCL库国产化平台的支持等方面均超越了AMD...
张戈强调,龙芯CPU的主要IP核均为自主研发,这使得其性价比得到显著提升。他指出,国产CPU与主流CPU的差距主要体现在单核性能上,而非多核性能。近年来...
联发科9200和a16性能参数对比 在现今移动设备应用领域,性能是大多数用户关注的一个重要因素。而联发科技和a16是两个备受瞩目的处理器品牌,二者的性能...
2023-08-31 标签:处理器OpenCLCortex-A53 1201 0
rk3588和酷睿i3对比哪个好? 如今,在市场上,有很多种不同的处理器可供消费者选择,其中比较常见的是龙芯、联发科、高通骁龙、Intel 酷睿等处理器...
如何使用此XSA以及如何创建在目标平台上实现设计加速所需的软件镜像
但对于边缘(AArch64 或 Arm)平台,我们需要添加 ZOCL 驱动。ZOCL 驱动用于为每个内核分配资源。在本文中,我们将讲解如何向全新或现有 ...
Windows和DirectX 12设备都将会支持OpenCL和OpenGL
由于并非所有 Windows 设备都对 OpenCL 和 OpenGL 硬件加速技术提供良好的支持,因此游戏开发者经常会发现他们很难在 Windows ...
来自乔治亚理工大学的开发人员使用免费和开源的RISC-V指令集体系结构:Vortex,创建了与流行的OpenCL编程框架兼容的通用图形处理单元GPGPU。
基于SDAccelTM 开发环境减少FPGA在应用中使用时造成的障碍
FPGA 一直有望超越CPU 和GPU 实现方案,拥有更高的算法性能以及更低的功耗范围。但直到现在因为编程模式未能如愿以偿。而这一编程模式又是有效利用F...
编辑推荐厂商产品技术软件/工具OS/语言教程专题
电机控制 | DSP | 氮化镓 | 功率放大器 | ChatGPT | 自动驾驶 | TI | 瑞萨电子 |
BLDC | PLC | 碳化硅 | 二极管 | OpenAI | 元宇宙 | 安森美 | ADI |
无刷电机 | FOC | IGBT | 逆变器 | 文心一言 | 5G | 英飞凌 | 罗姆 |
直流电机 | PID | MOSFET | 传感器 | 人工智能 | 物联网 | NXP | 赛灵思 |
步进电机 | SPWM | 充电桩 | IPM | 机器视觉 | 无人机 | 三菱电机 | ST |
伺服电机 | SVPWM | 光伏发电 | UPS | AR | 智能电网 | 国民技术 | Microchip |
开关电源 | 步进电机 | 无线充电 | LabVIEW | EMC | PLC | OLED | 单片机 |
5G | m2m | DSP | MCU | ASIC | CPU | ROM | DRAM |
NB-IoT | LoRa | Zigbee | NFC | 蓝牙 | RFID | Wi-Fi | SIGFOX |
Type-C | USB | 以太网 | 仿真器 | RISC | RAM | 寄存器 | GPU |
语音识别 | 万用表 | CPLD | 耦合 | 电路仿真 | 电容滤波 | 保护电路 | 看门狗 |
CAN | CSI | DSI | DVI | Ethernet | HDMI | I2C | RS-485 |
SDI | nas | DMA | HomeKit | 阈值电压 | UART | 机器学习 | TensorFlow |
Arduino | BeagleBone | 树莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 华秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |