Rename interpretor to interpreter.
[Faustine.git] / interpreter / preprocessor / faust-0.9.47mr3 / examples / rewriting / mesh.dsp
diff --git a/interpreter/preprocessor/faust-0.9.47mr3/examples/rewriting/mesh.dsp b/interpreter/preprocessor/faust-0.9.47mr3/examples/rewriting/mesh.dsp
new file mode 100644 (file)
index 0000000..92bb932
--- /dev/null
@@ -0,0 +1,43 @@
+
+/* Layout of a systolic array:
+
+        x1        xm
+        ↓         ↓
+   y1 → □ → ... → □ → y1'
+        ↓         ↓
+       ...       ...
+        ↓         ↓
+   yn → □ → ... → □ → yn'
+        ↓         ↓
+        x1'       xm'
+
+  g(m,f)   : y,x1,...,xm -> x1',...,xm',y'
+  constructs a single row of size m.
+
+  h(n,m,f) : y1,...,yn,x1,...,xm -> x1',...,xm',yn',...,y1'
+  constructs an array of size nxm.
+
+  f is the function computed by each cell, which must take
+  exactly two inputs and yield exactly two outputs. */
+
+g(1,f)         = f;
+g(m,f)         = (f, r(m-1)) : (_, g(m-1,f));
+
+h(1,m,f)       = g(m,f);
+h(n,m,f)       = (r(n+m) <:
+                  (!,r(n-1),s(m), (_,s(n-1),r(m) : g(m,f)))) :
+                  (h(n-1,m,f), _);
+
+// route n inputs
+r(1)           = _;
+r(n)           = _,r(n-1);
+
+// skip n inputs
+s(1)           = !;
+s(n)           = !,s(n-1);
+
+// sample cell function
+f              = + <: _,_;
+
+//process              = g(3,f);
+process                = h(2,3,f);