This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: comparison of 2.95.2 and 3.2 optimizers on SPARC


Loren James Rittle wrote:
sebor@roguewave.com (Martin Sebor) writes:


An interesting datapoint for libstdc++ folks might be that
the gcc 3.2 C++ Standard iostream implementation is nearly
three times slower than the next slowest implementation on
SunOS (SunPro 5.3's libstd 2.1.1) and 5 times slower than
the fastest tested implementation on SunOS (SunPro 5.3
with STLport 4.5).

I don't doubt your observed numbers for gcc 3.2 on SPARC; however,
someone will have to debug why this is so if I guess wrong below.

First a baseline of what I see: With gcc 3.3 (experimental) circa
20021003, for the code exactly as you posted it, I see the following
on sparc-sun-solaris2.7 (note: this is really old hardware):

; /usr/local/beta-gcc/bin/g++ -O3 -R/usr/local/beta-gcc/lib t.C
; time a.out >/dev/null 1000000
    11r    10.6u     0.1s       a.out 1000000
; time a.out >/dev/null 1000000 stdio
    11r    10.8u     0.1s       a.out 1000000 stdio

I see the same performance profile with current mainline and 3.2.X
code (although somewhat beyond the 3.2 release) on i386-*-freebsd4.

Looking though the ChangeLog delta between 3.2 release and tip of
3.2.X, I know of no library code change that should affect this issue
after 3.2 release *as* *long* *as* the library that you are testing
was installed via a full bootstrap process.  I would ask that you
ensure that you are actually linking against the 3.2 version of the
libstdc++-v3 library as is built during a full 3.2 bootstrap cycle.
If you build libstdc++-v3 outside a full compiler bootstrap, then you
don't get the same optimization by default (this was true circa 3.2
release but was perhaps recently changed).

Martin, could you confirm that you indeed tested the libstdc++-v3
library as was built during a normal gcc bootstrap process?
Yes, I used a stock installation of gcc 3.2 and libstdc++. I can
also confirm a similar result on Linux. The numbers you are seeing
are so close because they are both for stdio (because of the silly
way my simplified test case deals with command line arguments --
sorry about that).

Here's my transcript for SunOS:

$ (export LD_LIBRARY_PATH=/build/contrib/gcc-3.2/lib; \
/build/contrib/gcc-3.2/bin/g++ -O3 -v t.cpp \
&& time ./a.out 1000000 stdio >/dev/null \
&& time ./a.out 1000000 iostream >/dev/null)
Reading specs from /build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2/s
pecs
Configured with: ../gcc-3.2/configure --prefix=/build/contrib/gcc-3.2 --enable-l
anguages=c,c++
Thread model: posix
gcc version 3.2
/build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2/cc1plus -v -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__PRAGMA_REDEFINE_EXTNAME -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__PRAGMA_REDEFINE_EXTNAME -D__sparc -D__sun -D__unix -Asystem=unix -Asystem=svr4 -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_XOPEN
_SOURCE=500 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D__EXTENSIONS__ -D__SIZE_TYPE__=unsigned int -D__PTRDIFF_TYPE__=int -D__WCHAR_TYPE__=long int -D__WINT_TYPE__=long int -D__GCC_NEW_VARARGS__ -Acpu=sparc -Amachine=sparc t.cpp -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -quiet -dumpbase t.cpp -O3 -version -o /var/tmp//ccyHCuLR.s
GNU CPP version 3.2 (cpplib) (sparc ELF)
GNU C++ version 3.2 (sparc-sun-solaris2.7)
compiled by GNU C version 3.2.
ignoring nonexistent directory "/build/contrib/gcc-3.2/sparc-sun-solaris2.7/include"
#include "..." search starts here:
#include <...> search starts here:
/build/contrib/gcc-3.2/include/c++/3.2
/build/contrib/gcc-3.2/include/c++/3.2/sparc-sun-solaris2.7
/build/contrib/gcc-3.2/include/c++/3.2/backward
/usr/local/include
/build/contrib/gcc-3.2/include
/build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2/include
/usr/include
End of search list.
/usr/ccs/bin/as -V -Qy -s -o /var/tmp//cc5trdAQ.o /var/tmp//ccyHCuLR.s
/usr/ccs/bin/as: WorkShop Compilers 5.0 98/12/21
/build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy /build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2/crt1.o /build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2/crti.o /u
sr/ccs/lib/values-Xa.o /build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2/crtbegin.o -L/build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2 -L/usr/ccs/bin -L/usr/ccs/lib -L/build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2/../../.. /var/tmp//cc5trdAQ.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc -lc /build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2/crtend.o /build/contrib/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.7/3.2/crtn.o
ld: Software Generation Utilities - Solaris-ELF (4.0)

real 0m2.254s
user 0m2.250s
sys 0m0.000s

real 0m13.613s
user 0m13.570s
sys 0m0.030s


And here's my transcript on Linux:

$ (export LD_LIBRARY_PATH=/build/contrib/gcc-3.2/lib; \
/build/contrib/gcc-3.2/bin/g++ -O3 -v t.cpp \
&& time ./a.out 1000000 stdio >/dev/null \
&& time ./a.out 1000000 iostream >/dev/null)
Reading specs from /build/contrib/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/specs
Configured with: ../gcc-3.2/configure --prefix=/build/contrib/gcc-3.2 --enable-languages=c,c++
Thread model: posix
gcc version 3.2
/build/contrib/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/cc1plus -v -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ t.cpp -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -quiet -dumpbase t.cpp -O3 -version -o /tmp/cc4rJjoe.s
GNU CPP version 3.2 (cpplib) (i386 Linux/ELF)
GNU C++ version 3.2 (i686-pc-linux-gnu)
compiled by GNU C version 3.2.
ignoring nonexistent directory "/build/contrib/gcc-3.2/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/build/contrib/gcc-3.2/include/c++/3.2
/build/contrib/gcc-3.2/include/c++/3.2/i686-pc-linux-gnu
/build/contrib/gcc-3.2/include/c++/3.2/backward
/usr/local/include
/build/contrib/gcc-3.2/include
/build/contrib/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/include
/usr/include
End of search list.
as --traditional-format -V -Qy -o /tmp/cczbiHhk.o /tmp/cc4rJjoe.s
GNU assembler version 2.13 (i686-pc-linux-gnu) using BFD version 2.13
/build/contrib/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /build/contrib
/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/crtbegin.o -L/build/contrib/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2 -L/build/contrib/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/../../.. /tmp/cczbiHhk.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /build/contrib/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/crtend.o /usr/lib/crtn.o

real 0m1.179s
user 0m1.130s
sys 0m0.000s

real 0m8.614s
user 0m8.600s
sys 0m0.000s


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]