From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6806 invoked by alias); 25 Oct 2008 23:57:30 -0000 Received: (qmail 6594 invoked by uid 48); 25 Oct 2008 23:56:04 -0000 Date: Sat, 25 Oct 2008 23:57:00 -0000 Message-ID: <20081025235604.6593.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug libfortran/37754] [4.4 Regression] READ I/O Performance regression from 4.3 to 4.4 In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "jvdelisle at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2008-10/txt/msg01653.txt.bz2 ------- 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