在__device__函数(MSVC)中找不到CUDA copysign()函数

时间:2014-06-30 23:37:08

标签: c++ cuda

我想使用CUDA数学API函数__device__ float copysignf(float x, float y)(参见documentation)来使用__device__函数。我包含了math.h,我正在使用Visual Studio 2012工具链。 copysignf()在那里没有定义,但_copysignf()是(注意下划线)。我想这可能会导致问题 - 编译错误结果:

Error 1 error : calling a __host__ function("_copysignf") from a __global__ function("test_kernel") is not allowed C:\cuda.cu(152) (col. 10)

如何在Visual Studio中使用CUDA copysignf()函数?

注意:我仔细检查了模板参数不匹配,两个参数都是float类型。

1 个答案:

答案 0 :(得分:3)

您收到问题中描述的错误,因为_copysignf()实际上是主机功能,并且没有设备(即CUDA)对应。

只需使用您链接的文档中描述的功能即可。您不一定会在Visual Studio附带的math.h中找到所有这些内容,但这并不是CUDA设备代码中可用的决定因素。

intellisense指示是一个单独的问题,许多人在某种程度上解决了它。只需在SO上搜索" CUDA红色下划线"而且你会发现很多建议。但CUDA代码中的intellisense指示并不一定表示存在问题。