OpenCL™(开放计算语言)概述
异构系统并行编程的开准
OpenCL™(开放计算语言)是一种开放的、免版税的标准,用于对超级计算机、云服务器、个人计算机、移动设备和嵌入式平台中的,各种加速器进行跨平台并行编程。OpenCL 极大地提高了众多市场类别中,广泛应用程序的速度和响应能力,包括专业创意工具、科学和医疗软件、视觉处理,以及神经网络训练和推理。
OpenCL 3.0 最终版来了!
OpenCL 3.0 最终规范于 2020 年 9 月 30 日发布。
OpenCL 3.0 重新调整了 OpenCL 路线图,使硬件供应商能够广泛部署开发人员要求的功能,并通过使符合标准的 OpenCL 实施,能够专注于与其目标市场相关的功能,显着提高部署灵活性。OpenCL 3.0 还将子组功能集成到核心规范中,随附了新的统一 API 和 OpenCL C 3.0 语言规范,并引入了异步数据复制的扩展,以支持新型嵌入式处理。
对 OpenCL 的行业支持
NVIDIA 欢迎 OpenCL 3.0 专注于定义基线,以使开发关键功能,能够在规范的未来版本中得到广泛采用。NVIDIA 将在规范最终确定后,发布符合标准的 OpenCL 3.0,正在努力定义 Vulkan® 互操作扩展,扩展与分层 OpenCL 实现结合,将提高 OpenCL 开发人员的部署灵活性。
用于低级并行编程的 OpenCL
OpenCL 通过将算力最大的代码,部署到加速器处理器或设备上,加速应用程序。OpenCL 开发人员使用基于 C 或 C++ 的内核语言编写程序,通过设备编译器,将这些程序在加速器设备上并行执行。
OpenCL 与 Khronos 并行加速标准的关系
OpenCL 为业界提供了最低的“close-to-metal”的processor-agile execution layer处理器敏捷执行层,用于加速应用程序、库和引擎,并为编译器提供生成目标代码。与 Vulkan 等“仅限 GPU”的 API 不同,OpenCL 支持使用多种加速器,包括多核 CPU、GPU、DSP、FPGA 和专用硬件,例如推理引擎。
OpenCL 部署灵活性
随着平台和设备的行业格局变得越来越复杂,工具正在不断发展,OpenCL 应用程序能够部署到本地 OpenCL 驱动程序的平台上。例如,开源clspv 编译器和clvk API 转换器,使 OpenCL 应用程序能够在 Vulkan 运行时上运行。这为 OpenCL 开发人员部署 OpenCL 应用程序,提供了极大的灵活性。
开源软件工具,使 OpenCL 内核能够在多个目标 API 上执行。
OpenCL 编程模型
OpenCL 应用程序分为主机和设备部分,主机代码使用通用编程语言(例如 C 或 C++)编写,并由传统编译器编译,在主机 CPU 上执行。
设备编译阶段可以在线完成,即在线使用特殊 API 调用执行应用程序。可以在执行应用程序之前,编译成机器二进制或由 Khronos 定义的,称为SPIR-V 的特殊可移植中间表示。还有一些特定领域的语言和框架,可以使用源到源的编译,生成二进制/SPIR-V 编译为 OpenCL,例如 Halide。
应用程序主机代码,通常用 C 或 C++ 编写,可以使用其它语言的绑定,例如 Python。内核程序可以用 C (OpenCL C) 或 C++ (C++ for OpenCL) 的语言编写,使开发人员能够在内核程序中,编写其应用程序的计算密集型部分。OpenCL C 语言的所有版本都基于 C99。社区驱动的 OpenCL 语言 C++, 汇集了 OpenCL 和 C++17 的功能。
用于 OpenCL 内核语言的 C++
OpenCL的工作组,已经从OpenCL中2.0第一定义为C ++,针对OpenCL开发由开源社区提供改进的功能,并与OpenCL的C,C++兼容,针对OpenCL被支持的原始的OpenCL C ++内核语言,转换Clang 及其文档。使开发人员能够使用 OpenCL 内核中的大多数 C++17 功能。在很大程度上与 OpenCL C 2.0 向后兼容,使其可用于使用 OpenCL 2.0 或更高版本,以及支持 SPIR-V加速器进行编程的驱动程序。可以通过OpenCL 支持页面进行跟踪,在 Clang 中实现。
内核语言扩展
一些扩展可用于现有已发布的内核语言标准。此类扩展有完整列表记录。符合标准的编译器和驱动程序,可以选择支持扩展,因此,有一种机制可以在编译时检测支持。开发人员应注意,并非所有设备都支持所有扩展。
符合 OpenCL 的实现
可以查看符合 OpenCL 实施的硬件供应商列表。
参考链接:
https://www.khronos.org/opencl/