【问题标题】:Do STL algorithms use multiple cores?STL 算法是否使用多个内核?
【发布时间】:2012-01-31 16:04:28
【问题描述】:

C++ STL 算法是否在底层使用 CPU 的多核以获得更快的性能?如果不, 是否有任何推荐的库来执行 STL 的功能,但具有多个内核,例如使用 OpenMP?或者在编译期间是否可以指定任何开关,使用 gcc 指示 STL 使用多个内核

编辑:我在带有 gcc 4.4 的 Ubuntu 10.10 上使用 Intel Core i7 960 处理器

【问题讨论】:

  • 根据哪个实现?在哪个平台上?你知道代码能做的最好的事情就是多线程吗?由操作系统分配给内核。
  • 没有什么可以阻止他们使用多个内核,但这取决于库提供者。由于它会使代码变得非常复杂,而不会使最常见的用例受益,我猜没有人会尝试它。
  • 确实......也许 OP 应该指定一个他认为多核会神奇地使标准或 STL 算法“更快”的情况。
  • 一般来说不会,因为大多数 STL 算法最终都会调用大多数类型的用户代码,并且不要求用户代码可以从多个线程或同时调用。
  • @smilingbuddha CPU 和操作系统也是如此,据我所知,一些旧操作系统不能使用多线程功能。

标签: c++ multithreading stl


【解决方案1】:

GNU libstdc++ 似乎有一个并行模式,支持 STL 的多个并行化特性:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-07
        • 2013-10-12
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        • 2016-08-16
        • 1970-01-01
        • 2016-03-29
        相关资源
        最近更新 更多