параллельная быстрая сортировка в c

После долгих поисков реализации параллельной быстрой сортировки на c, я собираюсь погрузиться в код и написать его себя. (Мне нужно отсортировать массив примерно из 1 миллиона текстовых строк.) Кажется, что все реализации, которые я нашел, разделяют работу внутри самой функции qsort, что создает огромные накладные расходы при разделении относительно небольшого объема работы на поток .

Разве не было бы намного быстрее разделить 1 миллион строк на количество потоков (в моем случае 24 потока) и заставить каждую из них работать над разделом, а затем выполнить сортировку слиянием? Конечно, у этого есть теоретический недостаток, заключающийся в том, что это не сортировка на месте, но с большими объемами доступной памяти это не проблема. Машина, на которой он работает, имеет 12 (очень быстрых) физических / 24 логических ядра и 192 ГБ (да, гигабайты) памяти. В настоящее время даже на этой машине сортировка занимает почти 8 минут!

12
задан PaeneInsula 31 December 2011 в 07:01
поделиться