Chart 2 OpenCL简介


前言

记录本人学习OpenCL的历程,总结一些重要的知识点,作为个人学习笔记,参考书籍
Qualcomm® Snapdragon™ Mobile Platform OpenCL General Programming and Optimization
介于这本书废话比较多,我只挑我认为重要的地方总结,如果有错误的地方,请各位指出


OpenCL简介

OpenCL是一种面向异构系统的跨平台并行编程的开放且免费标准。
在这里插入图片描述

OpenCL 标准

OpenCL标准主要包含两个组件,即OpenCL运行时API和OpenCL C语言。

  • API定义了一组在主机上运行的函数,用于资源管理、内核分派和其他任务
  • OpenCL C语言用于编写在OpenCL设备上执行的内核。

API 函数

OpenCL API函数可以分为平台层和运行时层。

表一 OpenCL平台层

功能描述
Discover the platform平台是否支持OpenCL
Discover OpenCL devicesGPU、CPU、设备支持是否支持OpenCL
查询OpenCl设备信息全局内存、本地内存、最大工作组size等
上下文上下文管理,如上下文创建、维护、释放

表二 OpenCL运行时

功能描述
命令队列管理用于设备和主机之间的通信,在一个应用程序中可以有多个队列。
创建和构建OpenCL程序和内核是否构建成功
创建内存,准备数据,初始化什么内存?是否是 0 拷贝内存
创建内核调用并提交到设备需要的工作组大小?
同步内存一致性
资源管理返回结果并释放资源

OpenCL C

OpenCL C是 C99 标准的一个子集,但有以下不同:

  • 部分功能(如函数指针、动态内存管理)在OpenCL C中不可用

  • OpenCL对C99进行了扩展,如:

    • 增加了内置函数,用于查询OpenCL内核执行参数
    • 增加了图像加载和存储函数,更有效的使用GPU硬件

OpenCL Profiles

OpenCL定义了两种配置文件(profile):嵌入式配置文件(embedded profile)和完整配置文件(full profile)。

  • 嵌入式配置文件针对移动设备,通常具有较低的精度能力和较少的硬件功能,而不像传统计算设备(如台式机GPU)那样强大。

总结

OpenCl具有可移植性和向后兼容性,但移植后的代码,性能受限于平台。

OpenCL支持向后兼容,由于新版本中可能会废弃一些API函数,因此如果要使用OpenCL 1.1或1.2的废弃API与OpenCL 2.x的头文件一起使用,需要定义宏,如:

  • CL_USE_DEPRECATED_OPENCL_1_1_APIS
  • CL_USE_DEPRECATED_OPENCL_1_2_APIS

类似的规则也适用于如果OpenCL 2.x的宏与OpenCL 3.0的头文件一起使用。此外,OpenCL扩展可能不会适用于新设备,因此使用扩展的应用程序需要检查新设备是否支持它们。

这一篇就小试牛刀,到这里了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值