Cuda 如何将静态成员添加到推力::二进制_谓词?
我正在尝试将静态成员添加到以下类型:Cuda 如何将静态成员添加到推力::二进制_谓词?,cuda,thrust,Cuda,Thrust,我正在尝试将静态成员添加到以下类型: struct mostRightCornerPred { __host__ __device__ static int numIterations; bool operator()(const long long first,const long long seconds) const { return true; } }; 但我不断地得到一个错误: 1>c:\users\igal\desk
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
1> c:\users\igal\desktop\pj1712 fixed map res\graph\types.h(21):错误
:属性“\uuuu主机\uuuuuu”在此处不适用
1> c:\users\igal\desktop\pj1712 fixed map res\graph\types.h(21):错误
:不允许在数据成员上使用内存限定符
我猜CUDA不能指这个成员。如何修复它?即使查看代码中的语法错误,设备代码中的静态数据也是非法的。原因是,如果所有线程都要初始化它,或者如果只有一个线程,那么是哪个线程,那么没有定义初始化它的点。因此,在这种情况下,静态数据毫无意义 我相信CUDA编程指南中已经讨论了这个限制
如果要在函子中包含数据成员,只需将构造函数添加到函子中,并使用构造函数的参数初始化数据。即使查看代码中的语法错误,设备代码中的静态数据也是非法的。原因是,如果所有线程都要初始化它,或者如果只有一个线程,那么是哪个线程,那么没有定义初始化它的点。因此,在这种情况下,静态数据毫无意义 我相信CUDA编程指南中已经讨论了这个限制
如果你想在一个函子中包含数据成员,只需在你的函子中添加一个构造函数,并使用构造函数的一个参数初始化数据。那段代码被破坏了,这肯定不是你想要编译的吗?
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?目前,您正在将它们应用于静态成员……我希望它们应用于整个结构的成员静态成员和运算符\uuuuuu host\uuuuuu
仅应用于函数定义,而不应用于变量。静态数据成员必须在类之外定义。如何将编译单元范围内的变量定义为\uuuuuuuu主机\uuuuuuuuu设备\uuuuuuu
?这是非法的。即使它不是非法的,你怎么能在没有巨大内存竞争的情况下从类中访问它?@igalk:这是不可能的。你到底想实现什么?那段代码被破坏了,这肯定不是你想要编译的吗?\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?目前,您正在将它们应用于静态成员……我希望它们应用于整个结构的成员静态成员和运算符\uuuuuu host\uuuuuu
仅应用于函数定义,而不应用于变量。静态数据成员必须在类之外定义。如何将编译单元范围内的变量定义为\uuuuuuuu主机\uuuuuuuuu设备\uuuuuuu
?这是非法的。即使它不是非法的,你怎么能在没有巨大内存竞争的情况下从类中访问它?@igalk:这是不可能的。你到底想要实现什么?