Есть ли алгоритм сортировки массива строк для графического процессора? - PullRequest
7 голосов
/ 15 июля 2010

Массив для сортировки содержит около миллиона строк, где каждая строка может иметь длину до миллиона символов.

Я ищу любую реализацию алгоритма сортировки для графического процессора.

У меня есть блок данных размером примерно 1 МБ, и мне нужно построить массив суффиксов . Теперь вы можете видеть, как можно иметь миллион строк внутри действительно небольшого объема памяти.

1 Ответ

3 голосов
/ 17 июля 2010

Состояние сортировки в графических процессорах не особенно обнадеживает.

Для сортировки 32-разрядных целых чисел в следующей статье 2009 года (с 2 авторами, которые являются исследователями Nvidia) заявлено только 23-процентное увеличение для лучшей сортировки CUDA на GTX280 по сравнению с лучшей сортировкой ЦП на 4-ядерном Yorkfield.

http://www.mgarland.org/files/papers/gpusort-ipdps09.pdf

При этом использовалась радикальная сортировка на GPU и сортировка слиянием на CPU. Для построения массива суффиксов вам понадобится сортировка на основе сравнения, поэтому вместо сортировки с помощью графического процессора лучшим из представленных в статье будет сортировка с помощью графического процессора, которая обеспечивает примерно половину скорости сортировки с помощью графического процессора (с 1 млн. ключи) - т.е. примерно на 40% медленнее, чем сортировка слиянием процессора.

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

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

Но, если ваша цель - поэкспериментировать или просто узнать о GPU, вы можете найти реализацию CUDA с сортировкой слиянием по статье в CUDA SDK:

http://developer.download.nvidia.com/compute/cuda/sdk/website/Data-Parallel_Algorithms.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...