bones-compiler 1.1.0
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.
- data/CHANGELOG +117 -0
- data/LICENSE +9 -0
- data/README.rdoc +126 -0
- data/Rakefile +107 -0
- data/VERSION +1 -0
- data/bin/bones +20 -0
- data/examples/applications/ffos.c +552 -0
- data/examples/benchmarks/2mm.c +70 -0
- data/examples/benchmarks/3mm.c +81 -0
- data/examples/benchmarks/adi.c +81 -0
- data/examples/benchmarks/atax.c +65 -0
- data/examples/benchmarks/bicg.c +67 -0
- data/examples/benchmarks/cholesky.c +64 -0
- data/examples/benchmarks/common.h +168 -0
- data/examples/benchmarks/correlation.c +97 -0
- data/examples/benchmarks/covariance.c +77 -0
- data/examples/benchmarks/doitgen.c +63 -0
- data/examples/benchmarks/durbin.c +76 -0
- data/examples/benchmarks/dynprog.c +67 -0
- data/examples/benchmarks/fdtd-2d-apml.c +114 -0
- data/examples/benchmarks/fdtd-2d.c +74 -0
- data/examples/benchmarks/floyd-warshall.c +50 -0
- data/examples/benchmarks/gemm.c +69 -0
- data/examples/benchmarks/gemver.c +89 -0
- data/examples/benchmarks/gesummv.c +64 -0
- data/examples/benchmarks/gramschmidt.c +84 -0
- data/examples/benchmarks/jacobi-1d-imper.c +55 -0
- data/examples/benchmarks/jacobi-2d-imper.c +61 -0
- data/examples/benchmarks/lu.c +57 -0
- data/examples/benchmarks/ludcmp.c +91 -0
- data/examples/benchmarks/mvt.c +65 -0
- data/examples/benchmarks/overview.txt +38 -0
- data/examples/benchmarks/reg_detect.c +82 -0
- data/examples/benchmarks/saxpy.c +45 -0
- data/examples/benchmarks/seidel-2d.c +51 -0
- data/examples/benchmarks/symm.c +74 -0
- data/examples/benchmarks/syr2k.c +65 -0
- data/examples/benchmarks/syrk.c +62 -0
- data/examples/benchmarks/trisolv.c +57 -0
- data/examples/benchmarks/trmm.c +57 -0
- data/examples/chunk/example1.c +54 -0
- data/examples/chunk/example2.c +44 -0
- data/examples/chunk/example3.c +59 -0
- data/examples/chunk/example4.c +55 -0
- data/examples/chunk/example5.c +52 -0
- data/examples/element/example1.c +46 -0
- data/examples/element/example10.c +50 -0
- data/examples/element/example11.c +47 -0
- data/examples/element/example12.c +56 -0
- data/examples/element/example2.c +46 -0
- data/examples/element/example3.c +58 -0
- data/examples/element/example4.c +49 -0
- data/examples/element/example5.c +56 -0
- data/examples/element/example6.c +46 -0
- data/examples/element/example7.c +54 -0
- data/examples/element/example8.c +45 -0
- data/examples/element/example9.c +48 -0
- data/examples/neighbourhood/example1.c +54 -0
- data/examples/neighbourhood/example2.c +55 -0
- data/examples/neighbourhood/example3.c +82 -0
- data/examples/neighbourhood/example4.c +52 -0
- data/examples/shared/example1.c +45 -0
- data/examples/shared/example2.c +51 -0
- data/examples/shared/example3.c +55 -0
- data/examples/shared/example4.c +52 -0
- data/examples/shared/example5.c +48 -0
- data/lib/bones.rb +266 -0
- data/lib/bones/algorithm.rb +541 -0
- data/lib/bones/engine.rb +386 -0
- data/lib/bones/preprocessor.rb +161 -0
- data/lib/bones/species.rb +196 -0
- data/lib/bones/structure.rb +94 -0
- data/lib/bones/variable.rb +169 -0
- data/lib/bones/variablelist.rb +72 -0
- data/lib/castaddon.rb +27 -0
- data/lib/castaddon/index.rb +40 -0
- data/lib/castaddon/node.rb +753 -0
- data/lib/castaddon/type.rb +37 -0
- data/skeletons/CPU-C/common/epilogue.c +0 -0
- data/skeletons/CPU-C/common/globals.c +17 -0
- data/skeletons/CPU-C/common/globals_kernel.c +1 -0
- data/skeletons/CPU-C/common/header.c +0 -0
- data/skeletons/CPU-C/common/mem_copy_D2H.c +0 -0
- data/skeletons/CPU-C/common/mem_copy_H2D.c +0 -0
- data/skeletons/CPU-C/common/mem_epilogue.c +0 -0
- data/skeletons/CPU-C/common/mem_prologue.c +3 -0
- data/skeletons/CPU-C/common/prologue.c +0 -0
- data/skeletons/CPU-C/common/timer_1_start.c +0 -0
- data/skeletons/CPU-C/common/timer_1_stop.c +0 -0
- data/skeletons/CPU-C/common/timer_2_start.c +20 -0
- data/skeletons/CPU-C/common/timer_2_stop.c +8 -0
- data/skeletons/CPU-C/kernel/default.host.c +3 -0
- data/skeletons/CPU-C/kernel/default.kernel.c +15 -0
- data/skeletons/CPU-C/skeletons.txt +24 -0
- data/skeletons/CPU-OPENCL-AMD/common/epilogue.c +6 -0
- data/skeletons/CPU-OPENCL-AMD/common/globals.c +155 -0
- data/skeletons/CPU-OPENCL-AMD/common/globals_kernel.c +4 -0
- data/skeletons/CPU-OPENCL-AMD/common/header.c +0 -0
- data/skeletons/CPU-OPENCL-AMD/common/mem_copy_D2H.c +8 -0
- data/skeletons/CPU-OPENCL-AMD/common/mem_copy_H2D.c +4 -0
- data/skeletons/CPU-OPENCL-AMD/common/mem_epilogue.c +3 -0
- data/skeletons/CPU-OPENCL-AMD/common/mem_prologue.c +6 -0
- data/skeletons/CPU-OPENCL-AMD/common/prologue.c +24 -0
- data/skeletons/CPU-OPENCL-AMD/common/timer_1_start.c +5 -0
- data/skeletons/CPU-OPENCL-AMD/common/timer_1_stop.c +9 -0
- data/skeletons/CPU-OPENCL-AMD/common/timer_2_start.c +16 -0
- data/skeletons/CPU-OPENCL-AMD/common/timer_2_stop.c +11 -0
- data/skeletons/CPU-OPENCL-AMD/kernel/D-element-to-1-shared.host.c +67 -0
- data/skeletons/CPU-OPENCL-AMD/kernel/D-element-to-1-shared.kernel.cl +72 -0
- data/skeletons/CPU-OPENCL-AMD/kernel/default.host.c +14 -0
- data/skeletons/CPU-OPENCL-AMD/kernel/default.kernel.cl +13 -0
- data/skeletons/CPU-OPENCL-AMD/skeletons.txt +26 -0
- data/skeletons/CPU-OPENCL-INTEL/common/epilogue.c +3 -0
- data/skeletons/CPU-OPENCL-INTEL/common/globals.c +154 -0
- data/skeletons/CPU-OPENCL-INTEL/common/globals_kernel.c +4 -0
- data/skeletons/CPU-OPENCL-INTEL/common/header.c +31 -0
- data/skeletons/CPU-OPENCL-INTEL/common/mem_copy_D2H.c +5 -0
- data/skeletons/CPU-OPENCL-INTEL/common/mem_copy_H2D.c +3 -0
- data/skeletons/CPU-OPENCL-INTEL/common/mem_epilogue.c +3 -0
- data/skeletons/CPU-OPENCL-INTEL/common/mem_prologue.c +4 -0
- data/skeletons/CPU-OPENCL-INTEL/common/prologue.c +24 -0
- data/skeletons/CPU-OPENCL-INTEL/common/timer_1_start.c +5 -0
- data/skeletons/CPU-OPENCL-INTEL/common/timer_1_stop.c +9 -0
- data/skeletons/CPU-OPENCL-INTEL/common/timer_2_start.c +16 -0
- data/skeletons/CPU-OPENCL-INTEL/common/timer_2_stop.c +11 -0
- data/skeletons/CPU-OPENCL-INTEL/kernel/D-element-to-1-shared.host.c +67 -0
- data/skeletons/CPU-OPENCL-INTEL/kernel/D-element-to-1-shared.kernel.cl +72 -0
- data/skeletons/CPU-OPENCL-INTEL/kernel/default.host.c +14 -0
- data/skeletons/CPU-OPENCL-INTEL/kernel/default.kernel.cl +13 -0
- data/skeletons/CPU-OPENCL-INTEL/skeletons.txt +26 -0
- data/skeletons/CPU-OPENMP/common/epilogue.c +0 -0
- data/skeletons/CPU-OPENMP/common/globals.c +37 -0
- data/skeletons/CPU-OPENMP/common/globals_kernel.c +6 -0
- data/skeletons/CPU-OPENMP/common/header.c +0 -0
- data/skeletons/CPU-OPENMP/common/mem_copy_D2H.c +0 -0
- data/skeletons/CPU-OPENMP/common/mem_copy_H2D.c +0 -0
- data/skeletons/CPU-OPENMP/common/mem_epilogue.c +0 -0
- data/skeletons/CPU-OPENMP/common/mem_prologue.c +3 -0
- data/skeletons/CPU-OPENMP/common/prologue.c +0 -0
- data/skeletons/CPU-OPENMP/common/timer_1_start.c +12 -0
- data/skeletons/CPU-OPENMP/common/timer_1_stop.c +0 -0
- data/skeletons/CPU-OPENMP/common/timer_2_start.c +18 -0
- data/skeletons/CPU-OPENMP/common/timer_2_stop.c +8 -0
- data/skeletons/CPU-OPENMP/kernel/D-element-to-1-shared.host.c +27 -0
- data/skeletons/CPU-OPENMP/kernel/D-element-to-1-shared.kernel.c +46 -0
- data/skeletons/CPU-OPENMP/kernel/default.host.c +11 -0
- data/skeletons/CPU-OPENMP/kernel/default.kernel.c +18 -0
- data/skeletons/CPU-OPENMP/skeletons.txt +26 -0
- data/skeletons/GPU-CUDA/common/epilogue.c +0 -0
- data/skeletons/GPU-CUDA/common/globals.c +31 -0
- data/skeletons/GPU-CUDA/common/globals_kernel.c +4 -0
- data/skeletons/GPU-CUDA/common/header.c +0 -0
- data/skeletons/GPU-CUDA/common/mem_copy_D2H.c +3 -0
- data/skeletons/GPU-CUDA/common/mem_copy_H2D.c +3 -0
- data/skeletons/GPU-CUDA/common/mem_epilogue.c +3 -0
- data/skeletons/GPU-CUDA/common/mem_prologue.c +5 -0
- data/skeletons/GPU-CUDA/common/prologue.c +6 -0
- data/skeletons/GPU-CUDA/common/timer_1_start.c +6 -0
- data/skeletons/GPU-CUDA/common/timer_1_stop.c +10 -0
- data/skeletons/GPU-CUDA/common/timer_2_start.c +6 -0
- data/skeletons/GPU-CUDA/common/timer_2_stop.c +10 -0
- data/skeletons/GPU-CUDA/kernel/2xN-N-chunk-1-N-to-D-element.host.c +3 -0
- data/skeletons/GPU-CUDA/kernel/2xN-N-chunk-1-N-to-D-element.kernel.cu +105 -0
- data/skeletons/GPU-CUDA/kernel/D-element-to-1-shared.host.c +3 -0
- data/skeletons/GPU-CUDA/kernel/D-element-to-1-shared.kernel.cu +119 -0
- data/skeletons/GPU-CUDA/kernel/D-element-to-N-shared.host.c +3 -0
- data/skeletons/GPU-CUDA/kernel/D-element-to-N-shared.kernel.cu +166 -0
- data/skeletons/GPU-CUDA/kernel/N-N-chunk-1-N-to-D-element.host.c +3 -0
- data/skeletons/GPU-CUDA/kernel/N-N-chunk-1-N-to-D-element.kernel.cu +69 -0
- data/skeletons/GPU-CUDA/kernel/N-neighbourhood-N-to-N-element.host.c +3 -0
- data/skeletons/GPU-CUDA/kernel/N-neighbourhood-N-to-N-element.kernel.cu +42 -0
- data/skeletons/GPU-CUDA/kernel/default.host.c +3 -0
- data/skeletons/GPU-CUDA/kernel/default.kernel.cu +28 -0
- data/skeletons/GPU-CUDA/skeletons.txt +30 -0
- data/skeletons/GPU-OPENCL-AMD/common/epilogue.c +3 -0
- data/skeletons/GPU-OPENCL-AMD/common/globals.c +155 -0
- data/skeletons/GPU-OPENCL-AMD/common/globals_kernel.c +4 -0
- data/skeletons/GPU-OPENCL-AMD/common/header.c +0 -0
- data/skeletons/GPU-OPENCL-AMD/common/mem_copy_D2H.c +4 -0
- data/skeletons/GPU-OPENCL-AMD/common/mem_copy_H2D.c +4 -0
- data/skeletons/GPU-OPENCL-AMD/common/mem_epilogue.c +3 -0
- data/skeletons/GPU-OPENCL-AMD/common/mem_prologue.c +3 -0
- data/skeletons/GPU-OPENCL-AMD/common/prologue.c +24 -0
- data/skeletons/GPU-OPENCL-AMD/common/timer_1_start.c +5 -0
- data/skeletons/GPU-OPENCL-AMD/common/timer_1_stop.c +9 -0
- data/skeletons/GPU-OPENCL-AMD/common/timer_2_start.c +4 -0
- data/skeletons/GPU-OPENCL-AMD/common/timer_2_stop.c +11 -0
- data/skeletons/GPU-OPENCL-AMD/kernel/D-element-to-1-shared.host.c +67 -0
- data/skeletons/GPU-OPENCL-AMD/kernel/D-element-to-1-shared.kernel.cl +72 -0
- data/skeletons/GPU-OPENCL-AMD/kernel/default.host.c +14 -0
- data/skeletons/GPU-OPENCL-AMD/kernel/default.kernel.cl +13 -0
- data/skeletons/GPU-OPENCL-AMD/skeletons.txt +26 -0
- data/skeletons/verification/header.c +2 -0
- data/skeletons/verification/timer_start.c +4 -0
- data/skeletons/verification/timer_stop.c +6 -0
- data/skeletons/verification/verify_results.c +23 -0
- data/test/bones/test_algorithm.rb +40 -0
- data/test/bones/test_common.rb +54 -0
- data/test/bones/test_preprocessor.rb +46 -0
- data/test/bones/test_species.rb +21 -0
- data/test/bones/test_variable.rb +84 -0
- data/test/test_helper.rb +106 -0
- metadata +303 -0
|
@@ -0,0 +1,97 @@
|
|
|
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/correlation.c
|
|
17
|
+
// Author.............Cedric Nugteren
|
|
18
|
+
// Last modified on...26-Jun-2012
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#include "common.h"
|
|
22
|
+
|
|
23
|
+
// This is 'correlation', a correlation computation algorithm
|
|
24
|
+
int main(void) {
|
|
25
|
+
int i,j,j1,j2;
|
|
26
|
+
float meanj;
|
|
27
|
+
|
|
28
|
+
// Declare arrays on the stack
|
|
29
|
+
float data[N][M];
|
|
30
|
+
float mean[M];
|
|
31
|
+
float stddev[M];
|
|
32
|
+
float symmat[M][M];
|
|
33
|
+
|
|
34
|
+
// Set the constants
|
|
35
|
+
float float_n = 1.2;
|
|
36
|
+
float eps = 0.1;
|
|
37
|
+
|
|
38
|
+
// Set the input data
|
|
39
|
+
for (i=0; i<N; i++) {
|
|
40
|
+
for (j=0; j<M; j++) {
|
|
41
|
+
data[i][j] = ((float) i*j) / M;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Perform the computation
|
|
46
|
+
// Determine the mean of the column vectors of the input data matrix
|
|
47
|
+
#pragma species kernel 0:N-1,0:M-1|chunk(0:N-1,0:0) -> 0:M-1|element
|
|
48
|
+
for (j=0; j<M; j++) {
|
|
49
|
+
mean[j] = 0.0;
|
|
50
|
+
for (i=0; i<N; i++) {
|
|
51
|
+
mean[j] += data[i][j];
|
|
52
|
+
}
|
|
53
|
+
mean[j] /= float_n;
|
|
54
|
+
}
|
|
55
|
+
#pragma species endkernel correlation-part1
|
|
56
|
+
#pragma species kernel 0:M-1|element ^ 0:N-1,0:M-1|chunk(0:N-1,0:0) -> 0:M-1|element
|
|
57
|
+
// Determine the standard deviations of the column vectors of the input data matrix
|
|
58
|
+
for (j=0; j<M; j++) {
|
|
59
|
+
stddev[j] = 0.0;
|
|
60
|
+
meanj = mean[j];
|
|
61
|
+
for (i=0; i<N; i++) {
|
|
62
|
+
stddev[j] += (data[i][j] - meanj) * (data[i][j] - meanj);
|
|
63
|
+
}
|
|
64
|
+
stddev[j] /= float_n;
|
|
65
|
+
stddev[j] = sqrt(stddev[j]);
|
|
66
|
+
stddev[j] = stddev[j] <= eps ? 1.0 : stddev[j];
|
|
67
|
+
}
|
|
68
|
+
#pragma species endkernel correlation-part2
|
|
69
|
+
#pragma species kernel 0:N-1,0:M-1|element ^ 0:M-1|element ^ 0:M-1|element -> 0:N-1,0:M-1|element
|
|
70
|
+
// Center and reduce the column vectors
|
|
71
|
+
for (i=0; i<N; i++) {
|
|
72
|
+
for (j=0; j<M; j++) {
|
|
73
|
+
data[i][j] -= mean[j];
|
|
74
|
+
data[i][j] /= sqrt(float_n) * stddev[j];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
#pragma species endkernel correlation-part3
|
|
78
|
+
// Calculate the MxM correlation matrix
|
|
79
|
+
for (j1=0; j1<M-1; j1++) {
|
|
80
|
+
symmat[j1][j1] = 1.0;
|
|
81
|
+
#pragma species kernel 0:N-1,j1:j1|full ^ 0:N-1,j1+1:M-1|chunk(0:N-1,0:0) -> j1+1:M-1,j1:j1|element ^ j1:j1,j1+1:M-1|element
|
|
82
|
+
for (j2=j1+1; j2<M; j2++) {
|
|
83
|
+
symmat[j1][j2] = 0.0;
|
|
84
|
+
for (i = 0; i<N; i++) {
|
|
85
|
+
symmat[j1][j2] += (data[i][j1] * data[i][j2]);
|
|
86
|
+
}
|
|
87
|
+
symmat[j2][j1] = symmat[j1][j2];
|
|
88
|
+
}
|
|
89
|
+
#pragma species endkernel correlation-part4
|
|
90
|
+
}
|
|
91
|
+
symmat[M-1][M-1] = 1.0;
|
|
92
|
+
|
|
93
|
+
// Clean-up and exit the function
|
|
94
|
+
fflush(stdout);
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
@@ -0,0 +1,77 @@
|
|
|
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/covariance.c
|
|
17
|
+
// Author.............Cedric Nugteren
|
|
18
|
+
// Last modified on...26-Jun-2012
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#include "common.h"
|
|
22
|
+
|
|
23
|
+
// This is 'covariance', a covariance computation algorithm
|
|
24
|
+
int main(void) {
|
|
25
|
+
int i,j,j1,j2;
|
|
26
|
+
|
|
27
|
+
// Declare arrays on the stack
|
|
28
|
+
float data[N][M];
|
|
29
|
+
float mean[M];
|
|
30
|
+
float symmat[M][M];
|
|
31
|
+
|
|
32
|
+
// Set the constants
|
|
33
|
+
float float_n = 1.2;
|
|
34
|
+
|
|
35
|
+
// Set the input data
|
|
36
|
+
for (i=0; i<N; i++) {
|
|
37
|
+
for (j=0; j<M; j++) {
|
|
38
|
+
data[i][j] = ((float) i*j) / M;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Perform the computation
|
|
43
|
+
#pragma species kernel 0:N-1,0:M-1|chunk(0:N-1,0:0) -> 0:M-1|element
|
|
44
|
+
// Determine the mean of the column vectors of the input data matrix
|
|
45
|
+
for (j=0; j<M; j++) {
|
|
46
|
+
mean[j] = 0.0;
|
|
47
|
+
for (i=0; i<N; i++) {
|
|
48
|
+
mean[j] += data[i][j];
|
|
49
|
+
}
|
|
50
|
+
mean[j] /= float_n;
|
|
51
|
+
}
|
|
52
|
+
#pragma species endkernel covariance-part1
|
|
53
|
+
#pragma species kernel 0:N-1,0:M-1|element ^ 0:M-1|element -> 0:N-1,0:M-1|element
|
|
54
|
+
// Center the column vectors
|
|
55
|
+
for (i=0; i<N; i++) {
|
|
56
|
+
for (j=0; j<M; j++) {
|
|
57
|
+
data[i][j] -= mean[j];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
#pragma species endkernel covariance-part2
|
|
61
|
+
// Calculate the MxM covariance matrix
|
|
62
|
+
for (j1=0; j1<M; j1++) {
|
|
63
|
+
#pragma species kernel 0:N-1,j1:j1|full ^ 0:N-1,j1:M-1|chunk(0:N-1,0:0) -> j1:M-1,j1:j1|element ^ j1:j1,j1:M-1|element
|
|
64
|
+
for (j2=j1; j2<M; j2++) {
|
|
65
|
+
symmat[j1][j2] = 0.0;
|
|
66
|
+
for (i=0; i<N; i++) {
|
|
67
|
+
symmat[j1][j2] += data[i][j1] * data[i][j2];
|
|
68
|
+
}
|
|
69
|
+
symmat[j2][j1] = symmat[j1][j2];
|
|
70
|
+
}
|
|
71
|
+
#pragma species endkernel covariance-part3
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Clean-up and exit the function
|
|
75
|
+
fflush(stdout);
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
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 species kernel 0:NR-1,0:NQ-1,0:NP-1|chunk(0:0,0:0,0:NP-1) ^ 0:NP-1,0:NP-1|chunk(0:NP-1,0:0) -> 0:NR-1,0:NQ-1,0:NP-1|element
|
|
38
|
+
for (r=0; r<NR; r++) {
|
|
39
|
+
for (q=0; q<NQ; q++) {
|
|
40
|
+
for (p=0; p<NP; p++) {
|
|
41
|
+
sum[r][q][p] = 0;
|
|
42
|
+
for (s=0; s<NP; s++) {
|
|
43
|
+
sum[r][q][p] = sum[r][q][p] + A[r][q][s] * C4[s][p];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
#pragma species endkernel doitgen-part1
|
|
49
|
+
#pragma species kernel 0:NR-1,0:NQ-1,0:NP-1|element -> 0:NR-1,0:NQ-1,0:NP-1|element
|
|
50
|
+
for (r=0; r<NR; r++) {
|
|
51
|
+
for (q=0; q<NQ; q++) {
|
|
52
|
+
for (p=0; p<NP; p++) {
|
|
53
|
+
A[r][q][p] = sum[r][q][p];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
#pragma species endkernel doitgen-part2
|
|
58
|
+
|
|
59
|
+
// Clean-up and exit the function
|
|
60
|
+
fflush(stdout);
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
|
|
@@ -0,0 +1,76 @@
|
|
|
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
|
+
y[0][0] = r[0];
|
|
49
|
+
beta[0] = 1;
|
|
50
|
+
alpha[0] = r[0];
|
|
51
|
+
for (k=1; k<NX; k++) {
|
|
52
|
+
beta[k] = beta[k-1] - alpha[k-1] * alpha[k-1] * beta[k-1];
|
|
53
|
+
sum[0][k] = r[k];
|
|
54
|
+
for (i=0; i<=k-1; i++) {
|
|
55
|
+
sum[i+1][k] = sum[i][k] + r[k-i-1] * y[i][k-1];
|
|
56
|
+
}
|
|
57
|
+
alpha[k] = -sum[k][k] * beta[k];
|
|
58
|
+
alpha_k = alpha[k];
|
|
59
|
+
#pragma species kernel 0:k-1,k-1:k-1|element ^ k-1:0,k-1:k-1|element -> 0:k-1,k:k|element
|
|
60
|
+
for (i=0; i<=k-1; i++) {
|
|
61
|
+
y[i][k] = y[i][k-1] + alpha_k * y[k-i-1][k-1];
|
|
62
|
+
}
|
|
63
|
+
#pragma species endkernel durbin-part1
|
|
64
|
+
y[k][k] = alpha[k];
|
|
65
|
+
}
|
|
66
|
+
#pragma species kernel 0:NX-1,NX-1:NX-1|element -> 0:NX-1|element
|
|
67
|
+
for (i=0; i<NX; i++) {
|
|
68
|
+
out[i] = y[i][NX-1];
|
|
69
|
+
}
|
|
70
|
+
#pragma species endkernel durbin-part2
|
|
71
|
+
|
|
72
|
+
// Clean-up and exit the function
|
|
73
|
+
fflush(stdout);
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
|
|
@@ -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/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
|
+
for (iter=0; iter<ITER; iter++) {
|
|
44
|
+
#pragma species kernel 0:0|void -> 0:LENGTH-1,0:LENGTH-1|element
|
|
45
|
+
for (i=0; i<=LENGTH-1; i++) {
|
|
46
|
+
for (j=0; j<=LENGTH-1; j++) {
|
|
47
|
+
c[i][j] = 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
#pragma species endkernel dynprog
|
|
51
|
+
for (i=0; i<=LENGTH-2; i++) {
|
|
52
|
+
for (j=i+1; j<=LENGTH-1; j++) {
|
|
53
|
+
sum_c[i][j][i] = 0;
|
|
54
|
+
for (k=i+1; k<=j-1; k++) {
|
|
55
|
+
sum_c[i][j][k] = sum_c[i][j][k - 1] + c[i][k] + c[k][j];
|
|
56
|
+
}
|
|
57
|
+
c[i][j] = sum_c[i][j][j-1] + W[i][j];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
out += c[0][LENGTH-1];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Clean-up and exit the function
|
|
64
|
+
fflush(stdout);
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
@@ -0,0 +1,114 @@
|
|
|
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
|
+
for (iz=0; iz<CZ; iz++) {
|
|
76
|
+
for (iy=0; iy<CYM; iy++) {
|
|
77
|
+
czm_iz = czm[iz];
|
|
78
|
+
czp_iz = czp[iz];
|
|
79
|
+
cymh_iy = cymh[iy];
|
|
80
|
+
cyph_iy = cyph[iy];
|
|
81
|
+
|
|
82
|
+
#pragma species kernel iz:iz,iy:iy+1,0:CXM-1|chunk(0:0,0:1,0:0) ^ iz:iz,iy:iy,0:CXM-1|neighbourhood(0:0,0:0,0:1) ^ iz:iz,iy:iy,0:CXM-1|element ^ iz:iz,iy:iy,0:CXM-1|element ^ 0:CXM-1|element ^ 0:CXM-1|element -> iz:iz,iy:iy,0:CXM-1|element ^ iz:iz,iy:iy,0:CXM-1|element
|
|
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
|
+
#pragma species endkernel fdtd-2d-apml
|
|
90
|
+
|
|
91
|
+
clf = Ex[iz][iy][CXM] - Ex[iz][iy+1][CXM] + Ry[iz][iy] - Ey[iz][iy][CXM];
|
|
92
|
+
tmp = (cymh_iy/cyph_iy) * Bza[iz][iy][CXM] - (ch/cyph_iy) * clf;
|
|
93
|
+
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];
|
|
94
|
+
Bza[iz][iy][CXM] = tmp;
|
|
95
|
+
|
|
96
|
+
for (ix=0; ix<CXM; ix++) {
|
|
97
|
+
clf = Ex[iz][CYM][ix] - Ax[iz][ix] + Ey[iz][CYM][ix+1] - Ey[iz][CYM][ix];
|
|
98
|
+
tmp = (cymh[CYM]/cyph_iy) * Bza[iz][iy][ix] - (ch/cyph_iy) * clf;
|
|
99
|
+
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];
|
|
100
|
+
Bza[iz][CYM][ix] = tmp;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
clf = Ex[iz][CYM][CXM] - Ax[iz][CXM] + Ry[iz][CYM] - Ey[iz][CYM][CXM];
|
|
104
|
+
tmp = (cymh[CYM]/cyph[CYM]) * Bza[iz][CYM][CXM] - (ch/cyph[CYM]) * clf;
|
|
105
|
+
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];
|
|
106
|
+
Bza[iz][CYM][CXM] = tmp;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Clean-up and exit the function
|
|
111
|
+
fflush(stdout);
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
|