我是 cuda 编码的新手,(并且在 c++ 方面没有大量经验)所以我一直在阅读以尝试找到解决此问题的方法,但通常不了解人们尝试和解释的内容,并且还没有得到它在职的。
基本上,我有一个 .cu 文件,其中包含两件事:
template <class ModelType>
__global__ void Stepkernel(ModelType *particles)
和:
template <class ModelType>
void runTest(ModelType *particles)
然后我有一个头文件,SamplerI.h,我没有写,但我试图包含对上面的 void 函数的调用,所以,在我拥有的所有#includes 之下:
template <class ModelType>
void runTest(ModelType *particles);
然后稍后在标题中有一个函数,我在其中包含了对上述内容的调用。
头文件和相关文件在库 libdnest 中编译,我使用 nvcc -c step.cu 编译 .cu 文件,然后链接:
g++ -o main main.cpp step.o -ldnest
现在,如果模板不存在(即我只有一个没有提及 ModelType 的 void 函数),所有这一切都很好,它会编译并运行,但是一旦我尝试包含模板,我就会得到以下编译错误:
../../include/SamplerImpl.h: In member function ‘bool DNest3::Sampler<ModelType>::step() [with ModelType = Banana]’:
../../include/SamplerImpl.h:121: instantiated from ‘void DNest3::Sampler<ModelType>::run() [with ModelType = Banana]’
main.cpp:37: instantiated from here
../../include/SamplerImpl.h:159: error: no matching function for call to ‘runTest(Banana*)’
而且我不知道该怎么做才能尝试修复它...
有没有人有任何想法?如果我解释得不够好,请告诉我,我会尝试包含更多信息,我真的不知道什么是重要的。
干杯林德利