[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