Длительное время компиляции gfortran для больших подразумеваемых циклов do - PullRequest
0 голосов
/ 16 марта 2020

Компиляция следующей программы fortran90 занимает минуты

program implloop
 implicit none

 integer, parameter :: dp = selected_real_kind(15)
 integer(dp) :: i
 real(dp), allocatable :: array(:)
 real(dp) :: t1 , t2

 call cpu_time(t1)

 allocate( array(10**8) )
 array = [( sqrt(real(i,dp)) , i = 1 , 10**8 )]

 call cpu_time(t2)
 write(*,*) t2-t1

end program

Она скомпилирована с GNU Fortran (Debian 6.3.0-18 + deb9u1) 6.3.0 20170516 .

С другой стороны, если скомпилировано с использованием do-l oop,

program implloop
 implicit none

 integer, parameter :: dp = selected_real_kind(15)
 integer(dp) :: i
 real(dp), allocatable :: array(:)
 real(dp) :: t1 , t2

 call cpu_time(t1)

 allocate( array(10**8) )

 do  i = 1 , 10**8 
   array(i) = sqrt(real(i,dp))
 end do

 call cpu_time(t2)
 write(*,*) t2-t1

end program

, оно будет готово через секунду. В чем причина такой разницы во времени компиляции?

...