В частности, как я мог отсортировать массив из float3
? Так, что компоненты .x
являются основными критериями сортировки, компоненты .y
являются вторичными критериями сортировки, а компоненты .z
являются критериями сортировки третичного типа.Как отсортировать массив типов векторов CUDA
Есть ли простое решение, которое может сделать один звонок до cub:: DeviceRadixSort
или thrust::sort_by_key
?
На данный момент я имею в виду, может быть, я мог бы создать uint32
ключевой массив, где каждый элемент имеет первую треть своих цифр, взятые из первой трети .x
компонентов входного массива, вторая треть цифр взята из первых третья часть составляющих входного массива .y
и последняя треть ее цифр, взятых из первой трети компонентов .z
входного массива. Или есть лучшее решение?
Вы можете использовать метод, подобный [this] (http://stackoverflow.com/questions/29597224/sorting-packed-vertices-with-thrust). Вам нужна 'sort_by_key'? Мне непонятно, из этого вопроса, что вы делаете. Вам просто нужно построить функтор тяги, который устанавливает правильное упорядочение, которое вы хотите. –
Ваше право. Мне не нужен ключ, я просто подумал, что это будет полезный инструмент, чтобы не извлекать отдельные элементы. Решение, на которое вы указали, выглядит очень полезным, хотя я не особенно знаком с функторами. У вас есть хороший пример/пример для них? В частности, что объясняет аргументы функтора? – inJeans
Функтор - объект функции C++. Если вы Google, вы найдете множество справочных руководств, таких как [этот] (http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html). Это не принципиальная концепция. Кроме того, толчок [руководство по быстрому запуску] (https://github.com/thrust/thrust/wiki/Quick-Start-Guide) полезен, хотя он специально не фокусируется на функторах. Функторы - достаточно важные инструменты, если вы хотите сделать программирование тяги. Но кроме того, тривиальная модификация приведенного ранее примера может быть использована для сортировки массива 'float3' в тяге. –