我试图编译一个.cu文件,其中包含一个.cuh文件,该文件带有使用nvcc的模板化设备函数。同一个.cuh文件也包含在.cpp中,因此我试图防止模板化设备函数从.cpp端可见。为此,我使用
foo.cuh
#if defined(__CUDA__) && defined(__CUDA_ARCH__)
template <typename T>
__device__ void foo(){...}
#endif
然而,当我试图从内核中使用device函数时,它说在编译. cu时该函数不存在。如果我删除__CUDA__
检查,.cu编译正常,但在这种情况下,它在编译.cpp文件时失败。
我在支票上漏掉了什么吗?
1条答案
按热度按时间4xrmg8kj1#
nvcc没有定义
__CUDA__
宏。因此,除非您在某个地方使用自己的方法定义了它(?),否则您的#if
指令将始终被跳过。你想要
__CUDACC__
吗?示例:
(the
__CUDA_ARCH__
宏在这里也是not needed。