Mc Osten wrote: > Ray <[EMAIL PROTECTED]> wrote: > > > Yeah, my guess would be either he used the Debug configuration or he > > actually created a Managed executable instead of a pure Win32 > > application. Sigh, now I can't wait to get home and try it out :) > > Can be. But I suppose a Managed should not get *that* slow. > IronPython on Tim's machine is still faster than C++ (even though not as > fast as CPython). > > -- > blog: http://www.akropolix.net/rik0/blogs | Uccidete i filosofi, > site: http://www.akropolix.net/rik0/ | tenetevi riso e > forum: http://www.akropolix.net/forum/ | bacchette per voi.
I have to admit to a stupid mistake, for which I feel quite ashamed - I got the loop-size wrong in the Python code. So all Python results posted by me were off by a factor of 10 :-( I feel quite bad about that! With the nr of loops corrected, Python on my laptop performs worse than C++ under all circumstances, by a factor of about 2: ============ Python 2.4 ============= [EMAIL PROTECTED] ~/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 ============= [EMAIL PROTECTED] ~/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 ============= [EMAIL PROTECTED] ~/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 ============= [EMAIL PROTECTED] ~/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 ========== [EMAIL PROTECTED] ~/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 [EMAIL PROTECTED] ~/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 -- http://mail.python.org/mailman/listinfo/python-list