Interface levels

I like to think of the interface in terms of "levels." The lower the level (i.e. the smaller the number), the closer it is to the raw computational routines. In some sense the organization into levels can be thought of as a compiler design: Level 3 compiles into Level 2, Level 2 into Level 1, and so on. Furthermore, as illustrated by libraries such as GASNet, a multi-layer architecture can lend itself to faster implementations, by exploiting specific hardware features as they lend themselves to implementing higher-level functions. Below, I describe some ideas for the levels in our design.

Level 0

Level 1: low-level wrappers

Level 2: medium-level "linear algebra library"

Level 3: Matlab clone?

Level 2 interface in detail

Level 2 is a kind of "assembly language for linear algebra."

Level 2 is our main focus for now. Level 1 is pretty much done -- several people have their own versions. A basic Level 3 ("Matlab REPL") isn't hard; an efficient Level 3 is a serious compiler-building effort.


  1. CFFI home page.
  2. GASNet home page. Check out the "system diagram showing GASNet layers" on the front page.

Last modified: Wed Sep 27 17:28:33 CST 2006