[Patch, fortran] PR35339 Optimize implied do loops in io statements

Nicolas Koenig koenigni@student.ethz.ch
Sun May 28 23:32:00 GMT 2017


Hello Jerry,

it already handles READ statements ;)

Those were the results i got:

gcc@dcm-linux:~/pr/35339> cat perf_test.f90
program main
     implicit none
     integer:: i
     integer, parameter:: N = 10000000
     integer, dimension(N):: g

     do i=1,N
         g(i) = i
     end do

open(10,file="test.dat")
     write (10,*) (g(i), i=1,N)
close(10)
end program

gcc@dcm-linux:~/pr/35339> gfortran -O3 perf_test.f90
gcc@dcm-linux:~/pr/35339> time ./a.out

real    0m1.879s
user    0m1.838s
sys     0m0.040s
gcc@dcm-linux:~/pr/35339> gfortran-7 -O3 perf_test.f90
gcc@dcm-linux:~/pr/35339> time ./a.out

real    0m1.929s
user    0m1.901s
sys     0m0.028s

It does seem to make everything a bit faster, but not by much. At least
it gets rid of most of the loops that make problems with asynchronous
io. I noticed while writing the patch that "a(1:size(a):1)" isn't converted
to "a(FULL)". Would their be any performance gain in doing this?

Nicolas

On 05/29/2017 12:06 AM, Jerry DeLisle wrote:
> On 05/27/2017 12:49 PM, Nicolas Koenig wrote:
>> Hello everyone,
>>
>> attached is a patch to simplify implied do loops in io statements by 
>> replacing them with their respective array slices. For example "WRITE 
>> (*,*) (a(i), i=1,4,2)" becomes "WRITE (*,*) a(1:4:2)".
>>
>> Ok for trunk?
>>
>
> Thanks for patch. Could you do some timing performance tests with and 
> without the patch on large arrays and see if we gain anything?
>
> Also, we should expand the test case to include implied do loops in 
> read statements. You could probably just rewind the file, copy down 
> the WRITEs and change them to READs or similar and check results.
>
> While doing some checks myself I noticed some odd behavior and found 
> PR53029. I posted a patch, but what caught my attention was the 
> implied do version was faster than the array version. (about .89 sec 
> vs 6 sec)
>
> So with my patch there I am now getting (.89 sec vs .007 sec)
>
> This prompted me to have you check some performance cases.
>
> Thanks for additional feedback,
>
> Jerry
>
>



More information about the Fortran mailing list