在OpenCL中将half转换为float

时间:2012-11-20 15:59:54

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

如果这很简单,我道歉,但我一直无法通过谷歌找到答案。

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

在我看来,如果没有cl_khr_fp16扩展名,就不可能将它用于任何东西?

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

我尝试使用convert_half(),但没有cl_khr_fp16则不支持。 我尝试在自动c风格转换的一半之前写(浮动),没有工作。

所以我的问题是,如何利用一半进行存储?

我需要能够读写半个。

3 个答案:

答案 0 :(得分:3)

使用vload_halfNstore_halfN。存储的halfN值将转换为/从floatN。

答案 1 :(得分:1)

据我所知,只有GPU支持类型的一半,但只要您对位操作有所了解,就可以相当简单地将它转换为浮点数并返回浮点数。

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

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

答案 2 :(得分:1)

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