This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libfortran/37754] [4.4 Regression] READ I/O Performance regression from 4.3 to 4.4
- From: "jvdelisle at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 25 Oct 2008 23:56:04 -0000
- Subject: [Bug libfortran/37754] [4.4 Regression] READ I/O Performance regression from 4.3 to 4.4
- References: <bug-37754-6019@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from jvdelisle at gcc dot gnu dot org 2008-10-25 23:56 -------
Created an attachment (id=16547)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=16547&action=view)
Experimental patch
With this patch, I see some improvement with a more realistic test case. Here
are test results using gprof. I am not sure I can completely trust what I am
seeing, especially when gprof is reporting data on read_logical and that is not
being used.
Flat profile: trunk 4.4, no patch
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
36.57 1.32 1.32 next_char
23.82 2.18 0.86 fd_read
9.14 2.51 0.33 push_char
8.03 2.80 0.29 memcpy
7.48 3.07 0.27 read_character
2.22 3.15 0.08 eat_spaces
1.94 3.22 0.07 formatted_transfer_scalar
1.94 3.29 0.07 read_logical
0.83 3.32 0.03 __read_nocancel
0.83 3.35 0.03 _int_free
0.83 3.38 0.03 eat_separator
0.83 3.41 0.03 list_formatted_read_scalar
0.83 3.44 0.03 malloc
0.55 3.46 0.02 1 20.00 20.00 MAIN__
0.55 3.48 0.02 _gfortrani_free_format_data
0.55 3.50 0.02 _int_malloc
0.55 3.52 0.02 pre_position
1.29 1.25 1.20 1.20 1.21 1.34 1.28 ----> 1.25 average for next_char
3.978 4.005 3.989 3.997 3.986 3.981 4.005 ---> 3.992 for test program.
Flat profile: perf1
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
26.57 0.89 0.89 next_char
22.69 1.65 0.76 fd_read
15.52 2.17 0.52 push_char
14.93 2.67 0.50 memcpy
5.97 2.87 0.20 read_character
4.18 3.01 0.14 read_logical
2.39 3.09 0.08 eat_separator
1.19 3.13 0.04 __read_nocancel
1.19 3.17 0.04 _int_free
1.19 3.21 0.04 malloc
0.90 3.24 0.03 formatted_transfer_scalar
0.60 3.26 0.02 _gfortrani_list_formatted_read
0.60 3.28 0.02 _int_malloc
0.60 3.30 0.02 unformatted_write
0.30 3.31 0.01 _gfortrani_free_ionml
0.30 3.32 0.01 fd_sfree
0.30 3.33 0.01 get_external_unit
.96 .96 1.04 1.0 1.32 .86 1.05 ----> 1.03 average for next_char
3.732 3.710 3.713 3.717 3.737 3.735 3.704 ---> 3.721 for test program.
Flat profile: gfortran 4.3
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
27.57 0.75 0.75 format_lex
27.57 1.50 0.75 parse_format_list
12.50 1.84 0.34 push_char
10.29 2.12 0.28 do_read
8.46 2.35 0.23 mem_read
2.21 2.41 0.06 list_formatted_read_scalar
1.47 2.45 0.04 __cache_sysconf
1.47 2.49 0.04 fd_alloc
1.10 2.52 0.03 malloc_consolidate
0.74 2.54 0.02 arena_get2
0.74 2.56 0.02 formatted_transfer_scalar
0.37 2.57 0.01 1 10.00 10.00 MAIN__
0.37 2.58 0.01 _gfortran_st_write_done
0.37 2.59 0.01 _gfortran_store_exe_path
0.37 2.60 0.01 _gfortrani_get_internal_unit
0.37 2.61 0.01 _gfortrani_list_formatted_read
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37754