OpenMP并行程序比串行程序慢

CToday 2013-05-28 04:14:17
我最近在做一个将GA算法用OpenMP框架并行化的程序,但在并行化后我发现我的并行程序跑的比串行程序还慢,当我把大部分for循环进行并行化处理后,发现并行程序比串行程序慢了一倍多,自己检查各并行域,没有发现存在数据竞争的情况,所以很郁闷(我使用的编译器是gcc)。在OpenMP并行化中,除了数据竞争外还有那些因素会影响程序的运行效率啊?小弟是OpenMP的新手,只了解些基本的OpenMP指令,对性能调优方面不是很通,求大牛们指点一二啊!谢谢了
...全文
1899 14 打赏 收藏 转发到动态 举报
写回复
用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++来编译的么?我刚入门莫抛砖。

568

社区成员

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

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