Python and STL efficiency

Ray ray_usenet at yahoo.com
Wed Aug 23 10:27:40 EDT 2006


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++!) :)

Thanks,
Ray

>
> ============ Python 2.4 =============
> LeeuwT at nlshl-leeuwt ~/My Documents/Python
> $ /cygdrive/c/Python24/python.exe SpeedTest.py
> Begin Test
> Number of unique string objects: 4
> so long...
> What do you know
> fool
> chicken crosses road
> Number of unique string objects: 4000000
> so long...
> What do you know
> fool
> chicken crosses road
> Fast - Elapsed: 4.239721 seconds
> Slow - Elapsed: 11.883234 seconds
>
> ============ Python 2.5 =============
> LeeuwT at nlshl-leeuwt ~/My Documents/Python
> $ /cygdrive/c/Python25/python.exe SpeedTest.py
> Begin Test
> Number of unique string objects: 4
> so long...
> What do you know
> fool
> chicken crosses road
> Number of unique string objects: 4000000
> so long...
> What do you know
> fool
> chicken crosses road
> Fast - Elapsed: 4.031873 seconds
> Slow - Elapsed: 11.314742 seconds
>
>
> ============ GCC 3.4.5, MinGW, -O6 =============
> LeeuwT at nlshl-leeuwt ~/My Documents/Python
> $ ./SpeedTest.exe
> Begin Test
> What do you know?
> chicken crosses road
> fool
> so long...
> What do you know?
> chicken crosses road
> fool
> so long...
> Fast - Elapsed: 2.088 seconds
> Slow - Elapsed: 7.033 seconds
>
> ============ VC++ 6, 'release' build =============
> LeeuwT at nlshl-leeuwt ~/My Documents/Python
> $ ./SpeedTest_VC.exe
> Begin Test
> What do you know?
> chicken crosses road
> fool
> so long...
> What do you know?
> chicken crosses road
> fool
> so long...
> Fast - Elapsed: 4.585 seconds
> Slow - Elapsed: 5.024 seconds
>
> ========== GCC 3.4.5, MinGW, -O6, with most optimized C++ code
> ==========
> LeeuwT at nlshl-leeuwt ~/My Documents/Python
> $ ./testcpp.exe
> 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...
> strings : 2.338
> unique strings : 1.109
> compared by address : 0.23
>
> LeeuwT at nlshl-leeuwt ~/My Documents/Python
>
> ============ IronPython 1.0rc2 =============
>
> IronPython had a hard time coping with it; creating 4 million string
> objects is a bit too much and the CLR was eating nearly a gigabyte of
> memory near the end.
> Here are the numbers:
>
> IronPython 1.0.60816 on .NET 2.0.50727.42
> Copyright (c) Microsoft Corporation. All rights reserved.
> >>> import sys
> >>> sys.path.append('C:/Documents and Settings/LeeuwT/My Documents/Python')
> >>> import SpeedTest
> >>> SpeedTest.run_test()
> Begin Test
> Number of unique string objects: 4
> What do you know
> so long...
> chicken crosses road
> fool
> Number of unique string objects: 4000000
> What do you know
> so long...
> chicken crosses road
> fool
> Fast - Elapsed: 10.501273 seconds
> Slow - Elapsed: 371.047343 seconds
> >>>
>
> ============ Java 1.6.0 b2 =============
> Set size: 4
> chicken crosses road
> What do you know
> fool
> so long...
> Set size: 4
> chicken crosses road
> What do you know
> fool
> so long...
> Fast - Elapsed 1.003 seconds
> Slow - Elapsed 3.96 seconds
>
> ============ Java 1.5.0  =============
> Set size: 4
> fool
> What do you know
> so long...
> chicken crosses road
> Set size: 4
> fool
> What do you know
> so long...
> chicken crosses road
> Fast - Elapsed 1.754 seconds
> Slow - Elapsed 5.044 seconds
> =========================
>
> Note that the Python code creates a set of all unique id's of all
> objects in list a, and prints the length of this set, to verify that
> all strings are really unique instances or duplicate instances. The C++
> versions don't do that (at least not for 4 million strings); so Python
> is at a slight disadvantage here. Printing the number of strings still
> didn't help me catch the off-by-ten errors though.
>
> I included a Java version of the program, and it looks like it performs
> quite well compared to C++ both with jdk1.5 and jdk1.6.
>
>
> I humbly apologize for my misinformation yesterday.
> 
> Regards,
> 
> --Tim




More information about the Python-list mailing list