OpenCL和OpenCL嵌入式配置文件之间的主要区别



最近我在一些开发板上看到了对OpenCL EP的支持,比如odroid XU。我知道的一件事是,OpenCL EP适用于ARM处理器,但它与主要的基于桌面的OpenCL在哪些功能上有所不同。

主要差异列举如下(截至OpenCL 1.2):

  • 64位整数支持是可选的。

  • 支持3D图像是可选的。

  • 支持2D图像阵列写入是可选的。如果cles_khr_2d_image_array_writes嵌入式配置文件支持扩展,支持对2D图像阵列的写入。

  • 图像和图像阵列的可用通道数据类型存在一些限制(特别是通道数据类型为CL_FLOATCL_HALF_FLOAT的图像仅支持CL_FILTER_NEAREST采样器滤波器模式)

  • 对图像和图像阵列可用的采样器寻址模式存在限制。

  • 您可能需要考虑一些浮点舍入更改。

  • 浮点加法、减法和乘法将始终正确取整,其他运算(如除法和平方根)的精度各不相同。还有很多其他浮点值需要注意。

  • 整数数据类型和浮点整数之间的转换精度有限(但也有例外)。

简而言之,这里的主要区别在于浮点精度。换句话说,嵌入式配置文件不需要遵守IEEE 754浮点规范,如果你正在进行大量依赖它的数值计算,这可能是一个问题。引用自规范:

放宽了遵守IEEE 754要求的要求对于基本的浮点运算,尽管极不可取为具有更严格要求的嵌入式设备提供灵活性硬件领域预算的要求。

还有一点在第10节中没有提到,但值得注意:虽然桌面配置文件必须有一个可用于编译OpenCL内核的编译器,但嵌入式配置文件不需要提供。这可以从clGetDeviceInfo文档中看到,其中指出:

CL_DEVICE_COMPILER_AVAILABLE: Return type: cl_bool
Is CL_FALSE if the implementation does not have a compiler available
to compile the program source. Is CL_TRUE if the compiler is available.
This can be CL_FALSE for the embededed (sic) platform profile only.

有关OpenCL Embedded Profile规范的完整详细列表,请启动PDF阅读器,下载OpenCL规范(无论您为哪个版本开发),然后找到相关部分。

标准中的第10节回答了您的问题。本节完全致力于OCL嵌入式配置文件,并从列举该配置文件所暗示的限制开始。

最新更新