axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Axiom-developer] Intell SCC chip, Clojure, and Provisos


From: Tim Daly
Subject: Re: [Axiom-developer] Intell SCC chip, Clojure, and Provisos
Date: Fri, 04 Dec 2009 22:42:28 -0500
User-agent: Thunderbird 2.0.0.21 (Windows/20090302)

M. Edward (Ed) Borasky wrote:
On Fri, Dec 4, 2009 at 6:54 PM, Tim Daly <address@hidden> wrote:
Rich,

I've been looking at the newly-announced Intel SCC chip.
It looks like 48 processors with local cache connected
by 24 routers.

It seems feasible to me to put a Clojure on each node
and have them share a heap image. The cache is likely
large enough to contain the kernel of the clojure code
(they plan to run 48 linux images).

One question that I'd have is whether there is a way to
present a single-image REPL that can use this chip. I'd
like to experiment with parallel symbolic computing in
Axiom and the combination of Clojure and the SCC seems ideal.

Can multiple Clojures share a heap?

I'd like to be able to dynamically fork tasks to different
lisp images that worked on the same heap. For example, I'd
like to be able to compute f(x) in two ways with different
assumptions as in:
 f(x) x>0
 f(x) x<=0
and the combine the result into a single solution. Computing
under assumptions (provisos) is an ideal mechanism for doing
parallel symbolic computations.

Tim Daly



_______________________________________________
Axiom-developer mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/axiom-developer


Hmmm ... interesting concept. How small an OS can you get away with
and still have the JVM on each node? Surely you don't need a whole
GNU/Linux stack. Perhaps something like the openSUSE JeOS (Just Enough
Operation System)? Which JVM would you be using? Are the parallel /
concurrent hooks in the JVM?


Intel has been muttering about putting a whole virtual machine on
each of the 48 nodes. I'm thinking more along the lines of a lisp
kernel per node with shared heap. Clojure is interesting because of
its immutable data structures and refs. Asus systems sells a 384
node machine that runs a JVM per node and I had previously looked
at that for a Clojure-based Axiom.

I have been looking for details on the individual nodes and their
cache sizes. I suspect they are planning on a wide range of cache
sizes. Given a 2M cache it would easily hold a lisp kernel although
I'm not sure of minimum JVM sizes. However, byte coding is a way of
minimizing memory footprint.

SCC appears to be optimized for a message passing architecture which
is a style that can easily be adopted in lisp since you can pass
s-expressions directly.

Intel has asked for research ideas and I submitted this idea. Since
this is open source the best we can hope for would be internet access
to a hardware platform (which might be implemented in ASIC chips for
all we know).

I have been collection parallel constructs and building a set of lisp
tools for each one. For example, take, drop, interleave, curry, zip,
filter, etc. would be primitives for control. Rich Hickey made the
interesting observation that essentially amounts to something like
"Loops considered harmful". As I rewrite the Axiom internals I'm
working on lifting it onto the parallel primitives.

The real game is to lift the whole parallel idea into the symbolic
context so algorithms can be fully parallel. My view on that is to use
provisos as the basis for fork/join computations under restricted
assumptions for each fork. Of course, a forked computation of
 f(x,y) such that x > 0
could end up forking again under
 f(x,y) such that x > 0 & y > 0
 f(x,y) such that x > 0 & y = 0
 f(x,y) such that x > 0 & y < 0

Groebner basis computations could be done in parallel with different
orders and terminated when a solution is found (parallel poisoning)

Parallel root finders could use a blackboard structure to use the
discovery of one root to reduce the problem for other parallel finders.

There are a lot of interesting paths to take.

Tim





reply via email to

[Prev in Thread] Current Thread [Next in Thread]