невозможно построить предикат сравнения для функции thrust :: cuda min_element () - PullRequest
3 голосов
/ 12 февраля 2012

Я получаю здесь раздражающее сообщение, и я не совсем уверен, что я делаю неправильно.

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> c: \ программные файлы \ nvidia gpu computing tools \ cuda \v4.0 \ include \ thrust \ detail \ device \ generic \ extrema.inl (104): ошибка: функция "equalOperator :: operator ()" не может быть вызвана с указанным списком аргументов

спасибо!

1 Ответ

5 голосов
/ 12 февраля 2012

Потратив несколько часов на дело, мне удалось решить проблему.После долгого просмотра я вошел в файл .inl, который выполняет функцию min_element() и вызывает предоставленную мной оценку operator(), и заметил, что мне не хватает некоторых

const

Так вот ответ:

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

занял у меня несколько дней ...

...