File: mesh.dsp

package info (click to toggle)
faust 0.9.46-2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 15,256 kB
  • ctags: 9,961
  • sloc: cpp: 47,746; sh: 2,254; ansic: 1,503; makefile: 1,211; ruby: 950; yacc: 468; objc: 459; lex: 200; xml: 177
file content (43 lines) | stat: -rw-r--r-- 919 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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);