<br><br><div class="gmail_quote">On Tue, Feb 8, 2011 at 5:01 AM, Nicolas Cellier <span dir="ltr">&lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com">nicolas.cellier.aka.nice@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
2011/2/8 Levente Uzonyi &lt;<a href="mailto:leves@elte.hu">leves@elte.hu</a>&gt;:<br>
<div class="im">&gt;<br>
&gt; On Tue, 8 Feb 2011, Nicolas Cellier wrote:<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; Just a detail, Python range(a,b) are semi open [a,b)<br>
&gt;&gt; think like C for(i=0;i&lt;n; i++)<br>
&gt;&gt;<br>
&gt;&gt; In the Smalltalk proc8:withwith:with:with:: the range was interpreted as [a,b].<br>
&gt;&gt; This Smalltalk (and Cog) unfairly perform too much work.<br>
&gt;<br>
</div>&gt; And there&#39;s another one. In #proc0:block: the loops are (1 to: loops) do: instead of 1 to: loops do:.<br>
&gt;<br>
&gt;<br>
&gt; Levente<br>
&gt;<br>
<br>
Yes I noticed, but empty loop time is subtracted.<br>
I wonder if it makes a difference.<br></blockquote><div><br></div><div>There is a huge difference between 1 to: loops do: [:i|] and (1 to: loops) do: [:i|].  IIRC the empty block is written as 1 to: loops do: [:i|].</div>
<div><br></div><div><div>SimpleStackBasedCogit:</div><div>Time millisecondsToRun:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>[| loops |</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>loops := 100000000.</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>1 to: loops do: [:i|]] 757</div><div><br></div><div>Time millisecondsToRun:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>[| loops |</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>loops := 100000000.</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>(1 to: loops) do: [:i|]] 16953</div><div><br></div><div>StackToRegisterMappingCogit</div>
<div>Time millisecondsToRun:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>[| loops |</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>loops := 100000000.</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>1 to: loops do: [:i|]] 244</div>
<div><br></div><div>Time millisecondsToRun:</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>[| loops |</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>loops := 100000000.</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>(1 to: loops) do: [:i|]] 17149</div><div><br></div></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<font color="#888888"><br>
Nicolas<br>
</font><div><div></div><div class="h5"><br>
&gt;&gt;<br>
&gt;&gt; Nicolas<br>
&gt;&gt;<br>
&gt;&gt; 2011/2/8 stephane ducasse &lt;<a href="mailto:stephane.ducasse@gmail.com">stephane.ducasse@gmail.com</a>&gt;:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; This is really interesting to see that type inferencing can really help.<br>
&gt;&gt;&gt; This is definitively a topic I would like to explore in the coming years.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Stef<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Hi folks!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Since we are on the verge of 4.2, and we have a brand new Cog VM to play with I felt like dusting off my old Pystone port to Squeak - Sqystone, which I wrote back in 2004.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; At that time Squeak was around 5 times faster than CPython. How do we stack up today? Yeah, I know - hardly a good benchmark, they all lie etc etc. :)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I am using Ubuntu 10.10 on a corei7, so this is running on a 64 bit CPU.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Cog!<br>
&gt;&gt;&gt;&gt; ====<br>
&gt;&gt;&gt;&gt; Squeak 4.2-10966 (soon to be released) + latest Cog r2361 (binary download):<br>
&gt;&gt;&gt;&gt; Pystone(1.1) time for 50000 passes = 0.06<br>
&gt;&gt;&gt;&gt; This machine benchmarks at 833333.3 pystones/second<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; NOTE: AFAICT running with more passes does not improve it. Also, not sure if I could get more out of this if I built from source on my box.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Regular Squeak<br>
&gt;&gt;&gt;&gt; ==============<br>
&gt;&gt;&gt;&gt; Squeak 4.2-10966 (soon to be released) + regular Squeak VM 4.4.7-2357 (built from src):<br>
&gt;&gt;&gt;&gt; Pystone(1.1) time for 50000 passes = 0.503<br>
&gt;&gt;&gt;&gt; This machine benchmarks at 99403.6 pystones/second<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Regular CPython<br>
&gt;&gt;&gt;&gt; ===============<br>
&gt;&gt;&gt;&gt; CPython 3.1.2 (newest in Ubuntu Meerkat, minimal):<br>
&gt;&gt;&gt;&gt; gokr@quigon:/usr/lib/python3.1/test$ python3.1 pystone.py<br>
&gt;&gt;&gt;&gt; Pystone(1.1) time for 50000 passes = 0.57<br>
&gt;&gt;&gt;&gt; This machine benchmarks at 87719.3 pystones/second<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; NOTE: 3.2 is reportedly a teeny bit faster. Also not built from source.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Pypy 1.4<br>
&gt;&gt;&gt;&gt; ========<br>
&gt;&gt;&gt;&gt; wget <a href="http://pypy.org/download/pypy-1.4.1-linux64.tar.bz2" target="_blank">http://pypy.org/download/pypy-1.4.1-linux64.tar.bz2</a><br>
&gt;&gt;&gt;&gt; gokr@quigon:~/python/pypy-1.4.1-linux64$ ./bin/pypy ./lib-python/2.5.2/test/pystone.py<br>
&gt;&gt;&gt;&gt; Pystone(1.1) time for 50000 passes = 0.15<br>
&gt;&gt;&gt;&gt; This machine benchmarks at 333333 pystones/second<br>
&gt;&gt;&gt;&gt; gokr@quigon:~/python/pypy-1.4.1-linux64$ ./bin/pypy ./lib-python/2.5.2/test/pystone.py 5000000<br>
&gt;&gt;&gt;&gt; Pystone(1.1) time for 5000000 passes = 4.8<br>
&gt;&gt;&gt;&gt; This machine benchmarks at 1.04167e+06 pystones/second<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; NOTE: Also not built from source. Here we run pystone a second time with 100x more loops and get a substantially better number.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Shedskin 0.7<br>
&gt;&gt;&gt;&gt; ============<br>
&gt;&gt;&gt;&gt; sudo apt-get install g++ libpcre3-dev libgc-dev python-dev<br>
&gt;&gt;&gt;&gt; sudo dpkg -i shedskin_0.7_all.deb<br>
&gt;&gt;&gt;&gt; wget <a href="http://shedskin.googlecode.com/files/shedskin-examples-0.7.tgz" target="_blank">http://shedskin.googlecode.com/files/shedskin-examples-0.7.tgz</a><br>
&gt;&gt;&gt;&gt; shedskin pystone.py<br>
&gt;&gt;&gt;&gt; gokr@quigon:~/python/shedskin-examples-0.7$ make<br>
&gt;&gt;&gt;&gt; g++  -O2 -march=native -fomit-frame-pointer -Wno-deprecated  -I. -I/usr/share/shedskin/lib /usr/share/shedskin/lib/builtin.cpp pystone.cpp /usr/share/shedskin/lib/time.cpp /usr/share/shedskin/lib/re.cpp -lgc -lpcre  -o pystone<br>

&gt;&gt;&gt;&gt; gokr@quigon:~/python/gokr@quigon:~/python/shedskin-examples-0.7$ ls -la pystone*<br>
&gt;&gt;&gt;&gt; -rwxr-xr-x 1 gokr gokr 297329 2011-02-07 23:01 pystone<br>
&gt;&gt;&gt;&gt; -rw-r--r-- 1 gokr gokr   9193 2011-02-07 23:00 pystone.cpp<br>
&gt;&gt;&gt;&gt; -rw-r--r-- 1 gokr gokr   1893 2011-02-07 23:00 pystone.hpp<br>
&gt;&gt;&gt;&gt; -rw-r--r-- 1 gokr gokr   5774 2010-12-11 11:40 pystone.py<br>
&gt;&gt;&gt;&gt; gokr@quigon:~/python/shedskin-examples-0.7$ ./pystone<br>
&gt;&gt;&gt;&gt; This machine benchmarks at 2500000.000000 pystones/second<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; NOTE: I am wondering a bit about this. It tells the same whatever loops I give it... But ok, perhaps it is all fine.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Summary<br>
&gt;&gt;&gt;&gt; =======<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; - The regular Squeak VM has not been overrun by CPython in these 6 years time. When I wrote Sqystone Squeak was 5x faster IIRC (can&#39;t find the post anymore). Now they are equal more or less, Squeak still a teeny bit faster.<br>

&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; - Cog is brutally fast on this one. Compared to CPython and regular Squeak almost 10x faster.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; - Pypy is about 20% faster than Cog if given enough time to actually start jitting. Cool for the Pypy project! And cool that they aren&#39;t that much faster than Cog. :)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; - Shedskin is the &quot;state of the art&quot; of statically compiling Python via C++ using type inferencing etc etc - so I hear. It is said to be faster than Cython and Psyco. It ends up beating Cog, but &quot;only&quot; by a factor of 3x. I say &quot;only&quot; because that seems pretty good to me given that Cog is a JIT and still pretty young and that Shedskin can only run a subset of Python.<br>

&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; regards, Göran<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>