【问题标题】:Convert half to float in OpenCL在 OpenCL 中将一半转换为浮点数
【发布时间】:2014-04-16 23:06:48
【问题描述】:

如果这是微不足道的,我深表歉意,但我无法通过谷歌找到答案。

根据 OpenCL 标准(自 1.0 起),出于存储原因,支持 half 类型。

但在我看来,如果没有 cl_khr_fp16 扩展,就不可能将它用于任何事情?

我想做的是将我的值保存为一半,但在浮点数中执行所有计算。

我尝试使用 convert_half(),但没有 cl_khr_fp16 则不支持。 我尝试在一半之前只写 (float) 进行自动 c 样式转换,但没有奏效。

所以我的问题是,如何将一半用于存储?

我需要能够读写一半。

【问题讨论】:

  • 你的设备支持半型吗?它是可选的,不是必需的。
  • 如果我的问题不清楚,我深表歉意。不,我的设备似乎不支持 cl_khr_fp16 扩展,我知道这是可选的。尽管如此,规范仍然说我应该能够将一半用于存储目的。你可以在这里看到:khronos.org/registry/cl/sdk/1.1/docs/man/xhtml double 和 double 和 half 的向量版本是可选的,但 half 是核心 OpenCL 规范的一部分。

标签: c++ c floating-point opencl precision


【解决方案1】:

使用vload_halfNstore_halfN。存储的 halfN 值将与 floatN 相互转换。

【讨论】:

  • 你是对的。我在阅读文档时错过了这些电话。我确信他们需要 cl_khr_fp16 扩展,并且会读取一半并将它们保持为一半格式,而不是转换为浮点数。感谢您的回答!
【解决方案2】:

据我所知,只有 GPU 支持 half 类型,但只要您对按位操作有所了解,您就可以相当简单地将其转换为浮点数。

请查看以下链接以获得有关如何执行此操作的详细说明。

ftp://ftp.fox-toolkit.org/pub/fasthalffloatconversion.pdf

【讨论】:

  • 链接不起作用(也尝试从谷歌获取它,所以必须是离线的网站)我想我找到了文档。如果可行,我将对其进行调查并将其标记为答案:) 谢谢!
  • 奇怪的是这个链接在我家里和工作中都很好用
【解决方案3】:

由于在任何其他答案中都没有提到它,我想我会添加:您还可以在 OpenCL 图像中使用半浮点数,read_imagefwrite_imagef 函数将执行与浮点数的转换你(不需要 cl_khr_fp16 扩展名)。该扩展仅用于将变量放入(并进行数学运算)一半。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2013-04-16
    • 2011-11-17
    相关资源
    最近更新 更多