Un problema de tiempo fortran que no puedo entender

Escribí (para mi clase en Métodos numéricos para física teórica) un programa muy simple para una caminata aleatoria en la dimensión 2. Aquí está:

program random_walk

implicit none

integer, parameter :: Nwalker = 1000000
integer, parameter :: Nstep   = 100
integer, parameter :: Nmeas   = 10

integer :: posx, posy, move

integer :: is, im, iw
real    :: start_time, stop_time

double precision, dimension(Nmeas) :: dist, r2
real :: rnd

do im = 1, Nmeas
    dist(im) = im*Nstep
    r2(im)   = 0.0
end do

call cpu_time(start_time)
do iw = 1, Nwalker
    posx = 0
    posy = 0
    do im = 1, Nmeas
        do is = 1, Nstep
            call random_number(rnd)
            move = 4*rnd
            if (move == 0) posx = posx + 1
            if (move == 1) posy = posy + 1
            if (move == 2) posx = posx - 1
            if (move == 3) posy = posy - 1
        end do
        r2(im) = r2(im) + posx**2 + posy**2
    end do
end do
r2 = r2 / Nwalker
call cpu_time(stop_time)
do im = 1, Nmeas
    print '(f8.6, "   ", f8.6)', log(dist(im)), log(r2(im))
end do
print '("Time = ", f6.3, " seconds")', stop_time - start_time
end program

Al final, debe imprimir 10 filas 2 columnas: la primera columna es el logaritmo del "tiempo" (número de pasos), la segunda columna es el logaritmo de la distancia cuadrada promedio desde el origen. La segunda columna "en promedio" debería ser igual a la primera. Hasta ahora todo bien, el programa funciona bien, los resultados son muy razonables. Pero aquí está el problema; en mi macbookpro (Intel Core i7 de 2,7 GHz, compilador gfortran 7.1.0, optimización -O2), en promedio, tarda más de 20 segundos en ejecutarse. Pero si comento estas líneas:

! do im = 1, Nmeas
!    print '(f8.6, "   ", f8.6)', log(dist(im)), log(r2(im))
! end do

que están más allá del cálculo de "stop_time", el resultado es que el tiempo de ejecución es ... ¡¡menos de 6 segundos !?

¿Como es posible?

Respuestas a la pregunta(1)

Su respuesta a la pregunta