最近我在一些开发板上看到了 OpenCL EP 支持,比如 odroid XU。我知道的一件事是 OpenCL EP 适用于 ARM 处理器,但它在哪些功能上与基于主要桌面的 OpenCL 有所不同。
2 回答
主要区别列举如下(从 OpenCL 1.2 开始):
64 位整数支持是可选的。
对 3D 图像的支持是可选的。
对 2D 图像阵列写入的支持是可选的。如果
cles_khr_2d_image_array_writes
嵌入式配置文件支持扩展,则支持写入 2D 图像数组。图像和图像数组的可用通道数据类型存在一些限制(特别是通道数据类型为
CL_FLOAT
且CL_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 嵌入式配置文件,并从枚举此配置文件所暗示的限制开始。