> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED]
> g] On Behalf Of Ray
> Sent: Wednesday, August 23, 2006 4:28 PM
> Subject: Re: Python and STL efficiency
> 
> 
> Tim N. van der Leeuw wrote:
> > With the nr of loops corrected, Python on my laptop 
> performs worse than
> > C++ under all circumstances, by a factor of about 2:
> 
> *Phew*
> 
> Great to know that my model of how the world works is still correct!
> (at least in relation to Python and C++!) :)

If you're really eager to see python succeed with this 'test' or 'benchmark', 
if you will, you can look at the results with VC7.1.  It clearly shows that 
much depends on the STL implementation, you use.

I use the implementations posted by Maric Michaud in 
http://mail.python.org/pipermail/python-list/2006-August/357593.html.  The 
tests, for which I appended 'with hash', use a hash_set instead of a plain set.

1) vc71 with dinkumware STL (which is vc's default STL):

print_occurence_of_strings
What do you know?
chicken crosses road
fool
so long...
print_occurence_of_unique_strings
What do you know?
chicken crosses road
fool
so long...
print_occurence_of_unique_strings_compared_by_address
What do you know?
chicken crosses road
fool
so long...
print_occurence_of_strings_with_hash
What do you know?
chicken crosses road
fool
so long...
print_occurence_of_unique_strings_with_hash
What do you know?
chicken crosses road
fool
so long...
strings : 10.921                         <---- Oops ...
unique strings : 1.047
compared by address : 0.328
strings with hash : 11.484               <---- Oooops ...
unique strings with hash : 1.016

2) vc7.1 with STLport 5.02:

print_occurence_of_strings
What do you know?
chicken crosses road
fool
so long...
print_occurence_of_unique_strings
What do you know?
chicken crosses road
fool
so long...
print_occurence_of_unique_strings_compared_by_address
What do you know?
chicken crosses road
fool
so long...
print_occurence_of_strings_with_hash            <--- reorders
fool
What do you know?
chicken crosses road
so long...
print_occurence_of_unique_strings_with_hash     <--- reorders
so long...
What do you know?
chicken crosses road
fool
strings : 2.156
unique strings : 0.953
compared by address : 0.187
strings with hash : 2.078
unique strings with hash : 0.922

This seems to substantiate this post 
http://sourceforge.net/mailarchive/forum.php?thread_id=30201462&forum_id=46178.

3) python 4.2 (python test.py; interestingly this is faster than with -OO)

so long...
What do you know
fool
chicken crosses road
Elapsed: 2.278332 seconds

It seems the unification of the strings via hash is not significantly better 
(compared to memcpy or whatever is used).

The results for the dinkumware STL are dominated by the sheer number of calls 
to HeapAlloc/HeapFree and to EnterCriticalSection/LeaveCriticalSection (I 
compiled with multithreading and linked statically).  The python version won't 
be concerned with the latter, I guess (although just by importing 'threading' 
performance gets about 3.5% worse).

STLport uses for example InterlockedExchange (obviously in the default 
allocator) and several orders of magnitude fewer calls to the heap allocation 
API.

It all boils down to the fact that I can write C++ or even assembler programs 
that perform worse (by any degree I want) than a functionally equivalent python 
program.  That's a trivial insight and it certainly doesn't provide evidence 
that python 'is faster' than c++/assembler.  Even if that's just because it 
*isn't* and can't be.

I always wonder where this rage comes from to prove oneself or whomever that 
python is the best programming language in any regard as if it hadn't enough 
other advantages.  It is certainly not the fastest/most memory efficient tool 
out there.  One of the biggest advantages of python to me is that, even if I 
run into a hotspot, the transition from python to C/C++ is so easy.  That means 
that in spite of its warts (GIL, memory efficiency ...) I don't easily come to 
a dead end using python.  This fact lets me use python's great strengths (like 
programmer efficiency etc.) without tossing and turning sleeplessly in my bed.

cheers,

aa

-- 
Andreas Ames | Programmer | Comergo GmbH |
Voice:  +49 69 7505 3213 | ames AT avaya DOT com
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to