<br><br><div class="gmail_quote">On Thu, Dec 16, 2010 at 9:16 AM, Armin Rigo <span dir="ltr">&lt;<a href="mailto:arigo@tunes.org" target="_blank">arigo@tunes.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">

Hi,<br>
<div><br>
On Wed, Dec 15, 2010 at 6:21 PM, René Dudfield &lt;<a href="mailto:renesd@gmail.com" target="_blank">renesd@gmail.com</a>&gt; wrote:<br>
&gt;&gt; Is pypy suitable for writing interpretor of vectorized language like<br>
&gt;&gt; Matlab, R etc which vector and matrix are first class objects? This includes<br>
&gt;&gt; matrix shape inference, and efficient linear algebra code generation.<br>
&gt;<br>
</div><div>&gt; have you seen numpy/scipy?<br>
<br>
</div>The first aspect is simply if RPython would be suitable for writing an<br>
interpreter for, say, Matlab.  The answer is &quot;probably yes&quot;: PyPy<br>
would be suitable for such dynamic languages, giving you a JIT<br>
compiler for free.  I don&#39;t really know how complex the core of these<br>
languages are, but I suspect not too much.<br>
<br>
Of course you are then going to hit the same problems that Ademan<br>
tries to solve for numpy/scipy, notably how to implement at least the<br>
basic linear algebra operations in such a way that the JIT can improve<br>
them.  There are various goals there, e.g. to turn Python (or Matlab)<br>
code like A+B+C, adding three matrices together, into one matrix<br>
operation instead of two (as it is now: (A+B)+C).  This is all a bit<br>
experimental so far.<br>
<br>
<br>
A bientôt,<br>
<font color="#888888"><br>
Armin.<br>
</font><div><div></div><div>_______________________________________________<br>
<a href="mailto:pypy-dev@codespeak.net" target="_blank">pypy-dev@codespeak.net</a><br>
<a href="http://codespeak.net/mailman/listinfo/pypy-dev" target="_blank">http://codespeak.net/mailman/listinfo/pypy-dev</a><br>
</div></div></blockquote></div><br>Hi,<br><br>Numexpr is really worth looking at:<br>    <a href="http://code.google.com/p/numexpr/" target="_blank">http://code.google.com/p/numexpr/</a><br><br>Especially as it combines expressions together, and does things like chunking (called tiling in the graphics world).<br>

<br><pre><span>&gt;&gt;&gt;</span><span> timeit a</span><span>**</span><span>2</span><span> </span><span>+</span><span> b</span><span>**</span><span>2</span><span> </span><span>+</span><span> </span><span>2</span><span>*</span><span>a</span><span>*</span><span>b<br>

</span><span>10</span><span> loops</span><span>,</span><span> best of </span><span>3</span><span>:</span><span> </span><span>35.9</span><span> ms per loop<br>
</span><span>&gt;&gt;&gt;</span><span> ne</span><span>.</span><span>set_num_threads</span><span>(</span><span>1</span><span>)</span><span>  </span><span># using 1 threads (on a 6-core machine)</span><span><br>
</span><span>&gt;&gt;&gt;</span><span> timeit ne</span><span>.</span><span>evaluate</span><span>(</span><span>&quot;a**2 + b**2 + 2*a*b&quot;</span><span>)</span><span><br>
</span><span>100</span><span> loops</span><span>,</span><span> best of </span><span>3</span><span>:</span><span> </span><span>9.28</span><span> ms per loop   </span><span># 3.9x faster than NumPy</span><span><br>
</span><span>&gt;&gt;&gt;</span><span> ne</span><span>.</span><span>set_num_threads</span><span>(</span><span>4</span><span>)</span><span>  </span><span># using 4 threads (on a 6-core machine)</span><span><br>
</span><span>&gt;&gt;&gt;</span><span> timeit ne</span><span>.</span><span>evaluate</span><span>(</span><span>&quot;a**2 + b**2 + 2*a*b&quot;</span><span>)</span><span><br>
</span><span>100</span><span> loops</span><span>,</span><span> best of </span><span>3</span><span>:</span><span> </span><span>4.17</span><span> ms per loop   </span><span># 8.6x faster than NumPy</span></pre>
<br>This approach, could be applied in the pypy jit I guess.<br><br>For a vectorised xplatform run time assembler see:<br>    <a href="http://code.entropywave.com/git?p=orc.git;a=summary" target="_blank">http://code.entropywave.com/git?p=orc.git;a=summary</a><br>

<br>This allows you to write asm code in the one language, and have it compile to ARM, SSE, mmx, PPC, NEON, DSP, and even into C.  Instructions that are not in one set, are emulated by multiple instructions.  It&#39;s mainly used for video, sound and image processing - which are big arrays.<br>

<br><br>Just some interesting vectorised thingies to look at.<br><br>cya.<br>