[Python-3000] Performance Notes (original) (raw)

Adam Olsen rhamph at gmail.com
Tue Sep 4 06:10:45 CEST 2007


On 9/3/07, Nicholas Bastin <nick.bastin at gmail.com> wrote:

I've been doing some profiling of 3.0 vs. 2.6 release builds on Windows XP for the purpose of hopefully closing the performance gap. This data is very preliminary, but I thought I'd throw it out here in case someone else also wanted to look into this. Also, possibly useful for comparing against profiling data on other platforms. The table below just lists functions and speed differentials in 3.0 vs. 2.6, ordered by the functions in which we spend the most total time.

NOTE: This data is time sampling, not call graph. Added time could come from either more calls, or longer calls. + 11.5% PyEvalEvalFrameEx + 40.2% lookdict (replacing lookdictstring) +312.9% PyDictGetItem - 13.2% callfunction + 19.4% fastfunction

lookdict_string appears to still use the old string type, rather than unicode. This prevents it from being used. It's probably not too hard to fix.

Other notes: * PyLongFitsInLong consumes about 2% of total pystone runtime. * unicodecompare consumes the exact same time in 3.0 that stringrichcompare consumed in 2.6. Either these functions share a similar CPU profile, or their call counts vary dramatically.

Top 5 functions in Python 2.6: * PyEvalEvalFrameEx (48.66%) * lookdictstring (5.76%) * callfunction (4.80%) * framedealloc (2.80%) * fastfunction (2.48%) Top 5 functions in Python 3.0: * PyEvalEvalFrameEx (44.37%) * lookdict (6.66%) * PyDictGetItem (4.63%) * unicodehash (3.51%) * callfunction (3.38%)

-- Adam Olsen, aka Rhamphoryncus



More information about the Python-3000 mailing list