[patch, libfortran] PR33985 access="stream",form="unformatted" doesn't buffer

Jerry DeLisle jvdelisle@verizon.net
Sun Nov 4 01:19:00 GMT 2007


Angelo Graziosi wrote:
> 
> On Sat, 3 Nov 2007, Jerry DeLisle wrote:
> 
>> If you could send me a completely self contained example it
>> would be helpful (otherwise I build one myself)
>>
> 
> Here the exaples with results:
> 
> Writing the stream
> ==============================================================
> !
> ! gfortran write_stream.F95 -o write_stream
> !
> ! GFC-4.2.2 results without patch (3rd run)
> !
> !    $ time ./write_stream
> !
> !    real	0m54.718s
> !    user	0m9.436s
> !    sys	0m31.718s
> !
> !
> ! GFC-4.2.2 results with patch (3rd run)
> !
> !    $ time ./write_stream.patched
> !
> !    real	0m5.250s
> !    user	0m3.624s
> !    sys	0m1.546s
> !
> module kind_consts
>   integer, parameter :: DP = kind(1.D0)
> end module kind_consts
> 
> program write_stream
>   use kind_consts
>   implicit none
>   real(DP), parameter :: X = 1.D0,Y = 1.D0
>   integer, parameter :: NX = 1499,NY = 1499
>   integer :: i,j
>   open(30,file='test.dat',status='unknown',access='stream')
>   write(30) NX,NY
>   do i = 0,NX
>      do j = 0,NY
>         write(30) X,Y
>      enddo
>   enddo
>    close(30)
> end program write_stream
> ==================================================================
> 
> 
> Reading the stream
> ==================================================================
> !
> ! gfortran read_stream.F95 -o read_stream
> !
> ! GFC-4.2.2 results without patch (3rd run)
> !
> !    $ time ./read_stream
> !
> !    real	1m46.297s
> !    user	0m15.671s
> !    sys	1m4.984s
> !
> ! GFC-4.2.2 results with patch (3rd run)
> !
> !    $ time ./read_stream.patched
> !
> !    real	1m45.688s
> !    user	0m14.515s
> !    sys	1m4.453s
> !
> module kind_consts
>   integer, parameter :: DP = kind(1.D0)
> end module kind_consts
> 
> program read_stream
>   use kind_consts
>   implicit none
>   real(DP) :: x,y
>   integer :: nx,ny,i,j
>   open(30,file='test.dat',status='old',access='stream')
>   read(30) nx,ny
>   do i = 0,nx
>      do j = 0,ny
>         read(30) x,y
>         !print *,x,y
>      enddo
>   enddo
>   close(30)
> end program read_stream
> ==================================================================
> 
> 
> As you can see, the patch seems to work when writing (54 --> 5...) but not
> when reading (1m46 --> 1m45...)
> 
> 
> Cheers,
> 
>    Angelo.
> 
Thanks for this info.  Now I understand. I will investigate further.

Jerry



More information about the Fortran mailing list