C ++ OpenMP并行比串行慢

槟榔

我已经在C ++中实现了一个并行代码,用于使用OPENMP使用Prim的算法查找最小生成树。有时它要快一些(7.95毫秒),但有时我会得到12.7毫秒的速度,这比串行版本(我得到9.69毫秒)要慢得多。这是我的代码的并行版本:

https://dpaste.de/dUt6

你能帮忙吗?

此外,是否有测试我的代码性能的有效方法?time.h似乎不准确。

非常感谢!

玻色子

OpenMP的开销会给时间计算增加一个常数项。让我举个例子吧。

假设您的算法以A*nA为常数并且n为要迭代的项目数结束。我们还假设您的算法完全并行化,因此,如果您有k线程,则并行化算法会O(n)/k及时完成由于OpenMP开销,运行时间将是A*n/k + BB的开销。因此,为了让您看到来自OpenMP的任何好处A*n/k + B < A*n对于n [0,阈值]的某个范围的值,由于开销,OpenMP实际上将比串行算法慢B

另一个重要的一点是,取决于代码中是否已使用OpenMP,OpenMP具有不同的开销/阈值。我把这称为冷暖门槛。

dtime_cold = omp_get_wtime();
foo();  //cold  - OpenMP has not been called before
dtime_cold = omp_get_wtime() - dtime_cold;

dtime_warm = omp_get_wtime();
foo(); //warm - OpenMP has already been called once
dtime_warm = omp_get_wtime() - dtime_warm;

如果n足够大,则常数项就微不足道,在这种情况下,阈值无关紧要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ OpenMP并行比串行慢

来自分类Dev

简单的OpenMP并行,循环速度比串行计算慢

来自分类Dev

简单的OpenMP并行,循环速度比串行计算慢

来自分类Dev

并行排序比串行排序慢

来自分类Dev

Erlang C端口-串行还是并行执行?

来自分类Dev

c#事件是串行还是并行处理?

来自分类Dev

Erlang C端口-串行还是并行执行?

来自分类Dev

并行实现比Julia中的串行实现慢

来自分类Dev

使用C和OpenMP进行并行编程

来自分类Dev

使用Openmp在C ++中进行并行编程

来自分类Dev

使用 OPENMP 并行化 C++ 代码

来自分类Dev

OpenMP / C ++:并行并行处理,之后减少-最佳实践?

来自分类Dev

通过openmp在C ++中并行化three_for_loop

来自分类Dev

OpenMP C ++矩阵乘法并行运行较慢

来自分类Dev

使用pthreads和OpenMp在C中并行化Simpson方法

来自分类Dev

C数组中的OpenMP缩减/并行化代码

来自分类Dev

在C中使用OpenMP进行循环并行化的线程数

来自分类Dev

带有 pthreads 的 linux C 中的 Openmp 并行 for 循环语法

来自分类Dev

用不等式并行化 for 循环(openmp C++)

来自分类Dev

使用OpenMP和PThreads的并行程序比顺序程序慢

来自分类Dev

并行比慢于

来自分类Dev

为什么带有随机数生成的OpenMP比串行代码要慢

来自分类Dev

在处理文件系统(Windows)时,为什么串行foreach操作比并行foreach操作要慢?

来自分类Dev

为什么并行执行比串行执行慢?(Python多处理模块)

来自分类Dev

为什么C#任务并行库代码比普通的for循环慢?

来自分类Dev

为什么使用openMP原子的并行代码比串行代码需要更长的时间?

来自分类Dev

C ++ OpenMP和GCC 4.8.1-并行化循环时的性能问题

来自分类Dev

在2D阵列(C,OpenMP,CilkPlus)的一行上运行的并行化功能

来自分类Dev

C ++ 11线程与OpenMP进行简单并行循环。什么时候

Related 相关文章

  1. 1

    C ++ OpenMP并行比串行慢

  2. 2

    简单的OpenMP并行,循环速度比串行计算慢

  3. 3

    简单的OpenMP并行,循环速度比串行计算慢

  4. 4

    并行排序比串行排序慢

  5. 5

    Erlang C端口-串行还是并行执行?

  6. 6

    c#事件是串行还是并行处理?

  7. 7

    Erlang C端口-串行还是并行执行?

  8. 8

    并行实现比Julia中的串行实现慢

  9. 9

    使用C和OpenMP进行并行编程

  10. 10

    使用Openmp在C ++中进行并行编程

  11. 11

    使用 OPENMP 并行化 C++ 代码

  12. 12

    OpenMP / C ++:并行并行处理,之后减少-最佳实践?

  13. 13

    通过openmp在C ++中并行化three_for_loop

  14. 14

    OpenMP C ++矩阵乘法并行运行较慢

  15. 15

    使用pthreads和OpenMp在C中并行化Simpson方法

  16. 16

    C数组中的OpenMP缩减/并行化代码

  17. 17

    在C中使用OpenMP进行循环并行化的线程数

  18. 18

    带有 pthreads 的 linux C 中的 Openmp 并行 for 循环语法

  19. 19

    用不等式并行化 for 循环(openmp C++)

  20. 20

    使用OpenMP和PThreads的并行程序比顺序程序慢

  21. 21

    并行比慢于

  22. 22

    为什么带有随机数生成的OpenMP比串行代码要慢

  23. 23

    在处理文件系统(Windows)时,为什么串行foreach操作比并行foreach操作要慢?

  24. 24

    为什么并行执行比串行执行慢?(Python多处理模块)

  25. 25

    为什么C#任务并行库代码比普通的for循环慢?

  26. 26

    为什么使用openMP原子的并行代码比串行代码需要更长的时间?

  27. 27

    C ++ OpenMP和GCC 4.8.1-并行化循环时的性能问题

  28. 28

    在2D阵列(C,OpenMP,CilkPlus)的一行上运行的并行化功能

  29. 29

    C ++ 11线程与OpenMP进行简单并行循环。什么时候

热门标签

归档