Do STL算法使用多个核心

Do STL algorithms use multiple cores?

本文关键字:核心 STL 算法 Do      更新时间:2023-10-16

C++STL算法是否在引擎盖下使用CPU的多核以获得更快的性能?如果不是,有什么推荐的库可以做STL做的事情,但有多个核心,比如使用OpenMP?或者在编译过程中有没有任何开关可以指定,gcc指示STL使用多核

编辑:我在Ubuntu 10.10上使用英特尔酷睿i7 960处理器,带有gcc 4.4

GNU libstdc++似乎有一种并行模式,支持STL:的几个并行化功能

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

据我所知,没有一个STL实现可以利用多个内核。即使确实存在,您也需要确保增加的复杂性最终会带来净收益。STL提供的算法类型(排序、累积等)只有在相当极端的情况下(例如,>1000万个元素)才能从并行性中受益。如果您只在STL级别利用并行性,您可能会对结果感到失望。

我会看看英特尔的TBB(http://threadingbuildingblocks.org/)其提供了基于任务的并行性框架。它鼓励算法设计符合基于任务的调度,而不仅仅是一堆叶函数(例如,parallel_sort(),尽管TBB确实提供了一个)。

C++标准既不要求也不禁止并行执行标准算法。

已经有许多并行实现。除了libstdc++并行模式(主要基于MCSTL)之外,还有STAPL和OMPL(也包含在CVMLCPP中)。还有相当多的其他工作,但libstdc++并行模式的开发似乎扼杀了相当多的其它项目。