OpenCL™(开放计算语言)概述

news/2024/11/17 18:34:15/

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/


http://www.ppmy.cn/news/607503.html

相关文章

Beam Search

Q: 什么是Beam Search? 它在NLP中的什么场景里会⽤到? 传统的广度优先策略能够找到最优的路径,但是在搜索空间非常大的情况下,内存占用是指数级增长,很容易造成内存溢出,因此提出了beam search的算法。 beam search尝试在广度优…

牛客网里刷题:JS获取输入的数组

有的时候我们刷题会遇到下面这种输入格式,那么用js怎么把它变成数组呢? [1,2,3,4,5]难道用readline()之后在踢掉首尾的字符吗?这样也太麻烦了! 我发现了一个好用的方法: let line read_line() let a JSON.parse(li…

ajax ie7没有权限,jquery ajax 在ie7不能正常使用

Laterality issue on fMRI imageThe laterality issue: different software will interpret fMRI images in different way (mainly refer t ...创建URL为空的解决办法在使用URLWithString:或-initWithString:创建一个URL对象时,提供的参数字符串必须符合RFC 2396标准(O网页链接…

大数据必学Java基础(二十八):Arrays工具类和数组的复制操作

文章目录 Arrays工具类和数组的复制操作 一、Arrays工具类 二、数组的复制操作 Arrays工具类和数组的复制操作 一、Array

Clang:LLVM 的 C 语言家族前端

Clang:LLVM 的 C 语言家族前端 Clang 项目为LLVM 项目的 C 语言家族(C、C、Objective C/C、OpenCL、CUDA 和 RenderScript)中,提供了语言前端和工具基础结构。提供了 GCC 兼容的编译器驱动程序 ( clang ) 和 MSVC 兼容的编译器驱动…

深度生成模型系统的实现原理有哪些?未来的挑战是什么?

由于计算机性能的快速提升, 学习可观测样本的概率密度并随机生成新样本的生成模型成为热点。相比于需要学习条件概率分布的判别模型生成模型的训练难度大、模型结构复杂, 但除了能够生成新样本外, 生成模型在图像重构、缺失数据填充、密度估计、风格迁移和半监督学习等应用领域…

[C] 神奇的堆——最小堆,最大堆,堆排序

堆——神奇的优先队列 堆是一种特殊的完全二叉树,所有父节点都比子节点药效,符合这样的二叉树称之为堆。反之,如果所有父节点都比子节点要大,这样的完全二叉树称为最大堆。 代码展示 此处展示的是向上调整法建立最大堆。 #incl…

基于短语的统计机器翻(PBMT) 开源工具 :Moses

如何运行Moses 1. Moses的历史 Moses是Pharaoh的升级版本,增加了许多功能。它是一个基于短语的统计机器翻译系统,整个系统用C语言写成,从训练到解码完全开放源代码,可以运行在Linux平台和Windows平台。它有两大特点: 1…