------- Comment #6 from tkoenig at gcc dot gnu dot org 2009-08-12 17:53 ------- We get a dramatic speedup when enclosing the arguments to print in parentheses:
This is something we can do for - write and print statements - intent(in) arguments - any do variable passed as an argument within the loop $ gfortran -O2 count-2.f90 && time ./a.out > /dev/null real 0m11.395s user 0m11.361s sys 0m0.004s $ gfortran -O2 count-3.f90 && time ./a.out > /dev/null real 0m4.607s user 0m4.560s sys 0m0.040s $ cat count-2.f90 program main implicit none integer :: value integer :: p1, p2, p3, p4 integer :: i do value = 750,800 do i=1, 10 do p1 = 1, value-2 do p2 = p1 + 1, value - p1 do p3 = p2 + 1, (value - (p1 + p2))/2 p4 = value - p1 - p2 - p3 if (p1 * p2 * p3 * p4 == value * 1000000) & print '(5(I0,:" "))',value,p1,p2,p3,p4 end do end do end do end do end do end program main $ cat count-3.f90 program main implicit none integer :: value integer :: p1, p2, p3, p4 integer :: i do value = 750,800 do i=1, 10 do p1 = 1, value-2 do p2 = p1 + 1, value - p1 do p3 = p2 + 1, (value - (p1 + p2))/2 p4 = value - p1 - p2 - p3 if (p1 * p2 * p3 * p4 == value * 1000000) & print '(5(I0,:" "))',(value),(p1),(p2),(p3),(p4) end do end do end do end do end do end program main -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31593