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:这是不可能的。你到底想要实现什么?