跳到主要内容

OpenCL徽标

异构系统并行编程的开放标准

OpenCL™(Open Computing Language,开放计算语言)是一种开放的、免费的跨平台并行标准在超级计算机、云服务器、个人计算机、,移动设备和嵌入式平台。OpenCL大大提高了在众多市场类别中的广泛应用,包括专业创意工具,科学和医学软件、视觉处理、神经网络训练和推理。

OpenCL 3.0决赛来了!

OpenCL 3.0最终规范于2020年9月30日发布

阅读关于OpenCL 3.0最终版本的博客 临时新闻稿 临时发布演示

OpenCL3.0重新调整了OpenCL路线图,使开发人员请求的功能更广泛由硬件供应商部署,它通过以下方式显著提高了部署灵活性使一致的OpenCL实现能够专注于与其目标相关的功能市场。OpenCL 3.0还将子组功能集成到核心规范中使用新的统一API和OpenCL C 3.0语言规范,并为异步数据复制支持一类新的嵌入式处理器。

 

OpenCL的行业支持

“OpenCL是最普遍、跨供应商的低级开放标准应用程序、库、,引擎和编译器需要达到最广泛的多样性处理器。OpenCL 2.X提供了重要的功能,但OpenCL 1.2具有证明自己是所有供应商和市场所需的基准。OpenCL 3.0版将组织严密的可选性集成到单片2.2规范中,提高部署灵活性,使OpenCL能够提高标准未来核心规范中普遍可用的功能。”

“近年来,OpenCL被广泛采用多个系统中的异构处理系统细分市场。这次对OpenCL 3.0的更新带来了重要的灵活性优势这将允许许多进化从AI和HPC到汽车行业,专注于其特定要求并采用开放标准。代码播放很高兴硬件供应商能够支持OpenCL 3.0并其灵活性的优势在于软件产品的生态系统。”

“OpenCL 3.0注重部署灵活性,我们将其视为在提供关键功能方面迈出了卓越的一步对于开发人员来说,能够随着时间的推移添加功能。这真的是OpenCL生态系统向前迈出了一步,允许开发人员编写广泛依赖的可移植应用程序接受的功能。目前正在运送GPU基于PowerVR Rogue架构的功能将得到显著提升包括SVM、通用地址空间和工作组功能。规范最终发布后,Imagination将发布符合要求的OpenCL 3.0支持广泛的PowerVR GPU,包括IMG的最新产品A系列。”

“英特尔强烈支持跨体系结构的标准计算生态系统,如OpenCL 3.0和SYCL公司。基于标准的统一编程模型将实现效率和通过即将发布的新Xe GPU体系结构。”

“NVIDIA欢迎OpenCL 3.0专注于定义基线,以实现广泛使用开发人员关键功能在未来版本的规范中采用。NVIDIA将发送符合要求的当规范为我们正在定义Vulkan®互操作扩展,以及分层OpenCL实现,将显著提高OpenCL开发人员的部署灵活性。”

安舒马·巴特
NVIDIA电脑产品经理

“OpenCL 3.0是推动更大发展的重要一步绩效和创新计算平台和应用程序的范围。灵活的扩展模型将帮助我们的客户和软件合作伙伴充分利用我们双方的巨大潜力现有和未来应用处理器。我们很高兴有机会对此作出贡献我们期待着支持最终产品。”

巴拉吉·卡利达斯
高通公司工程总监

“我们的许多客户都希望GPU编程语言能够在所有设备,并且在edge中的部署不断增加计算和移动,这一需求正在增加。OpenCL是访问不同的硅加速度许多关键软件堆栈使用OpenCL/SPIR-V作为后端。我们很高兴OpenCL 3.0将推动更广泛的发展行业采用,因为它让我们的客户放心,他们的过去和未来对OpenCL的投资是合理的。”

文森特·欣德里克森
Stream HPC创始人兼首席执行官

“OpenCL 3.0为OpenCL API开辟了新的篇章作为过去10年的标准GPGPU API年。通过精简的OpenCL 3.0核心功能集,OpenCL 3.0将启用一种全新的嵌入式设备采用OpenCL API进行GPU计算和ML/AI处理,还将为OpenCL实现互操作或Vulkan API层。VeriSilicon将部署OpenCL 3.0实施在广泛的嵌入式GPU和VIP产品,使我们的客户能够开发新的GPGPU/ML/AIOpenCL 3.0 API应用程序。”

 

OpenCL被广泛部署和使用

加速实施

用于低级并行编程的OpenCL

OpenCL通过将计算最密集的代码卸载到加速器处理器或设备。OpenCL开发人员使用基于C或C++的内核语言来通过设备编译器传递的在加速器上并行执行的代码程序设备。

OpenCL与其他Khronos并行加速标准的关系

OpenCL为业界提供了最低的“接近金属”处理器镀膜执行层,用于加速应用程序、库和引擎,并提供代码生成目标用于编译器。与Vulkan等“仅GPU”API不同,OpenCL支持使用多种加速器,包括多核CPU、GPU、DSP、FPGA和专用硬件,如推断引擎。

OpenCL与Khronos加速标准系列的关系

OpenCL部署灵活性

随着平台和设备的行业格局变得越来越复杂,工具正在发展使OpenCL应用程序能够部署到没有可用本机的平台上OpenCL驱动程序。例如,开源clspv编译器clvk API转换器允许运行OpenCL应用程序在Vulkan运行时。这为OpenCL开发人员在何处以及如何开发方面提供了极大的灵活性他们可以部署OpenCL应用程序。

开源软件工具使OpenCL内核能够在多个目标API上执行开源软件工具使OpenCL内核能够在多目标API

OpenCL编程模型

OpenCL应用程序分为主机和设备部分,主机代码使用通用编程语言,如C或C++,由传统编译器编译,用于在主机CPU。

设备编译阶段可以在线完成,即在使用特殊API调用。也可以在将应用程序执行到由Khronos定义的机器二进制或特殊可移植中间表示,称为SPIR-V型。也有特定于域的语言以及可以使用源到源翻译或生成二进制/SPIR-V,例如卤化物。

传统与OpenCL编程范式传统vsOpenCL编程范式

应用程序宿主代码通常用C或C++编写,但其他语言的绑定也可用,例如Python。内核程序可以用C(OpenCL C)或C的方言编写++(C++for OpenCL),使开发人员能够对其计算密集型部分进行编程内核程序中的应用程序。OpenCL C语言的所有版本都基于C99。这个社区驱动的OpenCL语言C++将OpenCL和C++17的功能结合在一起。

用于OpenCL内核语言的C++

OpenCL工作组首先从最初的OpenCL C++内核语言过渡过来在OpenCL 2.0到C++中定义,用于由开源社区开发的OpenCL,以提供OpenCL C的改进功能和兼容性Clang公司可以找到它的文档在这里。它使开发人员能够在OpenCL内核。它在很大程度上向后兼容OpenCL C 2.0,可以用于OpenCL 2.0或更高版本的程序加速器,带有支持SPIR-V的一致驱动程序可以通过开放式CL支持页面

内核语言扩展

一些扩展可用于现有发布的内核语言标准。完整列表记录了此类扩展的在这里一致性编译器和驱动程序可以选择支持扩展,因此有一种机制可以在编译时检测它们的支持。开发人员应该知道,并非所有设备都支持所有扩展。