On Thu, Apr 17, 2008 at 12:04 PM, Richard Jones
<[EMAIL PROTECTED]> wrote:
> Ian Mallett <[EMAIL PROTECTED]> wrote:
>
> > Are there any plans to improve Python's speed to
> > at least the level of C languages?
>
> This isn't really the best forum for asking such a question. I would
> recommend asking on the general Python mailing list / newsgroup
> ("comp.lang.python" on http://www.python.org/community/lists/).
>
> I think I speak for all Python developers when I say that we'd love for the
> language to run faster. And of course the large body of core CPython
> developers are aware of this. I've personally attended a sprint in Iceland
> during which we spent a week solely focused on speeding up the CPython
> interpreter.
>
> There's just not much that can be done with the current CPython
> implementation to make it faster.
>
Here's some ways to make CPython faster:
1. - better machine specific compilation. distutils mods to compile
extensions with machine specific optimizations. eg. _array_athlon.so
_array_pentium.so (1.2 - 4x speedup). At the moment most python
distributions use the lowest common denominator instructions - eg
i386.
2. - asm optimizations. eg. optimized memcpy routines are at least 5x
faster than one included in
glibc(http://www.freevec.org/function/memcpy). There seems to be
almost no asm optimizations in CPython.
3. - faster threading. It's easy to get 2-8x speed up on desktop
machines with 2-8 cores. CPython could use faster threading
primitives, and more selective releasing of the GIL. Pygame has used
fine grained selected locking fairly successfully - so I think it
could be done for the rest of python too. The next step for pygame is
to make these threading enhancements able to be used automatically -
through sprite mixins.
4. - Improving the array type in python itself would also go a long
way to speeding it up for many.
5. - regression tests for speed. So the speed of things can be
measured and tested more easily.
6. - memory optimizations. eg, the kjDict can use a lot less memory
than the built in dicts. A way to know how much memory is being used.
Memory profiling is the most important way to optimize since memory
is quite slow compared to the speed of the cpu.
I think there is work in each of these areas - except 1, 2,4.
I think #1 is the easiest way to speed CPython up dramatically with
the least amount of work.
For #2 (optional asm optimizations), there is a lot of code CPython
could use today - including the freevec library I linked to as well as
libraries released by intel, and amd. I think that perhaps releasing
a patch with a few selected asm optimizations might let the python
developers realise how much faster python could be... but that's a
fair amount of extra work.
#6. Things like the cgkit slot attributes can save a lot of memory -
eg, a slot int attribute takes up 4-8 bytes, whereas a python int
attribute takes up (guessing) 200 bytes. I think the python slots
already help with memory use... but I haven't measured it.
cheers,