diff options
Diffstat (limited to 'examples/chill')
-rw-r--r-- | examples/chill/gemm.c | 15 | ||||
-rw-r--r-- | examples/chill/gemm.script | 31 | ||||
-rw-r--r-- | examples/chill/gemv.c | 15 | ||||
-rw-r--r-- | examples/chill/gemv.script | 9 | ||||
-rw-r--r-- | examples/chill/jacobi1.c | 13 | ||||
-rw-r--r-- | examples/chill/jacobi1.script | 18 | ||||
-rw-r--r-- | examples/chill/jacobi2.c | 15 | ||||
-rw-r--r-- | examples/chill/jacobi2.script | 21 | ||||
-rw-r--r-- | examples/chill/unroll.c | 31 | ||||
-rw-r--r-- | examples/chill/unroll.script | 35 |
10 files changed, 203 insertions, 0 deletions
diff --git a/examples/chill/gemm.c b/examples/chill/gemm.c new file mode 100644 index 0000000..355bafe --- /dev/null +++ b/examples/chill/gemm.c @@ -0,0 +1,15 @@ +int main() { + + float a[512][512], b[512][512], c[512][512]; + + int i, j, k; + int n; + for (j = 0; j < n; j++) + for (k = 0; k < n; k++) + for (i = 0; i < n; i++) { + c[i][j] = c[i][j] + a[i][k] * b[k][j]; + } + + return 0; +} + diff --git a/examples/chill/gemm.script b/examples/chill/gemm.script new file mode 100644 index 0000000..ed91567 --- /dev/null +++ b/examples/chill/gemm.script @@ -0,0 +1,31 @@ +#matrix multiply large array size for intel machine +source: gemm.c +procedure: main +format: rose +loop: 0 + +TI = 128 +TJ = 8 +TK = 512 +UI = 2 +UJ = 2 + +permute([3,1,2]) +tile(0,2,TJ) +#print space +tile(0,2,TI) +#print space +tile(0,5,TK) +#print space + +datacopy(0,3,a,false,1) +#print space + +datacopy(0,4,b) +print +unroll(0,4,UI)#print space +print +unroll(0,5,UJ) +#print space +print + diff --git a/examples/chill/gemv.c b/examples/chill/gemv.c new file mode 100644 index 0000000..610d4cb --- /dev/null +++ b/examples/chill/gemv.c @@ -0,0 +1,15 @@ +#define N 10 + +int main() { + // int n; + float a[N]; + float b[N]; + float c[N][N]; + + int i, j; + + for (i = 1; i < N; i++) + for (j = 1; j < N; j++) + a[i] = a[i] + c[i][j] * b[j]; + +} diff --git a/examples/chill/gemv.script b/examples/chill/gemv.script new file mode 100644 index 0000000..f1d5f89 --- /dev/null +++ b/examples/chill/gemv.script @@ -0,0 +1,9 @@ +source: gemv.c # matrix-vector multiply +procedure: main +format : rose +loop: 0 + + + +original() +print diff --git a/examples/chill/jacobi1.c b/examples/chill/jacobi1.c new file mode 100644 index 0000000..0fcaee4 --- /dev/null +++ b/examples/chill/jacobi1.c @@ -0,0 +1,13 @@ +#define N 512 + +int main() { + int i, t; + + float a[N][N]; + + for (t = 2; t <= 100; t++) + for (i = 2; i <= N - 1; i++) + a[t][i] = a[t - 1][i - 1] + a[t - 1][i] + a[t - 1][i + 1]; + + return 0; +} diff --git a/examples/chill/jacobi1.script b/examples/chill/jacobi1.script new file mode 100644 index 0000000..c0dec8d --- /dev/null +++ b/examples/chill/jacobi1.script @@ -0,0 +1,18 @@ +# +# tiling perfect jacobi loop nest with time step, use +# unimodular transformation first (only applicable to the +# perfect loop nest) to make tiling legal. +# + +source: jacobi1.c +procedure: main +format : rose +loop: 0 + +print dep + +nonsingular([[1,0],[1,1]]) # unimodular matrix, determinant is one +tile(0,2,64) + +print dep +print diff --git a/examples/chill/jacobi2.c b/examples/chill/jacobi2.c new file mode 100644 index 0000000..b8d8d7b --- /dev/null +++ b/examples/chill/jacobi2.c @@ -0,0 +1,15 @@ +#define N 512 + +int main() { + double a[N]; + double b[N]; + int t, i; + for (t = 1; t <= 100; t++) { + for (i = 2; i <= N - 1; i++) + b[i] = (double) 0.25 * (a[i - 1] + a[i + 1]) + (double) 0.5 * a[i]; + + for (i = 2; i <= N - 1; i++) + a[i] = b[i]; + } + return 0; +} diff --git a/examples/chill/jacobi2.script b/examples/chill/jacobi2.script new file mode 100644 index 0000000..afe14c6 --- /dev/null +++ b/examples/chill/jacobi2.script @@ -0,0 +1,21 @@ +# +# tiling imperfect jacobi loop nest, more details in the paper +# "Automatic Tiling of Iterative Stencil Loops" by Zhiyuan Li and +# Yonghong Song, TOPLAS, 2004. +# + +source: jacobi2.c +procedure: main +format: rose +loop: 0 + +print dep + +original() +shift([1], 2, 1) +fuse([0,1], 2) # optional +skew([0,1], 2, [2,1]) +tile(0, 2, 32, 1) + +print dep +print diff --git a/examples/chill/unroll.c b/examples/chill/unroll.c new file mode 100644 index 0000000..68f4633 --- /dev/null +++ b/examples/chill/unroll.c @@ -0,0 +1,31 @@ +#define N 14 +void foo(int n, float* x, float* y, float* z, float* f3, float* f1, float* w) { + int dt; + + int i, j; + + for (i = 1; i <= 14; i++) + x[i] = 1.0; + + for (i = 1; i <= 14; i += 3) + y[i] = 1.0; + + for (i = N + 1; i <= N + 20; i += 3) + z[i] = 1.0; + + for (i = 0; i <= N; i++) { + for (j = i; j <= i + N; j++) + f3[i] = f3[i] + f1[j] * w[j - i]; + f3[i] = f3[i] * dt; + } + + return 0; +} + +int main() { + float x[N], y[N], z[N], f3[N], f1[N], w[N]; + + foo(N, x, y, z, f3, f1, w); + return 0; +} + diff --git a/examples/chill/unroll.script b/examples/chill/unroll.script new file mode 100644 index 0000000..e64acb6 --- /dev/null +++ b/examples/chill/unroll.script @@ -0,0 +1,35 @@ +# +# Test unroll-and-jam. The last loop adapted from the simple +# convolution example from p463 of "Optimizing Compilers for +# Modern Architectures", by Randy Allen and Ken Kennedy. +# + +source: unroll.c +procedure: foo +format: rose +# fully unroll a loop with known iteration count +loop: 0 +original() +unroll(0,1,3) +print +print space + + +# a strided loop +loop: 1 +original() +unroll(0,1,2) +print +print space + +# lower and upper bounds are not constant +loop: 2 +original() +unroll(0,1,20) +print + +# parallelogram iteration space +loop: 3 +original() +unroll(0,1,2) +print |