【发布时间】:2011-02-19 06:20:26
【问题描述】:
我正在学习 OpenMP 并发,并尝试了一些现有的代码。在这段代码中,我试图让所有的 for 循环并行。然而,这似乎使程序比单线程版本慢得多,至少慢 10 倍,甚至更多。
这里是代码:http://pastebin.com/zyLzuWU2
我还使用了 pthreads,结果证明它比单线程版本更快。
现在的问题是,我在我的 OpenMP 实现中做错了什么导致速度变慢?
谢谢!
编辑:单线程版本只是没有所有#pragmas的版本
【问题讨论】:
-
你是在单核系统上运行它吗?
-
除非每个内核使用不超过 1 个线程,否则它们可能会相互竞争共享资源。引入并行化并不会自动使程序运行得更快。
-
@matt:也许您可以写一个答案来说明这一点,也许还有一些解决方法的建议?谢谢!
-
您的代码中有不正确且被忽略的编译指示 - 但您应该了解 OpenMP 概念。我所说的编译指示是“#pragma omp end”。 OpenMP pragma 适用于 C/C++ 中的结构化块,因此不需要 end pragma。只有在 Fortran 中没有块 ({}) 表示您需要使用结束指令。