I'm trying to find the float3 element in an array with the highest x value (similar to this example):
// Find the variable with the max_x value
// Binary predicate
struct comp_float3_x{
__host__ __device__
bool operator()(const float3& lhs, const float3& rhs){
return lhs.x < rhs.x;
}
};
/*initialize*/
size_t n = 8;
float3 *data = cudaMallocManaged(...);
/*set random values*/
/*find the max x element*/
thrust::device_ptr<float3> d_ptr = thrust::device_pointer_cast(data);
thrust::device_ptr<float3> it_ptr = thrust::max_element(thrust::device, d_ptr, d_ptr + n, comp_float3_x());
float3 result;
cudaMemcpy(&result, it_ptr.get(), sizeof(float3), cudaMemcpyDeviceToHost);
printf("%f, %f, %f", result.x, result.y, result.z);
However when compiling and executed, I get the following error:
terminate called after throwing an instance of 'thrust::system::system_error'
what(): extrema failed on 2nd step: invalid device function
Aborted (core dumped)
What am I doing wrong?