OS X中的并行STL算法

时间:2011-11-17 19:18:22

标签: macos algorithm stl parallel-processing

我致力于转换现有程序以利用STL的一些并行功能。

具体来说,我重写了一个大循环来处理std :: accumulate。它很好地运行。

现在,我希望将累积操作并行运行。

我在GCC上看到的文档概述了两个具体步骤。

  1. 包含编译器标志-D_GLIBCXX_PARALLEL
  2. 可能会添加标题<parallel/algorithm>
  3. 添加编译器标志似乎没有任何改变。执行时间是相同的,在监视系统时我没有看到任何多个核心使用的迹象。

    添加并行/算法标头时出错。我认为它将包含在最新版本的gcc(4.7)中。

    所以,有几个问题:

    1. 有没有办法明确确定代码是否实际并行运行?
    2. OS X上是否有“最佳实践”方法? (理想的编译器标志,标题等?)
    3. 欢迎提出任何建议。

      谢谢!

2 个答案:

答案 0 :(得分:2)

请参阅http://threadingbuildingblocks.org/

如果你只是对STL算法进行并行化,你会对结果感到失望。在处理非常大的数据集(例如N> 1000万)时,这些算法通常只会开始显示可扩展性优势。

TBB(和其他类似的人)在更高层次上工作,专注于整体算法设计,而不仅仅是叶子函数(如std :: accumulate())。

答案 1 :(得分:0)

  • 第二种选择是使用OpenMP,GCC和GCC都支持 Clang虽然不是STL,但却是跨平台的。
  • 第三种选择是使用Grand Central Dispatch - OSX中的官方多核API,再次使用STL。
  • Forth的替代方案是等待C ++ 17,它将具有Parallelism模块。