From 95861dbef966e2cb612b303615681fc29c3acd3d Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Wed, 11 Nov 2020 19:47:42 +0000 Subject: polybench edits --- benchmarks/polybench-syn/data-mining/covariance.c | 11 +- benchmarks/polybench-syn/include/misc.h | 52 ++++++--- .../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 ++-- benchmarks/polybench-syn/medley/floyd-warshall.c | 10 +- benchmarks/polybench-syn/medley/nussinov.c | 6 +- benchmarks/polybench-syn/run-vericert.sh | 6 +- benchmarks/polybench-syn/stencils/adi.c | 7 +- benchmarks/polybench-syn/stencils/fdtd-2d.c | 8 -- benchmarks/polybench-syn/stencils/jacobi-1d.c | 7 +- benchmarks/polybench-syn/stencils/jacobi-2d.c | 7 +- benchmarks/polybench-syn/stencils/seidel-2d.c | 10 +- benchmarks/polybench-syn/syn-remote.sh | 8 +- 29 files changed, 295 insertions(+), 310 deletions(-) (limited to 'benchmarks') diff --git a/benchmarks/polybench-syn/data-mining/covariance.c b/benchmarks/polybench-syn/data-mining/covariance.c index 63f2320..b0f1ffa 100644 --- a/benchmarks/polybench-syn/data-mining/covariance.c +++ b/benchmarks/polybench-syn/data-mining/covariance.c @@ -9,6 +9,8 @@ */ /* covariance.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, @@ -17,13 +19,12 @@ void init_array (int m, int n, { int i, j; int ONE = 1; - int DIV = 28; *float_n = (int)n; for (i = 0; i < 32; plus(i)) for (j = 0; j < 28; plus(j)) - data[i][j] = ((int) i*j) / DIV; + data[i][j] = divider((int) i*j, 28); } @@ -57,13 +58,12 @@ void kernel_covariance(int m, int n, int i, j, k; int ONE = 1; -#pragma scop for (j = 0; j < m; plus(j)) { mean[j] = 0; for (i = 0; i < n; plus(i)) mean[j] += data[i][j]; - mean[j] /= float_n; + mean[j] = divider(mean[j], float_n); } for (i = 0; i < n; plus(i)) @@ -76,10 +76,9 @@ void kernel_covariance(int m, int n, cov[i][j] = 0; for (k = 0; k < n; plus(k)) cov[i][j] += data[k][i] * data[k][j]; - cov[i][j] /= (float_n - ONE); + cov[i][j] = divider( cov[i][j], (float_n - ONE)); cov[j][i] = cov[i][j]; } -#pragma endscop } diff --git a/benchmarks/polybench-syn/include/misc.h b/benchmarks/polybench-syn/include/misc.h index 55bb059..664677c 100644 --- a/benchmarks/polybench-syn/include/misc.h +++ b/benchmarks/polybench-syn/include/misc.h @@ -39,31 +39,43 @@ int smodulo(int N, int D) { } } -unsigned int divider(unsigned int x, unsigned int y) -{ - unsigned int r0, q0, y0, y1; +unsigned divider_fast(unsigned x, unsigned y) { + unsigned r0, q0, y0, y1; r0 = x; q0 = 0; y0 = y; y1 = y; - do - { + do { y1 = 2 * y1; } while (y1 <= x); - do - { - y1 = y1 / 2; - q0 = 2 * q0; - if (r0 >= y1) - { - r0 = r0 - y1; - q0 = q0 + 1; + do { + y1 /= 2; + q0 *= 2; + if (r0 >= y1) { + r0 -= y1; + q0++; } } while ((int)y1 != (int)y0); return q0; } +unsigned divider(unsigned x, unsigned y) { + unsigned q0, acc; + q0 = 0; + acc = y; + + while (acc <= x) { + q0++; + acc += y; + } + + return q0; +} + +/* + * Signed division operation for faster frequency division. + */ int sdivider(int N, int D) { if (D < 0) { if (N < 0) @@ -78,4 +90,16 @@ int sdivider(int N, int D) { } } - +int sdivider_fast(int N, int D) { + if (D < 0) { + if (N < 0) + return divider_fast(-N, -D); + else + return -divider_fast(N, -D); + } else { + if (N < 0) + return -divider_fast(-N, D); + else + return divider_fast(N, D); + } +} 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 = ZERO; i=i-ONE) { for (j=i+ONE; j $benchmark.cycle + name=$(echo $benchmark | awk -v FS="/" '{print $NF}') + echo $name","$cycles >> exec.csv done < benchmark-list-master diff --git a/benchmarks/polybench-syn/stencils/adi.c b/benchmarks/polybench-syn/stencils/adi.c index 5dd406b..a424dec 100644 --- a/benchmarks/polybench-syn/stencils/adi.c +++ b/benchmarks/polybench-syn/stencils/adi.c @@ -9,6 +9,7 @@ */ /* adi.c: this file is part of PolyBench/C */ +#include "../include/misc.h" #define plus(i) i = i + ONE static @@ -64,10 +65,10 @@ void kernel_adi(int tsteps, int n, mul1 = B1 * DT / (DX * DX); mul2 = B2 * DT / (DY * DY); - a = -mul1 / 2; + a = -(sdivider(mul1,2)); b = 1+mul1; c = a; - d = -mul2 / 2; + d = -(sdivider(mul2,2)); e = 1+mul2; f = d; int ZERO = 0; @@ -107,7 +108,7 @@ void kernel_adi(int tsteps, int n, } -int main(int argc, char** argv) +int main() { int n = 20; diff --git a/benchmarks/polybench-syn/stencils/fdtd-2d.c b/benchmarks/polybench-syn/stencils/fdtd-2d.c index b699937..17acd34 100644 --- a/benchmarks/polybench-syn/stencils/fdtd-2d.c +++ b/benchmarks/polybench-syn/stencils/fdtd-2d.c @@ -9,7 +9,6 @@ */ /* fdtd-2d.c: this file is part of PolyBench/C */ -#include #define plus(i) i = i + ONE static @@ -65,10 +64,6 @@ int print_array(int nx, res ^= hz[i][j]; } -#ifndef SYNTHESIS - printf("finished: %u\n", res); -#endif - return res; } @@ -85,8 +80,6 @@ void kernel_fdtd_2d(int tmax, int t, i, j; int ONE = 1; -#pragma scop - for(t = 0; t < tmax; t=t+ONE) { for (j = 0; j < ny; plus(j)) @@ -105,7 +98,6 @@ void kernel_fdtd_2d(int tmax, } } -#pragma endscop } diff --git a/benchmarks/polybench-syn/stencils/jacobi-1d.c b/benchmarks/polybench-syn/stencils/jacobi-1d.c index 1c3cf79..95cbb35 100644 --- a/benchmarks/polybench-syn/stencils/jacobi-1d.c +++ b/benchmarks/polybench-syn/stencils/jacobi-1d.c @@ -9,6 +9,7 @@ */ /* jacobi-1d.c: this file is part of PolyBench/C */ +#include "../include/misc.h" #define plus(i) i = i + ONE static @@ -23,8 +24,8 @@ void init_array (int n, for (i = 0; i < n; plus(i)) { - A[i] = ((int) i+TWO) / n; - B[i] = ((int) i+THREE) / n; + A[i] = divider(((int) i+TWO), n); + B[i] = divider(((int) i+THREE), n); } } @@ -59,7 +60,6 @@ void kernel_jacobi_1d(int tsteps, int t, i; int ONE = 1; -#pragma scop for (t = 0; t < tsteps; plus(t)) { for (i = 1; i < n - ONE; plus(i)){ @@ -71,7 +71,6 @@ void kernel_jacobi_1d(int tsteps, A[i] = A[i] >> 2; } } -#pragma endscop } diff --git a/benchmarks/polybench-syn/stencils/jacobi-2d.c b/benchmarks/polybench-syn/stencils/jacobi-2d.c index 3a5b43c..11349f4 100644 --- a/benchmarks/polybench-syn/stencils/jacobi-2d.c +++ b/benchmarks/polybench-syn/stencils/jacobi-2d.c @@ -9,6 +9,7 @@ */ /* jacobi-2d.c: this file is part of PolyBench/C */ +#include "../include/misc.h" #define plus(i) i = i + ONE static @@ -24,8 +25,8 @@ void init_array (int n, for (i = 0; i < n; plus(i)) for (j = 0; j < n; plus(j)) { - A[i][j] = ((int) i*(j+TWO) + TWO) / n; - B[i][j] = ((int) i*(j+THREE) + THREE) / n; + A[i][j] = divider(((int) i*(j+TWO) + TWO), n); + B[i][j] = divider(((int) i*(j+THREE) + THREE), n); } } @@ -61,7 +62,6 @@ void kernel_jacobi_2d(int tsteps, int ONE = 1; int TWO = 2; -#pragma scop for (t = 0; t < tsteps; plus(t)) { for (i = 1; i < n - ONE; plus(i)) @@ -75,7 +75,6 @@ void kernel_jacobi_2d(int tsteps, A[i][j] = A[i][j] >> TWO; } } -#pragma endscop } diff --git a/benchmarks/polybench-syn/stencils/seidel-2d.c b/benchmarks/polybench-syn/stencils/seidel-2d.c index d4c7f98..23ddc74 100644 --- a/benchmarks/polybench-syn/stencils/seidel-2d.c +++ b/benchmarks/polybench-syn/stencils/seidel-2d.c @@ -9,6 +9,8 @@ */ /* seidel-2d.c: this file is part of PolyBench/C */ +#include "../include/misc.h" + #define plus(i) i = i + ONE static void init_array (int n, @@ -20,7 +22,7 @@ void init_array (int n, for (i = 0; i < n; plus(i)) for (j = 0; j < n; plus(j)) - A[i][j] = ((int) i*(j+TWO) + TWO) / n; + A[i][j] = divider(((int) i*(j+TWO) + TWO), n); } @@ -55,14 +57,12 @@ void kernel_seidel_2d(int tsteps, int TWO = 2; int NINE = 9; -#pragma scop for (t = 0; t <= tsteps - ONE; plus(t)) for (i = ONE; i<= n - TWO; plus(i)) for (j = ONE; j <= n - TWO; plus(j)) - A[i][j] = (A[i-ONE][j-ONE] + A[i-ONE][j] + A[i-ONE][j+ONE] + A[i][j] = divider((A[i-ONE][j-ONE] + A[i-ONE][j] + A[i-ONE][j+ONE] + A[i][j-ONE] + A[i][j] + A[i][j+ONE] - + A[i+ONE][j-ONE] + A[i+ONE][j] + A[i+ONE][j+ONE])/NINE; -#pragma endscop + + A[i+ONE][j-ONE] + A[i+ONE][j] + A[i+ONE][j+ONE]), NINE); } diff --git a/benchmarks/polybench-syn/syn-remote.sh b/benchmarks/polybench-syn/syn-remote.sh index 79d4824..879db2e 100755 --- a/benchmarks/polybench-syn/syn-remote.sh +++ b/benchmarks/polybench-syn/syn-remote.sh @@ -24,7 +24,7 @@ cd .. if [ $count -eq 4 ] then - echo "I am here" +echo "I am here" wait count=0 fi @@ -33,13 +33,13 @@ done < syn-list if [ $count -lt 4 ] then - wait +wait fi #extract while read benchmark ; do cd $benchmark -echo $(pwd) + echo $(pwd) freq=$(grep MHz syn.sta.rpt | tail -2 | head -1 | awk '{print $2}') lut=$(sed -n -e 8p syn.fit.summary | awk '{print $6}' | sed 's/,//g') regs=$(sed -n -e 9p syn.fit.summary | awk '{print $4}') @@ -47,5 +47,5 @@ echo $(pwd) dsp=$(sed -n -e 14p syn.fit.summary | awk '{print $5}') cd .. echo $benchmark","$freq","$lut","$regs","$bram","$dsp >> results - done < syn-list +done < syn-list -- cgit