[Python-Dev] Building a Faster Python

Raymond Hettinger raymond.hettinger at gmail.com
Mon Jul 22 01:36:35 CEST 2013


Our current Mac OS X builds use GCC-4.2.

On Python2.7, I ran a comparison of gcc-4.2.1 builds
versus gcc-4.8.1 and found that the latter makes a much
faster Python.  PyBench2.0 shows the total running time
dropping from 5653ms to 4571ms.  The code is uniformly
better in just about every category.


Raymond








-------------------------------------------------------------------------------
PYBENCH 2.0
-------------------------------------------------------------------------------
* using CPython 2.7.5+ (2.7:f8df7c50132f, Jul 21 2013, 15:57:46) [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)]
* disabled garbage collection
* system check interval set to maximum: 2147483647
* using timer: time.time

Calibrating tests. Please wait... done.

Running 10 round(s) of the suite at warp factor 10:

* Round 1 done in 5.775 seconds.
* Round 2 done in 5.794 seconds.
* Round 3 done in 5.743 seconds.
* Round 4 done in 5.736 seconds.
* Round 5 done in 5.758 seconds.
* Round 6 done in 5.787 seconds.
* Round 7 done in 5.779 seconds.
* Round 8 done in 5.781 seconds.
* Round 9 done in 5.782 seconds.
* Round 10 done in 5.811 seconds.

-------------------------------------------------------------------------------
Benchmark: 2013-07-21 16:02:39
-------------------------------------------------------------------------------

    Rounds: 10
    Warp:   10
    Timer:  time.time

    Machine Details:
       Platform ID:    Darwin-12.4.0-x86_64-i386-64bit
       Processor:      i386

    Python:
       Implementation: CPython
       Executable:     /Users/raymondhettinger/py27/python.exe
       Version:        2.7.5+
       Compiler:       GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
       Bits:           64bit
       Build:          Jul 21 2013 15:57:46 (#2.7:f8df7c50132f)
       Unicode:        UCS2


Test                             minimum  average  operation  overhead
-------------------------------------------------------------------------------
          BuiltinFunctionCalls:    112ms    114ms    0.22us    0.178ms
           BuiltinMethodLookup:     76ms     83ms    0.08us    0.207ms
                 CompareFloats:     78ms     80ms    0.07us    0.237ms
         CompareFloatsIntegers:     73ms     74ms    0.08us    0.178ms
               CompareIntegers:     86ms     87ms    0.05us    0.354ms
        CompareInternedStrings:     85ms     86ms    0.06us    0.895ms
                  CompareLongs:     72ms     72ms    0.07us    0.207ms
                CompareStrings:     66ms     66ms    0.07us    0.603ms
                CompareUnicode:     75ms     76ms    0.10us    0.455ms
    ComplexPythonFunctionCalls:     96ms     98ms    0.49us    0.298ms
                 ConcatStrings:    166ms    179ms    0.36us    0.346ms
                 ConcatUnicode:     80ms     82ms    0.27us    0.231ms
               CreateInstances:    111ms    115ms    1.03us    0.242ms
            CreateNewInstances:     84ms     87ms    1.04us    0.250ms
       CreateStringsWithConcat:     95ms     97ms    0.10us    0.602ms
       CreateUnicodeWithConcat:     70ms     72ms    0.18us    0.236ms
                  DictCreation:     77ms     77ms    0.19us    0.237ms
             DictWithFloatKeys:     81ms     82ms    0.09us    0.442ms
           DictWithIntegerKeys:     84ms     85ms    0.07us    0.591ms
            DictWithStringKeys:     78ms     79ms    0.07us    0.590ms
                      ForLoops:     69ms     70ms    2.81us    0.042ms
                    IfThenElse:     73ms     74ms    0.06us    0.445ms
                   ListSlicing:     69ms     70ms    4.98us    0.079ms
                NestedForLoops:     83ms     84ms    0.06us    0.016ms
      NestedListComprehensions:    103ms    105ms    8.78us    0.061ms
          NormalClassAttribute:     85ms     86ms    0.07us    0.298ms
       NormalInstanceAttribute:     81ms     81ms    0.07us    0.299ms
           PythonFunctionCalls:     94ms     95ms    0.29us    0.179ms
             PythonMethodCalls:    109ms    111ms    0.49us    0.093ms
                     Recursion:    134ms    137ms    2.74us    0.297ms
                  SecondImport:    110ms    111ms    1.11us    0.119ms
           SecondPackageImport:    113ms    115ms    1.15us    0.159ms
         SecondSubmoduleImport:    143ms    146ms    1.46us    0.119ms
       SimpleComplexArithmetic:     70ms     70ms    0.08us    0.237ms
        SimpleDictManipulation:     84ms     86ms    0.07us    0.297ms
         SimpleFloatArithmetic:     75ms     75ms    0.06us    0.355ms
      SimpleIntFloatArithmetic:     67ms     67ms    0.05us    0.355ms
       SimpleIntegerArithmetic:     68ms     68ms    0.05us    0.354ms
      SimpleListComprehensions:     93ms     94ms    7.82us    0.061ms
        SimpleListManipulation:     69ms     71ms    0.06us    0.386ms
          SimpleLongArithmetic:     81ms     82ms    0.12us    0.178ms
                    SmallLists:     94ms     98ms    0.14us    0.237ms
                   SmallTuples:     84ms     86ms    0.16us    0.267ms
         SpecialClassAttribute:     84ms     85ms    0.07us    0.299ms
      SpecialInstanceAttribute:    100ms    102ms    0.08us    0.299ms
                StringMappings:    440ms    446ms    1.77us    0.304ms
              StringPredicates:    150ms    156ms    0.22us    1.453ms
                 StringSlicing:    108ms    115ms    0.21us    0.500ms
                     TryExcept:     70ms     70ms    0.03us    0.444ms
                    TryFinally:    102ms    103ms    0.64us    0.238ms
                TryRaiseExcept:     79ms     81ms    1.27us    0.256ms
                  TupleSlicing:     95ms     98ms    0.37us    0.051ms
               UnicodeMappings:     75ms     76ms    2.10us    0.411ms
             UnicodePredicates:     77ms     80ms    0.15us    1.729ms
             UnicodeProperties:    122ms    123ms    0.31us    1.449ms
                UnicodeSlicing:    100ms    105ms    0.21us    0.442ms
                   WithFinally:    102ms    105ms    0.65us    0.238ms
               WithRaiseExcept:    155ms    157ms    1.96us    0.297ms
-------------------------------------------------------------------------------
Totals:                           5653ms   5774ms





-------------------------------------------------------------------------------
PYBENCH 2.0
-------------------------------------------------------------------------------
* using CPython 2.7.5+ (2.7:f8df7c50132f, Jul 21 2013, 16:11:35) [GCC 4.8.1]
* disabled garbage collection
* system check interval set to maximum: 2147483647
* using timer: time.time

Calibrating tests. Please wait... done.

Running 10 round(s) of the suite at warp factor 10:

* Round 1 done in 4.654 seconds.
* Round 2 done in 4.681 seconds.
* Round 3 done in 4.660 seconds.
* Round 4 done in 4.694 seconds.
* Round 5 done in 4.674 seconds.
* Round 6 done in 4.673 seconds.
* Round 7 done in 4.672 seconds.
* Round 8 done in 4.679 seconds.
* Round 9 done in 4.692 seconds.
* Round 10 done in 4.680 seconds.

-------------------------------------------------------------------------------
Benchmark: 2013-07-21 16:15:45
-------------------------------------------------------------------------------

    Rounds: 10
    Warp:   10
    Timer:  time.time

    Machine Details:
       Platform ID:    Darwin-12.4.0-x86_64-i386-64bit
       Processor:      i386

    Python:
       Implementation: CPython
       Executable:     /Users/raymondhettinger/py27/python.exe
       Version:        2.7.5+
       Compiler:       GCC 4.8.1
       Bits:           64bit
       Build:          Jul 21 2013 16:11:35 (#2.7:f8df7c50132f)
       Unicode:        UCS2


Test                             minimum  average  operation  overhead
-------------------------------------------------------------------------------
          BuiltinFunctionCalls:     90ms     92ms    0.18us    0.185ms
           BuiltinMethodLookup:     53ms     55ms    0.05us    0.146ms
                 CompareFloats:     60ms     60ms    0.05us    0.167ms
         CompareFloatsIntegers:     57ms     57ms    0.06us    0.125ms
               CompareIntegers:     67ms     67ms    0.04us    0.250ms
        CompareInternedStrings:     67ms     67ms    0.04us    0.631ms
                  CompareLongs:     60ms     62ms    0.06us    0.146ms
                CompareStrings:     52ms     53ms    0.05us    0.425ms
                CompareUnicode:     62ms     62ms    0.08us    0.350ms
    ComplexPythonFunctionCalls:     85ms     86ms    0.43us    0.210ms
                 ConcatStrings:    160ms    173ms    0.35us    0.252ms
                 ConcatUnicode:     74ms     75ms    0.25us    0.172ms
               CreateInstances:     81ms     84ms    0.75us    0.170ms
            CreateNewInstances:     62ms     64ms    0.77us    0.192ms
       CreateStringsWithConcat:     75ms     76ms    0.08us    0.418ms
       CreateUnicodeWithConcat:     64ms     65ms    0.16us    0.167ms
                  DictCreation:     56ms     57ms    0.14us    0.167ms
             DictWithFloatKeys:     60ms     61ms    0.07us    0.313ms
           DictWithIntegerKeys:     61ms     62ms    0.05us    0.418ms
            DictWithStringKeys:     55ms     56ms    0.05us    0.418ms
                      ForLoops:     43ms     43ms    1.72us    0.032ms
                    IfThenElse:     60ms     61ms    0.04us    0.313ms
                   ListSlicing:     72ms     90ms    6.40us    0.041ms
                NestedForLoops:     59ms     61ms    0.04us    0.013ms
      NestedListComprehensions:     79ms     81ms    6.77us    0.043ms
          NormalClassAttribute:     62ms     63ms    0.05us    0.210ms
       NormalInstanceAttribute:     55ms     56ms    0.05us    0.210ms
           PythonFunctionCalls:     80ms     81ms    0.25us    0.126ms
             PythonMethodCalls:     84ms     84ms    0.38us    0.065ms
                     Recursion:     97ms     97ms    1.95us    0.209ms
                  SecondImport:     82ms     83ms    0.83us    0.083ms
           SecondPackageImport:     88ms     90ms    0.90us    0.083ms
         SecondSubmoduleImport:    114ms    115ms    1.15us    0.083ms
       SimpleComplexArithmetic:     52ms     53ms    0.06us    0.167ms
        SimpleDictManipulation:     65ms     65ms    0.05us    0.209ms
         SimpleFloatArithmetic:     50ms     51ms    0.04us    0.251ms
      SimpleIntFloatArithmetic:     52ms     52ms    0.04us    0.251ms
       SimpleIntegerArithmetic:     52ms     52ms    0.04us    0.251ms
      SimpleListComprehensions:     67ms     70ms    5.82us    0.043ms
        SimpleListManipulation:     49ms     50ms    0.04us    0.272ms
          SimpleLongArithmetic:     48ms     48ms    0.07us    0.125ms
                    SmallLists:     80ms     83ms    0.12us    0.167ms
                   SmallTuples:     72ms     72ms    0.13us    0.221ms
         SpecialClassAttribute:     62ms     62ms    0.05us    0.210ms
      SpecialInstanceAttribute:    127ms    129ms    0.11us    0.210ms
                StringMappings:    396ms    399ms    1.58us    0.233ms
              StringPredicates:    125ms    127ms    0.18us    1.117ms
                 StringSlicing:     95ms    101ms    0.18us    0.355ms
                     TryExcept:     47ms     48ms    0.02us    0.313ms
                    TryFinally:     60ms     61ms    0.38us    0.167ms
                TryRaiseExcept:     62ms     64ms    0.99us    0.167ms
                  TupleSlicing:     85ms     88ms    0.33us    0.028ms
               UnicodeMappings:     93ms     93ms    2.59us    0.355ms
             UnicodePredicates:     66ms     66ms    0.12us    1.342ms
             UnicodeProperties:     86ms     88ms    0.22us    1.125ms
                UnicodeSlicing:     84ms     91ms    0.19us    0.315ms
                   WithFinally:     91ms     93ms    0.58us    0.167ms
               WithRaiseExcept:    127ms    129ms    1.61us    0.209ms
-------------------------------------------------------------------------------
Totals:                           4571ms   4676ms


More information about the Python-Dev mailing list