public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/15002] New: Linewise stream input is unusably slow
@ 2004-04-18 14:37 aaron at isotton dot com
  2004-04-18 14:39 ` [Bug libstdc++/15002] " aaron at isotton dot com
                   ` (16 more replies)
  0 siblings, 17 replies; 18+ messages in thread
From: aaron at isotton dot com @ 2004-04-18 14:37 UTC (permalink / raw)
  To: gcc-bugs

I noticed that std::getline is unusably slow. So I wrote three test programs, 
one using fgets(), one using std::getline() and one using 
std::ifstream::getline(). I have read the same file (200000 lines, 39MB) 
in all cases; here are the results:

Using fgets():

aisotton@zarathustra:~/test/iotest$ time ./stdio

real    0m0.222s
user    0m0.109s
sys     0m0.073s

------------

Using std::getline():

aisotton@zarathustra:~/test/iotest$ time ./streams

real    0m6.945s
user    0m5.316s
sys     0m0.074s

------------

Using std::ifstream::getline():

aisotton@zarathustra:~/test/iotest$ time ./streams2

real    0m1.002s
user    0m0.890s
sys     0m0.074s

------------

fgets() is more than 30 times faster than std::getline(), and more than 4 times
faster than std::ifstream::getline(). This is not acceptable.

- It is not a buffering problem; using strace I found out that fgets() uses a
4096 byte buffer, and the C++ streams a 8192 byte buffer.

- It has nothing to do with optimization. The values are roughly the same for
all optimization levels.

- g++ 2.95 performs better than 3.2, and 3.2 better than 3.3, but they are still
slow. Here the exact versions:

aisotton@zarathustra:~/test/iotest$ g++-2.95 -v
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)

aisotton@zarathustra:~/test/iotest$ g++-3.2 -v
Reading specs from /usr/lib/gcc-lib/i386-linux/3.2.3/specs
Configured with: ../src/configure -v 
--enable-languages=c,c++,f77,objc,ada --prefix=/usr 
--mandir=/usr/share/man --infodir=/usr/share/info 
--with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared 
--with-system-zlib --enable-nls --without-included-gettext 
--enable-__cxa_atexit --enable-clocale=gnu --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.2.3 (Debian)

aisotton@zarathustra:~/test/iotest$ g++-3.3 -v
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.3/specs
Configured with: ../src/configure -v 
--enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr 
--mandir=/usr/share/man --infodir=/usr/share/info 
--with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared 
--with-system-zlib --enable-nls --without-included-gettext 
--enable-__cxa_atexit --enable-clocale=gnu --enable-debug 
--enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux
Thread model: posix
gcc version 3.3.3 (Debian 20040401)

And here the times for the second test:
-- 2.95 --
real    0m4.345s
user    0m4.058s
sys     0m0.067s

-- 3.2 --
real    0m5.728s
user    0m5.311s
sys     0m0.082s

-- 3.3 --
real    0m6.586s
user    0m5.298s
sys     0m0.091s

- It has nothing to do with stdio synchronisation, since we're reading from
files. To be really sure, I tried using

std::ios_base::sync_with_stdio(false);

(yes, before the first call!) but that didn't make any difference.

- Increasing the buffer size of the stream didn't make any real difference either.

Almost two years ago there was a long discussion about this on

http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&threadm=gidnla.uh5.ln%40ns1.irule.be&rnum=1&prev=/groups%3Fq%3Dg%252B%252B%2Bslow%2Bstd::getline%26hl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3Dgidnla.uh5.ln%2540ns1.irule.be%26rnum%3D1

but they didn't really come to a solution.

I did some profiling; here the most interesting result (of the "streams" test):

		     Call graph (explanation follows)


granularity: each sample hit covers 4 byte(s) for 0.02% of 52.21 seconds

index % time    self  children    called     name
                                                 <spontaneous>
[1]     19.5   10.20    0.00                
std::string::replace(__gnu_cxx::__normal_iterator<char*, std::string>,
__gnu_cxx::__normal_iterator<char*, std::string>, unsigned int, char) [1]
-----------------------------------------------
                                                 <spontaneous>
[2]     17.6    9.17    0.00                 memset [2]
-----------------------------------------------
                                                 <spontaneous>
[3]     14.5    7.56    0.00                 std::string::_M_mutate(unsigned
int, unsigned int, unsigned int) [3]
-----------------------------------------------
                                                 <spontaneous>
[4]     12.0    6.29    0.00                 std::string::append(unsigned int,
char) [4]
-----------------------------------------------
                                                 <spontaneous>
[5]     10.7    5.59    0.00                 std::basic_istream<char,
std::char_traits<char> >& std::getline<char, std::char_traits<char>,
std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&,
std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char) [5]
-----------------------------------------------
                                                 <spontaneous>
[6]     10.4    5.41    0.00                 std::string::_M_iend() const [6]
-----------------------------------------------
                                                 <spontaneous>
[7]      8.5    4.42    0.00                 std::basic_streambuf<char,
std::char_traits<char> >::sbumpc() [7]
-----------------------------------------------
                                                 <spontaneous>
[8]      4.6    2.40    0.00                 std::string::_M_ibegin() const [8]
-----------------------------------------------
                                                 <spontaneous>
[9]      1.5    0.79    0.00                 read [9]

Much time seems to be lost in std::string::replace, for which I have no
explanatin whatsoever.

I've uploaded a very small "test suite" demonstrating the strange behaviour to
http://www.isotton.com/sandbox/iotest.tar.gz. Notice that it will create a file 
of about 40MB.

-- 
           Summary: Linewise stream input is unusably slow
           Product: gcc
           Version: 3.3.3
            Status: UNCONFIRMED
          Severity: critical
          Priority: P2
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: aaron at isotton dot com
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-debian-linux
  GCC host triplet: i686-debian-linux
GCC target triplet: i686-debian-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
@ 2004-04-18 14:39 ` aaron at isotton dot com
  2004-04-18 14:47 ` aaron at isotton dot com
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: aaron at isotton dot com @ 2004-04-18 14:39 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From aaron at isotton dot com  2004-04-18 14:08 -------
Created an attachment (id=6111)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=6111&action=view)
The test case

Unpack it and run 'make test'. Notice that it'll create a temporary file of
about 40MB!

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
  2004-04-18 14:39 ` [Bug libstdc++/15002] " aaron at isotton dot com
@ 2004-04-18 14:47 ` aaron at isotton dot com
  2004-04-18 14:48 ` [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow) pinskia at gcc dot gnu dot org
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: aaron at isotton dot com @ 2004-04-18 14:47 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From aaron at isotton dot com  2004-04-18 14:09 -------
Created an attachment (id=6112)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=6112&action=view)
The gprof output for the streams program

The complete output of 'gprof -q' on the 'streams' test program.

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
  2004-04-18 14:39 ` [Bug libstdc++/15002] " aaron at isotton dot com
  2004-04-18 14:47 ` aaron at isotton dot com
@ 2004-04-18 14:48 ` pinskia at gcc dot gnu dot org
  2004-04-18 15:19 ` aaron at isotton dot com
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-04-18 14:48 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-04-18 14:20 -------
Confirmed, the issue might be using wrong std::string functions to do std::getline.  Otherwise std::
string is where it is slow.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|critical                    |enhancement
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|                            |1
   Last reconfirmed|0000-00-00 00:00:00         |2004-04-18 14:20:12
               date|                            |
            Summary|Linewise stream input is    |Linewise stream input is
                   |unusably slow               |unusably slow (std::string
                   |                            |slow)


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (2 preceding siblings ...)
  2004-04-18 14:48 ` [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow) pinskia at gcc dot gnu dot org
@ 2004-04-18 15:19 ` aaron at isotton dot com
  2004-04-18 15:45 ` pinskia at gcc dot gnu dot org
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: aaron at isotton dot com @ 2004-04-18 15:19 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From aaron at isotton dot com  2004-04-18 14:39 -------
That's not true. std::getline() is HORRIBLY slow (more than 30 times slower than
fgets()), basically making it unusable to read large files.
std::ifstream::getline() is still VERY slow (more than 4 times slower than
fgets()), which still makes it nearly unusable. This might not be a 'critical'
bug, but it has at least severity 'normal' because almost every serious C++
program uses linewise input somewhere. Anyway, I leave it to you to change that
if you feel like :-)

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (3 preceding siblings ...)
  2004-04-18 15:19 ` aaron at isotton dot com
@ 2004-04-18 15:45 ` pinskia at gcc dot gnu dot org
  2004-04-19 13:03 ` cvs-commit at gcc dot gnu dot org
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-04-18 15:45 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-04-18 14:46 -------
Well for the mainline it is already faster:
tin:~/src/gnu/gcctest/iotest/iotest>time ./streams
3.510u 0.040s 0:03.69 96.2%     0+0k 0+0io 202pf+0w
tin:~/src/gnu/gcctest/iotest/iotest>time ./streams2
0.420u 0.040s 0:00.69 66.6%     0+0k 0+0io 200pf+0w
tin:~/src/gnu/gcctest/iotest/iotest>time ./stdio
0.090u 0.060s 0:00.14 107.1%    0+0k 0+0io 80pf+0w

But since this has never been fast, it is an enhancement.

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (5 preceding siblings ...)
  2004-04-19 13:03 ` cvs-commit at gcc dot gnu dot org
@ 2004-04-19 13:03 ` pcarlini at suse dot de
  2004-04-20 16:59 ` pinskia at gcc dot gnu dot org
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: pcarlini at suse dot de @ 2004-04-19 13:03 UTC (permalink / raw)
  To: gcc-bugs



-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |pcarlini at suse dot de
                   |dot org                     |
             Status|NEW                         |ASSIGNED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (4 preceding siblings ...)
  2004-04-18 15:45 ` pinskia at gcc dot gnu dot org
@ 2004-04-19 13:03 ` cvs-commit at gcc dot gnu dot org
  2004-04-19 13:03 ` pcarlini at suse dot de
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2004-04-19 13:03 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From cvs-commit at gcc dot gnu dot org  2004-04-19 11:30 -------
Subject: Bug 15002

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	paolo@gcc.gnu.org	2004-04-19 11:30:21

Modified files:
	libstdc++-v3   : ChangeLog 
	libstdc++-v3/include/bits: basic_string.h 

Log message:
	2004-04-19  Paolo Carlini  <pcarlini@suse.de>
	
	PR libstdc++/15002 (partial)
	* include/bits/basic_string.h (_M_replace_aux, _M_replace_safe):
	Special case __n2 == 1, not calling traits_type::assign/copy.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/ChangeLog.diff?cvsroot=gcc&r1=1.2452&r2=1.2453
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/basic_string.h.diff?cvsroot=gcc&r1=1.58&r2=1.59



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (6 preceding siblings ...)
  2004-04-19 13:03 ` pcarlini at suse dot de
@ 2004-04-20 16:59 ` pinskia at gcc dot gnu dot org
  2004-04-20 17:20 ` pcarlini at suse dot de
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-04-20 16:59 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-04-20 16:44 -------
Paolo, your patch helped a lot (I looked a profile generated by Shark).
I noticed that most of the time now is spent in std::string::_M_mutate from std::string::_M_replace_aux, 
not doing much at all.
Some suggestions after looking into the source/asm:
The calculation for __src could be moved inside the if statements, removing a load and two adds.

On the same box as before after Paolo's patch, so a little more than a 2x speedup:
tin:~/src/gnu/gcctest/iotest/iotest>time ./streams
1.340u 0.100s 0:01.43 100.6%    0+0k 0+0io 202pf+0w
tin:~/src/gnu/gcctest/iotest/iotest>time ./streams2
0.430u 0.010s 0:00.44 100.0%    0+0k 0+0io 199pf+0w
tin:~/src/gnu/gcctest/iotest/iotest>time ./stdio
0.080u 0.060s 0:00.15 93.3%     0+0k 0+0io 80pf+0w

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (7 preceding siblings ...)
  2004-04-20 16:59 ` pinskia at gcc dot gnu dot org
@ 2004-04-20 17:20 ` pcarlini at suse dot de
  2004-04-23 15:17 ` cvs-commit at gcc dot gnu dot org
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: pcarlini at suse dot de @ 2004-04-20 17:20 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pcarlini at suse dot de  2004-04-20 16:59 -------
Thanks Andrew for testing again and in particular for your suggestion!

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (8 preceding siblings ...)
  2004-04-20 17:20 ` pcarlini at suse dot de
@ 2004-04-23 15:17 ` cvs-commit at gcc dot gnu dot org
  2004-04-24 10:37 ` cvs-commit at gcc dot gnu dot org
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2004-04-23 15:17 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From cvs-commit at gcc dot gnu dot org  2004-04-23 14:44 -------
Subject: Bug 15002

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	hammer-3_3-branch
Changes by:	paolo@gcc.gnu.org	2004-04-23 14:44:40

Modified files:
	libstdc++-v3   : ChangeLog.hammer 
	libstdc++-v3/include/bits: basic_string.tcc 

Log message:
	2004-04-23  Paolo Carlini  <pcarlini@suse.de>
	
	PR libstdc++/15002 (partial)
	* include/bits/basic_string.tcc (_M_replace_safe, replace(iterator,
	iterator, size_type, _CharT)): Special case __dnew/__n2 == 1, not
	calling _S_copy_chars/traits_type::assign.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/ChangeLog.hammer.diff?cvsroot=gcc&only_with_tag=hammer-3_3-branch&r1=1.1.2.10&r2=1.1.2.11
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/basic_string.tcc.diff?cvsroot=gcc&only_with_tag=hammer-3_3-branch&r1=1.28.2.6&r2=1.28.2.7



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (9 preceding siblings ...)
  2004-04-23 15:17 ` cvs-commit at gcc dot gnu dot org
@ 2004-04-24 10:37 ` cvs-commit at gcc dot gnu dot org
  2004-04-24 23:30 ` cvs-commit at gcc dot gnu dot org
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2004-04-24 10:37 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From cvs-commit at gcc dot gnu dot org  2004-04-24 09:09 -------
Subject: Bug 15002

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_4-branch
Changes by:	paolo@gcc.gnu.org	2004-04-24 09:09:53

Modified files:
	libstdc++-v3   : ChangeLog 
	libstdc++-v3/include/bits: basic_string.h basic_string.tcc 

Log message:
	2004-04-24  Paolo Carlini  <pcarlini@suse.de>
	Andrew Pinski  <pinskia@physics.uc.edu>
	
	* include/bits/basic_string.tcc (_M_mutate): Don't compute
	__src unnecessarily.
	
	2004-04-24  Paolo Carlini  <pcarlini@suse.de>
	
	PR libstdc++/15002 (partial)
	* include/bits/basic_string.h (_M_replace_aux, _M_replace_safe):
	Special case __n2 == 1, not calling traits_type::assign/copy.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.2224.2.82&r2=1.2224.2.83
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/basic_string.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.41.4.3&r2=1.41.4.4
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/basic_string.tcc.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.46.4.5&r2=1.46.4.6



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (10 preceding siblings ...)
  2004-04-24 10:37 ` cvs-commit at gcc dot gnu dot org
@ 2004-04-24 23:30 ` cvs-commit at gcc dot gnu dot org
  2004-04-25 16:33 ` cvs-commit at gcc dot gnu dot org
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2004-04-24 23:30 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From cvs-commit at gcc dot gnu dot org  2004-04-24 22:20 -------
Subject: Bug 15002

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	paolo@gcc.gnu.org	2004-04-24 22:20:31

Modified files:
	libstdc++-v3   : ChangeLog 
	libstdc++-v3/include/bits: istream.tcc 
Added files:
	libstdc++-v3/testsuite/27_io/basic_istream/getline/char: 4.cc 

Log message:
	2004-04-24  Paolo Carlini  <pcarlini@suse.de>
	Petur Runolfsson  <peturr02@ru.is>
	
	PR libstdc++/15002 (continued)
	* include/bits/istream.tcc (basic_istream<>::getline(char_type*,
	streamsize, char_type)): Use traits::find/copy in a loop to speed
	up greatly the function in the common case (I/O buffer size >> 1).
	
	2004-04-24  Paolo Carlini  <pcarlini@suse.de>
	
	* testsuite/27_io/basic_istream/getline/char/4.cc: New.
	
	* include/bits/istream.tcc (getline(basic_istream<>&,
	basic_string<>&, _CharT)): Change to use sgetc()/snextc() instead
	of sbumpc(), consistently with the other functions, thus also
	dealing correctly with the case of exceeded string::max_size().

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/ChangeLog.diff?cvsroot=gcc&r1=1.2459&r2=1.2460
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/istream.tcc.diff?cvsroot=gcc&r1=1.61&r2=1.62
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/4.cc.diff?cvsroot=gcc&r1=NONE&r2=1.1



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (11 preceding siblings ...)
  2004-04-24 23:30 ` cvs-commit at gcc dot gnu dot org
@ 2004-04-25 16:33 ` cvs-commit at gcc dot gnu dot org
  2004-04-26 17:56 ` [Bug libstdc++/15002] [3.4 only] " pinskia at gcc dot gnu dot org
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2004-04-25 16:33 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From cvs-commit at gcc dot gnu dot org  2004-04-25 15:45 -------
Subject: Bug 15002

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	paolo@gcc.gnu.org	2004-04-25 15:45:14

Modified files:
	libstdc++-v3   : ChangeLog 
	libstdc++-v3/include/bits: istream.tcc basic_string.tcc 
	libstdc++-v3/testsuite/27_io/basic_istream/getline/char: 4.cc 

Log message:
	2004-04-25  Paolo Carlini  <pcarlini@suse.de>
	
	PR libstdc++/15002 (continued again)
	* include/bits/istream.tcc (getline(basic_istream<>&,
	basic_string<>&, _CharT)): Use a temporary buffer, thus
	avoiding reallocation for common case.
	
	* include/bits/basic_string.tcc (_S_construct(_InIterator,
	_InIterator, const _Alloc&, input_iterator_tag)): Tweak size
	of temporary buffer to a power of two.
	
	* testsuite/27_io/basic_istream/getline/char/4.cc: Add comment.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/ChangeLog.diff?cvsroot=gcc&r1=1.2461&r2=1.2462
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/istream.tcc.diff?cvsroot=gcc&r1=1.62&r2=1.63
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/basic_string.tcc.diff?cvsroot=gcc&r1=1.69&r2=1.70
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/4.cc.diff?cvsroot=gcc&r1=1.1&r2=1.2



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] [3.4 only] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (12 preceding siblings ...)
  2004-04-25 16:33 ` cvs-commit at gcc dot gnu dot org
@ 2004-04-26 17:56 ` pinskia at gcc dot gnu dot org
  2004-05-02 16:10 ` cvs-commit at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-04-26 17:56 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-04-26 15:42 -------
This is now fixed on the mainline:
tin:~/src/gnu/gcctest/iotest/iotest>time ./streams2
0.100u 0.040s 0:00.14 100.0%    0+0k 0+0io 205pf+0w
tin:~/src/gnu/gcctest/iotest/iotest>time ./stdio
0.080u 0.050s 0:00.14 92.8%     0+0k 0+0io 85pf+0w
tin:~/src/gnu/gcctest/iotest/iotest>time ./streams
0.420u 0.070s 0:00.49 100.0%    0+0k 0+0io 208pf+0w
Which makes using streams to very close to running stdio.

Paolo says he is going to try to get this into 3.4.1 also.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to fail|                            |3.4.0
      Known to work|                            |3.5.0
            Summary|Linewise stream input is    |[3.4 only] Linewise stream
                   |unusably slow (std::string  |input is unusably slow
                   |slow)                       |(std::string slow)
   Target Milestone|---                         |3.4.1


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] [3.4 only] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (13 preceding siblings ...)
  2004-04-26 17:56 ` [Bug libstdc++/15002] [3.4 only] " pinskia at gcc dot gnu dot org
@ 2004-05-02 16:10 ` cvs-commit at gcc dot gnu dot org
  2004-05-09 23:28 ` cvs-commit at gcc dot gnu dot org
  2004-05-09 23:33 ` pcarlini at suse dot de
  16 siblings, 0 replies; 18+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2004-05-02 16:10 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From cvs-commit at gcc dot gnu dot org  2004-05-02 16:10 -------
Subject: Bug 15002

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	hammer-3_3-branch
Changes by:	paolo@gcc.gnu.org	2004-05-02 16:10:34

Modified files:
	libstdc++-v3   : ChangeLog.hammer 
	libstdc++-v3/include/bits: istream.tcc 

Log message:
	2004-05-02  Paolo Carlini  <pcarlini@suse.de>
	
	PR libstdc++/15002 (continued)
	* include/bits/istream.tcc (getline(basic_istream<>&,
	basic_string<>&, _CharT)): Use a temporary buffer, thus
	avoiding reallocation for common case.
	
	* include/bits/istream.tcc (getline(basic_istream<>&,
	basic_string<>&, _CharT)): Change to use sgetc()/snextc() instead
	of sbumpc(), consistently with the other functions, thus also
	dealing correctly with the case of exceeded string::max_size().

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/ChangeLog.hammer.diff?cvsroot=gcc&only_with_tag=hammer-3_3-branch&r1=1.1.2.12&r2=1.1.2.13
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/istream.tcc.diff?cvsroot=gcc&only_with_tag=hammer-3_3-branch&r1=1.36.2.7&r2=1.36.2.8



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] [3.4 only] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (14 preceding siblings ...)
  2004-05-02 16:10 ` cvs-commit at gcc dot gnu dot org
@ 2004-05-09 23:28 ` cvs-commit at gcc dot gnu dot org
  2004-05-09 23:33 ` pcarlini at suse dot de
  16 siblings, 0 replies; 18+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2004-05-09 23:28 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From cvs-commit at gcc dot gnu dot org  2004-05-09 23:28 -------
Subject: Bug 15002

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_4-branch
Changes by:	paolo@gcc.gnu.org	2004-05-09 23:27:57

Modified files:
	libstdc++-v3   : ChangeLog 
	libstdc++-v3/include/bits: basic_string.tcc istream.tcc 
Added files:
	libstdc++-v3/testsuite/27_io/basic_istream/getline/char: 4.cc 
	                                                         5.cc 
	libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char: 
	                                                                          10.cc 
	libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t: 
	                                                                             10.cc 

Log message:
	2004-05-09  Paolo Carlini  <pcarlini@suse.de>
	
	* testsuite/21_strings/basic_string/inserters_extractors/char/10.cc:
	New.
	* testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc:
	Likewise.
	* testsuite/27_io/basic_istream/getline/char/5.cc: Likewise.
	
	2004-05-09  Paolo Carlini  <pcarlini@suse.de>
	
	PR libstdc++/15002 (continued again)
	* include/bits/istream.tcc (getline(basic_istream<>&,
	basic_string<>&, _CharT)): Use a temporary buffer, thus
	avoiding reallocation for common case.
	
	* include/bits/basic_string.tcc (_S_construct(_InIterator,
	_InIterator, const _Alloc&, input_iterator_tag)): Tweak size
	of temporary buffer to a power of two.
	
	* testsuite/27_io/basic_istream/getline/char/4.cc: Add comment.
	
	2004-05-09  Paolo Carlini  <pcarlini@suse.de>
	Petur Runolfsson  <peturr02@ru.is>
	
	PR libstdc++/15002 (continued)
	* include/bits/istream.tcc (basic_istream<>::getline(char_type*,
	streamsize, char_type)): Use traits::find/copy in a loop to speed
	up greatly the function in the common case (I/O buffer size >> 1).
	
	2004-05-09  Paolo Carlini  <pcarlini@suse.de>
	
	* testsuite/27_io/basic_istream/getline/char/4.cc: New.
	
	* include/bits/istream.tcc (getline(basic_istream<>&,
	basic_string<>&, _CharT)): Change to use sgetc()/snextc() instead
	of sbumpc(), consistently with the other functions, thus also
	dealing correctly with the case of exceeded string::max_size().

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.2224.2.96&r2=1.2224.2.97
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/basic_string.tcc.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.46.4.6&r2=1.46.4.7
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/istream.tcc.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.60.4.2&r2=1.60.4.3
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/4.cc.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.2.4.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/testsuite/27_io/basic_istream/getline/char/5.cc.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.4.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/10.cc.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.4.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.4.1



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug libstdc++/15002] [3.4 only] Linewise stream input is unusably slow (std::string slow)
  2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
                   ` (15 preceding siblings ...)
  2004-05-09 23:28 ` cvs-commit at gcc dot gnu dot org
@ 2004-05-09 23:33 ` pcarlini at suse dot de
  16 siblings, 0 replies; 18+ messages in thread
From: pcarlini at suse dot de @ 2004-05-09 23:33 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pcarlini at suse dot de  2004-05-09 23:33 -------
Fixed for 3.4.1.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15002


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2004-05-09 23:33 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-04-18 14:37 [Bug libstdc++/15002] New: Linewise stream input is unusably slow aaron at isotton dot com
2004-04-18 14:39 ` [Bug libstdc++/15002] " aaron at isotton dot com
2004-04-18 14:47 ` aaron at isotton dot com
2004-04-18 14:48 ` [Bug libstdc++/15002] Linewise stream input is unusably slow (std::string slow) pinskia at gcc dot gnu dot org
2004-04-18 15:19 ` aaron at isotton dot com
2004-04-18 15:45 ` pinskia at gcc dot gnu dot org
2004-04-19 13:03 ` cvs-commit at gcc dot gnu dot org
2004-04-19 13:03 ` pcarlini at suse dot de
2004-04-20 16:59 ` pinskia at gcc dot gnu dot org
2004-04-20 17:20 ` pcarlini at suse dot de
2004-04-23 15:17 ` cvs-commit at gcc dot gnu dot org
2004-04-24 10:37 ` cvs-commit at gcc dot gnu dot org
2004-04-24 23:30 ` cvs-commit at gcc dot gnu dot org
2004-04-25 16:33 ` cvs-commit at gcc dot gnu dot org
2004-04-26 17:56 ` [Bug libstdc++/15002] [3.4 only] " pinskia at gcc dot gnu dot org
2004-05-02 16:10 ` cvs-commit at gcc dot gnu dot org
2004-05-09 23:28 ` cvs-commit at gcc dot gnu dot org
2004-05-09 23:33 ` pcarlini at suse dot de

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).