在cuda / c++代码中使用模板类
Using Template classes in cuda / c++ code
我是新来的cuda编码,(并没有大量的经验在c++中),所以我一直在阅读,试图找到一个解决这个问题的方法,但一般不理解人们尝试和解释,还没有得到它的工作。
基本上,我有一个.cu文件,它包含两个内容:template <class ModelType>
__global__ void Stepkernel(ModelType *particles)
:
template <class ModelType>
void runTest(ModelType *particles)
然后我有一个头文件,SamplerI.h,我没有写,但我试图包括对上面的void函数的调用,所以,在所有的#include下面我有:
template <class ModelType>
void runTest(ModelType *particles);
,然后在头文件中有一个函数,其中包含了对上面的调用。
头文件和相关文件在库libdnest中编译,我用NVCC -c步骤编译.cu文件。Cu,然后链接到:
g++ -o main main.cpp step.o -ldnest
现在,如果模板不存在(即我只是有一个没有提及ModelType的空函数)所有这一切都很好,它编译和运行,但只要我尝试并包括模板,我得到以下编译错误:
../../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*)’
和我不知道该做什么来尝试修复它…
有人有什么想法吗?如果我解释得不够好,请让我知道,我会尽量包括更多的信息,我真的不知道什么是重要的。
干杯林德利
你需要在同一个源文件中有一个模板来让编译器实例化它。
注意c++ 11引入了"extern",但并非所有编译器都支持。
相关文章:
- 编译时未启用intel oneApi CUDA支持
- 在cuda线程之间共享大量常量数据
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- CUDA内核和数学函数的显式命名空间
- CUDA:统一内存和指针地址的更改
- 调试 CUDA MMU 故障
- 使用 CUDA 和纹理进行图像减法
- 将 2D 推力::d evice_vector 复矩阵传递给 CUDA 内核函数
- 编译 CUDA 与数学函数的叮当
- 为什么 CUDA 不会导致C++代码加速?
- 如何防止 CUDA-GDB 中的<优化输出>值
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- CUDA三角函数中的数学保证
- CUDA 使用共享内存平铺 3D 卷积实现
- CUDA:cudaMallocManage处理退出吗?
- Opencv 加速与 CUDA 在 C++.
- Cuda:具有位集数组的 XOR 单位集
- 用于构建 cuda .so 文件(共享库)的生成文件
- Cuda:访问违规写入位置0x0000000000000000