我想使用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
类型。
答案 0 :(得分:3)
您收到问题中描述的错误,因为_copysignf()
实际上是主机功能,并且没有设备(即CUDA)对应。
只需使用您链接的文档中描述的功能即可。您不一定会在Visual Studio附带的math.h
中找到所有这些内容,但这并不是CUDA设备代码中可用的决定因素。
intellisense指示是一个单独的问题,许多人在某种程度上解决了它。只需在SO上搜索" CUDA红色下划线"而且你会发现很多建议。但CUDA代码中的intellisense指示并不一定表示存在问题。