2012-02-11 10 views
3

ここに迷惑なメッセージが出ていて、何が間違っているのかよくわかりません。は、推論:: cuda min_element()関数の比較述語を構築できません。

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コンピューティング ツールキット\ CUDAの\ v4.0のの\は、\引数: 与えられた引数リストでは、関数 "equalOperator :: operator()"を呼び出すことはできません

ありがとうございました!

+0

...数日かかったあなたは、コンパイラが弾力をどう思うか追加することができます引数リストは? –

答えて

5

ケースを数時間過ごした後、私は問題を解決することができました。 I長い確認した後、私はmin_element()機能を実行し、私は私がconstの

だからここに答えがありますいくつかの

がありませんでした気づいているapproriate operator()を呼び出す.inlファイルに入りました:

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

+0

公式スラスト文書の例には「const」は含まれていませんが、私はあなたと同じ結果を観察しています。 – foothill

関連する問題