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