c - 为什么我的 OpenMP 实现比单线程实现慢?

标签 c openmp

我正在学习 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/

相关文章:

c - 无序修改和访问指针

c - 显示对话框位图

c - C : Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT 中的前序遍历问题

c++ - OpenMP - 嵌套 for 循环在外部循环之前并行时变得更快。为什么?

c - C 结构体中的位域表达式

c - 无限 do-while 循环,应该寻找 JPEG header

c++ - 在 OpenMP 循环中调用 QApplication::processEvents()?

c - 为什么在这种情况下会发生段错误? Openmp问题

multithreading - Openmp中for循环内的关键部分

c++ - 有没有办法并行化下三角矩阵求解器?