| 查看: 897 | 回复: 4 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
[求助]
在fortran程序加上openmp并行后耗时比不加并行更慢
|
|||
|
在此段程序中,串行计算用时15.5s,运用openmp用两个线程计算,用时17.3s,运用openmp用4个线程计算,用时55s!!!!运行的结果是一样的,但是这个耗时也太不对劲了,希望有经验的大佬指点一下!!!感谢! 程序略长,但是结构简单,用了三个部分,在计算函数部分使用了并行。 module com!全局变量 implicit none integer a,ia parameter (a=10000,ia=3) integer summ(a,a),sumn(a,a),su(ia,3000,3000) end program xunhuan!主程序 use com implicit none include 'omp_lib.h' integer i,j,ic real(kind=8) time_begin,time_end i=a j=a call omp_set_num_threads(2) call cpu_time(time_begin) call loop(i,j) call cpu_time(time_end) open(10,file="result.txt" ![]() write(10,*) time_end - time_begin do i=1,500 do j=1,500 write(10,*) i,j,summ(i,j), sumn(i,j),summ(i,j)+sumn(i,j) do ic=1,ia write(10,*) su(ic,i,j) end do end do end do close(10) end subroutine loop(ii,jj)!计算函数 use com implicit none integer i1,j1,ii,jj,aa1,bb1,aa2,bb2,cc1,cc2,dd1,dd2,ib !$omp parallel private(aa1,bb1,aa2,bb2,cc1,cc2,dd1,dd2) shared(summ,sumn,su,ii,jj) !$omp do do i1=1,ii do j1=1,jj if(abs(mod(i1,2))==1)then aa1=3*i1-j1 bb1=i1 else if(abs(mod(i1,2))==0) then aa1=i1 bb1=3*i1-j1 end if cc1=min(aa1,bb1) if(abs(i1-25)>=20)then aa2=abs(i1-20)*2-j1 bb2=abs(j1-50)+i1 else if(abs(i1-25)<20)then aa2=abs(i1-10)*2-j1 bb2=abs(j1-70)+i1 end if cc2=floor(sqrt(1.0*aa2*bb2/abs(aa2-bb2))) dd1=cc1+i1 dd2=cc2+j1 summ(i1,j1)=floor(1.0*sqrt(abs(0.1*(dd1*(j1+1)-i1*dd2)*min(cc1,cc2))/22))+floor(1.0*sqrt(abs(0.01*cc1*cc2))) sumn(i1,j1)=floor(1.0*sqrt(abs(0.1*((i1+1)*dd2-dd1*j1)*max(cc1,cc2))/22))+floor(1.0*sqrt(abs(0.01*cc1*cc2))) if(i1<=3000.and.j1<=3000)then do ib=1,ia su(ib,i1,j1)=floor(sqrt(1.0*abs(summ(i1,j1)*cc1)))+floor(sqrt(1.0*abs(sumn(i1,j1)*cc2)))+ib end do end if end do end do !$omp end do !$omp end parallel end |
» 猜你喜欢
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
孩子确诊有中度注意力缺陷
已经有6人回复
2026博士申请-功能高分子,水凝胶方向
已经有6人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
请问2026国家基金面上项目会启动申2停1吗
已经有5人回复
同一篇文章,用不同账号投稿对编辑决定是否送审有没有影响?
已经有3人回复
★
jjdg: 金币+1, 感谢参与 2018-12-25 11:56:00
jjdg: 金币+1, 感谢参与 2018-12-25 11:56:00
|
Call cpu time不能用来计时openmp并行,得到的是cpu运行总时间。openmp要用omp_get_wtime时间函数才能得到实际时间。 发自小木虫Android客户端 |
5楼2018-12-25 07:17:51
luwis
至尊木虫 (职业作家)
- 应助: 0 (幼儿园)
- 金币: 25517.9
- 红花: 3
- 帖子: 3296
- 在线: 464.4小时
- 虫号: 385950
- 注册: 2007-05-29
- 专业: 基础物理学
2楼2018-12-07 16:16:36
luwis
至尊木虫 (职业作家)
- 应助: 0 (幼儿园)
- 金币: 25517.9
- 红花: 3
- 帖子: 3296
- 在线: 464.4小时
- 虫号: 385950
- 注册: 2007-05-29
- 专业: 基础物理学
3楼2018-12-07 16:18:05
4楼2018-12-07 18:04:44














回复此楼