Я пытаюсь найти минимальное число в массиве с помощью Thrust и CUDA.
В следующем примере устройство возвращается с 0:thrust :: min_element не работает на float4 device_vector, а на host_vector
thrust::device_vector<float4>::iterator it = thrust::min_element(IntsOnDev.begin(),IntsOnDev.end(),equalOperator());
int pos = it - IntsOnDev.begin();
Однако этот хост версия работает отлично:
thrust::host_vector<float4>arr = IntsOnDev;
thrust::host_vector<float4>::iterator it2 = thrust::min_element(arr.begin(),arr.end(),equalOperator());
int pos2 = it2 - arr.begin();
тип comperator:
struct equalOperator
{
__host__ __device__
bool operator()(const float4 x,const float4 y) const
{
return (x.w < y.w);
}
};
Я просто хотел бы добавить, что тяги :: sort работает с одним и тем же предикатом.
Что произойдет, если вы попытаетесь это сделать с помощью '' 'my_float4''', то есть' '' STRUCT my_float4 {флоат х, Y, Z, W; }; '' '? –
, который сделал трюк! я узнал, что решение несколько минут после того, как я написал исходный пост ... Я фактически определил новую собственную структуру float4, синус, новая структура в основном равна float4 (в байтах), поэтому мне пришлось почти ничего не менять –