| 查看: 2205 | 回复: 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 |
» 猜你喜欢
08生物与医药专硕初试346找调剂
已经有7人回复
理学07化学 303求调剂
已经有14人回复
309求调剂
已经有4人回复
一志愿安徽大学计算机科学与技术学硕,331分求调剂
已经有5人回复
085600,材料与化工321分调剂
已经有8人回复
270调剂
已经有3人回复
一志愿211,335分,0856,求调剂院校和导师
已经有13人回复
085601一志愿中山大学深圳材料工程330求调剂
已经有7人回复
调剂推荐
已经有12人回复
求调剂,一志愿南京师范大学计算机专硕,初试373,六级通过,
已经有3人回复

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

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














回复此楼
120