文章目录
- 前言
- OpenCL简介
- OpenCL 标准
- API 函数
- OpenCL C
- OpenCL Profiles
- 总结
前言
记录本人学习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 devices | GPU、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扩展可能不会适用于新设备,因此使用扩展的应用程序需要检查新设备是否支持它们。
这一篇就小试牛刀,到这里了。