CUDA中有半精度浮点数吗?
背景:我想使用glTexSubImage3D操作一个opengl纹理,其中包含我使用CUDA生成的PBO中的数据.纹理以GL_INTENSITY16格式(这是半精度浮动类型afaik)存储,我不想使用glPixelTransferf(GL_x_SCALE,...)从整数值缩放,因为它没有缩放似乎更快.
有什么建议?
tal*_*ies 14
CUDA本身仅支持32位和64位浮点精度类型.
驱动程序和运行时API都支持绑定到半浮点纹理,但是内核中的结果读取将返回提升为32位浮点数的值.在CUDA标准库包括__half2float()与__float2half_rn()功能一半和单精度浮点类型(存储在一个16位的整数的半浮动)之间的转换.因此,有可能在32位精度内核中进行操作,并使用16位类型进行读写操作.但对于本机16位浮点,我认为你运气不好.
编辑补充一点,在2015年,NVIDIA通过添加CUDA 7.5工具包half以及half2类型和内部函数来扩展半精度浮点支持.它还宣布(尚未发布)Pascal架构将支持符合IEE754-2008标准的硬件半精度操作.