2013-07-29 67 views
3

考慮這個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. 

似乎不執行循環,爲什麼有時候是這樣的?

回答

8

當您刪除write語句時,編譯器可以看到從未使用變量b,因此它將刪除分配b的代碼。

一旦完成了,它可以告訴變量a也從不使用,因此它將刪除指定該變量的代碼。

然後除了撥打電話cpu_time()之外沒有任何東西。

相關問題