OpenCL产业开发链
OPEN STANDARD FOR PARALLEL PROGRAMMING OF HETEROGENEOUS SYSTEMS
OpenCL™ (Open Computing Language,开放计算语言)是一种开放、免版税的标准,适用于超级计算机、云服务器、个人计算机、移动设备和嵌入式平台中各种加速器的跨平台并行编程。OpenCL极大地提高了众多市场类别中各种应用程序的速度和响应能力,包括专业创意工具、科学和医疗软件、视觉处理以及神经网络训练和推理。
OpenCL is Widely Deployed and Used
OpenCL for Low-level Parallel Programing
OpenCL通过将计算最密集的代码卸载到加速器处理器或设备上,加速应用程序。OpenCL开发人员使用基于C或C++的内核语言编写程序,这些程序通过设备编译器在加速器设备上并行执行。
How OpenCL Relates to Other Khronos Parallel Acceleration Standards
OpenCL为业界提供了最低的“close-to-metal”处理器敏捷执行层,用于加速应用程序、库和引擎,还为编译器提供了代码生成目标。与Vulkan等“GPU-only”API不同,OpenCL支持使用多种加速器,包括多核CPU、GPU、DSP、FPGA和专用硬件,如推理引擎。
OpenCL Deployment Flexibility
随着平台和设备的工业应用场景变得越来越复杂,各种工具正在发展,使OpenCL应用程序能够部署到没有可用的本机OpenCL驱动程序的平台上。例如,开源clspv编译器和clvk API转换器,使OpenCL应用程序能够在Vulkan Runtime上运行。这为OpenCL开发人员在何处部署,如何部署OpenCL应用程序,提供了极大的灵活性。
Open source software tools enable OpenCL kernels to be executed over multiple target APIs
OpenCL Programming Model
OpenCL应用程序分成主机和设备部分,主机代码使用通用编程语言如C或C++编写,由传统编译器编译,在主机CPU上执行。
设备编译阶段可以在线完成,即在使用特殊API调用执行应用程序期间。也可以在执行应用程序前编译成机器二进制或由Khronos定义的特殊可移植中间表示形式(称为SPIR-V)。有一些特定于领域的语言和框架,可以使用source-to-source的翻译,或生成二进制/SPIR-V(例如Halide),编译成OpenCL。
Traditional vs OpenCL programming paradigm
应用程序宿主代码经常用C或C++编写,但是其它语言的绑定也可用,如Python。内核程序可以用C语言(OpenCL C)或C++(OpenCL的C++)编写,使得开发人员能够在内核程序中编程计算密集型应用程序的部分。OpenCLC语言的所有版本都基于C99。社区驱动的OpenCL语言的C++,将OpenCL和C++ 17的能力结合。
C++ for OpenCL Kernel Language
OpenCL工作组已经从OpenCL 2.0中定义的最初OpenCL C++内核向C++ C++过渡,为开源社区开发的OpenCL提供了改进的特性,并与OpenCL兼容。OpenCL的C++是由CLAN支持的。使开发人员能够在OpenCL内核中,使用大多数C++17特性。在很大程度上与OpenCL C 2.0向后兼容,能够使用OpenCL 2.0或更高版本编程加速器,具有支持SPIR-V的一致性驱动程序。可以通过OpenCL支持页面跟踪,在Clang中的实现。
参考链接:
https://www.khronos.org/api/opencl