OpenCL 是什么

news2024/9/26 1:17:46

OpenCL 创建Program对象|极客笔记

文章目录

  1. OpenCL标准
  2. 什么是OpenCL

OpenCL全称为Open Computing Language(开放计算语言),先由Apple设计,后来交由Khronos Group维护,是异构平台并行编程的开放的标准,也是一个编程框架。 

Khronos Group是一个非盈利性技术组织,维护着多个开放的工业标准,并且得到了业界的广泛支持。OpenCL的设计借鉴了CUDA的成功经验,并尽可能地支持多核CPU、GPU或其他加速器。

OpenCL不但支持数据并行,还支持任务并行。同时OpenCL内建了多GPU并行的支持。这使得OpenCL的应用范围比CUDA广。为了能适用于一些更低端的嵌入式设备(如DSP+单片机这种环境),OpenCL API基于纯C语言进行编写,所以OpenCL API的函数名比较长,参数也比较多(因为不支持函数重载),因此函数名相对难以熟记。不过,借助像Xcode、Visual Studio等现代化的集成开发环境,利用代码智能感知自动补全,其实开发人员也不需要刻意去死背OpenCL的API。

OpenCL覆盖的领域不但包括GPU,还包括其他的多种处理器芯片。到现在为止,支持OpenCL的硬件主要局限在CPU、GPU、DSP和FPGA上,目前在桌面端和服务器端提供OpenCL开发环境的主要有Apple、NVIDIA、AMD、ARM和Intel,其中Apple提供了一个独立的OpenCL框架并与自家的OSX系统完整地融合在一起;

NVIDIA和AMD都提供了基于自家GPU的OpenCL在Windows和Linux上的实现,而AMD和Intel提供了基于各自CPU在Windows和Linux上的OpenCL实现。目前除了OS X系统,NVDIA、AMD与Intel提供的OpenCL实现都不约而同地不支持自家产品以外的产品。由于硬件的不同,为了写出性能优异的代码,可能需要为不同的平台做相应的优化,这会对可移植性造成影响,这个需要权衡。

OpenCL包含两个部分

  • 一是OpenCL C语言(OpenCL 2.1将开始使用OpenCL C++作为内核编程语言)和主机端API
  • 二是硬件架构的抽象。

为了使C程序员能够方便简单地学习OpenCL,OpenCL只是给C11进行了非常小的扩展,以提供控制并行计算设备的API以及一些声明计算内核的能力。软件开发人员可以利用OpenCL开发并行程序,并且可获得比较好的在多种设备上运行的可移植性。

为了使得OpenCL程序能够在各种硬件平台上运行,OpenCL提供了一个硬件平台层。同时各种不同设备上的存储器并不相同,相应地,OpenCL提供了一个存储器抽象模型。与CUDA相似,OpenCL还提供了执行模型和编程模型。

OpenCL不但包括一门编程语言,还包括一个完整的并行编程框架,通过编程语言、API以及运行时系统来支持软件在整个平台上的运行。

相比CUDA,OpenCL的优点在于它提供了一种能够在不同平台上可移植的编程方式,另外其原生支持的多设备并行也是一大亮点。

OpenCL标准

OpenCL标准分为四部分,每一部分都用“模型”来定义。这里先简单的介绍一下,之后的章节中会进行详细的介绍:

平台模型:指定一个host处理器,用于任务的调度。以及一个或多个device处理器,用于执行OpenCL任务(OpenCL C Kernel)。这里将硬件抽象成了对应的设备(host或device)。

执行模型:定义了OpenCL在host上运行的环境应该如何配置,以及host如何指定设备执行某项工作。这里就包括host运行的环境,host-device交互的机制,以及配置内核时使用到的并发模型。并发模型定义了如何将算法分解成OpenCL工作项和工作组。

内核编程模型:定义了并发模型如何映射到实际物理硬件。

内存模型:定义了内存对象的类型,并且抽象了内存层次,这样内核就不用了解其使用内存的实际架构。其也包括内存排序的要求,并且选择性支持host和device的共享虚拟内存。

通常情况下,OpenCL实现的执行平台包括一个x86 CPU主处理器,和一个GPU设备作为加速器。主处理器会将内核放置在GPU上运行,并且发出指令让GPU按照某个特定的并行方式进行执行。内核使用到的内存数据都由编程者依据层级内存模型分配或开辟。运行时和驱动层会将抽象的内存区域映射到物理内存层面。最后,由GPU开辟硬件线程来对内核进行执行,并且将每个线程映射到对应的硬件单元上。这些模型的细节将会在之后进行详细的讨论。

什么是OpenCL

2008年,苹果公司向Khronos Group提交了一份关于跨平台计算框架的草案,该草案由苹果公司开发,并与AMD、IBM、Intel和NVIDIA公司合作逐步完善。这个跨平台计算框架就是OpenCL(Open Computing Language,开放计算语言)。2008年12月8日,OpenCL 1.0技术规范发布。2010年6月14日,OpenCL 1.1发布。2011年11月19日,OpenCL 1.2发布。2013年11月19日,OpenCL 2.0发布。

OpenCL是一个为异构并行计算平台编写程序的工业标准,此异构计算平台可映射到CPU、GPU、DSP和FPGA等计算设备。OpenCL提供了底层硬件结构的抽象模型,旨在提供一个通用的开放API,既减轻开发人员的编程难度,又让开发人员能够写出高效可移植代码。例如,使用OpenCL,开发人员可以编写在GPU上运行的通用计算程序,而无须将其算法映射到OpenGL或DirectX的3D图形API上。

为了描述OpenCL设计的核心,Khronos Group将OpenCL异构并行计算架构划分为:

  • 平台模型(platform model)
  • 存储器模型(memory model)
  • 执行模型(execution model)
  • 编程模型(programming model)

这些模型既相互独立,又相互联系,组成了OpenCL的有机整体。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

antd 时间类组件的国际化 locale 设置不生效 解决方案汇总

antd 时间类组件的国际化 locale 设置不生效,踩坑之路和解决办法 问题 如图所示,antd 时间类组件中英文混合显示: 初始配置代码如下: import ./index.css; import ./global.less;import { ConfigProvider } from antd; import…

excel表格制作如何设置?新手必备教程!

Excel是一种专门用于制作表格、输入数据和统计分析的办公软件,日常办公中它带给我们极大的便利。下面我们一起来看看excel表格制作如何操作?为了方便理解,下面分为详细的六个步骤。你可以根据下面的操作顺序来操作(里面有些顺序是…

Windows版本Tomcat升级openssl版本

本次教程适用于windows版本安装Tomcat调整openssl版本。 下载Tomcat Native Tomcat native提供让Tomcat以APR模式运行,APR的全称是Apache Portable Runtime,它是一个高度可移植的库,它是Apache HTTP Server 2.x的核心。APR有许多用途&#…

element ui Form 自定义校验规则,验证手机号

网站快速成型工具 Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库 指南 了解设计指南,帮助产品设计人员搭建逻辑清晰、结构合理且高效易用的产品。 查看详情 组件 使用组件 Demo 快速体验交互细节;使用前端框架…

@开发者:个推小程序消息推送解决方案来了

随着小程序技术和应用场景的不断完善,越来越多的开发者搭建了小程序平台,为用户带来更“轻量”的服务。在小程序用户迅猛增长的同时,开发者对于小程序用户精细化触达的需求也愈加强烈。近日,个推消息推送上线了小程序推送功能&…

Python量化交易05——基于多因子选择和选股策略(随机森林,LGBM)

参考书目:深入浅出Python量化交易实战 在机器学习里面的X叫做特征变量,在统计学里面叫做协变量也叫自变量,在量化投资里面则叫做因子,所谓多因子就是有很多的特征变量。 本次带来的就是多因子模型,并且使用的是机器学习的强大的非…

Linux系统下的组管理和权限管理

Linux系统下的组管理和权限管理 组管理 在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念。 对于一个文件而言,有以下几种说法:1)所有者;2)所在组;3)其它组&#…

TypeScript中的类 Class

公共属性的修饰符: public:公共,默认修饰符,外部和内部都能使用private:私有的,只能内部类用,外部不能读写protected:当前类和派生类(子类)可访问readonly:外部只能读不能写static&…

快速上手 Docker 最新 WebAssembly 技术预览版

本文为译文,原文见:https://nigelpoulton.com/getting-started-with-docker-and-wasm/ 轻松体验 Docker 和 Wasm ——编写一个应用,将其编译为 Wasm,将其打包为 OCI 镜像,将之存储在 Docker Hub 中,使用 Do…

4 JMeter 参数化常用方式

文章目录2.4 JMeter 参数化常用方式2.4.1 用户定义的变量2.4.2 用户参数2.4.3 CSV数据文件设置 CSV Data Set Config2.4.4 函数(_counter)2.4 JMeter 参数化常用方式 2.4.1 用户定义的变量 应用场景:全局参数 添加方式: 测试计划->线程组->配置…

【AcWing每日一题】4366. 上课睡觉

有 N 堆石子,每堆的石子数量分别为 a1,a2,…,aN。 你可以对石子堆进行合并操作,将两个相邻的石子堆合并为一个石子堆,例如,如果 a[1,2,3,4,5],合并第 2,3 堆石子,则石子堆集合变为 a[1,5,4,5]。 我们希望…

LeetCodeday02

977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后&am…

Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析

一、SpringBoot简介 SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。 使用了 Spring 框架后已经简化了我们的开发。而 SpringBoot 又是对 Spring 开发进行简化的,可想而知 SpringBoot 使用的简…

做报表要用什么插件?

Excel 作为大家最熟悉的报表工具,很多表哥表姐每天都在使用,为了加强 Excel 的报表功能,市面上有非常多的 Excel 增强插件,为 Excel 增加了千奇百怪的能力。今天给大家介绍一款专门用来做中国式复杂报表的Excel 插件:思…

【不一样的递归大法】

🎁递归🎅递归🦌定义🎅何时用递归:递归三板斧🦌递归递归🦌递归大法:三板斧🎅如何快速写出递归函数:宏观的角度🎅解题突破🦌整数序列相关…

一文了解什么是NFT

一、什么是NFT NFT 是我们可以用来代表独特物品所有权的代币。他们让我们对艺术品、收藏品甚至房地产等事物进行代币化。资产的所有权由以太坊区块链保护——没有人可以修改所有权记录或复制/粘贴新的 NFT。 NFT 代表不可替代的代币。Non-fungible 是一个经济学术语&#xff…

伪操作和混合汇编

目录 一、伪操作: 二、C和汇编的混合编程 三、ATPCS协议(ARM-THUMB Procedure Call Standard) 一、伪操作: 不会生成代码,只是在编译之前告诉编译器怎么编译 GNU的伪操作一般都以‘.’开头 .global symbol 将symbo…

WEB 安全,浅谈 XSS 攻击(附简单实例)

什么是 XSS XSS(Cross-Site-Scripting),跨站脚本攻击,因为缩写和 CSS 重叠,被别人抢先了,所以只能叫做 XSS。 攻击者可以利用这种漏洞在网站上注入恶意的客户端代码。若受害者运行这些恶意代码,攻击者就可以突破网站…

电感和磁珠有哪些区别?

由于电感和磁珠,很多人会容易认错,本期内容就讲讲,有哪些相似之处! 磁珠与电感不仅在外形上相似,他们在功能上也存在很多相似之处,甚至有时候磁珠和电感可以相互代替。但是磁珠与电感也不完全等同&#xff…

开关电源环路稳定性分析(09)——环路补偿六步法

大家好,这里是大话硬件。 我们来回顾一下前面8讲的内容,主要对下面的知识点进行了分析: 系统框图 反馈环节传递函数 功率级传递函数 PWM级传递函数 传递函数计算 如果我们把开关电源看成是不同的电路模块拼接而成,现在已经知…