[pypy-dev] Interpretor for vectorized langugage

Paolo Giarrusso p.giarrusso at gmail.com
Fri Dec 17 00:12:10 CET 2010


On Thu, Dec 16, 2010 at 10:16, Armin Rigo <arigo at tunes.org> wrote:
> Hi,

>> have you seen numpy/scipy?

> Of course you are then going to hit the same problems that Ademan
> tries to solve for numpy/scipy, notably how to implement at least the
> basic linear algebra operations in such a way that the JIT can improve
> them.  There are various goals there, e.g. to turn Python (or Matlab)
> code like A+B+C, adding three matrices together, into one matrix
> operation instead of two (as it is now: (A+B)+C).  This is all a bit
> experimental so far.

[More about numpy/scipy]:
How about the ideas from C++ expression templates? Or even better,
some sort of lazy evaluation?

With C++ expression templates [1], (A+B) returns something like
PlusMatrix(A, B). When finally assigning to a variable, the copy
constructor converts this into a real matrix; in the following line:
D = (A+B) + C
PlusMatrix(PlusMatrix(A, B), C) is built, and D gets the result.

What they could further do, but they don't (see FAQ of uBlas [1]), is
to cache the result of evaluating a template when requested; that
could be cached (as in lazy evaluation - expressions like PlusMatrix
are not very different from thunks, in that case) or maybe JIT
compilation can recognize the constantness of this.

Best regards

[1] One library using them is Boost::uBlas, but the idea is much older:
http://www.boost.org/doc/libs/1_45_0/libs/numeric/ublas/doc/index.htm
-- 
Paolo Giarrusso - Ph.D. Student
http://www.informatik.uni-marburg.de/~pgiarrusso/



More information about the Pypy-dev mailing list