我试图在CUDA中使用我的C++类。在CUDA中有选择地编译头文件和类函数
我有一类这样:
#include<string>
#include<stdlib.h>
class exampleClass{
int i;
__host__ __device__ exampleClass(int _i):i(_i){};
__host__ __device__ void increment(){i++;}
__host__ __device__ string outputMessage(return itoa(i);}
};
我已经在.CU文件中设置此并设置编译CUDA C/C++
这种失败,NVCC编译因为CUDA不有字符串。
我想要做的是做类似保留CUDA唯一功能:
#ifndef __CUDA_ARCH__
#include<string>
#endif
#include<stdlib.h>
class exampleClass{
int i;
__host__ __device__ exampleClass(int _i):i(_i){};
__host__ __device__ void increment(){i++;}
#ifndef __CUDA_ARCH__
string outputMessage(return itoa(i);}
#endif
};
但我知道这是行不通......至少,它不是为我工作。 nvcc不喜欢字符串包含,也不显示需要字符串类型的函数。
道歉,如果这个例子不是一流的。总之,我想要做的是在CUDA上具有可执行的核心类成员,同时保持在主机端进行分析和输出的花哨主机操作的能力。
更新:我的最终目标是创建一个基类,其中包含几个指向多个多态类的指针类型。这个基类本身是可以推导出来的。我认为这在CUDA5.0中是可行的。我错了吗?
我用nvcc使用stl类,如字符串或向量,没有问题。你当然不能将字符串发送到内核,或者在内核中使用字符串函数,但是看起来不像你想要做的那样......你应该只能删除“__device__”装饰。 – IdeaHat
MadScienceDreams对我的问题的回答是正确的。然而,这个问题的根本问题在这里找到了它的解决方案:http://stackoverflow.com/questions/5994005/cuda-external-calls-not-supported – PaulD
更具体地说,您需要在CUDA C中包含-dc标志/ C++编译器允许多个cu文件之间的链接。 – PaulD