Высокопроизводительная сортировка (radix) на CUDA

Реальное доказательство того, что GPU может осуществлять сортировку данных (алгоритм radix) в несколько раз быстрее, чем CPU.

Дуэйн Мэррилл (Duane Merrill) и Эндрю Гримшоу (Andrew Grimshaw) с кафедры вычислительной техники Виргинского университета в Шарлотсвилле опубликовали под свободной лицензией свой метод сортировки SRTS Radix Sort, в котором GTX 480 показывает скорость сортировки более 1 млрд 32-битных ключей в секунду: примерно вчетверо быстрее, чем на процессоре Core i7.

Метод подходит для любых CUDA-устройств. Текущая версия поддерживает сортировку любых встроенных числовых типов данных C/C++ (например, signed char, float, unsigned long long), а также автоматическую оптимизацию в случаях, если все ключи имеют одинаковую длину (ускорение сортировки в пять раз).
+18
30 августа 2010, 13:18
16
alizar 2280,1 G+

комментарии (22)

+1
liq #
И не слова про то что это может быть бесполезным. Во первых такие скорости достигаются на объемах более 2М чисел. Вот лично я на практике больше 64К никогда не сортировал. Может ктонибудь из присудствующих сортирует 2М чисел? Было бы интересно услышать. Во вторых перед сортировкой эти данные еще отправить на GPU надо.

PS Реализация неплохая конечно, уделывает radixSort из сэмплов в раза 1.5 на моем GTX470.
+1
b00taNik #
Задачи анализа статистики часто требуют сортировки огромных массивов информации — и для такого класса задач это просто мана небесная :)
0
dimag0g #
А можно пример?
0
b00taNik #
конечно можно.

У Вас в кеш-хранилище информация о 10 миллионах пользователей (подключений, ставок, etc) (несортированная, т.к. это мгновенный слепок активности), которую нужно перекинуть в анализатор статистики.

Известно, что анализатор статистики в несколько раз быстрее работает с сортированными данными (у него даже ключик специальный есть, значительно улучшающий скорость работы за счет использования других алгоритмов)

Надеяться на сортировщик анализатора нет смысла — так как анализатор довольно слабая машина, да и вообще — его задача хранить эту статистику, а не заниматься ее упорядочиванием.

Поэтому втыкаем в кешер одну видяшку и отдаем ей на откуп статистику.

Конечно, когда у Вас 1 кешер и один анализатор, разница между 1мс и 0.3мс незаметна, но когда стоит уже 10кешеров на один анализатор, такой буст уже играет роль.

Где это используется?
Скажу по секрету всей хабре — в крупных букмекерских конторах, например.
0
dimag0g #
Спасибо. Меня как раз интересовал пример статистического алгоритма, который требует отсортированных данных на входе.
0
b00taNik #
Таких алгоритмов навалом — бинарный поиск, системы оценки погрешностей результатов, задачи приближенного моделирования.

Тут ниже обсуждение, что это не для серверов — так это еще как для серверов (хотя, если быть до конца точным, для мощных вычислительных кластеров)
0
dimag0g #
А зачем в статистике бинарный поиск? Система оценки погрешностей — можно ссылку на такую систему, использующую отсортированные данные?
0
b00taNik #
Извините, что долго не отвечал, только сейчас поднял старые комментарии.

Бинарный поиск нужен скорее не для самой статистики, а для быстрого раскладывания по диапазонам.

А на систему оценки погрешностей ссылку дать не могу, т.к. это штука сугубо индивидуальная для каждой компании.
0
Nakilon #
Я конечно не спорю, что это информативный эксперимент, в очередной раз показывающий применимость и эффективность графических ускорителей.
Однако, вы только представьте, сколько начинающих «программистов» теперь, почитав эту новость, укрепились в уверенности, что сортировка есть божественная операция, и будут теперь ее тыкать везде, где есть CUDA, опираясь на то, как она быстра. Вспомните, сколько раз на вопрос «найти максимальный элемент в массиве» вы слышали «отсортируем по убыванию и возьмем первый...»
Страшно представить, какой это толчок ламерству…
+5
Scratch #
ламеры это даже не прикрутят к своим поделкам )
0
pil0t #
кроме, в большей части академических, достижений CUDA хочется более реальных вещей:
например утилита для прикручивания CUDA сортировки(может и не только сортировки) к MSSQL/Oracle/MySQL/Postgres
+2
A_HREF #
Ага, и еще видяхи поставить на сервер :)
0
FTDeBUGgeR #
один в один, такие же комментарии были на ЛОРе =)
0
beeruser #
CUDA — это 99% рендер и HPC
Сервера — это немного «не в кассу»
0
Grox #
А как же Tesla?
0
beeruser #
Tesla это железка, а CUDA это язык программирования
0
Grox #
Tesla это серверное железо для работы с CUDA. Почему сервера то «не в кассу»?
Да и с чего CUDA рендер? Посмотрите на gpgpu.org.
0
beeruser #
>> Почему сервера то «не в кассу»
Веб-сервера. Упомянутые выше MSSQL/Oracle/MySQL/Postgres и т.д.
CUDA ориентирована на плотные параллельные вычисления — рендер/HPC а не на pointer-chasing и 1-поточный код.
Любите микроскопом гвозди забивать? Вперёд

>>Посмотрите на gpgpu.org
Ну и посмотрите на своей странице список тегов.
Никакого веба и «серверных» задач
Математика/hpc/рендер
0
beeruser #
* Веб-сервера и базы данных
+1
noonesshadow #
Каким будет первый движок баз данных с поддержкой CUDA?
0
stas_agarkov #
давайте напишем его сами
0
noonesshadow #
Не спс. Это не мое направление

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.