c/c++开发分享为什么我的OpenMP实现比单线程实现慢?

我正在学习OpenMP并发性,并尝试了我现有的一些代码。 在这段代码中,我尝试将所有for循环并行化。 但是,这似乎使程序变得更慢,比单线程版本慢至少10倍,甚至更多。

这是代码: http : //pastebin.com/zyLzuWU2

我还使用了pthreads,它比单线程版本更快。

现在的问题是,在我的OpenMP实现中我做错了什么导致了这种放缓?

谢谢!

编辑:单线程版本只是没有所有#pragmas的版本

    我在您的代码中看到的一个问题是,您在非常小的循环(例如,8或64次迭代)中使用OpenMP。 由于开销,这将不会有效。 如果要将OpenMP用于n-queens问题,请查看OpenMP 3.0任务和线程并行性以解决分支问题。

    我认为您的代码太复杂了,无法在此处进行审核。 我立即看到的一个错误是它甚至不正确。 在使用omp parallel for执行求和的地方,必须使用reduction(+: yourcountervariable)将不同线程的结果正确组合在一起。 否则,一个线程可能会覆盖其他线程的结果。

    至少有两个原因:

      以上就是c/c++开发分享为什么我的OpenMP实现比单线程实现慢?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545314.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注