2012-01-31 4 views
9

Использует ли алгоритмы C++ STL несколько ядер центрального процессора под капотом для повышения производительности? Если нет, есть ли рекомендованные библиотеки для выполнения STL, но с несколькими ядрами, скажем, с помощью OpenMP? Или есть какие-либо переключатели можно указать при компиляции с GCC инструктажа STL использовать несколько ядерИспользуют ли алгоритмы STL несколько ядер?

EDIT: Я использую Intel Core i7 960 процессоров, на Ubuntu 10.10 с GCC 4.4

+2

Согласно какой реализации? На какой платформе? И знаете ли вы, что лучший способ сделать этот код - многопоточность? Это зависит от ОС для отправки в ядра. –

+5

Ничто не мешает им использовать несколько ядер, но это будет зависеть от поставщика библиотеки. Поскольку это значительно усложнит код, не прибегая к наиболее распространенным случаям использования, я бы предположил, что никто не пытается его использовать. –

+0

c бирка удален. Я думаю, что STL является C++ специфическим ... – pmg

ответ

4

Я не знаю реализации STL, который использует несколько ядер. Даже если он существует, вам необходимо убедиться, что добавленная сложность оказывается чистой выгодой. Типы алгоритмов, которые STL предоставляет (сортировать, накапливать и т. Д.), Выигрывают от параллелизма только в довольно экстремальных обстоятельствах (например,> 10 миллионов элементов). Если вы используете только параллелизм на уровне STL, вы, вероятно, будете разочарованы результатами.

Я бы посмотрел на TBB Intel (http://threadingbuildingblocks.org/), который обеспечивает основанный на задачах параллелизм. Он поощряет разработку алгоритмов, которые поддаются планированию на основе задач, а не только кучу листовых функций (например, parallel_sort(), хотя TBB предоставляет один).

1

Стандарт C++ не требует и не запрещает параллельное выполнение стандартных алгоритмов.

Было несколько параллельных реализаций. В дополнение к параллельному режиму libstdC++ (который в основном был основан на MCSTL) есть STAPL и OMPTL (который также включен в CVMLCPP). Там было много других работ, но разработка параллельного режима libstdC++, похоже, убила немало других проектов.

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