Используют ли алгоритмы STL несколько ядер? - PullRequest
9 голосов
/ 31 января 2012

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

РЕДАКТИРОВАТЬ: я использую процессоры Intel Core i7 960, на Ubuntu 10.10 с gcc 4.4

Ответы [ 3 ]

10 голосов
/ 31 января 2012

В GNU libstdc ++, по-видимому, имеется параллельный режим, который поддерживает несколько функций распараллеливания для STL:

http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html

4 голосов
/ 31 января 2012

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

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

1 голос
/ 01 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...