OpenMP并行程序比串行程序慢

CToday 2013-05-28 04:14:17
我最近在做一个将GA算法用OpenMP框架并行化的程序,但在并行化后我发现我的并行程序跑的比串行程序还慢,当我把大部分for循环进行并行化处理后,发现并行程序比串行程序慢了一倍多,自己检查各并行域,没有发现存在数据竞争的情况,所以很郁闷(我使用的编译器是gcc)。在OpenMP并行化中,除了数据竞争外还有那些因素会影响程序的运行效率啊?小弟是OpenMP的新手,只了解些基本的OpenMP指令,对性能调优方面不是很通,求大牛们指点一二啊!谢谢了
...全文
1885 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanyue1989 2014-01-30
  • 打赏
  • 举报
回复
openMP是最简单的多核/多线程并行方式,这种是data parallel.就是说每个核/线程完成的任务是一样的,如果每个核/线程需要相同的资源(data dependency)的话,并行度很低,但是核间通信消耗很高(communication overhead),这样就会比原来慢了。
beyondcj 2014-01-28
  • 打赏
  • 举报
回复
MagiSu 2014-01-26
  • 打赏
  • 举报
回复
引用 1 楼 lion_kangaxx 的回复:
OpenMP程序不是应该用mpic++来编译的么?我刚入门莫抛砖。
MPI和openmp是两回事。MPI是message passing interface,是用来进程间通信的。OpenMP是线程。
line_us 2014-01-25
  • 打赏
  • 举报
回复
怎么会这样呢。
huanglin03 2014-01-24
  • 打赏
  • 举报
回复
并不是所有的计算改成并行之后都比原来的串行快,比原来慢的情况多的是,都是不正确的并行化,并行计算有适用条件限制,在将串行计算改为并行计算之前就要考虑并行后的得失问题----并行也有开销啊
副组长 2014-01-23
  • 打赏
  • 举报
回复
有没有I/O等外部交换,很重要的瓶颈。
kfckaifengcai 2014-01-23
  • 打赏
  • 举报
回复
引用 6 楼 gordon3000 的回复:
有没有I/O等外部交换,很重要的瓶颈。
云满笔记 2014-01-23
  • 打赏
  • 举报
回复
今天论坛里怎么有那么多OpenMP的贴子
dfasri 2014-01-22
  • 打赏
  • 举报
回复
应该是出现 false sharing 了吧, 你循环的结构体数组是不是没有没有在结构体类型里面加个 CPU cacheline 大小对齐
frmqjqxrpqzg 2014-01-22
  • 打赏
  • 举报
回复
顶,
zsc09_leaf 2014-01-22
  • 打赏
  • 举报
回复
莫非是单核?? 或者你的for循环很小,创建线程的开销时间大于优化的时间
kwdhwyhs 2014-01-22
  • 打赏
  • 举报
回复
等等看
l4kangaxx 2014-01-15
  • 打赏
  • 举报
回复
OpenMP程序不是应该用mpic++来编译的么?我刚入门莫抛砖。
本实验旨在对比 MPI 和 OpenMP 两种并行计算方法在冒泡排序中的应用效果及性能差异。实验通过将串行冒泡排序程序分别改写为 MPI 并行程序OpenMP 并行程序,分析其时间复杂度和实际运行时间。MPI 是一种基于消息传递的并行计算模型,适用于分布式计算环境;而 OpenMP 是基于共享内存的并行计算模型,主要应用于共享内存架构的计算机系统。 实验过程中,首先编写了时间复杂度为 O(n²) 的串行冒泡排序程序。随后,将其改写为 MPI 并行程序,将排序任务分配到 4 个进程中,各进程负责部分数据排序,最终合并结果。同时,利用 OpenMP 的并行指令实现 OpenMP 并行程序。实验结果显示,MPI 并行程序的时间复杂度约为 O(n²/m),其中 m 为进程数;OpenMP 并行程序的时间复杂度约为 O(n²/p),其中 p 为处理器个数。在实际运行时间上,MPI 并行程序OpenMP 并行程序均显著优于串行冒泡排序程序,且 MPI 并行程序的实际运行时间优于 OpenMP 并行程序。 本实验证明了 MPI 和 OpenMP 两种并行计算方式能够显著提升冒泡排序算法的性能。在选择并行计算方式时,需结合具体计算环境和算法特点。MPI 适用于分布式计算环境,可扩展至大规模计算系统,但需手动实现数据交换和同步;OpenMP 适用于共享内存架构,可自动实现数据交换和同步,但需关注线程同步和数据一致性问题。本实验报告为并行计算在实际应用中的选择提供了参考依据。

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧