为什么代码似乎没有执行没有输出相关?

时间:2013-07-29 21:55:57

标签: performance fortran

考虑这个Fortran计划:

program main
implicit none

double complex :: a(51,51),b(51,51)
Integer::i,j
real(8)::ht=0.01
real(8) T1,T2

do i=1,51
   do j=1,51
      a(i,j)=cmplx(Sin(0.01*i),Cos(0.01*j))
   end do
end do

call cpu_time(T1)

do i=1,23497
   b(:,:)=(0.,1.)*ht/2.*a(:,:)
end do

call cpu_time(T2)

write(*,*) sum(b)
print '("Time = ",f12.9," seconds.")', T2-T1

end program main

输出

 (-12.4321907340245,3.30723047182099)
Time =  0.052991000 seconds.

如果我们注释掉write(*,*) sum(b),则输出为

Time =  0.000000000 seconds.

似乎循环没有被执行,为什么会发生这种情况?

1 个答案:

答案 0 :(得分:8)

当您删除write语句时,编译器可以看到从未使用变量b,因此它会删除分配b的代码。

一旦完成,它就可以告诉变量a从未被使用过,因此它会删除分配该变量的代码。

除了拨打cpu_time()之外没有任何其他内容。

相关问题