| 查看: 2168 | 回复: 3 | ||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | ||
[求助]
怎样把用Fortran编写的程序改写为并行程序 已有2人参与
|
||
|
有没懂Fortran并行编程的,目前我面临的一个问题:用Fortran 编写的程序在服务器上跑了几天就不出结果,想把它改成并行的用多核计算,但没学过并行的,所以很头疼,需要一位大神帮帮我。或者是优化一下程序的算法,下面一段程序,用单核计算跑的太久,怎样改进一下算法: subroutine initial_condition() use global implicit none real :: r1, p1 = 0.5 do i = 1,n call random_number(r1) if(r1 < p1)then s(i) = 1.0 else s(i) = -1.0 end if sum1 = sum1 + s(i) end do return end subroutine mcs() use global implicit none integer :: ii real :: r2, r3, sum2 = 0.0 real :: ws(n) do ii = 1,n sum2 = 0.0 call random_number(r2) i = n*r2 + 1 sum1 = sum1 - s(i) do j = 1,n if(ad(i,j) == 1)then sum2 = sum2 + s(j) end if end do if(sum2<0)then ws(i) = (1-(1-2*q)*s(i)*(-1.0))/2 else if(sum2>0)then ws(i) = (1-(1-2*q)*s(i)*(1.0))/2 else ws(i) = 0.5 end if call random_number(r3) if(r3 <= ws(i))then s(i) = -s(i) else s(i) = s(i) end if sum1 = sum1 + s(i) end do return end !**************************Ising dynamics******************************* subroutine dynamics() use global implicit none integer :: mm, t = 0 real :: sum3 = 0.0, sum4 = 0.0, sum5 = 0.0 real :: m(time) do mm = 1,n1 q = q + 0.005 call initial_condition() do while(t < time) call mcs() t = t + 1 m(t) = abs(sum1/n) if(t>200000)then sum3 = sum3 + m(t)**4 sum4 = sum4 + m(t)**2 sum5 = sum5 + m(t) end if end do MNq(mm) = sum5/(time-200000) UNq(mm) = 1 - (sum3/(time-200000))/(3*((sum4/(time-200000))**2)) t = 0 sum1 = 0.0 sum3 = 0.0 sum4 = 0.0 sum5 = 0.0 end do return end |
» 猜你喜欢
免疫学博士有名额,速联系
已经有7人回复
多组分精馏求助
已经有5人回复
交叉科学部支持青年基金,对三无青椒是个机会吗?
已经有7人回复
青椒八年已不青,大家都被折磨成啥样了?
已经有15人回复
国家基金申请书模板内插入图片不可调整大小?
已经有6人回复
国家级人才课题组招收2026年入学博士
已经有5人回复
Fe3O4@SiO2合成
已经有6人回复
26申博求博导推荐-遥感图像处理方向
已经有4人回复

3楼2017-04-25 13:51:45

2楼2017-04-25 13:47:35
4楼2018-06-07 09:32:54













回复此楼