无法为thrust :: cuda min_element()函数构建比较谓词

时间:2012-02-11 20:53:17

标签: cuda thrust

我在这里得到了一个烦人的消息,我不太确定我做错了什么。

float4 *IntsOnHost = new float4[ MAXX * (MAXY - 1) ];
//copy possible intersection points from device to host
CU_SAFE_CALL(cudaMemcpy(IntsOnHost,IntsOnDevToCpyToHost,(MAXX*(MAXY - 1)-1)*sizeof(float4),cudaMemcpyDeviceToHost));
thrust::device_vector<float4> IntsOnDev (IntsOnHost,IntsOnHost + (MAXX * (MAXY - 1)-1)*sizeof(float4)); 
//find the index of the smallest intersection point
thrust::device_vector<float4>::iterator it =  thrust::min_element(IntsOnDev.begin(),IntsOnDev.end(),equalOperator());   

和谓词:

struct equalOperator
{
  __host__ __device__
    bool operator()(float4 x, float4 y)
    {
        return ( x.w > y.w );
    }
};

错误消息:

  

1&gt; c:\ program files \ nvidia gpu computing   工具包\ CUDA \ V4.0 \包括\推力\详细\设备\通用\ extrema.inl(104):   错误:函数“equalOperator :: operator()”无法使用   给出参数列表

谢谢!

1 个答案:

答案 0 :(得分:5)

在案件上花了几个小时后,我设法解决了这个问题。 经过长时间的审核后,我输入了执行min_element()函数的.inl文件并调用了我提供的approriate operator()我注意到我遗漏了一些

  

const

所以这就是答案:

struct equalOperator
{
  __host__ __device__
    bool operator()(const float4 x, const float4 y) const
    {
        return ( x.w > y.w );
    }
};  
我花了几天时间......