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

CUDA copysign() function not found in __device__ function (MSVC)

本文关键字:函数 copyign CUDA 找不到 MSVC device      更新时间:2023-10-16

我想从__device__函数中使用CUDA数学API函数__device__ float copysignf(float x, float y)(参见文档)。我包括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类型的

您正在获得问题中描述的错误,因为_copysignf()实际上是一个主机函数,并且没有设备(即CUDA)对应。

只使用你链接的文档中描述的函数。你不一定能在Visual Studio自带的math.h中找到所有这些定义,但这并不是CUDA设备代码中工作的决定因素。

智能感知指示是一个单独的问题,许多人已经在某种程度上解决了它。只要在SO上搜索"CUDA红色下划线",你就会找到很多建议。但是CUDA代码中的智能感知指示并不一定表明有问题。