Я реализовал как последовательную версию, так и параллельную версию quicksort.Ускорение сверхлинейного алгоритма быстрой сортировки
Я использовал для проверки ускорения наихудшего случая quicksort для моей реализации: исходный массив уже отсортирован, и в моем случае стержень всегда является первым элементом массива.
Итак, раздел генерирует два набора, один из которых содержит элементы, меньшие, чем опорный, а другой с элементами, превышающими вершину, а именно n - 1 элементов, где n - количество элементов массива, передаваемых в качестве аргумента quicksort функция. Глубина рекурсии имеет размер N -1, где N - количество элементов исходного массива, переданных как аргумент для функции quicksort.
Обс: Наборы фактически представлены двумя переменными, содержащими начальное и конечное положение части массива, которая соответствует либо элементам меньше, чем точка поворота, а элементы выше, чем точка поворота. Все разделение происходит на месте, что означает, что в процессе не создается новый массив. Разница последовательной параллели в параллельной версии создается более одного массива, где элементы разделяются поровну между ними (сортируется как последовательный случай). Для соединения элементов в параллельном случае использовалось слияние алгоритмов.
Полученное ускорение было выше теоретического, это означает, что с двумя потоками достигнутое достижение было более чем в 2 раза по сравнению с последовательной версией (точнее, 3 раза) и с 4-мя потоками ускорение было 10x.
Компьютер, на котором я запускал потоки, представляет собой машину с 4 ядрами (Phenom II X4) под управлением Ubuntu Linux 10.04, 64 бит, если я не ошибаюсь. Компилятор gcc 4.4 и флаги не были переданы для компилятора, за исключением включения библиотеки pthread для параллельной реализации;
Итак, кто-то знает, почему достигается сверхлинейное ускорение? Может кто-нибудь дать какой-нибудь указатель, пожалуйста?
Имеет ли у X4 «турбобус» или другое автоматическое динамическое масштабирование? –
Кроме того, выполняются ли результаты для * случайных данных * или это просто артефакт * данных наихудшего случая? –