3

私はここに迷惑なメッセージを受け取り、何が間違っているのかよくわかりません。

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 Computing toolkit \ cuda \ v4.0 \ include \ thrust \ detail \ device \ generic \ extrema.inl(104):エラー:関数 "equalOperator :: operator()"を呼び出すことができません与えられた引数リストで

ありがとう!

4

1 に答える 1

5

ケースに数時間を費やした後、問題を解決することができました。長いレビューの後、関数を実行し、提供しmin_element()た適切な関数を呼び出す.inl ファイルを入力しました。operator()

定数

だからここに答えがあります:

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

数日かかりました...

于 2012-02-12T06:20:44.373 に答える