CUDA编译错误:__ hmul和__hneg未定义

时间:2017-05-27 09:12:18

标签: c++ visual-c++ cuda

我试图让半精度内在函数在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_52sm_61(GTX 970及更高版本)。

1 个答案:

答案 0 :(得分:4)

CUDA计算能力版本sm_52及以下版本不支持__hmul功能。目标必须至少为sm_53

在Visual Studio中,转到项目属性,打开Cuda C/C++组并选择Device选项卡,然后更新Code Generation设置,以便所有目标体系结构均为{{1}或以后。