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

xsl*_*ass 3 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
Run Code Online (Sandbox Code Playgroud)

输出是

 (-12.4321907340245,3.30723047182099)
Time =  0.052991000 seconds.
Run Code Online (Sandbox Code Playgroud)

如果我们注释掉write(*,*) sum(b),那么输出就是

Time =  0.000000000 seconds.
Run Code Online (Sandbox Code Playgroud)

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

Bar*_*mar 8

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

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

除了打电话之外什么都没有留下cpu_time().