bones-compiler 1.1.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/CHANGELOG +37 -0
- data/LICENSE +1 -1
- data/README.rdoc +95 -70
- data/Rakefile +78 -3
- data/VERSION +1 -1
- data/bin/adarwin +17 -0
- data/examples/benchmarks/PolyBench/2mm.c +104 -0
- data/examples/benchmarks/{3mm.c → PolyBench/3mm.c} +5 -2
- data/examples/benchmarks/{adi.c → PolyBench/adi.c} +6 -3
- data/examples/benchmarks/{atax.c → PolyBench/atax.c} +5 -2
- data/examples/benchmarks/{bicg.c → PolyBench/bicg.c} +5 -2
- data/examples/benchmarks/{cholesky.c → PolyBench/cholesky.c} +3 -0
- data/examples/benchmarks/{common.h → PolyBench/common.h} +2 -2
- data/examples/benchmarks/{correlation.c → PolyBench/correlation.c} +16 -7
- data/examples/benchmarks/{covariance.c → PolyBench/covariance.c} +7 -2
- data/examples/benchmarks/{doitgen.c → PolyBench/doitgen.c} +5 -2
- data/examples/benchmarks/{durbin.c → PolyBench/durbin.c} +3 -0
- data/examples/benchmarks/{dynprog.c → PolyBench/dynprog.c} +3 -0
- data/examples/benchmarks/{fdtd-2d-apml.c → PolyBench/fdtd-2d-apml.c} +3 -0
- data/examples/benchmarks/{fdtd-2d.c → PolyBench/fdtd-2d.c} +5 -2
- data/examples/benchmarks/{floyd-warshall.c → PolyBench/floyd-warshall.c} +3 -0
- data/examples/benchmarks/{gemm.c → PolyBench/gemm.c} +5 -2
- data/examples/benchmarks/{gemver.c → PolyBench/gemver.c} +5 -2
- data/examples/benchmarks/{gesummv.c → PolyBench/gesummv.c} +5 -2
- data/examples/benchmarks/{gramschmidt.c → PolyBench/gramschmidt.c} +3 -0
- data/examples/benchmarks/{jacobi-1d-imper.c → PolyBench/jacobi-1d-imper.c} +10 -2
- data/examples/benchmarks/{jacobi-2d-imper.c → PolyBench/jacobi-2d-imper.c} +8 -3
- data/examples/benchmarks/{lu.c → PolyBench/lu.c} +3 -0
- data/examples/benchmarks/{ludcmp.c → PolyBench/ludcmp.c} +3 -0
- data/examples/benchmarks/{mvt.c → PolyBench/mvt.c} +6 -2
- data/examples/benchmarks/{reg_detect.c → PolyBench/reg_detect.c} +3 -0
- data/examples/benchmarks/{seidel-2d.c → PolyBench/seidel-2d.c} +3 -0
- data/examples/benchmarks/{symm.c → PolyBench/symm.c} +3 -0
- data/examples/benchmarks/{syr2k.c → PolyBench/syr2k.c} +5 -2
- data/examples/benchmarks/{syrk.c → PolyBench/syrk.c} +7 -4
- data/examples/benchmarks/{trisolv.c → PolyBench/trisolv.c} +3 -0
- data/examples/benchmarks/{trmm.c → PolyBench/trmm.c} +3 -0
- data/examples/benchmarks/Rodinia/cfd.c +180 -0
- data/examples/benchmarks/Rodinia/hotspot.c +228 -0
- data/examples/benchmarks/Rodinia/kmeans.c +164 -0
- data/examples/benchmarks/Rodinia/srad.c +188 -0
- data/examples/benchmarks/other/common.h +0 -0
- data/examples/benchmarks/other/dct.c +58 -0
- data/examples/benchmarks/other/mm.c +50 -0
- data/examples/benchmarks/{saxpy.c → other/saxpy.c} +11 -7
- data/examples/chunk/{example1.c → example01.c} +0 -0
- data/examples/chunk/{example2.c → example02.c} +0 -0
- data/examples/chunk/{example3.c → example03.c} +0 -0
- data/examples/chunk/{example4.c → example04.c} +0 -0
- data/examples/chunk/{example5.c → example05.c} +0 -0
- data/examples/chunk/example06.c +45 -0
- data/examples/chunk/example07.c +49 -0
- data/examples/dependences/example01.c +42 -0
- data/examples/dependences/example02.c +40 -0
- data/examples/dependences/example03.c +43 -0
- data/examples/dependences/example04.c +44 -0
- data/examples/dependences/example05.c +42 -0
- data/examples/element/{example1.c → example01.c} +0 -0
- data/examples/element/{example2.c → example02.c} +2 -2
- data/examples/element/{example3.c → example03.c} +0 -0
- data/examples/element/{example4.c → example04.c} +0 -0
- data/examples/element/{example5.c → example05.c} +0 -0
- data/examples/element/{example6.c → example06.c} +0 -0
- data/examples/element/{example7.c → example07.c} +0 -0
- data/examples/element/{example8.c → example08.c} +0 -0
- data/examples/element/{example9.c → example09.c} +0 -0
- data/examples/element/example13.c +73 -0
- data/examples/fusion/example01.c +68 -0
- data/examples/fusion/example02.c +73 -0
- data/examples/fusion/example03.c +72 -0
- data/examples/fusion/example04.c +61 -0
- data/examples/fusion/example05.c +55 -0
- data/examples/neighbourhood/{example1.c → example01.c} +0 -0
- data/examples/neighbourhood/{example2.c → example02.c} +0 -0
- data/examples/neighbourhood/{example3.c → example03.c} +0 -0
- data/examples/neighbourhood/{example4.c → example04.c} +0 -0
- data/examples/neighbourhood/example05.c +44 -0
- data/examples/shared/{example1.c → example01.c} +0 -0
- data/examples/shared/{example2.c → example02.c} +0 -0
- data/examples/shared/{example3.c → example03.c} +0 -0
- data/examples/shared/{example4.c → example04.c} +0 -0
- data/examples/shared/{example5.c → example05.c} +0 -0
- data/lib/adarwin.rb +62 -0
- data/lib/adarwin/dependences.rb +268 -0
- data/lib/adarwin/engine.rb +277 -0
- data/lib/adarwin/fusion.rb +174 -0
- data/lib/adarwin/interval.rb +57 -0
- data/lib/adarwin/memorycopies.rb +153 -0
- data/lib/adarwin/nest.rb +225 -0
- data/lib/adarwin/preprocessor.rb +76 -0
- data/lib/adarwin/reference.rb +261 -0
- data/lib/bones.rb +4 -55
- data/lib/bones/algorithm.rb +77 -40
- data/lib/bones/copy.rb +26 -0
- data/lib/bones/engine.rb +147 -31
- data/lib/bones/preprocessor.rb +92 -12
- data/lib/bones/species.rb +4 -3
- data/lib/bones/structure.rb +14 -4
- data/lib/castaddon.rb +11 -6
- data/lib/castaddon/node_adarwin.rb +245 -0
- data/lib/castaddon/node_bones.rb +316 -0
- data/lib/castaddon/node_common.rb +289 -0
- data/lib/castaddon/transformations.rb +236 -0
- data/lib/common.rb +216 -0
- data/skeletons/CPU-C/common/header.c +3 -0
- data/skeletons/CPU-C/common/mem_global.c +0 -0
- data/skeletons/CPU-C/common/timer_2_start.c +11 -13
- data/skeletons/CPU-C/common/timer_2_stop.c +1 -1
- data/skeletons/CPU-C/common/timer_globals.c +29 -0
- data/skeletons/CPU-OPENCL-INTEL/common/globals.c +1 -1
- data/skeletons/CPU-OPENCL-INTEL/common/header.c +3 -0
- data/skeletons/CPU-OPENCL-INTEL/common/mem_copy_D2H.c +7 -2
- data/skeletons/CPU-OPENCL-INTEL/common/mem_copy_H2D.c +4 -2
- data/skeletons/CPU-OPENCL-INTEL/common/mem_global.c +0 -0
- data/skeletons/CPU-OPENCL-INTEL/common/mem_prologue.c +6 -3
- data/skeletons/CPU-OPENCL-INTEL/common/timer_2_stop.c +1 -1
- data/skeletons/CPU-OPENCL-INTEL/common/timer_globals.c +24 -0
- data/skeletons/CPU-OPENMP/common/globals.c +1 -0
- data/skeletons/CPU-OPENMP/common/header.c +3 -0
- data/skeletons/CPU-OPENMP/common/mem_global.c +0 -0
- data/skeletons/CPU-OPENMP/common/timer_1_start.c +0 -12
- data/skeletons/CPU-OPENMP/common/timer_2_stop.c +1 -1
- data/skeletons/CPU-OPENMP/common/timer_globals.c +33 -0
- data/skeletons/GPU-CUDA/common/globals.c +27 -3
- data/skeletons/GPU-CUDA/common/header.c +2 -0
- data/skeletons/GPU-CUDA/common/mem_async_alloc.c +6 -0
- data/skeletons/GPU-CUDA/common/mem_async_copyin.c +6 -0
- data/skeletons/GPU-CUDA/common/mem_async_copyout.c +6 -0
- data/skeletons/GPU-CUDA/common/mem_async_free.c +6 -0
- data/skeletons/GPU-CUDA/common/mem_copy_D2H.c +2 -1
- data/skeletons/GPU-CUDA/common/mem_copy_H2D.c +2 -1
- data/skeletons/GPU-CUDA/common/mem_global.c +1 -0
- data/skeletons/GPU-CUDA/common/mem_prologue.c +1 -2
- data/skeletons/GPU-CUDA/common/scheduler.c +86 -0
- data/skeletons/GPU-CUDA/common/timer_2_start.c +2 -4
- data/skeletons/GPU-CUDA/common/timer_2_stop.c +3 -5
- data/skeletons/GPU-CUDA/common/timer_globals.c +26 -0
- data/skeletons/GPU-CUDA/kernel/2xN-N-chunk-1-N-to-D-element.kernel.cu +5 -7
- data/skeletons/GPU-CUDA/kernel/N-N-chunk-1-N-to-D-element.kernel.cu +4 -6
- data/skeletons/GPU-CUDA/kernel/default.host.c +1 -1
- data/skeletons/GPU-CUDA/kernel/default.kernel.cu +6 -8
- data/skeletons/GPU-CUDA/skeletons.txt +6 -5
- data/{examples/benchmarks/2mm.c → test/examples/benchmarks/PolyBench/2mm_species.c} +19 -15
- data/test/examples/benchmarks/PolyBench/3mm_species.c +82 -0
- data/test/examples/benchmarks/PolyBench/adi_species.c +89 -0
- data/test/examples/benchmarks/PolyBench/atax_species.c +69 -0
- data/test/examples/benchmarks/PolyBench/bicg_species.c +71 -0
- data/test/examples/benchmarks/PolyBench/cholesky_species.c +68 -0
- data/test/examples/benchmarks/PolyBench/correlation_species.c +97 -0
- data/test/examples/benchmarks/PolyBench/covariance_species.c +78 -0
- data/test/examples/benchmarks/PolyBench/doitgen_species.c +67 -0
- data/test/examples/benchmarks/PolyBench/durbin_species.c +80 -0
- data/test/examples/benchmarks/PolyBench/dynprog_species.c +71 -0
- data/test/examples/benchmarks/PolyBench/fdtd-2d-apml_species.c +112 -0
- data/test/examples/benchmarks/PolyBench/fdtd-2d_species.c +78 -0
- data/test/examples/benchmarks/PolyBench/floyd-warshall_species.c +54 -0
- data/test/examples/benchmarks/PolyBench/gemm_species.c +73 -0
- data/test/examples/benchmarks/PolyBench/gemver_species.c +93 -0
- data/test/examples/benchmarks/PolyBench/gesummv_species.c +68 -0
- data/test/examples/benchmarks/PolyBench/gramschmidt_species.c +78 -0
- data/test/examples/benchmarks/PolyBench/jacobi-1d-imper_species.c +59 -0
- data/test/examples/benchmarks/PolyBench/jacobi-2d-imper_species.c +65 -0
- data/test/examples/benchmarks/PolyBench/lu_species.c +57 -0
- data/test/examples/benchmarks/PolyBench/ludcmp_species.c +89 -0
- data/test/examples/benchmarks/PolyBench/mvt_species.c +69 -0
- data/test/examples/benchmarks/PolyBench/reg_detect_species.c +86 -0
- data/test/examples/benchmarks/PolyBench/seidel-2d_species.c +53 -0
- data/test/examples/benchmarks/PolyBench/symm_species.c +74 -0
- data/test/examples/benchmarks/PolyBench/syr2k_species.c +69 -0
- data/test/examples/benchmarks/PolyBench/syrk_species.c +66 -0
- data/test/examples/benchmarks/PolyBench/trisolv_species.c +61 -0
- data/test/examples/benchmarks/PolyBench/trmm_species.c +61 -0
- data/test/examples/chunk/example01_species.c +58 -0
- data/test/examples/chunk/example02_species.c +48 -0
- data/test/examples/chunk/example03_species.c +63 -0
- data/test/examples/chunk/example04_species.c +58 -0
- data/test/examples/chunk/example05_species.c +56 -0
- data/test/examples/chunk/example06_species.c +49 -0
- data/test/examples/chunk/example07_species.c +53 -0
- data/test/examples/dependences/example01_species.c +46 -0
- data/test/examples/dependences/example02_species.c +44 -0
- data/test/examples/dependences/example03_species.c +47 -0
- data/test/examples/dependences/example04_species.c +48 -0
- data/test/examples/dependences/example05_species.c +46 -0
- data/test/examples/element/example01_species.c +50 -0
- data/test/examples/element/example02_species.c +50 -0
- data/test/examples/element/example03_species.c +62 -0
- data/test/examples/element/example04_species.c +53 -0
- data/test/examples/element/example05_species.c +59 -0
- data/test/examples/element/example06_species.c +50 -0
- data/test/examples/element/example07_species.c +58 -0
- data/test/examples/element/example08_species.c +49 -0
- data/test/examples/element/example09_species.c +52 -0
- data/test/examples/element/example10_species.c +54 -0
- data/test/examples/element/example11_species.c +51 -0
- data/test/examples/element/example12_species.c +60 -0
- data/test/examples/element/example13_species.c +77 -0
- data/test/examples/neighbourhood/example01_species.c +57 -0
- data/test/examples/neighbourhood/example02_species.c +56 -0
- data/test/examples/neighbourhood/example03_species.c +83 -0
- data/test/examples/neighbourhood/example04_species.c +55 -0
- data/test/examples/neighbourhood/example05_species.c +48 -0
- data/test/examples/shared/example01_species.c +49 -0
- data/test/examples/shared/example02_species.c +55 -0
- data/test/examples/shared/example03_species.c +59 -0
- data/test/examples/shared/example04_species.c +56 -0
- data/test/examples/shared/example05_species.c +52 -0
- metadata +193 -73
- data/examples/benchmarks/overview.txt +0 -38
- data/lib/castaddon/node.rb +0 -753
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
//
|
|
2
|
+
// This file is part of the Bones source-to-source compiler examples. The C-code
|
|
3
|
+
// is largely identical in terms of functionality and variable naming to the code
|
|
4
|
+
// found in PolyBench/C version 3.2. For more information on PolyBench/C or Bones
|
|
5
|
+
// please use the contact information below.
|
|
6
|
+
//
|
|
7
|
+
// == More information on PolyBench/C
|
|
8
|
+
// Contact............Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
|
|
9
|
+
// Web address........http://polybench.sourceforge.net/
|
|
10
|
+
//
|
|
11
|
+
// == More information on Bones
|
|
12
|
+
// Contact............Cedric Nugteren <c.nugteren@tue.nl>
|
|
13
|
+
// Web address........http://parse.ele.tue.nl/bones/
|
|
14
|
+
//
|
|
15
|
+
// == File information
|
|
16
|
+
// Filename...........benchmark/ludcmp.c
|
|
17
|
+
// Author.............Cedric Nugteren
|
|
18
|
+
// Last modified on...23-May-2012
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#include "common.h"
|
|
22
|
+
|
|
23
|
+
// This is 'ludcmp', an LU decomposition kernel
|
|
24
|
+
int main(void) {
|
|
25
|
+
int i,j,k;
|
|
26
|
+
float w[1];
|
|
27
|
+
|
|
28
|
+
// Declare arrays on the stack
|
|
29
|
+
float A[N+1][N+1];
|
|
30
|
+
float b[N+1];
|
|
31
|
+
float x[N+1];
|
|
32
|
+
float y[N+1];
|
|
33
|
+
|
|
34
|
+
// Set the input data
|
|
35
|
+
for (i=0; i<=N; i++) {
|
|
36
|
+
x[i] = i+1;
|
|
37
|
+
y[i] = (i+1)/(float)(N*40) + 1;
|
|
38
|
+
b[i] = (i+1)/(float)(N*20) + 42;
|
|
39
|
+
for (j=0; j<=N; j++) {
|
|
40
|
+
A[i][j] = (i+1)/(float)(10*N) + (j+1)/(float)(5*N);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Perform the computation
|
|
45
|
+
#pragma scop
|
|
46
|
+
{
|
|
47
|
+
b[0] = 1.0;
|
|
48
|
+
for (i = 0; i < N; i++) {
|
|
49
|
+
for (j = i + 1; j <= N; j++) {
|
|
50
|
+
w[0] = A[j][i];
|
|
51
|
+
for (k = 0; k < i; k++) {
|
|
52
|
+
w[0] = w[0] - A[j][k] * A[k][i];
|
|
53
|
+
}
|
|
54
|
+
A[j][i] = w[0] / A[i][i];
|
|
55
|
+
}
|
|
56
|
+
for (j = i + 1; j <= N; j++) {
|
|
57
|
+
w[0] = A[i + 1][j];
|
|
58
|
+
for (k = 0; k <= i; k++) {
|
|
59
|
+
w[0] = w[0] - A[i + 1][k] * A[k][j];
|
|
60
|
+
}
|
|
61
|
+
A[i + 1][j] = w[0];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
y[0] = b[0];
|
|
65
|
+
for (i = 1; i <= N; i++) {
|
|
66
|
+
w[0] = b[i];
|
|
67
|
+
#pragma species kernel w[0:0]|full ^ A[i:i,0:i-1]|element ^ y[0:i-1]|element -> w[0:0]|shared
|
|
68
|
+
for (j = 0; j < i; j++) {
|
|
69
|
+
w[0] = w[0] - A[i][j] * y[j];
|
|
70
|
+
}
|
|
71
|
+
#pragma species endkernel ludcmp_k18
|
|
72
|
+
y[i] = w[0];
|
|
73
|
+
}
|
|
74
|
+
x[N] = y[N] / A[N][N];
|
|
75
|
+
for (i = 0; i <= N - 1; i++) {
|
|
76
|
+
w[0] = y[N - 1 - i];
|
|
77
|
+
for (j = N - i; j <= N; j++) {
|
|
78
|
+
w[0] = w[0] - A[N - 1 - i][j] * x[j];
|
|
79
|
+
}
|
|
80
|
+
x[N - 1 - i] = w[0] / A[N - 1 - i][N - 1 - i];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
#pragma endscop
|
|
84
|
+
|
|
85
|
+
// Clean-up and exit the function
|
|
86
|
+
fflush(stdout);
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
//
|
|
2
|
+
// This file is part of the Bones source-to-source compiler examples. The C-code
|
|
3
|
+
// is largely identical in terms of functionality and variable naming to the code
|
|
4
|
+
// found in PolyBench/C version 3.2. For more information on PolyBench/C or Bones
|
|
5
|
+
// please use the contact information below.
|
|
6
|
+
//
|
|
7
|
+
// == More information on PolyBench/C
|
|
8
|
+
// Contact............Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
|
|
9
|
+
// Web address........http://polybench.sourceforge.net/
|
|
10
|
+
//
|
|
11
|
+
// == More information on Bones
|
|
12
|
+
// Contact............Cedric Nugteren <c.nugteren@tue.nl>
|
|
13
|
+
// Web address........http://parse.ele.tue.nl/bones/
|
|
14
|
+
//
|
|
15
|
+
// == File information
|
|
16
|
+
// Filename...........benchmark/mvt.c
|
|
17
|
+
// Author.............Cedric Nugteren
|
|
18
|
+
// Last modified on...23-May-2012
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#include "common.h"
|
|
22
|
+
|
|
23
|
+
// This is 'mvt', a matrix vector product and transpose kernel
|
|
24
|
+
int main(void) {
|
|
25
|
+
int i,j;
|
|
26
|
+
|
|
27
|
+
// Declare arrays on the stack
|
|
28
|
+
float A[NX][NX];
|
|
29
|
+
float x1[NX];
|
|
30
|
+
float x2[NX];
|
|
31
|
+
float y_1[NX];
|
|
32
|
+
float y_2[NX];
|
|
33
|
+
|
|
34
|
+
// Set the input data
|
|
35
|
+
for (i=0; i<NX; i++) {
|
|
36
|
+
x1[i] = ((float) i) / NX;
|
|
37
|
+
x2[i] = ((float) i + 1) / NX;
|
|
38
|
+
y_1[i] = ((float) i + 3) / NX;
|
|
39
|
+
y_2[i] = ((float) i + 4) / NX;
|
|
40
|
+
for (j=0; j<NX; j++) {
|
|
41
|
+
A[i][j] = ((float) i*j) / NX;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Perform the computation
|
|
46
|
+
#pragma scop
|
|
47
|
+
{
|
|
48
|
+
#pragma species kernel x1[0:NX-1]|element ^ A[0:NX-1,0:NX-1]|chunk(0:0,0:NX-1) ^ y_1[0:NX-1]|full -> x1[0:NX-1]|element
|
|
49
|
+
for (i = 0; i < NX; i++) {
|
|
50
|
+
for (j = 0; j < NX; j++) {
|
|
51
|
+
x1[i] = x1[i] + A[i][j] * y_1[j];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
#pragma species endkernel mvt_k1
|
|
55
|
+
#pragma species kernel x2[0:NX-1]|element ^ A[0:NX-1,0:NX-1]|chunk(0:NX-1,0:0) ^ y_2[0:NX-1]|full -> x2[0:NX-1]|element
|
|
56
|
+
for (i = 0; i < NX; i++) {
|
|
57
|
+
for (j = 0; j < NX; j++) {
|
|
58
|
+
x2[i] = x2[i] + A[j][i] * y_2[j];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
#pragma species endkernel mvt_k2
|
|
62
|
+
}
|
|
63
|
+
#pragma endscop
|
|
64
|
+
|
|
65
|
+
// Clean-up and exit the function
|
|
66
|
+
fflush(stdout);
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
//
|
|
2
|
+
// This file is part of the Bones source-to-source compiler examples. The C-code
|
|
3
|
+
// is largely identical in terms of functionality and variable naming to the code
|
|
4
|
+
// found in PolyBench/C version 3.2. For more information on PolyBench/C or Bones
|
|
5
|
+
// please use the contact information below.
|
|
6
|
+
//
|
|
7
|
+
// == More information on PolyBench/C
|
|
8
|
+
// Contact............Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
|
|
9
|
+
// Web address........http://polybench.sourceforge.net/
|
|
10
|
+
//
|
|
11
|
+
// == More information on Bones
|
|
12
|
+
// Contact............Cedric Nugteren <c.nugteren@tue.nl>
|
|
13
|
+
// Web address........http://parse.ele.tue.nl/bones/
|
|
14
|
+
//
|
|
15
|
+
// == File information
|
|
16
|
+
// Filename...........benchmark/reg_detect.c
|
|
17
|
+
// Author.............Cedric Nugteren
|
|
18
|
+
// Last modified on...26-Jun-2012
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#include "common.h"
|
|
22
|
+
|
|
23
|
+
// This is 'reg_detect', a regularity detection algorithm
|
|
24
|
+
int main(void) {
|
|
25
|
+
int i,j,t,cnt;
|
|
26
|
+
float sum;
|
|
27
|
+
|
|
28
|
+
// Declare arrays on the stack
|
|
29
|
+
float sum_tang[MAXGRID][MAXGRID];
|
|
30
|
+
float mean[MAXGRID][MAXGRID];
|
|
31
|
+
float path[MAXGRID][MAXGRID];
|
|
32
|
+
float diff[MAXGRID][MAXGRID][LENGTH];
|
|
33
|
+
float sum_diff[MAXGRID][MAXGRID][LENGTH];
|
|
34
|
+
|
|
35
|
+
// Set the input data
|
|
36
|
+
for (i=0; i<MAXGRID; i++) {
|
|
37
|
+
for (j=0; j<MAXGRID; j++) {
|
|
38
|
+
sum_tang[i][j] = (float)((i+1)*(j+1));
|
|
39
|
+
mean[i][j] = ((float) i-j) / MAXGRID;
|
|
40
|
+
path[i][j] = ((float) i*(j-1)) / MAXGRID;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Perform the computation
|
|
45
|
+
#pragma scop
|
|
46
|
+
{
|
|
47
|
+
for (t = 0; t < ITER; t++) {
|
|
48
|
+
#pragma species kernel sum_tang[0:MAXGRID-1,0:MAXGRID-1]|element -> diff[0:MAXGRID-1,0:MAXGRID-1,0:LENGTH-1]|chunk(0:0,0:0,0:LENGTH-1)
|
|
49
|
+
for (j = 0; j <= MAXGRID - 1; j++) {
|
|
50
|
+
for (i = 0; i <= MAXGRID - 1; i++) {
|
|
51
|
+
sum = sum_tang[j][i];
|
|
52
|
+
for (cnt = 0; cnt <= LENGTH - 1; cnt++) {
|
|
53
|
+
diff[j][i][cnt] = sum;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
#pragma species endkernel reg_detect_k2
|
|
58
|
+
for (j = 0; j <= MAXGRID - 1; j++) {
|
|
59
|
+
for (i = j; i <= MAXGRID - 1; i++) {
|
|
60
|
+
sum_diff[j][i][0] = diff[j][i][0];
|
|
61
|
+
for (cnt = 1; cnt <= LENGTH - 1; cnt++) {
|
|
62
|
+
sum_diff[j][i][cnt] = sum_diff[j][i][cnt - 1] + diff[j][i][cnt];
|
|
63
|
+
}
|
|
64
|
+
mean[j][i] = sum_diff[j][i][LENGTH - 1];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
#pragma species kernel mean[0:0,0:MAXGRID-1]|element -> path[0:0,0:MAXGRID-1]|element
|
|
68
|
+
for (i = 0; i <= MAXGRID - 1; i++) {
|
|
69
|
+
path[0][i] = mean[0][i];
|
|
70
|
+
}
|
|
71
|
+
#pragma species endkernel reg_detect_k4
|
|
72
|
+
for (j = 1; j <= MAXGRID - 1; j++) {
|
|
73
|
+
#pragma species kernel path[j-1:j-1,j-1:MAXGRID-2]|element ^ mean[j:j,j:MAXGRID-1]|element -> path[j:j,j:MAXGRID-1]|element
|
|
74
|
+
for (i = j; i <= MAXGRID - 1; i++) {
|
|
75
|
+
path[j][i] = path[j - 1][i - 1] + mean[j][i];
|
|
76
|
+
}
|
|
77
|
+
#pragma species endkernel reg_detect_k16
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
#pragma endscop
|
|
82
|
+
|
|
83
|
+
// Clean-up and exit the function
|
|
84
|
+
fflush(stdout);
|
|
85
|
+
return 0;
|
|
86
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//
|
|
2
|
+
// This file is part of the Bones source-to-source compiler examples. The C-code
|
|
3
|
+
// is largely identical in terms of functionality and variable naming to the code
|
|
4
|
+
// found in PolyBench/C version 3.2. For more information on PolyBench/C or Bones
|
|
5
|
+
// please use the contact information below.
|
|
6
|
+
//
|
|
7
|
+
// == More information on PolyBench/C
|
|
8
|
+
// Contact............Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
|
|
9
|
+
// Web address........http://polybench.sourceforge.net/
|
|
10
|
+
//
|
|
11
|
+
// == More information on Bones
|
|
12
|
+
// Contact............Cedric Nugteren <c.nugteren@tue.nl>
|
|
13
|
+
// Web address........http://parse.ele.tue.nl/bones/
|
|
14
|
+
//
|
|
15
|
+
// == File information
|
|
16
|
+
// Filename...........benchmark/seidel-2d.c
|
|
17
|
+
// Author.............Cedric Nugteren
|
|
18
|
+
// Last modified on...05-April-2012
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#include "common.h"
|
|
22
|
+
|
|
23
|
+
// This is 'seidel-2d', a 2D Seidel stencil computation
|
|
24
|
+
int main(void) {
|
|
25
|
+
int i,j,t;
|
|
26
|
+
|
|
27
|
+
// Declare arrays on the stack
|
|
28
|
+
float A[N][N];
|
|
29
|
+
|
|
30
|
+
// Set the input data
|
|
31
|
+
for (i=0; i<N; i++) {
|
|
32
|
+
for (j=0; j<N; j++) {
|
|
33
|
+
A[i][j] = ((float) i*i*(j+2) + 2) / N;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Perform the computation
|
|
38
|
+
#pragma scop
|
|
39
|
+
{
|
|
40
|
+
for (t = 0; t < TSTEPS - 1; t++) {
|
|
41
|
+
for (i = 1; i <= N - 2; i++) {
|
|
42
|
+
for (j = 1; j <= N - 2; j++) {
|
|
43
|
+
A[i][j] = (A[i - 1][j - 1] + A[i - 1][j] + A[i - 1][j + 1] + A[i][j - 1] + A[i][j] + A[i][j + 1] + A[i + 1][j - 1] + A[i + 1][j] + A[i + 1][j + 1]) / 9.0;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
#pragma endscop
|
|
49
|
+
|
|
50
|
+
// Clean-up and exit the function
|
|
51
|
+
fflush(stdout);
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
//
|
|
2
|
+
// This file is part of the Bones source-to-source compiler examples. The C-code
|
|
3
|
+
// is largely identical in terms of functionality and variable naming to the code
|
|
4
|
+
// found in PolyBench/C version 3.2. For more information on PolyBench/C or Bones
|
|
5
|
+
// please use the contact information below.
|
|
6
|
+
//
|
|
7
|
+
// == More information on PolyBench/C
|
|
8
|
+
// Contact............Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
|
|
9
|
+
// Web address........http://polybench.sourceforge.net/
|
|
10
|
+
//
|
|
11
|
+
// == More information on Bones
|
|
12
|
+
// Contact............Cedric Nugteren <c.nugteren@tue.nl>
|
|
13
|
+
// Web address........http://parse.ele.tue.nl/bones/
|
|
14
|
+
//
|
|
15
|
+
// == File information
|
|
16
|
+
// Filename...........benchmark/symm.c
|
|
17
|
+
// Author.............Cedric Nugteren
|
|
18
|
+
// Last modified on...23-May-2012
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#include "common.h"
|
|
22
|
+
|
|
23
|
+
// This is 'symm', a symmetric matrix multiplication kernel
|
|
24
|
+
int main(void) {
|
|
25
|
+
int i,j,k;
|
|
26
|
+
float acc[1];
|
|
27
|
+
float bij;
|
|
28
|
+
|
|
29
|
+
// Declare arrays on the stack
|
|
30
|
+
float A[NJ][NJ];
|
|
31
|
+
float B[NI][NJ];
|
|
32
|
+
float C[NI][NJ];
|
|
33
|
+
|
|
34
|
+
// Set the constants
|
|
35
|
+
float alpha = 32412;
|
|
36
|
+
float beta = 2123;
|
|
37
|
+
|
|
38
|
+
// Set the input data
|
|
39
|
+
for (i=0; i<NI; i++) {
|
|
40
|
+
for (j=0; j<NJ; j++) {
|
|
41
|
+
C[i][j] = ((float) i*j) / NI;
|
|
42
|
+
B[i][j] = ((float) i*j) / NI;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
for (i=0; i<NJ; i++) {
|
|
46
|
+
for (j=0; j<NJ; j++) {
|
|
47
|
+
A[i][j] = ((float) i*j) / NI;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Perform the computation (C := alpha*A*B + beta*C, with A symmetric)
|
|
52
|
+
#pragma scop
|
|
53
|
+
{
|
|
54
|
+
for (i = 0; i < NI; i++) {
|
|
55
|
+
for (j = 0; j < NJ; j++) {
|
|
56
|
+
acc[0] = 0;
|
|
57
|
+
bij = B[i][j];
|
|
58
|
+
for (k = 0; k < j - 1; k++) {
|
|
59
|
+
C[k][j] += alpha * A[k][i] * bij;
|
|
60
|
+
}
|
|
61
|
+
for (k = 0; k < j - 1; k++) {
|
|
62
|
+
acc[0] += B[k][j] * A[k][i];
|
|
63
|
+
}
|
|
64
|
+
C[i][j] = beta * C[i][j] + alpha * A[i][i] * bij + alpha * acc[0];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
#pragma endscop
|
|
69
|
+
|
|
70
|
+
// Clean-up and exit the function
|
|
71
|
+
fflush(stdout);
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
//
|
|
2
|
+
// This file is part of the Bones source-to-source compiler examples. The C-code
|
|
3
|
+
// is largely identical in terms of functionality and variable naming to the code
|
|
4
|
+
// found in PolyBench/C version 3.2. For more information on PolyBench/C or Bones
|
|
5
|
+
// please use the contact information below.
|
|
6
|
+
//
|
|
7
|
+
// == More information on PolyBench/C
|
|
8
|
+
// Contact............Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
|
|
9
|
+
// Web address........http://polybench.sourceforge.net/
|
|
10
|
+
//
|
|
11
|
+
// == More information on Bones
|
|
12
|
+
// Contact............Cedric Nugteren <c.nugteren@tue.nl>
|
|
13
|
+
// Web address........http://parse.ele.tue.nl/bones/
|
|
14
|
+
//
|
|
15
|
+
// == File information
|
|
16
|
+
// Filename...........benchmark/syr2k.c
|
|
17
|
+
// Author.............Cedric Nugteren
|
|
18
|
+
// Last modified on...03-April-2012
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#include "common.h"
|
|
22
|
+
|
|
23
|
+
// This is 'syr2k', an algorithm for symmetric rank-2k operations
|
|
24
|
+
int main(void) {
|
|
25
|
+
int i,j,k;
|
|
26
|
+
|
|
27
|
+
// Declare arrays on the stack
|
|
28
|
+
float A[NI][NJ];
|
|
29
|
+
float B[NI][NJ];
|
|
30
|
+
float C[NI][NI];
|
|
31
|
+
|
|
32
|
+
// Set the constants
|
|
33
|
+
int alpha = 32412;
|
|
34
|
+
int beta = 2123;
|
|
35
|
+
|
|
36
|
+
// Set the input data
|
|
37
|
+
for (i=0; i<NI; i++) {
|
|
38
|
+
for (j=0; j<NJ; j++) {
|
|
39
|
+
A[i][j] = ((float) i*j) / NI;
|
|
40
|
+
B[i][j] = ((float) i*j) / NI;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
for (i=0; i<NI; i++) {
|
|
44
|
+
for (j=0; j<NI; j++) {
|
|
45
|
+
C[i][j] = ((float) i*j) / NI;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Perform the computation (C := alpha*A*B' + alpha*B*A' + beta*C)
|
|
50
|
+
#pragma scop
|
|
51
|
+
{
|
|
52
|
+
#pragma species kernel C[0:NI-1,0:NI-1]|element ^ A[0:NI-1,0:NJ-1]|chunk(0:0,0:NJ-1) ^ B[0:NI-1,0:NJ-1]|chunk(0:0,0:NJ-1) -> C[0:NI-1,0:NI-1]|element
|
|
53
|
+
for (i = 0; i < NI; i++) {
|
|
54
|
+
for (j = 0; j < NI; j++) {
|
|
55
|
+
C[i][j] *= beta;
|
|
56
|
+
for (k = 0; k < NJ; k++) {
|
|
57
|
+
C[i][j] += alpha * A[i][k] * B[j][k];
|
|
58
|
+
C[i][j] += alpha * B[i][k] * A[j][k];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
#pragma species endkernel syr2k_k1
|
|
63
|
+
}
|
|
64
|
+
#pragma endscop
|
|
65
|
+
|
|
66
|
+
// Clean-up and exit the function
|
|
67
|
+
fflush(stdout);
|
|
68
|
+
return 0;
|
|
69
|
+
}
|