社区
英特尔边缘计算技术
帖子详情
OpenMP并行程序比串行程序慢
CToday
2013-05-28 04:14:17
我最近在做一个将GA算法用OpenMP框架并行化的程序,但在并行化后我发现我的并行程序跑的比串行程序还慢,当我把大部分for循环进行并行化处理后,发现并行程序比串行程序慢了一倍多,自己检查各并行域,没有发现存在数据竞争的情况,所以很郁闷(我使用的编译器是gcc)。在OpenMP并行化中,除了数据竞争外还有那些因素会影响程序的运行效率啊?小弟是OpenMP的新手,只了解些基本的OpenMP指令,对性能调优方面不是很通,求大牛们指点一二啊!谢谢了
...全文
1885
14
打赏
收藏
OpenMP并行程序比串行程序慢
我最近在做一个将GA算法用OpenMP框架并行化的程序,但在并行化后我发现我的并行程序跑的比串行程序还慢,当我把大部分for循环进行并行化处理后,发现并行程序比串行程序慢了一倍多,自己检查各并行域,没有发现存在数据竞争的情况,所以很郁闷(我使用的编译器是gcc)。在OpenMP并行化中,除了数据竞争外还有那些因素会影响程序的运行效率啊?小弟是OpenMP的新手,只了解些基本的OpenMP指令,对性能调优方面不是很通,求大牛们指点一二啊!谢谢了
复制链接
扫一扫
分享
转发到动态
举报
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++来编译的么?我刚入门莫抛砖。
OpenMP
并行
程序
设计
openmp
快速入门,简单的介绍了
openmp
的用法,一目了然
MPI与
OpenMP
并行计算的实验报告及源
程序
MPI与
OpenMP
的一些并行计算代码和实验报告
MPI和
openMP
并行计算-冒泡排序
MPI和
openMP
并行计算-冒泡排序
实现(
串行
,
openmp
、mpi、
openmp
+mpi)快速排序算法,并作出时间对比图
题目描述:实现一种或多种并行排序算法。 要求: (1)使用MPI、
OpenMP
、MPI+
OpenMP
编写上述
并行
程序
。 (2)使用VTune等工具对
程序
进行瓶颈分析和优化。 (3)提交
程序
源代码、变量和语句的详细说明。 (4)在实验报告中通过图表说明CPU
串行
程序
和三种
并行
程序
在各种规模的运行时间。 (5)(选做)在实验报告中通过图表说明三种
并行
程序
使用不同的数据分配方法在各种规模的运行时间。 设计思路 步骤一: 主要采用快速排序实现(
串行
,
openmp
、mpi、
openmp
+mpi)排序算法,所需环境为VS2019+
openmp
+mpi,cmd命令 (1)完成了CPU
串行
程序
和三种
并行
程序
在各种规模的运行,并作出时间对比图 (2)完成了
串行
,
openmp
使用不同的数据分配方法在数组规模为400万的运行,并作出时间对比图。 步骤二: 用vs工具对
程序
进行瓶颈分析 自己写的作业,真实跑出来的,环境配置需要自己弄哦!!个人感觉写的也算是比较全的 预览:https://img-blog.csdnimg.cn/b97cc6cec08b4fd9ba79abe446037f86.png
基于MPI与
OpenMP
的并行冒泡排序算法实现
本实验旨在对比 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
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章