我正在尝试将静态成员添加到以下类型:
struct mostRightCornerPred
{
__host__ __device__
static int numIterations;
bool operator()(const long long first,const long long seconds) const
{
return true;
}
};
但我一直在收到错误:
1>c:\users\igal\desktop\pj1712 fixed map res\graph\types.h(21): error : attribute "__host__" does not apply here 1>c:\users\igal\desktop\pj1712 fixed map res\graph\types.h(21): error : memory qualifier on data member is not allowed
我的猜测是CUDA不能引用这个成员。我该如何解决?
答案 0 :(得分:4)
即使查看代码中的语法错误,设备代码中的静态数据也是非法的。原因是如果所有线程都这样做,或者如果只有一个,如果是这样,那么没有定义它将被初始化的点。因此静态数据在这种情况下没有意义。
我相信这个限制在CUDA编程指南中讨论过。
如果您想在仿函数中使用数据成员,只需向构造函数添加构造函数,并使用构造函数的参数初始化数据。