best gcc version for Python

Robin Becker robin at NOSPAMreportlab.com
Sun Nov 16 09:44:26 EST 2008


I've just been testing out Jakob Sievers' speedup of Python 2.5.2 by 
compiling on freebsd with gcc-4.3.3 (the standard freebsd 6.1 gcc is 3.4.4).

I'm glad to say that his modification did improve pybench overall by 
about 12%, but during the testing I noticed that in fact some of the 
pybench results were much worse using gcc-4.3.3 compared to gcc-3.4.4.

Of course it may be that freebsd has put more work into 3.4.4, but when 
I did a direct comparison of stock Python-2.5.2 under both compilers I 
see the results below which seems to indicate some quite large 
differences in how the compilers perform and the older one is better 
overall by about 6%. Is there a best version of gcc for python?

> -------------------------------------------------------------------------------
> PYBENCH 2.0
> -------------------------------------------------------------------------------
> * using Python 2.5.2
> * disabled garbage collection
> * system check interval set to maximum: 2147483647
> * using timer: time.time
> 
> Calibrating tests. Please wait...
> 
> Running 10 round(s) of the suite at warp factor 10:
> 
> * Round 1 done in 9.697 seconds.
> * Round 2 done in 9.746 seconds.
> * Round 3 done in 9.631 seconds.
> * Round 4 done in 9.646 seconds.
> * Round 5 done in 9.727 seconds.
> * Round 6 done in 9.649 seconds.
> * Round 7 done in 9.759 seconds.
> * Round 8 done in 9.660 seconds.
> * Round 9 done in 9.661 seconds.
> * Round 10 done in 9.671 seconds.
> 
> -------------------------------------------------------------------------------
> Benchmark: 2008-11-16 12:22:59
> -------------------------------------------------------------------------------
> 
>     Rounds: 10
>     Warp:   10
>     Timer:  time.time
> 
>     Machine Details:
>        Platform ID:  FreeBSD-6.1-SECURITY-i386-32bit
>        Processor:    i386
> 
>     Python:
>        Executable:   /home/rptlab/bin/python25
>        Version:      2.5.2
>        Compiler:     GCC 3.4.4 [FreeBSD
>        Bits:         32bit
>        Build:        Nov 16 2008 12:15:52 (#r252:60911)
>        Unicode:      UCS2
> 
> 
> -------------------------------------------------------------------------------
> Comparing with: pybench.ref.x
> -------------------------------------------------------------------------------
> 
>     Rounds: 10
>     Warp:   10
>     Timer:  time.time
> 
>     Machine Details:
>        Platform ID:  FreeBSD-6.1-SECURITY-i386-32bit
>        Processor:    i386
> 
>     Python:
>        Executable:   /home/rptlab/bin/xpython
>        Version:      2.5.2
>        Compiler:     GCC 4.3.3 20081106 (prerelease)
>        Bits:         32bit
>        Build:        Nov 16 2008 11:38:57 (#r252:60911)
>        Unicode:      UCS2
> 
> 
> Test                             minimum run-time        average  run-time
>                                  this    other   diff    this    other   diff
> -------------------------------------------------------------------------------
>           BuiltinFunctionCalls:   202ms   209ms   -3.6%   205ms   213ms   -3.7%
>            BuiltinMethodLookup:   153ms   146ms   +5.2%   156ms   146ms   +6.7%
>                  CompareFloats:   134ms   149ms   -9.6%   134ms   149ms   -9.6%
>          CompareFloatsIntegers:   132ms   147ms   -9.9%   132ms   147ms   -9.9%
>                CompareIntegers:   131ms   173ms  -24.4%   131ms   173ms  -24.4%
>         CompareInternedStrings:   130ms   142ms   -7.8%   131ms   142ms   -7.7%
>                   CompareLongs:   113ms   146ms  -23.1%   113ms   146ms  -23.1%
>                 CompareStrings:   138ms   138ms   -0.1%   138ms   138ms   -0.5%
>                 CompareUnicode:   126ms   130ms   -2.8%   126ms   130ms   -3.3%
>                  ConcatStrings:   233ms   422ms  -44.9%   254ms   452ms  -43.9%
>                  ConcatUnicode:   187ms   300ms  -37.5%   193ms   340ms  -43.3%
>                CreateInstances:   147ms   159ms   -7.5%   148ms   160ms   -7.6%
>             CreateNewInstances:   132ms   138ms   -4.9%   132ms   139ms   -4.7%
>        CreateStringsWithConcat:   176ms   174ms   +1.4%   177ms   174ms   +1.4%
>        CreateUnicodeWithConcat:   143ms   154ms   -7.3%   147ms   156ms   -5.6%
>                   DictCreation:   118ms   150ms  -21.1%   119ms   151ms  -21.1%
>              DictWithFloatKeys:   163ms   178ms   -8.5%   163ms   178ms   -8.4%
>            DictWithIntegerKeys:   123ms   137ms  -10.5%   123ms   138ms  -10.7%
>             DictWithStringKeys:   117ms   136ms  -13.7%   118ms   136ms  -13.6%
>                       ForLoops:   111ms   122ms   -9.0%   111ms   123ms   -9.8%
>                     IfThenElse:   121ms   132ms   -7.8%   121ms   132ms   -8.1%
>                    ListSlicing:   115ms   115ms   +0.6%   116ms   115ms   +0.8%
>                 NestedForLoops:   138ms   145ms   -4.8%   139ms   145ms   -4.3%
>           NormalClassAttribute:   142ms   140ms   +1.2%   144ms   141ms   +2.3%
>        NormalInstanceAttribute:   136ms   133ms   +2.5%   137ms   134ms   +2.2%
>            PythonFunctionCalls:   128ms   133ms   -3.8%   128ms   133ms   -4.0%
>              PythonMethodCalls:   162ms   173ms   -6.2%   163ms   174ms   -6.7%
>                      Recursion:   175ms   180ms   -2.8%   175ms   181ms   -3.1%
>                   SecondImport:   222ms   213ms   +4.2%   224ms   213ms   +5.0%
>            SecondPackageImport:   230ms   220ms   +4.5%   232ms   221ms   +5.0%
>          SecondSubmoduleImport:   279ms   263ms   +5.9%   280ms   263ms   +6.1%
>        SimpleComplexArithmetic:   143ms   148ms   -3.7%   143ms   148ms   -3.6%
>         SimpleDictManipulation:   132ms   139ms   -5.5%   133ms   140ms   -5.2%
>          SimpleFloatArithmetic:   128ms   128ms   +0.2%   130ms   129ms   +0.6%
>       SimpleIntFloatArithmetic:   110ms   113ms   -2.2%   110ms   113ms   -2.2%
>        SimpleIntegerArithmetic:   110ms   113ms   -2.2%   110ms   113ms   -2.2%
>         SimpleListManipulation:   114ms   124ms   -7.8%   115ms   125ms   -7.5%
>           SimpleLongArithmetic:   121ms   121ms   -0.3%   121ms   122ms   -0.5%
>                     SmallLists:   138ms   143ms   -3.3%   140ms   149ms   -5.9%
>                    SmallTuples:   149ms   159ms   -6.1%   153ms   159ms   -4.2%
>          SpecialClassAttribute:   141ms   138ms   +2.1%   141ms   139ms   +2.0%
>       SpecialInstanceAttribute:   227ms   216ms   +5.2%   227ms   216ms   +5.3%
>                 StringMappings:  1827ms  1796ms   +1.7%  1828ms  1798ms   +1.7%
>               StringPredicates:   378ms   369ms   +2.3%   378ms   369ms   +2.3%
>                  StringSlicing:   140ms   179ms  -21.7%   145ms   185ms  -21.6%
>                      TryExcept:   111ms   112ms   -0.7%   111ms   112ms   -0.8%
>                 TryRaiseExcept:   130ms   124ms   +4.7%   131ms   125ms   +4.6%
>                   TupleSlicing:   130ms   134ms   -2.9%   133ms   135ms   -1.5%
>                UnicodeMappings:   125ms   123ms   +0.8%   126ms   124ms   +1.8%
>              UnicodePredicates:   135ms   132ms   +2.3%   136ms   133ms   +2.1%
>              UnicodeProperties:   199ms   201ms   -1.2%   199ms   202ms   -1.2%
>                 UnicodeSlicing:   156ms   233ms  -33.2%   166ms   244ms  -32.2%
> -------------------------------------------------------------------------------
> Totals:                          9601ms 10240ms   -6.2%  9685ms 10363ms   -6.5%


-- 
Robin Becker



More information about the Python-list mailing list