AMD OpenCL大学课程(13) OpenCL扩展

简介: 1、OpenCL扩展      OpenCL扩展是指device支持某种特性,但这中特性并不是OpenCL标准的一部分。通过扩展,厂商可以给device增加一些新的功能,而不用考虑兼容性问题。现在各个厂商在OpenCL的实现中或多或少的使用了自己的扩展。

1、OpenCL扩展

     OpenCL扩展是指device支持某种特性,但这中特性并不是OpenCL标准的一部分。通过扩展,厂商可以给device增加一些新的功能,而不用考虑兼容性问题。现在各个厂商在OpenCL的实现中或多或少的使用了自己的扩展。

     扩展的类型分为三种:

  • Khronos OpenCL工作组批准的扩展,这种要经过一致性测试,可能会被增加到新版本的OpenCL规范中。这种扩展都以cl_khr作为扩展名。
  • 外部扩展, 以cl_ext为扩展名。这种扩展是由2个或2个以上的厂商发起,并不需要进行一致性测试。比如cl_ext_device_fission扩展。
  • 某个厂商自己的扩展,比如AMD的扩展printf

2、使用扩展

      OpenCL中,要使用扩展,我们必须打开扩展,在默认状态下,所有的扩展都是禁止的。

       #pragma OPENCL EXTENSION extension_name : enable

       对于OpenCL,一个函数只有在运行时,才知道其是否可用,所以要确定某个扩展是否可用,是程序员的责任,我们必须在使用前查询它的状态。下面是查询扩展是否可用的代码:

image

3、一些Khronos批准的扩展

   原子操作,它可以保证函数只在一个device上实施原子操作,比如:

—cl_khr_{global | local}_int32_base_atomics

—cl_khr_{global | local}_int32_extended_atomics

—cl_khr_int64_base_atomics

—cl_khr_int64_extended_atomics

注意:原子操作能够保证操作结果正确,但不保证操作的顺序。

image

image

       双精度和half精度扩展cl_khr_fp64,在一些物理模拟或者科学计算中,需要双精度支持。AMD的64位扩展用cl_amd_fp64,对于cl_khr_fp64是部分支持,NV支持cl_khr_fp64扩展。但half精度扩展cl_khr_fp16,这两家厂商现在都还不支持。

       在OpenCL中,Byte addressable store 也是一个扩展,对于sub 32的写,比如char,需要该扩展的支持。例如AMD 直方图的例子中,每个bin用一个byte来存储。

       3D Image Write Extensions,在OpenCL标准中,支持2D图像的读写,3D图形的写就需要通过扩展来操作。

       The extension cl_KHR_gl_sharing 允许应用程序使用OpenGL buffer,纹理等。

4、AMD扩展

     cl_ext_device_fission扩展,通过该扩展把一个设备分成多个子设备,每一个设备都有自己的队列,主要是多核cpu以及Cell Broadband Engine使用,该扩展由AMD,Apple,Intel以及IBM四家联合提出。

     fission设备可能的用途包括:

  • 保留一部分设备处理高优先级、低时延的任务。
  • Control for the assignment of work to individual compute units
  • Subdivide compute devices along some shared hardware feature like a cache

     对于每个子设备,都有自己的queue,比如下面的图中,我们把不同任务发送到两个子设备。值得注意的是:要把设备拆分为子设备,首先我们要了解该设备的架构,然后根据任务及device架构进行拆分。

image

       GPU printf 扩展,主要用来debug kernel代码。cl_amd_media_ops扩展,主要用于一些多媒体操作。The AMD device query extension 主要用于查询和事件处理。

      

  5、NV扩展

  • Compiler Options
  • Interoperability Extensions
  • Device Query Extension

6、Cell Broadband Engine Extensions

      cell处理器用的不多,就不详细说了,使用的人可以查询其相关手册。

相关文章
|
JSON 前端开发 Java
【十八】springboot实现自定义全局异常处理
【十八】springboot实现自定义全局异常处理
778 2
【十八】springboot实现自定义全局异常处理
|
机器学习/深度学习 算法 算法框架/工具
MINUN: 微控制器上的精确机器学习推理——论文阅读
MINUN是一个专为微控制器设计的高效机器学习推理框架,能精确解决TinyML中的三大挑战:数字表示参数化、位宽分配优化和内存碎片管理。它支持如Arduino和STM32等低功耗设备,显著减少内存占用,同时保持模型精度。
1174 122
|
Linux 网络安全 数据安全/隐私保护
linux 本地终端 SSH 连接 gcp (Google Cloud Platform ) 配置教程
linux 本地终端 SSH 连接 gcp (Google Cloud Platform ) 配置教程
10239 0
|
机器学习/深度学习 存储 TensorFlow
TensorFlow Lite Micro:嵌入式TinyML系统上的机器学习推理框架——论文深度解析
TensorFlow Lite Micro(TFLM)是专为嵌入式系统设计的轻量级机器学习推理框架,适用于仅有几十KB内存的微控制器。它通过极简架构、模块化设计和内存优化策略,在资源受限设备上高效运行TinyML模型,广泛应用于关键词检测、传感器分析、预测性维护等领域。TFLM支持跨平台部署,并允许硬件厂商提供定制优化,兼顾灵活性与性能。
3072 6
|
NoSQL Java 测试技术
【📕分布式锁通关指南 05】通过redisson实现分布式锁
本文介绍了如何使用Redisson框架在SpringBoot中实现分布式锁,简化了之前通过Redis手动实现分布式锁的复杂性和不完美之处。Redisson作为Redis的高性能客户端,封装了多种锁的实现,使得开发者只需关注业务逻辑。文中详细展示了引入依赖、配置Redisson客户端、实现扣减库存功能的代码示例,并通过JMeter压测验证了其正确性。后续篇章将深入解析Redisson锁实现的源码。
833 0
【📕分布式锁通关指南 05】通过redisson实现分布式锁
|
运维 监控 Ubuntu
【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出
通过设置内存守护进程,可以有效监控和管理系统内存使用情况,防止内存溢出带来的系统崩溃和服务中断。本文介绍了如何在Ubuntu中编写和配置内存守护脚本,并将其设置为systemd服务。通过这种方式,可以在内存使用超过设定阈值时自动采取措施,确保系统稳定运行。
806 4
|
JavaScript 前端开发 API
Node.js 中的 WebSocket 底层实现
Node.js 中的 WebSocket 底层实现
561 0
|
负载均衡 算法 应用服务中间件
【nginx】配置Nginx实现负载均衡
【nginx】配置Nginx实现负载均衡

热门文章

最新文章