【发布时间】:2011-11-17 19:18:21
【问题描述】:
我致力于转换现有程序以利用 STL 的一些并行功能。
具体来说,我重写了一个大循环来使用 std::accumulate。它运行良好。
现在,我想让累积操作并行运行。
我看到的 GCC 文档概述了两个具体步骤。
- 包括编译器标志
-D_GLIBCXX_PARALLEL - 可能添加标题
<parallel/algorithm>
添加编译器标志似乎并没有改变任何东西。执行时间是一样的,监控系统时看不到多核使用的迹象。
添加并行/算法标头时出现错误。我认为它将包含在最新版本的 gcc (4.7) 中。
所以,有几个问题:
- 是否有某种方法可以明确确定代码是否实际上是并行运行的?
- 是否有在 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