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

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 );
    }
};

错误信息:



谢谢!

最佳答案

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



所以这是答案:

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

花了我几天...

关于cuda - 无法为推力::cuda min_element() 函数构建比较谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9243973/

10-12 19:26