I’m looking at thrusts’s max_element right now, and I would like to know how I can use a custom comparison function so that I can operate on structs :smile: . My struct looks something like this:
struct Particle {
glm::vec3 Acceleration; // [float|float|float]
glm::vec3 Velocity; // [float|float|float]
}
And I would like to find the highest velocity magnitude in my array. This is how I calculate vm:
float timeStep = 0.01f;
float vm = glm::length2(particles[i].Velocity + particles[i].Acceleration * timeStep);
This is what I have so far, this just finds the highest float value:
const int N = 1000000;
float* h_vec = new float[N];
for (int i = 0; i < N; i++) {
h_vec[i] = i;
}
float* d_vec;
COMPUTE_SAFE(cudaMalloc((void**)&d_vec, N * sizeof(float)));
COMPUTE_SAFE(cudaMemcpy(d_vec, h_vec, N * sizeof(float), cudaMemcpyHostToDevice));
thrust::device_ptr<float> dev_ptr = thrust::device_pointer_cast(d_vec);
thrust::device_ptr<float> min_ptr = thrust::max_element(dev_ptr, dev_ptr + N);
printf("\nMininum value = %f\n", min_ptr[0]);
Any advice would be greatly appreciated :smile: