Сортировка занимает O (n log n) в последовательном случае. Если у нас будет O (n) процессоров, мы будем надеяться на линейное ускорение. O (log n) параллельных алгоритмов существуют, но они имеют очень высокую константу. Они также не применимы к обычному оборудованию, у которого нет даже около O (n) процессоров. С процессорами p разумные алгоритмы должны занимать время O (n / p log n).
В последовательном случае быстрая сортировка в среднем имеет лучшую сложность выполнения. Параллельный алгоритм быстрой сортировки легко реализовать (см. Здесь и здесь ). Однако это не очень хорошо работает, поскольку самый первый шаг - разделить всю коллекцию на одном ядре. Я нашел информацию о многих алгоритмах параллельной сортировки, но до сих пор не видел ничего, указывающего на явного победителя.
Я хочу отсортировать списки от 1 миллиона до 100 миллионов элементов на языке JVM, работающем на 8-32 ядрах.
источник
Ответы:
Следующая статья (скачать в формате PDF) представляет собой сравнительное исследование алгоритмов параллельной сортировки на различных архитектурах:
Алгоритмы параллельной сортировки на разных архитектурах
Согласно статье, выборочная сортировка кажется лучшей для многих типов параллельной архитектуры.
Обновление, чтобы решить проблему возраста Марка:
Вот более свежие статьи, знакомящие с чем-то более новым (с 2007 года, которые, кстати, все еще сравнивают с выборочной сортировкой):
Улучшения в сортировке образцов
AA-Sort
Новейший (около 2010 г., некоторым всего пара месяцев):
Схема параллельной сортировки Параллельная сортировка на
основе многоядерных графических
процессоров Гибридная параллельная сортировка ЦП / ГП
Алгоритм случайной параллельной сортировки с экспериментальным исследованием
Высоко масштабируемая параллельная сортировка
Сортировка N-элементов с использованием естественного порядка: новый подход адаптивной сортировки
Обновление за 2013 год. Вот новинка января 2013 года. (Примечание: некоторые ссылки относятся к статьям на Citeseer и требуют бесплатной регистрации):
Лекции в университете:
Параллельное разбиение для выбора и сортировки
Алгоритмы
параллельной сортировки Лекция Алгоритмы параллельной сортировки Лекция 2 Алгоритмы
параллельной сортировки Лекция 3
Другие источники и статьи:
Новый алгоритм сортировки для многоядерных архитектур на основе адаптивной битонной сортировки
Высокая масштабируемость параллельная сортировка 2
Параллельное слияние
Параллельное Слияние двух
параллельных систем самосортировки для объектов
Сравнение производительности алгоритмов последовательной быстрой сортировки и параллельной быстрой сортировки
Общая память, передача сообщений и гибридные сортировки слиянием для автономных и кластерных SMP
Различные параллельные алгоритмы (сортировка и др.), Включая реализации
Гибридные источники и статьи для GPU и CPU / GPU:
Метод OpenCL алгоритмов параллельной сортировки для
сортировки данных архитектуры GPU с использованием графических процессоров
Эффективные алгоритмы сортировки на GPU
Разработка эффективных алгоритмов сортировки для многоядерных GPU
Детерминированная сортировка выборок для GPU
Быстрая сортировка на месте с CUDA на основе битонной сортировки
Быстрая параллельная сортировка
на графических процессорах с использованием гибридного алгоритма Быстрая параллельная сортировка на графических процессорах
Быстрая сортировка на процессорах и графических процессорах: случай не обращая внимания на пропускную способность SIMD sort Сортировка
образцов
графического процессора GPU-ABiSort: Оптимальная параллельная сортировка на потоковых архитектурах
GPUTeraSort: высокий высокопроизводительная сортировка сопроцессора графики для управления большими базами данных
Высокопроизводительный алгоритм сортировки на основе сравнения на многоядерных графических процессорах
Параллельная внешняя сортировка для графических процессоров с поддержкой CUDA с балансировкой нагрузки и низкими накладными расходами на передачу
Сортировка на графических процессорах для крупномасштабных наборов данных: подробное сравнение
источник
Я работал как с алгоритмом параллельной быстрой сортировки, так и с алгоритмом PSRS, который по существу сочетает быструю сортировку параллельно со слиянием.
С помощью алгоритма параллельной быстрой сортировки я продемонстрировал почти линейное ускорение с использованием до 4 ядер (двухъядерный с гиперпоточностью), что вполне ожидаемо с учетом ограничений алгоритма. Чистая параллельная быстрая сортировка полагается на общий ресурс стека, что приведет к конфликту между потоками, что снизит прирост производительности. Преимущество этого алгоритма заключается в том, что он выполняет сортировку «на месте», что уменьшает объем необходимой памяти. Вы можете учитывать это при сортировке более 100 миллионов элементов, как вы сказали.
Я вижу, вы хотите выполнить сортировку в системе с 8-32 ядрами. Алгоритм PSRS позволяет избежать конфликтов за общий ресурс, что позволяет ускорить работу большего числа процессов. Я продемонстрировал алгоритм до 4 ядер, как указано выше, но экспериментальные результаты других показывают близкое к линейному ускорение с гораздо большим количеством ядер, 32 и выше. Недостатком алгоритма PSRS является то, что он не на месте и требует значительно больше памяти.
Если вам интересно, вы можете использовать или просмотреть мой код Java для каждого из этих алгоритмов. Вы можете найти его на github: https://github.com/broadbear/sort . Код предназначен для замены Java Collections.sort (). Если вы ищете возможность выполнять параллельную сортировку в JVM, как указано выше, код в моем репо может вам помочь. API полностью универсален для элементов, реализующих Comparable или реализующих ваш собственный Comparator.
Могу я спросить, для чего вы хотите отсортировать такое количество элементов? Мне интересно узнать о потенциальных приложениях для моего пакета сортировки.
источник
Взгляните на эту статью: Масштабируемый алгоритм параллельной сортировки с использованием точного разделения . Это касается гораздо более 32 ядер. Однако в нем подробно описывается алгоритм, который имеет временную сложность выполнения O (n / p * log (n) + p * log (n) ** 2) и применим для произвольных компараторов.
источник
Статья «Сравнение алгоритмов параллельной сортировки в различных архитектурах» может быть хорошим местом для начала.
источник