我正在为运行OpenCL 1.2的GPU开发。
我正在尝试使用半平方根函数来计算我的半数据类型的平方根。
但是对于所有half_square根函数,最终都是标准平方根函数的宏扩展。
这导致编译器错误,因为没有任何函数重载与半数据类型匹配。
我在我的内核文件#pragma OPENCL EXTENSION cl_khr_fp16 : enable
答案 0 :(得分:2)
half
类型支持仅在cl_khr_fp16
扩展名可用时才可用。它是可选的,并非在所有设备上都可用。对于支持半精度浮点的OpenCL设备,应用程序可以使用带有CL_DEVICE_HALF_FP_CONFIG
的操作码clGetDeviceInfo
来查询配置信息。见https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/cl_khr_fp16.html
例外情况是,如果支持 images ,您可以拥有包含half
类型的图像,但所有读写和计算都以单精度float
完成。另一个例外是您可以使用向量数据加载/存储功能(例如,vload_half
)将half
值从内存加载并保存到float
标量和向量。在这两种情况下都不会在sqrt
中进行half
等计算,只需要存储。