我在这里得到一个恼人的消息,我不太确定我做错了什么.
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());
Run Code Online (Sandbox Code Playgroud)
和谓词:
struct equalOperator
{
__host__ __device__
bool operator()(float4 x, float4 y)
{
return ( x.w > y.w );
}
};
Run Code Online (Sandbox Code Playgroud)
错误信息:
1> c:\ program files \nvidia gpu computing toolkit\cuda\v4.0\include\thrust\detail\device\generic\extrema.inl(104):error:function"equalOperator :: operator()"无法调用使用给定的参数列表
谢谢!
在案件上花了几个小时后,我设法解决了这个问题.经过我长期审查,我进入了执行的.INL文件min_element()功能,并调用选择恰当的operator(),我提供我发现我失踪了一些
常量
所以这是答案:
struct equalOperator
{
__host__ __device__
bool operator()(const float4 x, const float4 y) const
{
return ( x.w > y.w );
}
};
Run Code Online (Sandbox Code Playgroud)
我花了几天时间......