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)
似乎循环没有执行,为什么会发生这种情况?
删除该write
语句时,编译器可以看到该变量b
从未使用过,因此它会删除分配的代码b
.
一旦它完成了,它就可以告诉变量a
从未被使用过,因此它删除了分配该变量的代码.
除了打电话之外什么都没有留下cpu_time()
.