comparison of 2.95.2 and 3.2 optimizers on SPARC

Martin Sebor sebor@roguewave.com
Thu Jan 2 18:00:00 GMT 2003


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



More information about the Libstdc++ mailing list