From 79d8a87d68eadd33bfc1e5d25d4eb827000a232b Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Wed, 4 Nov 2020 11:31:55 +0000 Subject: Add small changes to durbin and adpcm --- .../polybench-syn/linear-algebra/solvers/durbin.c | 157 +++++++++++++-------- 1 file changed, 96 insertions(+), 61 deletions(-) (limited to 'benchmarks/polybench-syn/linear-algebra') diff --git a/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c b/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c index 677c23c..92afb09 100644 --- a/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c +++ b/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c @@ -9,19 +9,61 @@ */ /* durbin.c: this file is part of PolyBench/C */ +#ifndef SYNTHESIS +#include +#endif + +unsigned int divider(unsigned int x, unsigned int y) +{ + unsigned int r0, q0, y0, y1; + + r0 = x; + q0 = 0; + y0 = y; + y1 = y; + do + { + y1 = 2 * y1; + } while (y1 <= x); + do + { + y1 = y1 / 2; + q0 = 2 * q0; + if (r0 >= y1) + { + r0 = r0 - y1; + q0 = q0 + 1; + } + } while ((int)y1 != (int)y0); + return q0; +} + +int sdivider(int N, int D) { + if (D < 0) { + if (N < 0) + return divider(-N, -D); + else + return -divider(N, -D); + } else { + if (N < 0) + return -divider(-N, D); + else + return divider(N, D); + } +} #define plus(i) i = i + ONE /* Include polybench common header. */ static void init_array (int n, - int r[ 40 + 0]) + int r[ 40 + 0]) { - int ONE = 1; - int i, j; + int ONE = 1; + int i, j; - for (i = 0; i < n; plus(i)) + for (i = 0; i < n; plus(i)) { - r[i] = (n+ONE-i); + r[i] = (n+ONE-i); } } @@ -29,74 +71,67 @@ void init_array (int n, static int print_array(int n, - int y[ 40 + 0]) + int y[ 40 + 0]) { - int ONE = 1; - int i; - int res = 0; - - for (i = 0; i < n; plus(i)) { - res += y[i]; - } - return res; + int ONE = 1; + int i; + int res = 0; + + for (i = 0; i < n; plus(i)) { + res += y[i]; + } + +#ifndef SYNTHESIS + printf("finished = %u\n", res); +#endif + return res; } static void kernel_durbin(int n, - int r[ 40 + 0], - int y[ 40 + 0]) + int r[ 40 + 0], + int y[ 40 + 0]) { - int z[40]; - int alpha; - int beta; - int sum; - - int ONE = 1; - int i,k; - -#pragma scop - y[0] = -r[0]; - beta = 1; - alpha = -r[0]; - - for (k = 1; k < n; plus(k)) { - beta = (ONE-alpha*alpha)*beta; - sum = 0; - for (i=0; i Date: Tue, 10 Nov 2020 12:25:34 +0000 Subject: fixes for cholesky --- .../linear-algebra/solvers/cholesky.c | 48 ++++++++++------------ 1 file changed, 22 insertions(+), 26 deletions(-) (limited to 'benchmarks/polybench-syn/linear-algebra') diff --git a/benchmarks/polybench-syn/linear-algebra/solvers/cholesky.c b/benchmarks/polybench-syn/linear-algebra/solvers/cholesky.c index 264251d..a0d63a0 100644 --- a/benchmarks/polybench-syn/linear-algebra/solvers/cholesky.c +++ b/benchmarks/polybench-syn/linear-algebra/solvers/cholesky.c @@ -9,7 +9,7 @@ */ /* cholesky.c: this file is part of PolyBench/C */ -#include +#include "../../include/misc.h" # define SQRT_FUN(x) sqrtf(x) @@ -76,34 +76,30 @@ void kernel_cholesky(int n, int i, j, k; int ONE = 1; -#pragma scop - for (i = 0; i < n; plus(i)) { - - for (j = 0; j < i; plus(j)) { - for (k = 0; k < j; plus(k)) { - A[i][j] -= A[i][k] * A[j][k]; - } - A[i][j] /= A[j][j]; - } - - for (k = 0; k < i; plus(k)) { - A[i][i] -= A[i][k] * A[i][k]; - } - int sq = 0; int val = 0; int cmp = A[i][i]; - printf("cmp %d\n",cmp); - while(sq <= cmp) { - val = val + ONE; - sq = val * val; - } - printf("val %d\n",val); - A[i][i] = val; - } -#pragma endscop + for (i = 0; i < n; plus(i)) { + + for (j = 0; j < i; plus(j)) { + for (k = 0; k < j; plus(k)) { + A[i][j] -= A[i][k] * A[j][k]; + } + A[i][j] = sdivider(A[i][j] ,A[j][j]); + } + + for (k = 0; k < i; plus(k)) { + A[i][i] -= A[i][k] * A[i][k]; + } + int sq = 0; int val = 0; int cmp = A[i][i]; + while(sq <= cmp) { + val = val + ONE; + sq = val * val; + } + A[i][i] = val; + } } -int main(int argc, char** argv) +int main() { int n = 40; @@ -112,7 +108,7 @@ int main(int argc, char** argv) int A[40][40]; - //init_array (n, A); + init_array (n, A); kernel_cholesky (n, A); -- cgit From a5e65a6adc567c12f317c6a0cfd252c97365dbc5 Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Tue, 10 Nov 2020 19:47:28 +0000 Subject: fixing gemver --- benchmarks/polybench-syn/linear-algebra/blas/gemver.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'benchmarks/polybench-syn/linear-algebra') diff --git a/benchmarks/polybench-syn/linear-algebra/blas/gemver.c b/benchmarks/polybench-syn/linear-algebra/blas/gemver.c index a2711cb..5b627d1 100644 --- a/benchmarks/polybench-syn/linear-algebra/blas/gemver.c +++ b/benchmarks/polybench-syn/linear-algebra/blas/gemver.c @@ -9,6 +9,8 @@ */ /* gemver.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" + #define plus(i) i = i + ONE static void init_array (int n, @@ -35,15 +37,15 @@ void init_array (int n, for (i = 0; i < n; plus(i)) { u1[i] = i; - u2[i] = ((i+ONE)/fn)/2; - v1[i] = ((i+ONE)/fn)/4; - v2[i] = ((i+ONE)/fn)/6; - y[i] = ((i+ONE)/fn)/8; - z[i] = ((i+ONE)/fn)/9; + u2[i] = sdivider(((i+ONE)/fn),2); + v1[i] = sdivider(((i+ONE)/fn),4); + v2[i] = sdivider(((i+ONE)/fn),6); + y[i] = sdivider(((i+ONE)/fn),8); + z[i] = sdivider(((i+ONE)/fn),9); x[i] = 0; w[i] = 0; for (j = 0; j < n; plus(j)) - A[i][j] = (int) (i*j % n) / n; + A[i][j] = (int) sdivider(smodulo(i*j, n), n); } } -- cgit From 642f49756ee5555b29f5dcb4301bde229d515565 Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Tue, 10 Nov 2020 19:47:45 +0000 Subject: fixing durbin --- benchmarks/polybench-syn/linear-algebra/solvers/durbin.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'benchmarks/polybench-syn/linear-algebra') diff --git a/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c b/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c index 92afb09..6a2fd41 100644 --- a/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c +++ b/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c @@ -9,9 +9,6 @@ */ /* durbin.c: this file is part of PolyBench/C */ -#ifndef SYNTHESIS -#include -#endif unsigned int divider(unsigned int x, unsigned int y) { @@ -82,9 +79,6 @@ int print_array(int n, res += y[i]; } -#ifndef SYNTHESIS - printf("finished = %u\n", res); -#endif return res; } @@ -110,8 +104,8 @@ void kernel_durbin(int n, for (i=0; i Date: Tue, 10 Nov 2020 19:48:00 +0000 Subject: fixing lu --- benchmarks/polybench-syn/linear-algebra/solvers/lu.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) (limited to 'benchmarks/polybench-syn/linear-algebra') diff --git a/benchmarks/polybench-syn/linear-algebra/solvers/lu.c b/benchmarks/polybench-syn/linear-algebra/solvers/lu.c index 1cf07ea..7c8989f 100644 --- a/benchmarks/polybench-syn/linear-algebra/solvers/lu.c +++ b/benchmarks/polybench-syn/linear-algebra/solvers/lu.c @@ -14,6 +14,8 @@ //#include //#include +#include "../../include/misc.h" + #define plus(i) i = i + ONE static @@ -26,7 +28,7 @@ void init_array (int n, for (i = 0; i < n; plus(i)) { for (j = 0; j <= i; plus(j)) - A[i][j] = (int)(-j % n) / n + ONE; + A[i][j] = (-j % n )/ n + ONE; for (j = plus(i); j < n; plus(j)) { A[i][j] = 0; } @@ -82,13 +84,12 @@ void kernel_lu(int n, int i, j, k; int ONE = 1; -#pragma scop for (i = 0; i < n; plus(i)) { for (j = 0; j 42 && ! strcmp(argv[0], "")) return check_array(n, A); return 0; -- cgit From 95861dbef966e2cb612b303615681fc29c3acd3d Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Wed, 11 Nov 2020 19:47:42 +0000 Subject: polybench edits --- .../polybench-syn/linear-algebra/blas/gemm.c | 64 +++++------ .../polybench-syn/linear-algebra/blas/gemver.c | 15 +-- .../polybench-syn/linear-algebra/blas/gesummv.c | 84 +++++++------- .../polybench-syn/linear-algebra/blas/symm.c | 10 +- .../polybench-syn/linear-algebra/blas/syr2k.c | 9 +- .../polybench-syn/linear-algebra/blas/syrk.c | 7 +- .../polybench-syn/linear-algebra/blas/trmm.c | 43 ++++--- .../polybench-syn/linear-algebra/kernels/2mm.c | 13 +-- .../polybench-syn/linear-algebra/kernels/3mm.c | 18 ++- .../polybench-syn/linear-algebra/kernels/atas.c | 12 +- .../polybench-syn/linear-algebra/kernels/bicg.c | 10 +- .../polybench-syn/linear-algebra/kernels/doitgen.c | 8 +- .../polybench-syn/linear-algebra/kernels/mvt.c | 26 ++--- .../linear-algebra/solvers/cholesky.c | 2 +- .../polybench-syn/linear-algebra/solvers/durbin.c | 2 +- .../polybench-syn/linear-algebra/solvers/lu.c | 2 +- .../polybench-syn/linear-algebra/solvers/ludcmp.c | 126 ++++++++++----------- .../polybench-syn/linear-algebra/solvers/trisolv.c | 22 ++-- 18 files changed, 225 insertions(+), 248 deletions(-) (limited to 'benchmarks/polybench-syn/linear-algebra') diff --git a/benchmarks/polybench-syn/linear-algebra/blas/gemm.c b/benchmarks/polybench-syn/linear-algebra/blas/gemm.c index 5a28f08..a81f094 100644 --- a/benchmarks/polybench-syn/linear-algebra/blas/gemm.c +++ b/benchmarks/polybench-syn/linear-algebra/blas/gemm.c @@ -9,14 +9,16 @@ */ /* gemm.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" + #define plus(i) i = i + ONE -static + static void init_array(int ni, int nj, int nk, - int *alpha, - int *beta, - int C[ 20 + 0][25 + 0], - int A[ 20 + 0][30 + 0], - int B[ 30 + 0][25 + 0]) + int *alpha, + int *beta, + int C[ 20 + 0][25 + 0], + int A[ 20 + 0][30 + 0], + int B[ 30 + 0][25 + 0]) { int i, j; int ONE = 1; @@ -25,21 +27,21 @@ void init_array(int ni, int nj, int nk, *beta = 2; for (i = 0; i < ni; plus(i)) for (j = 0; j < nj; plus(j)) - C[i][j] = (int) ((i*j+ONE) % ni) / ni; + C[i][j] = (int) divider(smodulo(i*j+ONE, ni), ni); for (i = 0; i < ni; plus(i)) for (j = 0; j < nk; plus(j)) - A[i][j] = (int) (i*(j+ONE) % nk) / nk; + A[i][j] = (int) divider(smodulo(i*(j+ONE), nk), nk); for (i = 0; i < nk; plus(i)) for (j = 0; j < nj; plus(j)) - B[i][j] = (int) (i*(j+ONE+ONE) % nj) / nj; + B[i][j] = (int) divider(smodulo(i*(j+ONE+ONE), nj), nj); } -static + static int print_array(int ni, int nj, - int C[ 20 + 0][25 + 0]) + int C[ 20 + 0][25 + 0]) { int i, j; int ONE = 1; @@ -48,30 +50,28 @@ int print_array(int ni, int nj, for (j = 0; j < nj; plus(j)) { res ^= C[i][j]; } - return res; + return res; } -static + static void kernel_gemm(int ni, int nj, int nk, - int alpha, - int beta, - int C[ 20 + 0][25 + 0], - int A[ 20 + 0][30 + 0], - int B[ 30 + 0][25 + 0]) + int alpha, + int beta, + int C[ 20 + 0][25 + 0], + int A[ 20 + 0][30 + 0], + int B[ 30 + 0][25 + 0]) { int i, j, k; int ONE = 1; -#pragma scop - for (i = 0; i < ni; plus(i)) { + for (i = 0; i < ni; plus(i)) { for (j = 0; j < nj; plus(j)) - C[i][j] *= beta; + C[i][j] *= beta; for (k = 0; k < nk; plus(k)) { - for (j = 0; j < nj; plus(j)) - C[i][j] += alpha * A[i][k] * B[k][j]; + for (j = 0; j < nj; plus(j)) + C[i][j] += alpha * A[i][k] * B[k][j]; } } -#pragma endscop } @@ -92,20 +92,20 @@ int main() init_array (ni, nj, nk, &alpha, &beta, - C, - A, - B); + C, + A, + B); kernel_gemm (ni, nj, nk, - alpha, beta, - C, - A, - B); + alpha, beta, + C, + A, + B); return - print_array(ni, nj, C); + print_array(ni, nj, C); } diff --git a/benchmarks/polybench-syn/linear-algebra/blas/gemver.c b/benchmarks/polybench-syn/linear-algebra/blas/gemver.c index 5b627d1..fafd49f 100644 --- a/benchmarks/polybench-syn/linear-algebra/blas/gemver.c +++ b/benchmarks/polybench-syn/linear-algebra/blas/gemver.c @@ -37,15 +37,15 @@ void init_array (int n, for (i = 0; i < n; plus(i)) { u1[i] = i; - u2[i] = sdivider(((i+ONE)/fn),2); - v1[i] = sdivider(((i+ONE)/fn),4); - v2[i] = sdivider(((i+ONE)/fn),6); - y[i] = sdivider(((i+ONE)/fn),8); - z[i] = sdivider(((i+ONE)/fn),9); + u2[i] = divider((i+ONE),fn*2); + v1[i] = divider((i+ONE),fn*4); + v2[i] = divider((i+ONE),fn*6); + y[i] = divider((i+ONE),fn*8); + z[i] = divider((i+ONE),fn*9); x[i] = 0; w[i] = 0; for (j = 0; j < n; plus(j)) - A[i][j] = (int) sdivider(smodulo(i*j, n), n); + A[i][j] = (int) divider(smodulo(i*j, n), n); } } @@ -86,8 +86,6 @@ void kernel_gemver(int n, int i, j; int ONE = 1; -#pragma scop - for (i = 0; i < n; plus(i)) for (j = 0; j < n; plus(j)) A[i][j] = A[i][j] + u1[i] * v1[j] + u2[i] * v2[j]; @@ -103,7 +101,6 @@ void kernel_gemver(int n, for (j = 0; j < n; plus(j)) w[i] = w[i] + alpha * A[i][j] * x[j]; -#pragma endscop } diff --git a/benchmarks/polybench-syn/linear-algebra/blas/gesummv.c b/benchmarks/polybench-syn/linear-algebra/blas/gesummv.c index 606a581..e9fe78e 100644 --- a/benchmarks/polybench-syn/linear-algebra/blas/gesummv.c +++ b/benchmarks/polybench-syn/linear-algebra/blas/gesummv.c @@ -9,16 +9,17 @@ */ /* gesummv.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" #define plus(i) i = i + ONE -static + static void init_array(int n, - int *alpha, - int *beta, - int A[ 30 + 0][30 + 0], - int B[ 30 + 0][30 + 0], - int x[ 30 + 0]) + int *alpha, + int *beta, + int A[ 30 + 0][30 + 0], + int B[ 30 + 0][30 + 0], + int x[ 30 + 0]) { int i, j; int ONE = 1; @@ -26,21 +27,19 @@ void init_array(int n, *alpha = 3; *beta = 2; for (i = 0; i < n; plus(i)) - { - x[i] = (int)( i % n) / n; - for (j = 0; j < n; plus(j)) { - A[i][j] = (int) ((i*j+ONE) % n) / n; - B[i][j] = (int) ((i*j+ONE+ONE) % n) / n; - } + { + x[i] = (int) divider(smodulo(i, n), n); + for (j = 0; j < n; plus(j)) { + A[i][j] = (int) divider(smodulo(i*j+ONE, n), n); + B[i][j] = (int) divider(smodulo(i*j+ONE+ONE, n), n); } + } } - - -static + static int print_array(int n, - int y[ 30 + 0]) + int y[ 30 + 0]) { int i; @@ -53,33 +52,30 @@ int print_array(int n, return res; } -static + static void kernel_gesummv(int n, - int alpha, - int beta, - int A[ 30 + 0][30 + 0], - int B[ 30 + 0][30 + 0], - int tmp[ 30 + 0], - int x[ 30 + 0], - int y[ 30 + 0]) + int alpha, + int beta, + int A[ 30 + 0][30 + 0], + int B[ 30 + 0][30 + 0], + int tmp[ 30 + 0], + int x[ 30 + 0], + int y[ 30 + 0]) { int i, j; int ONE = 1; -#pragma scop - for (i = 0; i < n; plus(i)) + for (i = 0; i < n; plus(i)) + { + tmp[i] = 0; + y[i] = 0; + for (j = 0; j < n; plus(j)) { - tmp[i] = 0; - y[i] = 0; - for (j = 0; j < n; plus(j)) - { - tmp[i] = A[i][j] * x[j] + tmp[i]; - y[i] = B[i][j] * x[j] + y[i]; - } - y[i] = alpha * tmp[i] + beta * y[i]; + tmp[i] = A[i][j] * x[j] + tmp[i]; + y[i] = B[i][j] * x[j] + y[i]; } -#pragma endscop - + y[i] = alpha * tmp[i] + beta * y[i]; + } } @@ -98,16 +94,16 @@ int main() int y[30 + 0]; init_array (n, &alpha, &beta, - A, - B, - x); + A, + B, + x); kernel_gesummv (n, alpha, beta, - A, - B, - tmp, - x, - y); + A, + B, + tmp, + x, + y); return print_array(n, y); diff --git a/benchmarks/polybench-syn/linear-algebra/blas/symm.c b/benchmarks/polybench-syn/linear-algebra/blas/symm.c index a5e8539..f13577b 100644 --- a/benchmarks/polybench-syn/linear-algebra/blas/symm.c +++ b/benchmarks/polybench-syn/linear-algebra/blas/symm.c @@ -9,6 +9,8 @@ */ /* symm.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" + #define plus(i) i = i + ONE static void init_array(int m, int n, @@ -26,12 +28,12 @@ void init_array(int m, int n, *beta = 2; for (i = 0; i < m; plus(i)) for (j = 0; j < n; plus(j)) { - C[i][j] = (int) ((i+j) % HUND) / m; - B[i][j] = (int) ((n+i-j) % HUND) / m; + C[i][j] = (int) divider(smodulo(i+j, HUND), m); + B[i][j] = (int) divider(smodulo(n+i-j, HUND), m); } for (i = 0; i < m; plus(i)) { for (j = 0; j <=i; plus(j)) - A[i][j] = (int) ((i+j) % HUND) / m; + A[i][j] = (int) divider(smodulo(i+j, HUND), m); for (j = i+ONE; j < m; plus(j)) A[i][j] = -999; } @@ -64,7 +66,6 @@ void kernel_symm(int m, int n, int ONE = 1; int i, j, k; int temp2; -#pragma scop for (i = 0; i < m; plus(i)) for (j = 0; j < n; plus(j) ) { @@ -75,7 +76,6 @@ void kernel_symm(int m, int n, } C[i][j] = beta * C[i][j] + alpha*B[i][j] * A[i][i] + alpha * temp2; } -#pragma endscop } diff --git a/benchmarks/polybench-syn/linear-algebra/blas/syr2k.c b/benchmarks/polybench-syn/linear-algebra/blas/syr2k.c index 82b4d3b..2214d4a 100644 --- a/benchmarks/polybench-syn/linear-algebra/blas/syr2k.c +++ b/benchmarks/polybench-syn/linear-algebra/blas/syr2k.c @@ -9,6 +9,7 @@ */ /* syr2k.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" #define plus(i) i = i + ONE static @@ -26,12 +27,12 @@ void init_array(int n, int m, *beta = 2; for (i = 0; i < n; plus(i)) for (j = 0; j < m; plus(j)) { - A[i][j] = (int) ((i*j+ONE)%n) / n; - B[i][j] = (int) ((i*j+ONE+ONE)%m) / m; + A[i][j] = (int) divider(smodulo(i*j+ONE, n), n); + B[i][j] = (int) divider(smodulo(i*j+ONE+ONE, m), m); } for (i = 0; i < n; plus(i)) for (j = 0; j < n; plus(j)) { - C[i][j] = (int) ((i*j+4-ONE)%n) / m; + C[i][j] = (int) divider(smodulo(i*j+4-ONE, n), m); } } @@ -65,7 +66,6 @@ void kernel_syr2k(int n, int m, int i, j, k; int ONE = 1; -#pragma scop for (i = 0; i < n; plus(i)) { for (j = 0; j <= i; plus(j)) C[i][j] *= beta; @@ -75,7 +75,6 @@ void kernel_syr2k(int n, int m, C[i][j] += A[j][k]*alpha*B[i][k] + B[j][k]*alpha*A[i][k]; } } -#pragma endscop } diff --git a/benchmarks/polybench-syn/linear-algebra/blas/syrk.c b/benchmarks/polybench-syn/linear-algebra/blas/syrk.c index dbf2e6b..3c792a0 100644 --- a/benchmarks/polybench-syn/linear-algebra/blas/syrk.c +++ b/benchmarks/polybench-syn/linear-algebra/blas/syrk.c @@ -9,6 +9,7 @@ */ /* syrk.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" #define plus(i) i = i + ONE static @@ -25,10 +26,10 @@ void init_array(int n, int m, *beta = 2; for (i = 0; i < n; plus(i)) for (j = 0; j < m; plus(j)) - A[i][j] = (int) ((i*j+ONE)%n) / n; + A[i][j] = (int) divider(smodulo((i*j+ONE), n), n); for (i = 0; i < n; plus(i)) for (j = 0; j < n; plus(j)) - C[i][j] = (int) ((i*j+ONE+ONE)%m) / m; + C[i][j] = (int) divider(smodulo(i*j+ONE+ONE,m), m); } @@ -60,7 +61,6 @@ void kernel_syrk(int n, int m, int i, j, k; int ONE = 1; -#pragma scop for (i = 0; i < n; plus(i)) { for (j = 0; j <= i; plus(j)) C[i][j] *= beta; @@ -69,7 +69,6 @@ void kernel_syrk(int n, int m, C[i][j] += alpha * A[i][k] * A[j][k]; } } -#pragma endscop } diff --git a/benchmarks/polybench-syn/linear-algebra/blas/trmm.c b/benchmarks/polybench-syn/linear-algebra/blas/trmm.c index 79b384d..e369fd0 100644 --- a/benchmarks/polybench-syn/linear-algebra/blas/trmm.c +++ b/benchmarks/polybench-syn/linear-algebra/blas/trmm.c @@ -9,13 +9,14 @@ */ /* trmm.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" #define plus(i) i = i + ONE -static + static void init_array(int m, int n, - int *alpha, - int A[ 20 + 0][20 + 0], - int B[ 20 + 0][30 + 0]) + int *alpha, + int A[ 20 + 0][20 + 0], + int B[ 20 + 0][30 + 0]) { int i, j; int ONE = 1; @@ -23,22 +24,22 @@ void init_array(int m, int n, *alpha = 3; for (i = 0; i < m; plus(i)) { for (j = 0; j < i; plus(j)) { - A[i][j] = (int)((i+j) % m)/m; + A[i][j] = (int) divider(smodulo(i+j, m), m); } A[i][i] = 1; for (j = 0; j < n; plus(j)) { - B[i][j] = (int)((n+(i-j)) % n)/n; + B[i][j] = (int)divider(smodulo(n+i-j, n), n); } - } + } } -static + static int print_array(int m, int n, - int B[ 20 + 0][30 + 0]) + int B[ 20 + 0][30 + 0]) { int i, j; int ONE = 1; @@ -48,28 +49,26 @@ int print_array(int m, int n, for (j = 0; j < n; plus(j)) { res ^= B[i][j]; } - return res; + return res; } -static + static void kernel_trmm(int m, int n, - int alpha, - int A[ 20 + 0][20 + 0], - int B[ 20 + 0][30 + 0]) + int alpha, + int A[ 20 + 0][20 + 0], + int B[ 20 + 0][30 + 0]) { int i, j, k; int ONE = 1; -#pragma scop - for (i = 0; i < m; plus(i)) - for (j = 0; j < n; plus(j)) { - for (k = i+ONE; k < m; plus(k)) - B[i][j] += A[k][i] * B[k][j]; - B[i][j] = alpha * B[i][j]; - } -#pragma endscop + for (i = 0; i < m; plus(i)) + for (j = 0; j < n; plus(j)) { + for (k = i+ONE; k < m; plus(k)) + B[i][j] += A[k][i] * B[k][j]; + B[i][j] = alpha * B[i][j]; + } } diff --git a/benchmarks/polybench-syn/linear-algebra/kernels/2mm.c b/benchmarks/polybench-syn/linear-algebra/kernels/2mm.c index 391e9ac..f5c5ff3 100644 --- a/benchmarks/polybench-syn/linear-algebra/kernels/2mm.c +++ b/benchmarks/polybench-syn/linear-algebra/kernels/2mm.c @@ -10,6 +10,8 @@ /* 2mm.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" + #define plus(i) i = i + ONE static void init_array(int ni, int nj, int nk, int nl, @@ -27,16 +29,16 @@ void init_array(int ni, int nj, int nk, int nl, *beta = 2; for (i = 0; i < ni; plus(i)) for (j = 0; j < nk; plus(j)) - A[i][j] = (int) ((i*j+ONE) % ni) / ni; + A[i][j] = (int) divider(smodulo(i*j+ONE, ni), ni); for (i = 0; i < nk; plus(i)) for (j = 0; j < nj; plus(j)) - B[i][j] = (int) (i*(j+ONE) % nj) / nj; + B[i][j] = (int) divider(smodulo(i*(j+ONE), nj), nj); for (i = 0; i < nj; plus(i)) for (j = 0; j < nl; plus(j)) - C[i][j] = (int) ((i*(j+ONE+ONE+ONE)+ONE) % nl) / nl; + C[i][j] = (int) divider(smodulo(i*(j+ONE+ONE+ONE)+ONE, nl), nl); for (i = 0; i < ni; plus(i)) for (j = 0; j < nl; plus(j)) - D[i][j] = (int) (i*(j+ONE+ONE) % nk) / nk; + D[i][j] = (int) divider(smodulo(i*(j+ONE+ONE), nk), nk); } static @@ -69,8 +71,6 @@ void kernel_2mm(int ni, int nj, int nk, int nl, int ONE = 1; int i, j, k; -#pragma scop - for (i = 0; i < ni; plus(i)) for (j = 0; j < nj; plus(j)) { @@ -85,7 +85,6 @@ void kernel_2mm(int ni, int nj, int nk, int nl, for (k = 0; k < nj; plus(k)) D[i][j] += tmp[i][k] * C[k][j]; } -#pragma endscop } diff --git a/benchmarks/polybench-syn/linear-algebra/kernels/3mm.c b/benchmarks/polybench-syn/linear-algebra/kernels/3mm.c index e565fb5..2905719 100644 --- a/benchmarks/polybench-syn/linear-algebra/kernels/3mm.c +++ b/benchmarks/polybench-syn/linear-algebra/kernels/3mm.c @@ -9,6 +9,9 @@ */ /* 3mm.c: this file is part of PolyBench/C */ + +#include "../../include/misc.h" + #define plus(i) i = i + ONE static void init_array(int ni, int nj, int nk, int nl, int nm, @@ -21,25 +24,22 @@ void init_array(int ni, int nj, int nk, int nl, int nm, int ONE = 1; int TWO = 2; int THREE = 3; - int FIVE = 5; for (i = 0; i < ni; plus(i)) for (j = 0; j < nk; plus(j)) - A[i][j] = (int) ((i*j+ONE) % ni) / (5*ni); + A[i][j] = (int) divider(smodulo((i*j+ONE), ni), (5*ni)); for (i = 0; i < nk; plus(i)) for (j = 0; j < nj; plus(j)) - B[i][j] = (int) ((i*(j+ONE)+TWO) % nj) / (5*nj); + B[i][j] = (int) divider(smodulo((i*(j+ONE)+TWO),nj), (5*nj)); for (i = 0; i < nj; plus(i)) for (j = 0; j < nm; plus(j)) - C[i][j] = (int) (i*(j+THREE) % nl) / (5*nl); + C[i][j] = (int) divider(smodulo(i*(j+THREE), nl), (5*nl)); for (i = 0; i < nm; plus(i)) for (j = 0; j < nl; plus(j)) - D[i][j] = (int) ((i*(j+TWO)+TWO) % nk) / (5*nk); + D[i][j] = (int) divider(smodulo((i*(j+TWO)+TWO), nk), (5*nk)); } - - static int print_array(int ni, int nl, int G[ 16 + 0][22 + 0]) @@ -71,8 +71,6 @@ void kernel_3mm(int ni, int nj, int nk, int nl, int nm, int ONE = 1; int i, j, k; -#pragma scop - for (i = 0; i < ni; plus(i)) for (j = 0; j < nj; plus(j)) { @@ -96,11 +94,9 @@ void kernel_3mm(int ni, int nj, int nk, int nl, int nm, for (k = 0; k < nj; plus(k)) G[i][j] += E[i][k] * F[k][j]; } -#pragma endscop } - int main() { diff --git a/benchmarks/polybench-syn/linear-algebra/kernels/atas.c b/benchmarks/polybench-syn/linear-algebra/kernels/atas.c index a051046..7bd0151 100644 --- a/benchmarks/polybench-syn/linear-algebra/kernels/atas.c +++ b/benchmarks/polybench-syn/linear-algebra/kernels/atas.c @@ -9,6 +9,8 @@ */ /* atax.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" + #define plus(i) i = i + ONE static void init_array (int m, int n, @@ -21,15 +23,13 @@ void init_array (int m, int n, fn = (int)n; for (i = 0; i < n; plus(i)) - x[i] = ONE + (i / fn); + x[i] = ONE + divider(i, fn); for (i = 0; i < m; plus(i)) for (j = 0; j < n; plus(j)) - A[i][j] = (int) ((i+j) % n) / (5*m); + A[i][j] = (int) divider(smodulo(i+j, n),(5*m)); } - - static int print_array(int n, int y[ 42 + 0]) @@ -46,8 +46,6 @@ int print_array(int n, } - - static void kernel_atax(int m, int n, int A[ 38 + 0][42 + 0], @@ -58,7 +56,6 @@ void kernel_atax(int m, int n, int i, j; int ONE = 1; -#pragma scop for (i = 0; i < n; plus(i)) y[i] = 0; for (i = 0; i < m; plus(i)) @@ -69,7 +66,6 @@ void kernel_atax(int m, int n, for (j = 0; j < n; plus(j)) y[j] = y[j] + A[i][j] * tmp[i]; } -#pragma endscop } diff --git a/benchmarks/polybench-syn/linear-algebra/kernels/bicg.c b/benchmarks/polybench-syn/linear-algebra/kernels/bicg.c index 48b7658..5981924 100644 --- a/benchmarks/polybench-syn/linear-algebra/kernels/bicg.c +++ b/benchmarks/polybench-syn/linear-algebra/kernels/bicg.c @@ -10,6 +10,8 @@ /* bicg.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" + #define plus(i) i = i + ONE static void init_array (int m, int n, @@ -21,11 +23,11 @@ void init_array (int m, int n, int ONE = 1; for (i = 0; i < m; plus(i)) - p[i] = (int)(i % m) / m; + p[i] = divider(smodulo(i, m), m); for (i = 0; i < n; plus(i)) { - r[i] = (int)(i % n) / n; + r[i] = divider(smodulo(i, n), n); for (j = 0; j < m; plus(j)) - A[i][j] = (int) (i*(j+ONE) % n)/n; + A[i][j] = divider(smodulo(i*(j+ONE), n), n); } } @@ -65,7 +67,6 @@ void kernel_bicg(int m, int n, int i, j; int ONE = 1; -#pragma scop for (i = 0; i < m; plus(i)) s[i] = 0; for (i = 0; i < n; plus(i)) @@ -77,7 +78,6 @@ void kernel_bicg(int m, int n, q[i] = q[i] + A[i][j] * p[j]; } } -#pragma endscop } diff --git a/benchmarks/polybench-syn/linear-algebra/kernels/doitgen.c b/benchmarks/polybench-syn/linear-algebra/kernels/doitgen.c index 20de1df..081a3ba 100644 --- a/benchmarks/polybench-syn/linear-algebra/kernels/doitgen.c +++ b/benchmarks/polybench-syn/linear-algebra/kernels/doitgen.c @@ -9,6 +9,8 @@ */ /* doitgen.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" + #define plus(i) i = i + ONE static void init_array(int nr, int nq, int np, @@ -21,10 +23,10 @@ void init_array(int nr, int nq, int np, for (i = 0; i < nr; plus(i)) for (j = 0; j < nq; plus(j)) for (k = 0; k < np; plus(k)) - A[i][j][k] = (int) ((i*j + k)%np) / np; + A[i][j][k] = (int) divider(smodulo((i*j + k), np), np); for (i = 0; i < np; plus(i)) for (j = 0; j < np; plus(j)) - C4[i][j] = (int) (i*j % np) / np; + C4[i][j] = (int) divider(smodulo(i*j, np), np); } @@ -55,7 +57,6 @@ void kernel_doitgen(int nr, int nq, int np, int r, q, p, s; int ONE = 1; -#pragma scop for (r = 0; r < nr; plus(r)) for (q = 0; q < nq; plus(q)) { for (p = 0; p < np; plus(p)) { @@ -66,7 +67,6 @@ void kernel_doitgen(int nr, int nq, int np, for (p = 0; p < np; plus(p)) A[r][q][p] = sum[p]; } -#pragma endscop } diff --git a/benchmarks/polybench-syn/linear-algebra/kernels/mvt.c b/benchmarks/polybench-syn/linear-algebra/kernels/mvt.c index aa68b1c..7eb612e 100644 --- a/benchmarks/polybench-syn/linear-algebra/kernels/mvt.c +++ b/benchmarks/polybench-syn/linear-algebra/kernels/mvt.c @@ -9,6 +9,8 @@ */ /* mvt.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" + #define plus(i) i = i + ONE static @@ -24,23 +26,23 @@ void init_array(int n, int THREE = 3; for (i = 0; i < n; plus(i)) - { - x1[i] = (int) (i % n) / n; - x2[i] = (int) ((i + ONE) % n) / n; - y_1[i] = (int) ((i + THREE) % n) / n; - y_2[i] = (int) ((i + 4) % n) / n; - for (j = 0; j < n; plus(j)) - A[i][j] = (int) (i*j % n) / n; - } + { + x1[i] = (int) divider(smodulo(i, n), n); + x2[i] = (int) divider(smodulo(i + ONE, n), n); + y_1[i] = (int) divider(smodulo(i + THREE, n), n); + y_2[i] = (int) divider(smodulo(i + 4, n), n); + for (j = 0; j < n; plus(j)) + A[i][j] = (int) divider(smodulo(i*j,n), n); + } } -static + static int print_array(int n, - int x1[ 40 + 0], - int x2[ 40 + 0]) + int x1[ 40 + 0], + int x2[ 40 + 0]) { int i; @@ -71,14 +73,12 @@ void kernel_mvt(int n, int i, j; int ONE = 1; -#pragma scop for (i = 0; i < n; plus(i)) for (j = 0; j < n; plus(j)) x1[i] = x1[i] + A[i][j] * y_1[j]; for (i = 0; i < n; plus(i)) for (j = 0; j < n; plus(j)) x2[i] = x2[i] + A[j][i] * y_2[j]; -#pragma endscop } diff --git a/benchmarks/polybench-syn/linear-algebra/solvers/cholesky.c b/benchmarks/polybench-syn/linear-algebra/solvers/cholesky.c index a0d63a0..05e85ea 100644 --- a/benchmarks/polybench-syn/linear-algebra/solvers/cholesky.c +++ b/benchmarks/polybench-syn/linear-algebra/solvers/cholesky.c @@ -24,7 +24,7 @@ void init_array(int n, for (i = 0; i < n; plus(i)) { for (j = 0; j <= i; plus(j)) - A[i][j] = (int)(-j % n) / n + ONE; + A[i][j] = (int)sdivider(smodulo(-j, n), n) + ONE; for (j = i + ONE; j < n; plus(j)) { A[i][j] = 0; } diff --git a/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c b/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c index 6a2fd41..dd6d05e 100644 --- a/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c +++ b/benchmarks/polybench-syn/linear-algebra/solvers/durbin.c @@ -56,7 +56,7 @@ void init_array (int n, int r[ 40 + 0]) { int ONE = 1; - int i, j; + int i; for (i = 0; i < n; plus(i)) { diff --git a/benchmarks/polybench-syn/linear-algebra/solvers/lu.c b/benchmarks/polybench-syn/linear-algebra/solvers/lu.c index 7c8989f..56dadd7 100644 --- a/benchmarks/polybench-syn/linear-algebra/solvers/lu.c +++ b/benchmarks/polybench-syn/linear-algebra/solvers/lu.c @@ -28,7 +28,7 @@ void init_array (int n, for (i = 0; i < n; plus(i)) { for (j = 0; j <= i; plus(j)) - A[i][j] = (-j % n )/ n + ONE; + A[i][j] = sdivider(smodulo(-j, n), n) + ONE; for (j = plus(i); j < n; plus(j)) { A[i][j] = 0; } diff --git a/benchmarks/polybench-syn/linear-algebra/solvers/ludcmp.c b/benchmarks/polybench-syn/linear-algebra/solvers/ludcmp.c index e85316a..f37d983 100644 --- a/benchmarks/polybench-syn/linear-algebra/solvers/ludcmp.c +++ b/benchmarks/polybench-syn/linear-algebra/solvers/ludcmp.c @@ -9,37 +9,37 @@ */ /* ludcmp.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" + #define plus(i) i = i + ONE -static + static void init_array (int n, - int A[ 40 + 0][40 + 0], - int b[ 40 + 0], - int x[ 40 + 0], - int y[ 40 + 0]) + int A[ 40 + 0][40 + 0], + int b[ 40 + 0], + int x[ 40 + 0], + int y[ 40 + 0]) { int i, j; int ONE = 1; - int TWO = 2; - int FOUR = 4; int fn = (int)n; for (i = 0; i < n; plus(i)) - { - x[i] = 0; - y[i] = 0; - b[i] = (i+ONE)/fn/(TWO) + (FOUR); - } + { + x[i] = 0; + y[i] = 0; + b[i] = divider(i+1, fn*2) + 4; + } for (i = 0; i < n; plus(i)) - { - for (j = 0; j <= i; plus(j)) - A[i][j] = (int)(-j % n) / n + ONE; - for (j = i+ONE; j < n; plus(j)) { - A[i][j] = 0; - } - A[i][i] = 1; + { + for (j = 0; j <= i; plus(j)) + A[i][j] = (int)sdivider(smodulo(-j, n), n) + 1; + for (j = i+ONE; j < n; plus(j)) { + A[i][j] = 0; } + A[i][i] = 1; + } @@ -51,19 +51,19 @@ void init_array (int n, for (t = 0; t < n; plus(t)) for (r = 0; r < n; plus(r)) for (s = 0; s < n; plus(s)) - B[r][s] += A[r][t] * A[s][t]; - for (r = 0; r < n; plus(r)) - for (s = 0; s < n; plus(s)) - A[r][s] = B[r][s]; + B[r][s] += A[r][t] * A[s][t]; + for (r = 0; r < n; plus(r)) + for (s = 0; s < n; plus(s)) + A[r][s] = B[r][s]; } -static + static int check_array(int n, - int x[ 40 + 0]) + int x[ 40 + 0]) { int i; @@ -71,7 +71,7 @@ int check_array(int n, int res = 0; for (i = 0; i < n; plus(i)) { - res += x[i]; + res += x[i]; } return res; } @@ -79,50 +79,48 @@ int check_array(int n, -static + static void kernel_ludcmp(int n, - int A[ 40 + 0][40 + 0], - int b[ 40 + 0], - int x[ 40 + 0], - int y[ 40 + 0]) + int A[ 40 + 0][40 + 0], + int b[ 40 + 0], + int x[ 40 + 0], + int y[ 40 + 0]) { int i, j, k; int ONE = 1; int w; -#pragma scop - for (i = 0; i < n; plus(i)) { + for (i = 0; i < n; plus(i)) { for (j = 0; j =0; i=i-ONE) { - w = y[i]; - for (j = i+ONE; j < n; plus(j)) - w -= A[i][j] * x[j]; - x[i] = w / A[i][i]; + for (i = n-ONE; i >=0; i=i-ONE) { + w = y[i]; + for (j = i+ONE; j < n; plus(j)) + w -= A[i][j] * x[j]; + x[i] = sdivider(w, A[i][i]); } -#pragma endscop } @@ -131,7 +129,6 @@ int main() { int n = 40; - int ONE = 1; int A[40 + 0][40 + 0]; @@ -142,20 +139,17 @@ int main() init_array (n, - A, - b, - x, - y); - - - ; + A, + b, + x, + y); kernel_ludcmp (n, - A, - b, - x, - y); + A, + b, + x, + y); return check_array(n, x); diff --git a/benchmarks/polybench-syn/linear-algebra/solvers/trisolv.c b/benchmarks/polybench-syn/linear-algebra/solvers/trisolv.c index 5e760e6..8e76231 100644 --- a/benchmarks/polybench-syn/linear-algebra/solvers/trisolv.c +++ b/benchmarks/polybench-syn/linear-algebra/solvers/trisolv.c @@ -9,6 +9,8 @@ */ /* trisolv.c: this file is part of PolyBench/C */ +#include "../../include/misc.h" + #define plus(i) i = i + ONE static void init_array(int n, @@ -24,7 +26,7 @@ void init_array(int n, x[i] = - 999; b[i] = i ; for (j = 0; j <= i; plus(j)) - L[i][j] = (int) (i+n-j+ONE)*(ONE+ONE)/n; + L[i][j] = (int) divider((i+n-j+ONE)*(ONE+ONE), n); } } @@ -57,15 +59,15 @@ void kernel_trisolv(int n, int i, j; int ONE = 1; -#pragma scop - for (i = 0; i < n; plus(i)) - { - x[i] = b[i]; - for (j = 0; j