summaryrefslogtreecommitdiff
path: root/examples/chill
diff options
context:
space:
mode:
Diffstat (limited to 'examples/chill')
-rw-r--r--examples/chill/gemm.c15
-rw-r--r--examples/chill/gemm.script31
-rw-r--r--examples/chill/gemv.c15
-rw-r--r--examples/chill/gemv.script9
-rw-r--r--examples/chill/jacobi1.c13
-rw-r--r--examples/chill/jacobi1.script18
-rw-r--r--examples/chill/jacobi2.c15
-rw-r--r--examples/chill/jacobi2.script21
-rw-r--r--examples/chill/unroll.c31
-rw-r--r--examples/chill/unroll.script35
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