Я не могу получить ускорение выше 2 с алгоритмами сортировки на месте (быстрая сортировка и сбалансированная быстрая сортировка; QS/BQS) из параллельной реализации libstdС++ (параллельный режим). Я пробовал запускать код на множестве разных систем, состоящих из 16-24 ядер. Я также пробовал компиляторы GNU и Intel C++, даже в разных версиях, всегда с одинаковыми результатами. Ускорение около 2 одинаково для любого количества ядер от 2 до макс.
Напротив, многосторонняя сортировка слиянием (MWMS) хорошо масштабируется (ускорение около 10 при использовании 16 потоков на 16-ядерной машине). Согласно презентации Дж. Синглера "Параллельный режим GNU libstdc++: преимущества многоядерного использования STL", их измеренное ускорение для BQS почти такое же, как для MWMS (см. стр. 18, http://ls11-www.cs.uni-dortmund.de/people/gutweng/AD08/VO11_parallel_mode_overview.pdf); они наблюдали ускорение более чем в 20 раз при использовании BQS с 32 потоками.
Любая идея, почему это происходит или что я не так?
omp_set_num_threads()
, чтобы установить количество потоков, которые он должен использовать? gcc.gnu.org/onlinedocs/libstdc++/manual/ - person NathanOliver   schedule 21.04.2015omp_set_nested()
. - person Daniel Langr   schedule 21.04.2015