1

Я не могу получить ускорение выше 2 с помощью алгоритмов сортировки на месте (быстрая сортировка и сбалансированная быстрая сортировка QS/BQS) из параллельной реализации libstdC++ (параллельный режим). Я попытался запустить код на многих разных системах, состоящих из от 16 до 24 ядер. Я также пробовал компиляторы GNU и Intel C++, даже в разных версиях, всегда с одинаковыми результатами. Ускорение вокруг 2 одинаково для любого количества ядер от 2 до макс.Плохая скорость с помощью libstdC++ параллельного режима quick sort

Напротив, сортировка многопоточного слияния (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 потоков.

Любая идея, почему это происходит или что я не так?

+0

Вы вызываете 'omp_set_num_threads()', чтобы установить количество потоков, которое оно должно использовать? https://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode_design.html#parallel_mode.design.tuning – NathanOliver

+0

Да, я делаю (в противном случае с MWMS не будет ускорения). –

+0

Это может быть очевидно, но вы проверили, чтобы поставить флаг openmp? – coincoin

ответ

1

я вроде бы решил проблему просто позвонив по телефону:

omp_set_nested(1); 

Документация немного неясно, об этом требовании. Более того, я ожидаю, что библиотека сможет выполнить вызов сам по себе. Надеюсь, это поможет и кому-то другому.

Смежные вопросы