【问题标题】:Parallel STL algorithms in OS XOS X 中的并行 STL 算法
【发布时间】:2011-11-17 19:18:21
【问题描述】:

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

具体来说,我重写了一个大循环来使用 std::accumulate。它运行良好。

现在,我想让累积操作并行运行。

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

  1. 包括编译器标志-D_GLIBCXX_PARALLEL
  2. 可能添加标题<parallel/algorithm>

添加编译器标志似乎并没有改变任何东西。执行时间是一样的,监控系统时看不到多核使用的迹象。

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

所以,有几个问题:

  1. 是否有某种方法可以明确确定代码是否实际上是并行运行的?
  2. 是否有在 OS X 上执行此操作的“最佳实践”方式? (理想的编译器标志、标头等?)

欢迎提出任何建议。

谢谢!

【问题讨论】:

  • 有趣,我不知道这个。这个页面没有回答你的问题吗?:gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt12ch31s03.html
  • OS X 的 gcc 来自 Xcode 是 4.2,而不是 4.7。 (或者你可以使用clang,但我不知道libc++是否有并行算法)
  • 肯尼,你是对的。但是,我也使用 Cmake 生成传统的 make 文件,然后使用 gcc 4.7 编译它们(从命令行)。仍然没有并行性的证据。
  • @ergosys。那是我正在关注的确切页面,它引发了我的两个问题。 不包含在我的机器上,并且“全局”并行化标志似乎没有做任何事情。
  • 你怎么知道makefiles运行的是gcc 4.7?在从命令行编译的“hello world”程序中尝试#include ,以确保至少可以正常工作。我目前没有 Mac,但这适用于 linux 上的 4.6.1,所以 4.7 也应该安装这些头文件。如果 mac 安装类似于 linux,则需要使用 g++-4.7 hello.cpp 之类的东西进行编译。我的猜测是 cmake 未配置为执行此操作,而是使用随 xcode 安装的 gcc。

标签: macos algorithm stl parallel-processing


【解决方案1】:

http://threadingbuildingblocks.org/

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

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

【讨论】:

    【解决方案2】:
    • 第二种选择是使用 OpenMP,GCC 和 Clang 虽然不是 STL,但它是跨平台的。
    • 第三种选择是使用 Grand Central Dispatch - OSX 中的官方多核 API,同样几乎不是 STL。
    • 第四个选择是等待 C++17,它将有 Parallelism 模块。

    【讨论】:

    • 六年后,我有同样的问题:C++17(几乎)在这里,我在 N4618 中看到“并行算法”的措辞,但我不知道如何使用它们但在任何主要和/或免费的啤酒编译器上。我不知道它们是否没有实现,或者我只是还没有发挥出-Ds 的魔力。
    • 你可以看这里:github.com/KhronosGroup/SyclParallelSTLgithub.com/intel/parallelstl 但我注意到 par 算法真的很慢,比顺序算法慢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2017-05-10
    • 2021-03-27
    相关资源
    最近更新 更多