bones-compiler 1.1.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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,67 @@
|
|
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/doitgen.c
|
17
|
+
// Author.............Cedric Nugteren
|
18
|
+
// Last modified on...10-April-2012
|
19
|
+
//
|
20
|
+
|
21
|
+
#include "common.h"
|
22
|
+
|
23
|
+
// This is 'doitgen', a multiresolution analysis kernel
|
24
|
+
int main(void) {
|
25
|
+
int i,j,k,p,q,r,s;
|
26
|
+
|
27
|
+
// Declare arrays on the stack
|
28
|
+
float A[NR][NQ][NP];
|
29
|
+
float sum[NR][NQ][NP];
|
30
|
+
float C4[NP][NP];
|
31
|
+
|
32
|
+
// Set the input data
|
33
|
+
for (i=0; i<NR; i++) { for (j=0; j<NQ; j++) { for (k=0; k<NP; k++) { A[i][j][k] = ((float) i*j + k) / NP; } } }
|
34
|
+
for (i=0; i<NP; i++) { for (j=0; j<NP; j++) { C4[i][j] = ((float) i*j) / NP; } }
|
35
|
+
|
36
|
+
// Perform the computation
|
37
|
+
#pragma scop
|
38
|
+
{
|
39
|
+
#pragma species kernel A[0:NR-1,0:NQ-1,0:NP-1]|chunk(0:0,0:0,0:NP-1) ^ C4[0:NP-1,0:NP-1]|chunk(0:NP-1,0:0) -> sum[0:NR-1,0:NQ-1,0:NP-1]|element
|
40
|
+
for (r = 0; r < NR; r++) {
|
41
|
+
for (q = 0; q < NQ; q++) {
|
42
|
+
for (p = 0; p < NP; p++) {
|
43
|
+
sum[r][q][p] = 0;
|
44
|
+
for (s = 0; s < NP; s++) {
|
45
|
+
sum[r][q][p] = sum[r][q][p] + A[r][q][s] * C4[s][p];
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
#pragma species endkernel doitgen_k1
|
51
|
+
#pragma species kernel sum[0:NR-1,0:NQ-1,0:NP-1]|element -> A[0:NR-1,0:NQ-1,0:NP-1]|element
|
52
|
+
for (r = 0; r < NR; r++) {
|
53
|
+
for (q = 0; q < NQ; q++) {
|
54
|
+
for (p = 0; p < NP; p++) {
|
55
|
+
A[r][q][p] = sum[r][q][p];
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
59
|
+
#pragma species endkernel doitgen_k2
|
60
|
+
}
|
61
|
+
#pragma endscop
|
62
|
+
|
63
|
+
// Clean-up and exit the function
|
64
|
+
fflush(stdout);
|
65
|
+
return 0;
|
66
|
+
}
|
67
|
+
|
@@ -0,0 +1,80 @@
|
|
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/durbin.c
|
17
|
+
// Author.............Cedric Nugteren
|
18
|
+
// Last modified on...03-Jul-2012
|
19
|
+
//
|
20
|
+
|
21
|
+
#include "common.h"
|
22
|
+
|
23
|
+
// This is 'durbin', an algorithm to solve an equation involving a Toeplitz matrix using the Levinson-Durbin recursion
|
24
|
+
int main(void) {
|
25
|
+
int i,j,k;
|
26
|
+
float alpha_k;
|
27
|
+
|
28
|
+
// Declare arrays on the stack
|
29
|
+
float alpha[NX];
|
30
|
+
float beta[NX];
|
31
|
+
float r[NX];
|
32
|
+
float y[NX][NX];
|
33
|
+
float sum[NX][NX];
|
34
|
+
float out[NX];
|
35
|
+
|
36
|
+
// Set the input data
|
37
|
+
for (i=0; i<NX; i++) {
|
38
|
+
alpha[i] = i;
|
39
|
+
beta[i] = (i+1)/NX/2.0;
|
40
|
+
r[i] = (i+1)/NX/4.0;
|
41
|
+
for (j=0; j<NX; j++) {
|
42
|
+
y[i][j] = ((float) i*j) / NX;
|
43
|
+
sum[i][j] = ((float) i*j) / NX;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
// Perform the computation
|
48
|
+
#pragma scop
|
49
|
+
{
|
50
|
+
y[0][0] = r[0];
|
51
|
+
beta[0] = 1;
|
52
|
+
alpha[0] = r[0];
|
53
|
+
for (k = 1; k < NX; k++) {
|
54
|
+
beta[k] = beta[k - 1] - alpha[k - 1] * alpha[k - 1] * beta[k - 1];
|
55
|
+
sum[0][k] = r[k];
|
56
|
+
for (i = 0; i <= k - 1; i++) {
|
57
|
+
sum[i + 1][k] = sum[i][k] + r[k - i - 1] * y[i][k - 1];
|
58
|
+
}
|
59
|
+
alpha[k] = -sum[k][k] * beta[k];
|
60
|
+
alpha_k = alpha[k];
|
61
|
+
#pragma species kernel y[0:k-1,k-1:k-1]|element ^ y[k-1:0,k-1:k-1]|element -> y[0:k-1,k:k]|element
|
62
|
+
for (i = 0; i <= k - 1; i++) {
|
63
|
+
y[i][k] = y[i][k - 1] + alpha_k * y[k - i - 1][k - 1];
|
64
|
+
}
|
65
|
+
#pragma species endkernel durbin_k11
|
66
|
+
y[k][k] = alpha[k];
|
67
|
+
}
|
68
|
+
#pragma species kernel y[0:NX-1,NX-1:NX-1]|element -> out[0:NX-1]|element
|
69
|
+
for (i = 0; i < NX; i++) {
|
70
|
+
out[i] = y[i][NX - 1];
|
71
|
+
}
|
72
|
+
#pragma species endkernel durbin_k5
|
73
|
+
}
|
74
|
+
#pragma endscop
|
75
|
+
|
76
|
+
// Clean-up and exit the function
|
77
|
+
fflush(stdout);
|
78
|
+
return 0;
|
79
|
+
}
|
80
|
+
|
@@ -0,0 +1,71 @@
|
|
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/dynprog.c
|
17
|
+
// Author.............Cedric Nugteren
|
18
|
+
// Last modified on...29-May-2012
|
19
|
+
//
|
20
|
+
|
21
|
+
#include "common.h"
|
22
|
+
|
23
|
+
// This is 'dynprog', a 2D dynamic programming algorithm
|
24
|
+
int main(void) {
|
25
|
+
int i,j,k,iter;
|
26
|
+
|
27
|
+
// Declare arrays on the stack
|
28
|
+
float C[LENGTH][LENGTH];
|
29
|
+
float W[LENGTH][LENGTH];
|
30
|
+
float c[LENGTH][LENGTH];
|
31
|
+
float sum_c[LENGTH][LENGTH][LENGTH];
|
32
|
+
float out;
|
33
|
+
|
34
|
+
// Set the input data
|
35
|
+
for (i=0; i<LENGTH; i++) {
|
36
|
+
for (j=0; j<LENGTH; j++) {
|
37
|
+
C[i][j] = i*j % 2;
|
38
|
+
W[i][j] = ((float) i-j) / LENGTH;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
// Perform the computation
|
43
|
+
#pragma scop
|
44
|
+
{
|
45
|
+
for (iter = 0; iter < ITER; iter++) {
|
46
|
+
#pragma species kernel 0:0|void -> c[0:LENGTH-1,0:LENGTH-1]|element
|
47
|
+
for (i = 0; i <= LENGTH - 1; i++) {
|
48
|
+
for (j = 0; j <= LENGTH - 1; j++) {
|
49
|
+
c[i][j] = 0;
|
50
|
+
}
|
51
|
+
}
|
52
|
+
#pragma species endkernel dynprog_k2
|
53
|
+
for (i = 0; i <= LENGTH - 2; i++) {
|
54
|
+
for (j = i + 1; j <= LENGTH - 1; j++) {
|
55
|
+
sum_c[i][j][i] = 0;
|
56
|
+
for (k = i + 1; k <= j - 1; k++) {
|
57
|
+
sum_c[i][j][k] = sum_c[i][j][k - 1] + c[i][k] + c[k][j];
|
58
|
+
}
|
59
|
+
c[i][j] = sum_c[i][j][j - 1] + W[i][j];
|
60
|
+
}
|
61
|
+
}
|
62
|
+
out += c[0][LENGTH - 1];
|
63
|
+
}
|
64
|
+
}
|
65
|
+
#pragma endscop
|
66
|
+
|
67
|
+
// Clean-up and exit the function
|
68
|
+
fflush(stdout);
|
69
|
+
return 0;
|
70
|
+
}
|
71
|
+
|
@@ -0,0 +1,112 @@
|
|
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/fdtd-2d-apml.c
|
17
|
+
// Author.............Cedric Nugteren
|
18
|
+
// Last modified on...30-May-2012
|
19
|
+
//
|
20
|
+
|
21
|
+
#include "common.h"
|
22
|
+
|
23
|
+
// This is 'fdtd-2d-apml', a 2D finite different time domain kernel using an anisotropic perfectly matched layer
|
24
|
+
int main(void) {
|
25
|
+
int i,j,k;
|
26
|
+
int ix,iy,iz;
|
27
|
+
float clf, tmp;
|
28
|
+
float czm_iz, czp_iz;
|
29
|
+
float cymh_iy, cyph_iy;
|
30
|
+
|
31
|
+
// Declare arrays on the stack
|
32
|
+
float czm[CZ+1];
|
33
|
+
float czp[CZ+1];
|
34
|
+
float cxmh[CXM+1];
|
35
|
+
float cxph[CXM+1];
|
36
|
+
float cymh[CYM+1];
|
37
|
+
float cyph[CYM+1];
|
38
|
+
float Ry[CZ+1][CYM+1];
|
39
|
+
float Ax[CZ+1][CYM+1];
|
40
|
+
float Ex[CZ+1][CYM+1][CXM+1];
|
41
|
+
float Ey[CZ+1][CYM+1][CXM+1];
|
42
|
+
float Hz[CZ+1][CYM+1][CXM+1];
|
43
|
+
float Bza[CZ+1][CYM+1][CXM+1];
|
44
|
+
|
45
|
+
// Set the constants
|
46
|
+
float mui = 2341;
|
47
|
+
float ch = 42;
|
48
|
+
|
49
|
+
// Set the input data
|
50
|
+
for (i=0; i<=CZ; i++) {
|
51
|
+
czm[i] = ((float) i+1) / CXM;
|
52
|
+
czp[i] = ((float) i+2) / CXM;
|
53
|
+
}
|
54
|
+
for (i=0; i<=CXM; i++) {
|
55
|
+
cxmh[i] = ((float) i+3) / CXM;
|
56
|
+
cxph[i] = ((float) i+4) / CXM;
|
57
|
+
}
|
58
|
+
for (i=0; i<=CYM; i++) {
|
59
|
+
cymh[i] = ((float) i+5) / CXM;
|
60
|
+
cyph[i] = ((float) i+6) / CXM;
|
61
|
+
}
|
62
|
+
for (i=0; i<=CZ; i++) {
|
63
|
+
for (j=0; j<=CYM; j++) {
|
64
|
+
Ry[i][j] = ((float) i*(j+1) + 10) / CYM;
|
65
|
+
Ax[i][j] = ((float) i*(j+2) + 11) / CYM;
|
66
|
+
for (k=0; k<=CXM; k++) {
|
67
|
+
Ex[i][j][k] = ((float) i*(j+3) + k+1) / CXM;
|
68
|
+
Ey[i][j][k] = ((float) i*(j+4) + k+2) / CYM;
|
69
|
+
Hz[i][j][k] = ((float) i*(j+5) + k+3) / CZ;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
// Perform the computation
|
75
|
+
#pragma scop
|
76
|
+
{
|
77
|
+
for (iz = 0; iz < CZ; iz++) {
|
78
|
+
for (iy = 0; iy < CYM; iy++) {
|
79
|
+
czm_iz = czm[iz];
|
80
|
+
czp_iz = czp[iz];
|
81
|
+
cymh_iy = cymh[iy];
|
82
|
+
cyph_iy = cyph[iy];
|
83
|
+
for (ix = 0; ix < CXM; ix++) {
|
84
|
+
clf = Ex[iz][iy][ix] - Ex[iz][iy + 1][ix] + Ey[iz][iy][ix + 1] - Ey[iz][iy][ix];
|
85
|
+
tmp = cymh_iy / cyph_iy * Bza[iz][iy][ix] - ch / cyph_iy * clf;
|
86
|
+
Hz[iz][iy][ix] = Hz[iz][iy][ix] * (cxmh[ix] / cxph[ix]) + mui * czp_iz / cxph[ix] * tmp - mui * czm_iz / cxph[ix] * Bza[iz][iy][ix];
|
87
|
+
Bza[iz][iy][ix] = tmp;
|
88
|
+
}
|
89
|
+
clf = Ex[iz][iy][CXM] - Ex[iz][iy + 1][CXM] + Ry[iz][iy] - Ey[iz][iy][CXM];
|
90
|
+
tmp = cymh_iy / cyph_iy * Bza[iz][iy][CXM] - ch / cyph_iy * clf;
|
91
|
+
Hz[iz][iy][CXM] = cxmh[CXM] / cxph[CXM] * Hz[iz][iy][CXM] + mui * czp_iz / cxph[CXM] * tmp - mui * czm_iz / cxph[CXM] * Bza[iz][iy][CXM];
|
92
|
+
Bza[iz][iy][CXM] = tmp;
|
93
|
+
for (ix = 0; ix < CXM; ix++) {
|
94
|
+
clf = Ex[iz][CYM][ix] - Ax[iz][ix] + Ey[iz][CYM][ix + 1] - Ey[iz][CYM][ix];
|
95
|
+
tmp = cymh[CYM] / cyph_iy * Bza[iz][iy][ix] - ch / cyph_iy * clf;
|
96
|
+
Hz[iz][CYM][ix] = cxmh[ix] / cxph[ix] * Hz[iz][CYM][ix] + mui * czp_iz / cxph[ix] * tmp - mui * czm_iz / cxph[ix] * Bza[iz][CYM][ix];
|
97
|
+
Bza[iz][CYM][ix] = tmp;
|
98
|
+
}
|
99
|
+
clf = Ex[iz][CYM][CXM] - Ax[iz][CXM] + Ry[iz][CYM] - Ey[iz][CYM][CXM];
|
100
|
+
tmp = cymh[CYM] / cyph[CYM] * Bza[iz][CYM][CXM] - ch / cyph[CYM] * clf;
|
101
|
+
Hz[iz][CYM][CXM] = cxmh[CXM] / cxph[CXM] * Hz[iz][CYM][CXM] + mui * czp_iz / cxph[CXM] * tmp - mui * czm_iz / cxph[CXM] * Bza[iz][CYM][CXM];
|
102
|
+
Bza[iz][CYM][CXM] = tmp;
|
103
|
+
}
|
104
|
+
}
|
105
|
+
}
|
106
|
+
#pragma endscop
|
107
|
+
|
108
|
+
// Clean-up and exit the function
|
109
|
+
fflush(stdout);
|
110
|
+
return 0;
|
111
|
+
}
|
112
|
+
|
@@ -0,0 +1,78 @@
|
|
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/fdtd-2d.c
|
17
|
+
// Author.............Cedric Nugteren
|
18
|
+
// Last modified on...08-May-2012
|
19
|
+
//
|
20
|
+
|
21
|
+
#include "common.h"
|
22
|
+
|
23
|
+
// This is 'fdtd-2d', a 2D finite different time domain kernel
|
24
|
+
int main(void) {
|
25
|
+
int i,j,t;
|
26
|
+
|
27
|
+
// Declare arrays on the stack
|
28
|
+
float ex[NI][NJ];
|
29
|
+
float ey[NI][NJ];
|
30
|
+
float hz[NI][NJ];
|
31
|
+
|
32
|
+
// Set the input data
|
33
|
+
for (i=0; i<NI; i++) {
|
34
|
+
for (j=0; j<NJ; j++) {
|
35
|
+
ex[i][j] = ((float) i*(j+1)) / NI;
|
36
|
+
ey[i][j] = ((float) i*(j+2)) / NJ;
|
37
|
+
hz[i][j] = ((float) i*(j+3)) / NI;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
// Perform the computation
|
42
|
+
#pragma scop
|
43
|
+
{
|
44
|
+
for (t = 0; t < TSTEPS; t++) {
|
45
|
+
#pragma species kernel 0:0|void -> ey[0:0,0:NJ-1]|element
|
46
|
+
for (j = 0; j < NJ; j++) {
|
47
|
+
ey[0][j] = t;
|
48
|
+
}
|
49
|
+
#pragma species endkernel fdtd-2d_k2
|
50
|
+
#pragma species kernel ey[1:NI-1,0:NJ-1]|element ^ hz[0:NI-1,0:NJ-1]|neighbourhood(-1:0,0:0) -> ey[1:NI-1,0:NJ-1]|element
|
51
|
+
for (i = 1; i < NI; i++) {
|
52
|
+
for (j = 0; j < NJ; j++) {
|
53
|
+
ey[i][j] = ey[i][j] - 0.5 * (hz[i][j] - hz[i - 1][j]);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
#pragma species endkernel fdtd-2d_k3
|
57
|
+
#pragma species kernel ex[0:NI-1,1:NJ-1]|element ^ hz[0:NI-1,0:NJ-1]|neighbourhood(0:0,-1:0) -> ex[0:NI-1,1:NJ-1]|element
|
58
|
+
for (i = 0; i < NI; i++) {
|
59
|
+
for (j = 1; j < NJ; j++) {
|
60
|
+
ex[i][j] = ex[i][j] - 0.5 * (hz[i][j] - hz[i][j - 1]);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
#pragma species endkernel fdtd-2d_k4
|
64
|
+
#pragma species kernel hz[0:NI-2,0:NJ-2]|element ^ ex[0:NI-2,0:NJ-1]|neighbourhood(0:0,0:1) ^ ey[0:NI-1,0:NJ-2]|neighbourhood(0:1,0:0) -> hz[0:NI-2,0:NJ-2]|element
|
65
|
+
for (i = 0; i < NI - 1; i++) {
|
66
|
+
for (j = 0; j < NJ - 1; j++) {
|
67
|
+
hz[i][j] = hz[i][j] - 0.7 * (ex[i][j + 1] - ex[i][j] + ey[i + 1][j] - ey[i][j]);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
#pragma species endkernel fdtd-2d_k5
|
71
|
+
}
|
72
|
+
}
|
73
|
+
#pragma endscop
|
74
|
+
|
75
|
+
// Clean-up and exit the function
|
76
|
+
fflush(stdout);
|
77
|
+
return 0;
|
78
|
+
}
|
@@ -0,0 +1,54 @@
|
|
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/floyd-warshall.c
|
17
|
+
// Author.............Cedric Nugteren
|
18
|
+
// Last modified on...10-April-2012
|
19
|
+
//
|
20
|
+
|
21
|
+
#include "common.h"
|
22
|
+
|
23
|
+
// This is 'floyd-warshall', a graph analysis algorithm to find shortest paths in a weighted graph
|
24
|
+
int main(void) {
|
25
|
+
int i,j,k;
|
26
|
+
|
27
|
+
// Declare arrays on the stack
|
28
|
+
float path[N][N];
|
29
|
+
|
30
|
+
// Set the input data
|
31
|
+
for (i=0; i<N; i++) {
|
32
|
+
for (j=0; j<N; j++) {
|
33
|
+
path[i][j] = ((float) (i+1)*(j+1)) / N;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
// Perform the computation
|
38
|
+
#pragma scop
|
39
|
+
{
|
40
|
+
for (k = 0; k < N; k++) {
|
41
|
+
for (i = 0; i < N; i++) {
|
42
|
+
for (j = 0; j < N; j++) {
|
43
|
+
path[i][j] = path[i][j] < path[i][k] + path[k][j] ? path[i][j] : path[i][k] + path[k][j];
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}
|
48
|
+
#pragma endscop
|
49
|
+
|
50
|
+
// Clean-up and exit the function
|
51
|
+
fflush(stdout);
|
52
|
+
return 0;
|
53
|
+
}
|
54
|
+
|