如何将一个静态成员添加到thrust :: binary_predicate?

时间:2012-02-24 14:11:54

标签: 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\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不能引用这个成员。我该如何解决?

1 个答案:

答案 0 :(得分:4)

即使查看代码中的语法错误,设备代码中的静态数据也是非法的。原因是如果所有线程都这样做,或者如果只有一个,如果是这样,那么没有定义它将被初始化的点。因此静态数据在这种情况下没有意义。

我相信这个限制在CUDA编程指南中讨论过。

如果您想在仿函数中使用数据成员,只需向构造函数添加构造函数,并使用构造函数的参数初始化数据。