【发布时间】:2019-01-19 13:21:28
【问题描述】:
我的 OpenCL 设备不支持扩展 cl_khr_fp16,我需要使用两字节浮点数据类型而不是四字节来节省内存(私有和本地内存)。
有什么方法可以手动实现半精度浮点数据类型,例如使用:
my_half x[1024]={0};
//.. later in my code
x[0]=float_to_half(0.5f*0.3f);
谢谢
【问题讨论】:
-
如果您知道浮点数的二进制内存布局与 32 位 int 的“字节序”相同,那么您可以使用
<math.h>中的ldexp()和frexp()的组合来制作你的float_to_half和half_to_float函数。如果没有,您可以使用上述方法以及额外的比例将二进制点放在您想要的位置,然后转换为(short)。需要注意负值、零值和超出范围的值。 -
你可以使用包含两个
chars 的类来使用一些魔法,但我怀疑这是否值得
标签: c++ c parallel-processing kernel opencl