Apple OS X 上的 OpenCL 半精度扩展支持

Posted

技术标签:

【中文标题】Apple OS X 上的 OpenCL 半精度扩展支持【英文标题】:OpenCL half precision extension support on Apple OS X 【发布时间】:2013-07-02 11:12:01 【问题描述】:

有谁知道 Apple 实现的 OpenCL 中半精度浮点支持的状态。

根据 OpenCL 1.1 规范,以下语句应该启用 half2:

#pragma OPENCL EXTENSION cl_khr_fp16 : enable

但是当我开始构建内核时,编译器会抛出一条消息,例如

error: variable has incomplete type 'half4' (aka 'struct __Reserved_Name__Do_

下面的帖子问了一个类似的问题:OpenCL half4 type Apple OS X 但是这个线程是旧的。谁能告诉我最近苹果是否支持半精度?

【问题讨论】:

【参考方案1】:

当您想知道特定实现是否支持扩展时(无论是 Apple 的还是其他的),只需使用该函数

cl_int clGetPlatformInfo(cl_platform_id platform, 
                         cl_platform_info param_name,
                         size_t param_value_size,
                         void *param_value,
                         size_t *param_value_size_ret)

为 param_name 参数传递值 CL_PLATFORM_EXTENSIONS。 它将返回一个以空格分隔的扩展名列表。 请注意,此列表必须返回“与此平台关联的所有设备都支持”的扩展。

所以这意味着即使平台支持 cl_khr_fp16 扩展但不支持您的设备,它也不会出现在列表中。 要了解您设备上可用的扩展程序,请使用

clGetDeviceInfo(...)

param_name 参数的值为 CL_DEVICE_EXTENSIONS。

【讨论】:

我已经知道我当前版本的 Apple OS 不支持 OpenCL cl_khr_fp16 扩展。我的问题是 Apple OS 的最新版本是否支持此功能?如果是这样,那么我将安装该版本的 Apple OS。【参考方案2】:

有关 OpenCL 扩展查询的通用答案,请参见上面 CaptainObvious 的答案 (https://***.com/a/17425167/5394228)。

我就此询问了 Apple 开发人员支持,他们说 Metal 提供了一半的支持,现在没有计划向 OpenCL 添加新功能。 (他们于 2017 年 11 月回答)

【讨论】:

以上是关于Apple OS X 上的 OpenCL 半精度扩展支持的主要内容,如果未能解决你的问题,请参考以下文章

OpenCL 的精度,hello world 示例中的浮点比较

OS X 上的 ViennaCL:无法将数据复制到 GPU

获得更好的基于CPU的OpenCL驱动程序(OS X)

调度程序不遵守 OpenCL 子设备关联

在 OS X 上运行 ProGuard:Apple 的 rt.jar 在哪里?

减小使用 turicreate 创建的半精度 Core ML 模型的大小