【问题标题】:How to Convert OpenCL code from FP32 to FP16? [closed]如何将 OpenCL 代码从 FP32 转换为 FP16? [关闭]
【发布时间】:2019-04-17 04:03:24
【问题描述】:

有没有办法自动转换为在 FP32 GPU 上进行 FP32 计算而编写的代码,使其始终可以进行 FP16 计算而不是 FP32?

我想要实现的是为旧的 GPU(不支持 HALF 类型)运行代码,在更新的 GPU 上运行......但我自己没有通过代码......

如果不可能,请告诉我应该阅读哪些文档,自己动手做...

(新GPU是Radeon Vega Frontier,驱动是ROCm 1.9.1,操作系统是Ubuntu 18.04) (代码很广泛,由不同的模块组成......所以我不会在这里发布,除非被要求)

【问题讨论】:

  • YOLO 方法是将“float”全部替换为“half”,但我怀疑这可能不是 100% 万无一失的。
  • 代码中的浮点类型真的不多,但很多整数,我试图将它们全部更改为短...但是再次,不干净并且出现错误...所以我需要重做整个代码...
  • 如果没有太多的浮点数学,硬件 FP16 支持的效果将非常有限。为了优化整数代码,遍历所有 uint/uint 和 int/int 乘法并检查是否可以安全地将它们替换为 mul24 甚至 mad24 调用可以产生很大的不同。我不确定 AMD 硬件在短乘法与 mul24 上的表现如何,它们可能更快,也可能不会更快。

标签: opencl amd gpu amd-gpu half-precision-float


【解决方案1】:

不,没有标准标志说“将浮动视为一半”。您必须将“浮动”更改为“一半”。此外,您的设备必须支持 fp16 计算(许多不支持,只有 fp16 storage 在您加载/存储时转换为 fp32 或从 fp32 转换)。 cl_khr_fp16 扩展添加了对半标量和向量类型作为可用于算术运算的内置类型的支持。在任何使用它的内核中都需要一个#prama。

【讨论】:

  • “您的设备必须支持 fp16 计算(很多不支持,只是在您加载/存储时转换为/从 fp32 转换的 fp16 存储)。”这就是我要说的,它确实支持称为 RPM Rapid Packed Math 的东西,即 16 位计算,当输入类型的大小为 16 位时...
  • "cl_khr_fp16 扩展增加了对半标量和向量类型的支持,作为可用于算术运算的内置类型" 我知道,它已经存在了......从来没有什么区别...... .
猜你喜欢
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
相关资源
最近更新 更多