Cuda 半精度:浮点半精度与浮点半精度之差
似乎没有关于这两个函数的文档Cuda 半精度:浮点半精度与浮点半精度之差,cuda,Cuda,似乎没有关于这两个函数的文档 \uuuufloat2half和\uuuufloat2half之间的区别是什么?看起来CUDA文档在这里确实有点不足 在CUDA 7.5中引入新的half数据类型之前,CUDA中已经存在函数unsigned short\u float2half\u rn(float)与float\u half 2float(unsigned short x)组合。 它在设备功能.h中定义。评论如下: 将单精度浮点值x转换为以无符号短格式表示的半精度浮点值,以四舍五入到最接近的偶数模
\uuuufloat2half
和\uuuufloat2half
之间的区别是什么?看起来CUDA文档在这里确实有点不足
在CUDA 7.5中引入新的half
数据类型之前,CUDA中已经存在函数unsigned short\u float2half\u rn(float)
与float\u half 2float(unsigned short x)
组合。
它在设备功能.h
中定义。评论如下:
将单精度浮点值x转换为以无符号短格式表示的半精度浮点值,以四舍五入到最接近的偶数模式表示
函数half\uu float2half(float)
在cuda\u fp16.h
中定义,其作用显然相同,但返回一个half
:
/*0048*/ STL.U16 [R2], R0;
在舍入到最近模式中,将浮点数a转换为半精度
但是,由于
half
是unsigned short
的typedef,我用以下代码检查了它们是否也这样做:
#include <stdio.h>
#include "cuda_fp16.h"
#include "device_functions.h"
__global__ void test()
{
// auto test = __float2half( 1.4232 );
auto test = __float2half_rn( 1.4232 );
printf( "%hu\n", test );
}
int main()
{
test<<<1,1>>>();
cudaDeviceSynchronize();
}
对于\uuu float2half()
:
你查过电话号码了吗<代码>\uuu float2half()记录在这里。另一个似乎不存在。也许你的意思是
\uuuu2half2\urn()
?例如,我明白了。。。事实上,这一点在文章中已经提到了。非常感谢你详细的回答。
/*0048*/ STL.U16 [R2], R0;