[Bug fortran/31593] Invariant DO loop variables and subroutines
tkoenig at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Wed Aug 12 17:53:00 GMT 2009
------- 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
More information about the Gcc-bugs
mailing list