Fortran语言,do-end do循环,相互包含测试,自动性能优化2

分析Fortran语言中的循环配对,及相互包含关系。

1)待分析的Fortran代码,这个代码来自NPB

!$omp parallel default(shared)
!$omp& private(i,j,k,m,zeta,eta,xi,add,u_exact,rms_local)
!$omp&        shared(rms)
      do m = 1, 5
         rms_local(m) = 0.0d0
      enddo
!$omp do
      do k = 0, grid_points(3)-1
         zeta = dble(k) * dnzm1
         do j = 0, grid_points(2)-1
            eta = dble(j) * dnym1
            do i = 0, grid_points(1)-1
               xi = dble(i) * dnxm1
               call exact_solution(xi, eta, zeta, u_exact)

               do m = 1, 5
                  add = u(m,i,j,k)-u_exact(m)
                  rms_local(m) = rms_local(m) + add*add
               enddo
            enddo
         enddo
      enddo
!$omp end do nowait
      do m = 1, 5
!$omp atomic
         rms(m) = rms(m) + rms_local(m)
      enddo
!$omp end parallel

2)

循环对包含这些

 [[3, 5, -100], [15, 18, -100], [11, 19, -100], [9, 20, -100], [7, 21, -100], [23, 26, -100]]

初步看起来是对的。

但是中间包含函数调用

3)

[[3, 5, -1], [15, 18, 2], [11, 19, 3], [9, 20, 4], [7, 21, -1], [23, 26, -1]]

4)总结:

a)没有对函数调用进行分析。

b)3中的结果看起来是对的。

c)Fortran中enddo 也行,一般是end do,也是服了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值