zoukankan      html  css  js  c++  java
  • AMD OpenCL大学课程(13) 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处理器用的不多,就不详细说了,使用的人可以查询其相关手册。

  • 相关阅读:
    过滤器排序规则
    n维立体空间建模
    将多个Sheet导入到同一个Excel文件中
    Oracle分页查询
    SSH整合逻辑图
    MD5算法原理
    Spring框架整合Struts2
    Pandas入门——Series基本操作
    Python 使用selenium+webdriver爬取动态网页内容
    Python处理json和dict
  • 原文地址:https://www.cnblogs.com/mikewolf2002/p/2333907.html
Copyright © 2011-2022 走看看