On 14/05/2015 17:29, Marko Rauhamaa wrote:
BartC <b...@freeuk.com>:

That's a shame because I wanted to tinker with the main dispatcher
loop to try and find out what exactly is making it slow. Nothing that
seems obvious at first sight.

My guess is the main culprit is attribute lookup in two ways:

  * Each object attribute reference involves a dictionary lookup.

  * Each method call involves *two* dictionary lookups plus an object
    creation.

Tell us what you find out.

I'm just starting but I can tell you that it isn't because debug mode (Py_DEBUG defined) was left on by mistake!

What is interesting however is that on the very simple test I'm doing (a while loop incrementing a variable up to 100 million), the timings under Windows are:

Python 2.5       9.2 seconds
Python 3.1      13.1
Python 3.4.3    17.0
Python 3.4.3    14.3 (under Ubuntu on same machine, using the version
                     I built today)

That's quite a big range!

PyPy does it in 0.7 seconds. The same program within my own *simple* bytecode interpreter (not for Python) has a fastest time of 1.5 seconds but makes use of ASM. A version 100% in (gcc) C can manage 2 seconds.

So far I haven't find anything that explains the discrepancy (the languages are different, mine is simpler, but the Python code isn't doing anything that complicated, only LOAD_FASTs and such, and LOAD_FAST is apparently just an array access.

But the nearly 2:1 difference between new and old Python versions is also intriguing.

def whiletest():
        i=0
        while i<=100000000:
                i=i+1

whiletest()

--
Bartc
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to