[ut2004] Linux 3236 with fixed load times...

J. Ryan Earl heretic at clanhk.org
Tue Jun 22 20:16:53 EDT 2004


Ryan C. Gordon wrote:

> As for gcc 3.4: Maybe in a few years.  :)    Let's see how this gcc 
> does first.
>
> --ryan.

And that's why Linux games are typically performing much worse than the 
Windows versions: inferior binary generation.  People doing Windows 
development with Visual Studio .NET and/or using the Intel compiler are 
getting much better binaries that are typically 20-30% faster than the 
Linux builds.

This is killing me.  I hate running Windows servers, but for many games 
they perform so much better because of this exact reason and I have no 
choice in the matter.  Furthermore, it's easy to keep gcc-3.4 and 
gcc-3.3 both live on your system.  You can easily switch back and forth 
between profiles for packages that won't compile with gcc-3.4.  3.4 is 
stable on Gentoo for x86_64; mark my words, gcc-3.3 will not be around 
as long as gcc-3.2.

Switching to 3.4 was painless, and I haven't had any packages not 
compile yet with: CFLAGS = -march=k8 -O3 -pipe  Not only is everything 
at least as stable--some 900 bugs fixed that won't be in gcc33--it 
generates noticeably more efficient binaries.  How can you resist this 
part of the ChangeLog?


      IA-32/AMD64 (x86-64)

    * Tuning for K8 (AMD Opteron/Athlon64) core is available via
      |-march=k8| and |-mcpu=k8|.
    * Scalar SSE code generation carefully avoids reformatting
      penalties, hidden dependencies and minimizes the number of uops
      generated on both Intel and AMD CPUs.
    * Vector MMX and SSE operands are now passed in registers to improve
      performance and match the argument passing convention used by the
      Intel C++ Compiler. As a result it is not possible to call
      functions accepting vector arguments compiled by older GCC version.
    * Conditional jump elimination is now more aggressive on modern CPUs.
    * The Athlon ports has been converted to use the DFA processor
      pipeline description.
    * Optimization of indirect tail calls is now possible in a similar
      fashion as direct sibcall optimization.
    * Further small performance improvements.
    * |-m128bit-long-double| is now less buggy.
    * |__float128| support in 64-bit compilation.
    * Support for data structures exceeding 2GB in 64-bit mode.
    * |-mcpu| has been renamed to |-mtune|.


Look vector performance love in that, how can that not swoon you when 
you're working on 3D applications?  Still not convinced???  How about a 
faster C++ library?


        Runtime Library (libstdc++)

    * Optimization work:
          o Streamlined |streambuf|, |filebuf|, separate synched with C
            Standard I/O |streambuf|.
          o All formatted I/O now uses cached locale information.
          o STL optimizations (memory/speed for list, red-black trees as
            used by sets and maps).
          o More use of GCC builtins.
          o String optimizations (avoid contention on
            increment/decrement-and-test of the reference count in the
            empty-string object, constructor from input_iterators speedup).
    * Static linkage size reductions.
    * Large File Support (files larger than 2 GB on 32-bit systems).
    * Wide character and variable encoding |filebuf| work (UTF-8, Unicode).
    * Generic character traits.
    * Also support |wchar_t| specializations on Mac OS 10.3.x, FreeBSD
      5.x, Solaris 2.7 and above, AIX 5.x, Irix 6.5.
    * The allocator class is now standard-conformant, and two additional
      extension allocators have been added, mt_alloc and bitmap_allocator.
    * PCH support: -include bits/stdc++.h (2x compile speedup).
    * Rewrote |__cxa_demangle| with support for C++ style allocators.
    * New debug modes for STL containers and iterators.
    * Testsuite rewrite: five times as many tests, plus increasingly
      sophisticated tests, including I/O, MT, multi-locale, wide and
      narrow characters.
    * Use current versions of GNU "autotools" for build/configuration.


Yea, 3.4 uses yet another new libstdc++, but you can release builds done 
with both gcc versions. 

It should be something easy to script too:

switch_to_gcc34.sh
build.ut2004
mv ucc-bin ucc-bin-gcc34
make clean
switch_to_gcc33.sh
build ut2004
mv ucc-bin ucc-bin-gcc33
echo "ln -s ucc-bin-<gcc version you want> ucc-bin" > GCC.README

Or maybe you alter the build script, whatever, I think the above is 
probably more simple/elegant. 

What's this I hear, still concerned about stability and standards 
compliance?

C++

    * G++ is now *much* closer to full conformance to the ISO/ANSI C++
      standard. This means, among other things, that a lot of invalid
      constructs which used to be accepted in previous versions will now
      be rejected. It is very likely that existing C++ code will need to
      be fixed. This document lists some of the most common issues.
    * A hand-written recursive-descent C++ parser has replaced the
      YACC-derived C++ parser from previous GCC releases. The new parser
      contains much improved infrastructure needed for better parsing of
      C++ source codes, handling of extensions, and clean separation
      (where possible) between proper semantics analysis and parsing.
      The new parser fixes many bugs that were found in the old parser.

And I -KNOW- you wanna be compliant with open-standards right?  That's 
your specialty no?  I beg of you, please make it run as fast as the 
Windows variant, you have the power.

Your adoring ass-kissing admirer,
-ryan



More information about the ut2004 mailing list