From 82ee873033f51e856e69cea95db95e292bd0aea9 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Fri, 23 Oct 2020 13:25:10 +0100 Subject: Fix printing of negative numbers --- src/verilog/PrintVerilog.ml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/verilog/PrintVerilog.ml b/src/verilog/PrintVerilog.ml index 0f64066..353bfac 100644 --- a/src/verilog/PrintVerilog.ml +++ b/src/verilog/PrintVerilog.ml @@ -72,7 +72,11 @@ let register a = sprintf "reg_%d" (P.to_int a) (*let literal l = sprintf "%d'd%d" (Nat.to_int l.vsize) (Z.to_int (uvalueToZ l))*) -let literal l = sprintf "32'd%ld" (camlint_of_coqint l) +let literal l = + let l' = camlint_of_coqint l in + if l' < Int32.zero + then sprintf "(- 32'd%ld)" (Int32.neg l') + else sprintf "32'd%ld" l' let rec pprint_expr = function | Vlit l -> literal l -- cgit From 39638453bf0405b2ae58277ff3c4879b8d6d784d Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Mon, 2 Nov 2020 19:38:43 +0000 Subject: Fix pretty printing bug in Verilog --- src/verilog/PrintVerilog.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/verilog/PrintVerilog.ml b/src/verilog/PrintVerilog.ml index 353bfac..44710b8 100644 --- a/src/verilog/PrintVerilog.ml +++ b/src/verilog/PrintVerilog.ml @@ -65,7 +65,7 @@ let pprint_binop l r = | Vshru -> unsigned ">>" let unop = function - | Vneg -> " ~ " + | Vneg -> " - " | Vnot -> " ! " let register a = sprintf "reg_%d" (P.to_int a) @@ -177,7 +177,7 @@ let testbench = "module testbench; always @(posedge clk) begin if (finish == 1) begin - $display(\"finished: %d\", return_val); + $display(\"finished: %0d\", return_val); $finish; end end -- cgit 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 --- benchmarks/CHStone/adpcm/adpcm.c | 6 +- .../polybench-syn/linear-algebra/solvers/durbin.c | 157 +++++++++++++-------- 2 files changed, 99 insertions(+), 64 deletions(-) diff --git a/benchmarks/CHStone/adpcm/adpcm.c b/benchmarks/CHStone/adpcm/adpcm.c index bcdc6dd..a7c47d5 100755 --- a/benchmarks/CHStone/adpcm/adpcm.c +++ b/benchmarks/CHStone/adpcm/adpcm.c @@ -461,7 +461,7 @@ adpcm_main (const int test_data[SIZE], int compressed[SIZE], int result[SIZE]) int dec_sh; int dec_ph1, dec_ph2; - int i, j; + unsigned int i, j; /* reset, initialize required memory */ @@ -770,13 +770,13 @@ adpcm_main (const int test_data[SIZE], int compressed[SIZE], int result[SIZE]) { int opA1, opB1; int opA2, opB2; - if(i==0){ + if((int)i==0){ opA1 = xd; opB1 = (*h_ptr++); opA2 = xs; opB2 = (*h_ptr++); } - else if(i==11){ + else if((int)i==11){ opA1 = (*ac_ptr++); opB1 = (*h_ptr++); opA2 = (*ad_ptr++); 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: Sat, 3 Oct 2020 20:06:40 +0100 Subject: Fix Makefile for verilog backend --- Makefile | 7 +++---- _CoqProject | 5 +++-- dune | 3 ++- lib/CompCert | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 2935c7f..24cfefd 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,12 @@ UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) - ARCH := x86_32-linux + ARCH := verilog-linux endif ifeq ($(UNAME_S),Darwin) - ARCH := x86_32-macosx + ARCH := verilog-macosx endif -COMPCERTRECDIRS := lib common x86_32 x86 backend cfrontend driver flocq exportclight \ - MenhirLib cparser +COMPCERTRECDIRS := lib common verilog backend cfrontend driver exportclight cparser COQINCLUDES := -R src/common vericert.common -R src/verilog vericert.verilog \ -R src/extraction vericert.extraction -R src/translation vericert.translation \ diff --git a/_CoqProject b/_CoqProject index e86312b..7d455a5 100644 --- a/_CoqProject +++ b/_CoqProject @@ -13,5 +13,6 @@ -R lib/CompCert/exportclight compcert.exportclight -R lib/CompCert/flocq compcert.flocq -R lib/CompCert/lib compcert.lib --R lib/CompCert/x86 compcert.x86 --R lib/CompCert/x86_32 compcert.x86_32 +-R lib/CompCert/verilog compcert.verilog +-R lib/CompCert/flocq Flocq +-R lib/CompCert/MenhirLib MenhirLib diff --git a/dune b/dune index 92ac822..80eccf1 100644 --- a/dune +++ b/dune @@ -1,5 +1,6 @@ (dirs :standard \ "./lib/CompCert/x86_32" "./lib/CompCert/powerpc" "./lib/CompCert/riscV" - "./lib/CompCert/arm" "./lib/CompCert/aarch64" "./lib/CompCert/extraction") + "./lib/CompCert/arm" "./lib/CompCert/aarch64" "./lib/CompCert/extraction" + "./lib/CompCert/x86" "./lib/CompCert/x86_64") (include_subdirs unqualified) diff --git a/lib/CompCert b/lib/CompCert index dd750a1..92c4cf5 160000 --- a/lib/CompCert +++ b/lib/CompCert @@ -1 +1 @@ -Subproject commit dd750a10840889f73759971a531208278188651e +Subproject commit 92c4cf55ce84dbeeab25f540549d3bb5b099a1f3 -- cgit From c676092e38d00cf12ea5a063ca3ab8c5bb50f659 Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Mon, 9 Nov 2020 22:31:03 +0000 Subject: a script to execute polybench on vericert --- benchmarks/polybench-syn/benchmark-list-master | 28 ++++++++++++++++++++++++++ benchmarks/polybench-syn/run-vericert.sh | 25 +++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 benchmarks/polybench-syn/benchmark-list-master create mode 100755 benchmarks/polybench-syn/run-vericert.sh diff --git a/benchmarks/polybench-syn/benchmark-list-master b/benchmarks/polybench-syn/benchmark-list-master new file mode 100644 index 0000000..171a1c0 --- /dev/null +++ b/benchmarks/polybench-syn/benchmark-list-master @@ -0,0 +1,28 @@ +stencils/heat-3d +stencils/fdtd-2d +stencils/jacobi-1d +stencils/seidel-2d +stencils/adi +stencils/jacobi-2d +medley/nussinov +medley/floyd-warshall +linear-algebra/kernels/3mm +linear-algebra/kernels/2mm +linear-algebra/kernels/doitgen +linear-algebra/kernels/bicg +linear-algebra/kernels/mvt +linear-algebra/kernels/atas +linear-algebra/blas/syrk +linear-algebra/blas/gemver +linear-algebra/blas/symm +linear-algebra/blas/gesummv +linear-algebra/blas/gemm +linear-algebra/blas/trmm +linear-algebra/blas/syr2k +linear-algebra/blas/trmm.preproc +linear-algebra/solvers/cholesky +linear-algebra/solvers/trisolv +linear-algebra/solvers/lu +linear-algebra/solvers/ludcmp +linear-algebra/solvers/durbin +data-mining/covariance diff --git a/benchmarks/polybench-syn/run-vericert.sh b/benchmarks/polybench-syn/run-vericert.sh new file mode 100755 index 0000000..38b425f --- /dev/null +++ b/benchmarks/polybench-syn/run-vericert.sh @@ -0,0 +1,25 @@ +#! /bin/bash + +top=$(pwd) + #set up +while read benchmark ; do + echo "Running "$benchmark + gcc $benchmark.c -o $benchmark.o + ./$benchmark.o + cresult=$(echo $?) + echo "C output: "$cresult + ../../bin/vericert --debug-hls $benchmark.c -o $benchmark.v + iverilog -o $benchmark.iver -- $benchmark.v + ./$benchmark.iver > $benchmark.tmp + veriresult=$(tail -1 $benchmark.tmp | cut -d' ' -f2) + cycles=$(tail -4 $benchmark.tmp | head -1 | tr -s ' ' | cut -d' ' -f3) + echo "Veri output: "$veriresult + if [ $cresult -ne $veriresult ] + then + echo "FAIL" + exit 0 + else + echo "PASS" + fi + echo $cycles > $benchmark.cycle +done < benchmark-list-master -- cgit From 51de50be36b3d092212e6d8a446ec3c8c3ccfc9d Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Mon, 9 Nov 2020 22:53:34 +0000 Subject: added some checks --- benchmarks/polybench-syn/run-vericert.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/benchmarks/polybench-syn/run-vericert.sh b/benchmarks/polybench-syn/run-vericert.sh index 38b425f..c41332d 100755 --- a/benchmarks/polybench-syn/run-vericert.sh +++ b/benchmarks/polybench-syn/run-vericert.sh @@ -14,6 +14,22 @@ while read benchmark ; do veriresult=$(tail -1 $benchmark.tmp | cut -d' ' -f2) cycles=$(tail -4 $benchmark.tmp | head -1 | tr -s ' ' | cut -d' ' -f3) echo "Veri output: "$veriresult + + #Undefined checks + if test -z $veriresult + then + echo "FAIL" + exit 0 + fi + + # Don't care checks + if [ $veriresult == "x" ] + then + echo "FAIL" + exit 0 + fi + + # unequal result check if [ $cresult -ne $veriresult ] then echo "FAIL" @@ -21,5 +37,6 @@ while read benchmark ; do else echo "PASS" fi + echo $cycles > $benchmark.cycle done < benchmark-list-master -- cgit From 5c148a980d0963139b2f21a848e01e6fa59cac45 Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Mon, 9 Nov 2020 23:02:31 +0000 Subject: error messaging --- benchmarks/polybench-syn/run-vericert.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmarks/polybench-syn/run-vericert.sh b/benchmarks/polybench-syn/run-vericert.sh index c41332d..2086279 100755 --- a/benchmarks/polybench-syn/run-vericert.sh +++ b/benchmarks/polybench-syn/run-vericert.sh @@ -18,22 +18,22 @@ while read benchmark ; do #Undefined checks if test -z $veriresult then - echo "FAIL" - exit 0 + echo "FAIL: Verilog returned nothing" + #exit 0 fi # Don't care checks if [ $veriresult == "x" ] then - echo "FAIL" - exit 0 + echo "FAIL: Verilog returned don't cares" + #exit 0 fi # unequal result check if [ $cresult -ne $veriresult ] then - echo "FAIL" - exit 0 + echo "FAIL: Verilog and C output do not match!" + #exit 0 else echo "PASS" fi -- cgit From 2a0acd46e80769483ec27faf4e8feff514075e06 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Tue, 10 Nov 2020 09:35:58 +0000 Subject: Fix benchmarks to make them compile --- benchmarks/polybench-syn/stencils/adi.c | 13 +++++++------ benchmarks/polybench-syn/stencils/fdtd-2d.c | 12 +++++++++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/benchmarks/polybench-syn/stencils/adi.c b/benchmarks/polybench-syn/stencils/adi.c index cc54e11..5dd406b 100644 --- a/benchmarks/polybench-syn/stencils/adi.c +++ b/benchmarks/polybench-syn/stencils/adi.c @@ -70,13 +70,14 @@ void kernel_adi(int tsteps, int n, d = -mul2 / 2; e = 1+mul2; f = d; + int ZERO = 0; for (t=1; t<=tsteps; t++) { for (i=1; i + #define plus(i) i = i + ONE static void init_array (int tmax, @@ -62,6 +64,10 @@ int print_array(int nx, for (j = 0; j < ny; plus(j)) { res ^= hz[i][j]; } + +#ifndef SYNTHESIS + printf("finished: %u\n", res); +#endif return res; } @@ -87,15 +93,15 @@ void kernel_fdtd_2d(int tmax, ey[0][j] = _fict_[t]; for (i = 1; i < nx; plus(i)) for (j = 0; j < ny; plus(j)) - ey[i][j] = ey[i][j] - ((hz[i][j]-(hz[i-ONE][j])>>1)); + ey[i][j] = ey[i][j] - ((hz[i][j]-((hz[i-ONE][j])>>1))); for (i = 0; i < nx; plus(i)) for (j = 1; j < ny; plus(j)) - ex[i][j] = ex[i][j] - ((hz[i][j]-(hz[i][j-ONE])>>1)); + ex[i][j] = ex[i][j] - ((hz[i][j]-((hz[i][j-ONE])>>1))); for (i = 0; i < nx - ONE; plus(i)) for (j = 0; j < ny - ONE; plus(j)){ int tmp = (ex[i][j+ONE] - ex[i][j] + ey[i+ONE][j] - ey[i][j]); - hz[i][j] = hz[i][j] - tmp >> 1 - tmp >> 2; + hz[i][j] = hz[i][j] - (tmp >> 1) - (tmp >> 2); } } -- cgit From 3c3413c288a8ab211c4793aaf3f9c3e6f4063aec Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Tue, 10 Nov 2020 09:41:09 +0000 Subject: adding flag --- benchmarks/polybench-syn/run-vericert.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/polybench-syn/run-vericert.sh b/benchmarks/polybench-syn/run-vericert.sh index 2086279..3e94427 100755 --- a/benchmarks/polybench-syn/run-vericert.sh +++ b/benchmarks/polybench-syn/run-vericert.sh @@ -8,7 +8,7 @@ while read benchmark ; do ./$benchmark.o cresult=$(echo $?) echo "C output: "$cresult - ../../bin/vericert --debug-hls $benchmark.c -o $benchmark.v + ../../bin/vericert -O0 -finline --debug-hls $benchmark.c -o $benchmark.v iverilog -o $benchmark.iver -- $benchmark.v ./$benchmark.iver > $benchmark.tmp veriresult=$(tail -1 $benchmark.tmp | cut -d' ' -f2) -- cgit From 426caa587cfa8fdf546b6e8cbccfdb0fccea9c36 Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Tue, 10 Nov 2020 10:55:18 +0000 Subject: fixing nussinov --- benchmarks/polybench-syn/medley/nussinov.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/benchmarks/polybench-syn/medley/nussinov.c b/benchmarks/polybench-syn/medley/nussinov.c index fd33ec4..f39f742 100644 --- a/benchmarks/polybench-syn/medley/nussinov.c +++ b/benchmarks/polybench-syn/medley/nussinov.c @@ -19,10 +19,11 @@ void init_array (int n, { int i, j; int ONE = 1; + int FOUR = 4; for (i=0; i = 0; i=i-ONE) { + for (i = n-ONE; i >= ZERO; i=i-ONE) { for (j=i+ONE; j=0) + if (j-ONE>=ZERO) table[i][j] = ((table[i][j] >= table[i][j-ONE]) ? table[i][j] : table[i][j-ONE]); if (i+ONE= table[i+ONE][j]) ? table[i][j] : table[i+ONE][j]); - if (j-ONE>=0 && i+ONE=ZERO && i+ONE= table[i+ONE][j-ONE]+(((seq[i])+(seq[j])) == THREE ? ONE : 0)) ? table[i][j] : table[i+ONE][j-ONE]+(((seq[i])+(seq[j])) == THREE ? ONE : 0)); + table[i][j] = ((table[i][j] >= table[i+ONE][j-ONE]+(((seq[i])+(seq[j])) == THREE ? ONE : ZERO)) ? table[i][j] : table[i+ONE][j-ONE]+(((seq[i])+(seq[j])) == THREE ? ONE : ZERO)); else table[i][j] = ((table[i][j] >= table[i+ONE][j-ONE]) ? table[i][j] : table[i+ONE][j-ONE]); } -- cgit From bcbe86a67490f1d0e92451e9be7a0ced90c7a4cd Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Tue, 10 Nov 2020 12:25:11 +0000 Subject: fixes for fw --- benchmarks/polybench-syn/medley/floyd-warshall.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/benchmarks/polybench-syn/medley/floyd-warshall.c b/benchmarks/polybench-syn/medley/floyd-warshall.c index 46f6774..6c87eb7 100644 --- a/benchmarks/polybench-syn/medley/floyd-warshall.c +++ b/benchmarks/polybench-syn/medley/floyd-warshall.c @@ -9,6 +9,7 @@ */ /* floyd-warshall.c: this file is part of PolyBench/C */ +#include "../include/misc.h" #define plus(i) i = i + ONE static @@ -16,6 +17,7 @@ void init_array (int n, int path[ 60 + 0][60 + 0]) { int i, j; + int ZERO = 0; int ONE = 1; int N7 = 7; int N11 = 11; @@ -24,7 +26,8 @@ void init_array (int n, for (i = 0; i < n; plus(i)) for (j = 0; j < n; plus(j)) { path[i][j] = i*j%N7+ONE; - if ((i+j)%N13 == 0 || (i+j)%N7==0 || (i+j)%N11 == 0) + //if (((i+j)%N13 == ZERO || (i+j)%N7== ZERO || (i+j)%N11 == ZERO ) != 0 ) + if(((smodulo((i+j),13) == (int)0 || smodulo((i+j),7) == (int)0)!=0 || smodulo((i+j),11) == (int)0 ) != 0) path[i][j] = 999; } } -- cgit From 1c9f673de0e071b6d454744cd32c7ac8a567d468 Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan 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(-) 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 db82325ae906334b8fbe486c3d166ac4548c9f08 Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Tue, 10 Nov 2020 19:47:00 +0000 Subject: remove benchmarks from list --- benchmarks/polybench-syn/benchmark-list-master | 2 -- 1 file changed, 2 deletions(-) diff --git a/benchmarks/polybench-syn/benchmark-list-master b/benchmarks/polybench-syn/benchmark-list-master index 171a1c0..142c7c6 100644 --- a/benchmarks/polybench-syn/benchmark-list-master +++ b/benchmarks/polybench-syn/benchmark-list-master @@ -2,7 +2,6 @@ stencils/heat-3d stencils/fdtd-2d stencils/jacobi-1d stencils/seidel-2d -stencils/adi stencils/jacobi-2d medley/nussinov medley/floyd-warshall @@ -19,7 +18,6 @@ linear-algebra/blas/gesummv linear-algebra/blas/gemm linear-algebra/blas/trmm linear-algebra/blas/syr2k -linear-algebra/blas/trmm.preproc linear-algebra/solvers/cholesky linear-algebra/solvers/trisolv linear-algebra/solvers/lu -- 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(-) 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(-) 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(-) 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 f912a0913c8541cdb4f448a6cb9d4e4af822f356 Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Tue, 10 Nov 2020 19:48:52 +0000 Subject: Adding synthesis scripts --- benchmarks/polybench-syn/quartus_synth.tcl | 35 ++++++++++++++++++ benchmarks/polybench-syn/setup-syn-vericert.sh | 24 ++++++++++++ benchmarks/polybench-syn/syn-remote.sh | 51 ++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 benchmarks/polybench-syn/quartus_synth.tcl create mode 100755 benchmarks/polybench-syn/setup-syn-vericert.sh create mode 100755 benchmarks/polybench-syn/syn-remote.sh diff --git a/benchmarks/polybench-syn/quartus_synth.tcl b/benchmarks/polybench-syn/quartus_synth.tcl new file mode 100644 index 0000000..6edbf0c --- /dev/null +++ b/benchmarks/polybench-syn/quartus_synth.tcl @@ -0,0 +1,35 @@ +# PRiME pre-KAPow kernel flow +# Performs pre-KAPow run steps for instrumenting arbitrary Verilog for power monitoring +# James Davis, 2015 + +load_package flow + +project_new -overwrite syn +set_global_assignment -name FAMILY "Arria 10" +set_global_assignment -name DEVICE 10AX115H4F34E3LG +set_global_assignment -name SYSTEMVERILOG_FILE top.v +set_global_assignment -name TOP_LEVEL_ENTITY main +#set_global_assignment -name SDC_FILE syn.sdc +#set_global_assignment -name auto_resource_sharing on +#set_global_assignment -name enable_state_machine_inference on +#set_global_assignment -name optimization_technique area +#set_global_assignment -name synthesis_effort fast +#set_global_assignment -name AUTO_RAM_RECOGNITION on +#set_global_assignment -name remove_duplicate_registers on +#set_instance_assignment -name RAMSTYLE_ATTRIBUTE LOGIC -to ram + +execute_module -tool map + +execute_module -tool fit + +execute_module -tool sta + +#execute_module -tool eda -args "--simulation --tool=vcs" + +# set_global_assignment -name POWER_OUTPUT_SAF_NAME ${kernel}.asf +# set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE "12.5 %" +# set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY ON +# set_global_assignment -name POWER_REPORT_POWER_DISSIPATION ON +# execute_module -tool pow + +project_close diff --git a/benchmarks/polybench-syn/setup-syn-vericert.sh b/benchmarks/polybench-syn/setup-syn-vericert.sh new file mode 100755 index 0000000..e9a8dda --- /dev/null +++ b/benchmarks/polybench-syn/setup-syn-vericert.sh @@ -0,0 +1,24 @@ +#! /bin/bash + +top=$(pwd) + #set up + basedir=poly-syn + sshhost=nr113@ee-beholder0.ee.ic.ac.uk + ssh $sshhost "cd ~; rm -r $basedir" + ssh $sshhost "cd ~; mkdir $basedir" + scp quartus_synth.tcl $sshhost:$basedir + scp syn-remote.sh $sshhost:$basedir + rm syn-list + + while read benchmark ; + do + echo "Copying "$benchmark" over" + name=$(echo $benchmark | awk -v FS="/" '{print $NF}') + echo "Name: "$name + benchdir="~/$basedir/$name" + scp $benchmark.v $sshhost:~/$basedir + echo $name >> syn-list + done < benchmark-list-master + + # copy list over + scp syn-list $sshhost:$basedir diff --git a/benchmarks/polybench-syn/syn-remote.sh b/benchmarks/polybench-syn/syn-remote.sh new file mode 100755 index 0000000..79d4824 --- /dev/null +++ b/benchmarks/polybench-syn/syn-remote.sh @@ -0,0 +1,51 @@ +#! /bin/bash + +#setup +while read benchmark ; +do +echo "Setting up "$benchmark +rm -r $benchmark +mkdir $benchmark +cp $benchmark.v $benchmark/top.v + +done < syn-list + +#synthesis + +count=0 +while read benchmark ; + +do +echo "Synthesising "$benchmark +cd $benchmark +quartus_sh -t ../quartus_synth.tcl & +let "count=count+1" +cd .. + +if [ $count -eq 4 ] +then + echo "I am here" +wait +count=0 +fi + +done < syn-list + +if [ $count -lt 4 ] +then + wait +fi + +#extract +while read benchmark ; do + cd $benchmark +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}') + bram=$(sed -n -e 13p syn.fit.summary | awk '{print $5}') + dsp=$(sed -n -e 14p syn.fit.summary | awk '{print $5}') + cd .. + echo $benchmark","$freq","$lut","$regs","$bram","$dsp >> results + done < syn-list + -- cgit From 47bad8cabe00a40723ce04852d02e7527473f3c3 Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Wed, 11 Nov 2020 11:06:20 +0000 Subject: divider --- benchmarks/polybench-syn/include/misc.h | 81 +++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 benchmarks/polybench-syn/include/misc.h diff --git a/benchmarks/polybench-syn/include/misc.h b/benchmarks/polybench-syn/include/misc.h new file mode 100644 index 0000000..55bb059 --- /dev/null +++ b/benchmarks/polybench-syn/include/misc.h @@ -0,0 +1,81 @@ +unsigned int modulo(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 r0; +} + +int smodulo(int N, int D) { + if (D < 0) { + if (N < 0) + return modulo(-N, -D); + else + return -modulo(N, -D); + } else { + if (N < 0) + return -modulo(-N, D); + else + return modulo(N, D); + } +} + +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); + } +} + + -- 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 --- 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(-) 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