Какой самый эффективный предикат сортировки CUDA Thrust или C ++ STL можно использовать, если мне не нужен полный строгий порядок? - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть большой массив, который я должен отсортировать в CUDA Thrust или C ++ STL.Данные уже разбиты на сегменты по ключу.Мой тип должен сортировать значения в определенных сегментах по моему предикату, сохраняя при этом смежность каждого сегмента и относительный порядок сегментов.Что не нужно, так это чтобы значения в других сегментах были полностью отсортированы.Они могут произвольно перемещаться внутри своего сегмента.

Я хотел бы знать, какой наиболее эффективный предикат использовать для относительного порядка в определенных сегментах, которые меня не интересуют.

thrust::sort(vec.begin(), vec.end(), [] (auto a, auto b) {
    return (a.key() != b.key()) ? a.key() < b.key() : // keep segments in place
       (a.needsSorted() ? a.value() < b.value() : (WHAT_GOES_HERE?)); });

Мой предикат, когда я забочусь о значениях (a.value () Меня интересуют ответы как для GPU, так и для CPU, но в основном для GPU.Спасибо.

1 Ответ

0 голосов
/ 07 декабря 2018

false - допустимая опция, которая эффективно обрабатывает все элементы с одинаковым сегментом как эквивалентные, если сегмент не нуждается в сортировке.true нет.

Или вы можете заказать их другим способом, если хотите попробовать.Приведет ли какой-либо конкретный порядок к «сортировке, заканчивающей самое раннее», вероятно, зависит от точной реализации и ваших данных, поэтому профилирование действительно единственный способ ответить на этот вопрос.

...