__device__
我在 CUDA 中有以下模板函数:
template<typename T>
__device__ void MyatomicAdd(T *address, T val){
atomicAdd(address , val);
}
如果将 T 实例化为浮点数,则编译和运行都很好,即
__global__ void myKernel(float *a, float b){
MyatomicAdd<float>(a,b);
}
将毫无问题地运行。
我想专门研究这个函数,因为没有atomicAdd()
双精度,所以我可以手动编写双精度实现。暂时忽略双精度特化,单精度特化和模板如下所示:
template<typename T>
__device__ void MyatomicAdd(T *address, T val){
};
template<>
__device__ void MyatomicAdd<float>(float *address, float val){
atomicAdd(address , val);
}
现在编译器抱怨 atomicAdd() 在我的专业中未定义,当我尝试在专业中使用 __syncthreads() 之类的任何 CUDA 函数时同样适用。有任何想法吗?谢谢。