我有不支持扩展名cl_khr_fp16的OpenCL设备,为了节省内存(私有和本地内存),我需要使用两个字节的浮点数据类型而不是四个字节的浮点数据类型。
有什么方法可以手动实现半精度浮点数据类型,例如可以使用:
my_half x[1024]={0};
//.. later in my code
x[0]=float_to_half(0.5f*0.3f);
谢谢
答案 0 :(得分:0)
cl_khr_fp16 扩展增加了对半标量和向量类型的支持,这些类型可以用作算术运算,转换等的内置类型。
即使没有该扩展名,您仍然可以将类型存储在缓冲区和图像中,并在读取时转换为(常规)float,并在写入时从float转换为(常规)您的数学运算使用浮点数)。对于缓冲区,请使用从指针指向一半的负载,并存储到指针指向一半的负载(使用 vload_half,vload_halfn,vloada_halfn和vstore_half,vstore_halfn,vstorea_halfn函数)。对于图像,请使用CL_HALF_FLOAT类型,并使用read_imagef / write_imagef。