我正在学习 OpenMP 并发,并尝试使用我现有的一些代码。在这段代码中,我试图让所有的 for 循环并行。然而,这似乎使程序变慢了很多,至少比单线程版本慢 10 倍,甚至更多。
这是代码:http://pastebin.com/zyLzuWU2
我还使用了 pthreads,事实证明它比单线程版本更快。
现在的问题是,我在我的 OpenMP 实现中做错了什么导致了这种减速?
谢谢!
编辑:单线程版本只是没有所有#pragmas 的版本
最佳答案
我在您的代码中看到的一个问题是您在非常小的循环(例如 8 或 64 次迭代)中使用 OpenMP。由于开销,这将不会有效。如果您想将 OpenMP 用于 n 皇后问题,请查看 OpenMP 3.0 任务和线程并行性以解决分支定界问题。
关于c - 为什么我的 OpenMP 实现比单线程实现慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5042351/