我试图让半精度内在函数在CUDA上工作。 half
类型以及__float2half()
和__half2float()
函数按预期编译和工作。但是,每当我引用__hmul
,__hneg
或类似内容时,我都会收到编译错误。确切的错误是:
identifier "__hmul" is undefined
我的代码如下:
#include <cuda_runtime.h>
#include <cuda_fp16.h>
__global__ void foo(float in, float multiplier, float& out)
{
half in_half = __float2half(in);
half multiplier_half = __float2half(multiplier);
half out_half = __hmul(in_half, multiplier_half);
out = __half2float(out_half);
}
我已经包含了我认为合适的标题。我错过了标题或其他内容吗?
我正在使用Visual Studio 2015,针对cudart_static.lib
进行编译,并定位sm_52
和sm_61
(GTX 970及更高版本)。
答案 0 :(得分:4)
CUDA计算能力版本sm_52
及以下版本不支持__hmul
功能。目标必须至少为sm_53
。
在Visual Studio中,转到项目属性,打开Cuda C/C++
组并选择Device
选项卡,然后更新Code Generation
设置,以便所有目标体系结构均为{{1}或以后。