Даже если вы можете сортировать объекты с помощью специальных определений структуры, используя структуру в качестве функтора, это заставит вас изменить алгоритм сортировки с радикальной сортировки на сортировку слиянием.Скорость radix-sort заметно выше, чем merge-sort.Поэтому при использовании thrust старайтесь использовать целочисленные типы в качестве ключевых значений.
Я могу предложить вам использовать функцию "thrust :: sory_by_key (..)".
Вы должны изменить свою структуруиз структуры AOS в SOA.
struct OB{
int N;
Cls *C; //CLS is another struct.
}
до
struct OBs{
int []Ns; -> thrust::device_vector<int> indices;
Cls *C[]; -> thrust::device_vector<Cls> values;
}
Когда вы сортируете индексы с помощью sort_by_key, значения уже будут отсортированы.
thrust::sort_by_key(indices.begin(), indices.end(), values.begin());