[New-bugs-announce] [issue4941] Tell GCC Py_DECREF is unlikely to call the destructor
Daniel Diniz
report at bugs.python.org
Wed Jan 14 03:10:30 CET 2009
New submission from Daniel Diniz <ajaksu at gmail.com>:
As suggested by Paolo Giarrusso, add a "likely()" to Py_DECREF, telling
GCC it doesn't call the destructor in the common path.
This optimization seems to interact well with #4896 and to be slower on
top of #4753 on my system. Patching ceval.c instead of object.h seems to
give the same result, FWIW. Benchmarks most welcome :)
Paolo Giarrusso wrote:
"Anyway, yesterday I was looking at the assembly and I realized that
GCC optimizes the case where Py_DECREF calls the destructor! Since I
don't have time for this, can you hint GCC for the better by adding
unlikely() to Py_DECREF, at least (or maybe only) for ceval.c, or
maybe even only for the main interpreter?"
pybench:
Rounds: 10
Warp: 10
Timer: time.time
Machine Details:
Platform ID: Linux-2.6.24-23-generic-i686-with-debian-lenny-sid
Processor: Intel Celeron M 410
Python:
Implementation: CPython
Executable: /home/ajaksu/py3k/python
Version: 3.1.0
Compiler: GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)
Bits: 32bit
Build: Jan 13 2009 23:40:05 (#py3k:68571M)
Unicode: UCS2
Test minimum run-time average run-time
this other diff this other
diff
-------------------------------------------------------------------------------
BuiltinFunctionCalls: 147ms 163ms -9.7% 148ms 164ms
-10.0%
BuiltinMethodLookup: 138ms 154ms -10.3% 139ms 155ms
-10.6%
CompareFloats: 185ms 191ms -3.4% 185ms 192ms
-3.4%
CompareFloatsIntegers: 304ms 294ms +3.1% 304ms 296ms
+2.7%
CompareIntegers: 287ms 281ms +2.0% 288ms 281ms
+2.3%
CompareInternedStrings: 189ms 217ms -12.7% 192ms 217ms
-11.7%
CompareLongs: 167ms 162ms +3.3% 168ms 162ms
+3.3%
CompareStrings: 152ms 178ms -14.2% 156ms 179ms
-12.7%
ComplexPythonFunctionCalls: 192ms 202ms -5.1% 193ms 206ms
-6.2%
ConcatStrings: 325ms 327ms -0.7% 326ms 330ms
-1.1%
CreateInstances: 200ms 209ms -4.4% 204ms 210ms
-2.9%
CreateNewInstances: 149ms 156ms -4.4% 151ms 161ms
-5.8%
CreateStringsWithConcat: 255ms 272ms -6.1% 258ms 275ms
-6.3%
DictCreation: 145ms 151ms -4.0% 146ms 154ms
-5.3%
DictWithFloatKeys: 209ms 224ms -6.8% 209ms 224ms
-6.7%
DictWithIntegerKeys: 170ms 185ms -8.0% 171ms 187ms
-8.3%
DictWithStringKeys: 155ms 172ms -10.1% 156ms 173ms
-10.2%
ForLoops: 162ms 183ms -11.7% 162ms 183ms
-11.4%
IfThenElse: 189ms 217ms -12.7% 190ms 219ms
-13.1%
ListSlicing: 156ms 156ms -0.3% 156ms 158ms
-1.0%
NestedForLoops: 199ms 219ms -9.1% 201ms 220ms
-8.6%
NestedListComprehensions: 222ms 245ms -9.5% 228ms 251ms
-9.2%
NormalClassAttribute: 352ms 376ms -6.2% 353ms 378ms
-6.6%
NormalInstanceAttribute: 188ms 212ms -11.1% 191ms 215ms
-11.3%
PythonFunctionCalls: 173ms 192ms -9.6% 174ms 193ms
-9.7%
PythonMethodCalls: 213ms 226ms -5.6% 214ms 227ms
-5.8%
Recursion: 275ms 295ms -7.0% 276ms 296ms
-7.0%
SecondImport: 158ms 158ms +0.2% 160ms 160ms
+0.1%
SecondPackageImport: 164ms 168ms -2.2% 166ms 170ms
-2.8%
SecondSubmoduleImport: 221ms 226ms -2.4% 223ms 229ms
-2.9%
SimpleComplexArithmetic: 143ms 166ms -13.5% 144ms 166ms
-13.4%
SimpleDictManipulation: 269ms 296ms -9.2% 270ms 297ms
-9.0%
SimpleFloatArithmetic: 150ms 177ms -15.3% 151ms 196ms
-23.2%
SimpleIntFloatArithmetic: 200ms 226ms -11.4% 203ms 232ms
-12.4%
SimpleIntegerArithmetic: 200ms 226ms -11.4% 202ms 235ms
-13.9%
SimpleListComprehensions: 186ms 211ms -12.0% 193ms 218ms
-11.5%
SimpleListManipulation: 161ms 180ms -10.6% 161ms 181ms
-10.9%
SimpleLongArithmetic: 137ms 159ms -14.0% 137ms 162ms
-15.2%
SmallLists: 197ms 209ms -5.6% 201ms 210ms
-4.2%
SmallTuples: 215ms 234ms -8.2% 216ms 236ms
-8.2%
SpecialClassAttribute: 544ms 566ms -4.0% 549ms 571ms
-3.7%
SpecialInstanceAttribute: 188ms 211ms -11.0% 190ms 214ms
-11.0%
StringMappings: 432ms 439ms -1.6% 433ms 441ms
-1.9%
StringPredicates: 183ms 198ms -7.8% 183ms 199ms
-7.9%
StringSlicing: 304ms 317ms -4.2% 310ms 321ms
-3.3%
TryExcept: 138ms 154ms -10.5% 139ms 155ms
-10.4%
TryFinally: 149ms 156ms -4.8% 151ms 159ms
-5.1%
TryRaiseExcept: 76ms 78ms -2.3% 77ms 82ms
-6.3%
TupleSlicing: 254ms 254ms -0.2% 254ms 257ms
-1.0%
WithFinally: 204ms 207ms -1.1% 206ms 209ms
-1.1%
WithRaiseExcept: 187ms 190ms -2.0% 188ms 192ms
-2.2%
-------------------------------------------------------------------------------
Totals: 10557ms 11266ms -6.3% 10647ms 11397ms
-6.6%
(this=likely_object.pybench, other=classic_opcode.pybench)
----------
components: Interpreter Core
files: likely_decref.diff
keywords: patch
messages: 79821
nosy: ajaksu2, blaisorblade, pitrou
severity: normal
status: open
title: Tell GCC Py_DECREF is unlikely to call the destructor
type: performance
versions: Python 3.0, Python 3.1
Added file: http://bugs.python.org/file12731/likely_decref.diff
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue4941>
_______________________________________
More information about the New-bugs-announce
mailing list