Do STL算法使用多个核心
Do STL algorithms use multiple cores?
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++并行模式的开发似乎扼杀了相当多的其它项目。
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 在c++中初始化矩阵时出现分段错误(核心转储)
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- MPI突然停止了对多个核心的操作
- 在多个核心中处理一个HTTP请求
- 在STL容器中使用模板类
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 将stl字符串缩小到小于15个字符的容量
- 为什么nullptr是核心语言的一部分,而nullptr_t是STL的一部分?
- GDB C++ - 在查看核心转储时检查 STL 容器
- Do STL算法使用多个核心
- 为什么 STL 在 find() 和 empty() 上"设置"核心转储?
- STL矢量迭代器给出核心转储