2012-02-11 4 views
3

Я получаю здесь раздражающее сообщение, и я не совсем уверен, что я делаю неправильно.не может построить предикат сравнения для тяги :: cuda min_element() function

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: \ Program Files \ NVIDIA GPU-вычислениям инструментарий \ CUDA \ v4.0 \ включать \ thrust \ detail \ device \ generic \ extrema.inl (104): ошибка: функция «equalOperator :: operator()» не может быть вызвана с помощью списка аргументов

спасибо!

+0

вы можете добавить то, что компилятор думает давание n список аргументов? –

ответ

5

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

сопзЬ

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

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

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

+0

Обратите внимание, что в официальном примере документа Thrust doc нет «const», но я наблюдаю тот же результат, что и вы. – foothill