STL算法使用多核吗?

时间:2012-01-31 16:04:29

标签: c++ multithreading stl

C ++ STL算法是否使用CPU 的多核来提高性能?如果不, 是否有任何推荐的库可以执行STL所做的事情,但使用多个内核,比如说使用OpenMP?或者是否有任何开关可以在编译期间指定gcc指示STL使用多个核心

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

3 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

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

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