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.
Files changed (211) hide show
  1. checksums.yaml +15 -0
  2. data/CHANGELOG +37 -0
  3. data/LICENSE +1 -1
  4. data/README.rdoc +95 -70
  5. data/Rakefile +78 -3
  6. data/VERSION +1 -1
  7. data/bin/adarwin +17 -0
  8. data/examples/benchmarks/PolyBench/2mm.c +104 -0
  9. data/examples/benchmarks/{3mm.c → PolyBench/3mm.c} +5 -2
  10. data/examples/benchmarks/{adi.c → PolyBench/adi.c} +6 -3
  11. data/examples/benchmarks/{atax.c → PolyBench/atax.c} +5 -2
  12. data/examples/benchmarks/{bicg.c → PolyBench/bicg.c} +5 -2
  13. data/examples/benchmarks/{cholesky.c → PolyBench/cholesky.c} +3 -0
  14. data/examples/benchmarks/{common.h → PolyBench/common.h} +2 -2
  15. data/examples/benchmarks/{correlation.c → PolyBench/correlation.c} +16 -7
  16. data/examples/benchmarks/{covariance.c → PolyBench/covariance.c} +7 -2
  17. data/examples/benchmarks/{doitgen.c → PolyBench/doitgen.c} +5 -2
  18. data/examples/benchmarks/{durbin.c → PolyBench/durbin.c} +3 -0
  19. data/examples/benchmarks/{dynprog.c → PolyBench/dynprog.c} +3 -0
  20. data/examples/benchmarks/{fdtd-2d-apml.c → PolyBench/fdtd-2d-apml.c} +3 -0
  21. data/examples/benchmarks/{fdtd-2d.c → PolyBench/fdtd-2d.c} +5 -2
  22. data/examples/benchmarks/{floyd-warshall.c → PolyBench/floyd-warshall.c} +3 -0
  23. data/examples/benchmarks/{gemm.c → PolyBench/gemm.c} +5 -2
  24. data/examples/benchmarks/{gemver.c → PolyBench/gemver.c} +5 -2
  25. data/examples/benchmarks/{gesummv.c → PolyBench/gesummv.c} +5 -2
  26. data/examples/benchmarks/{gramschmidt.c → PolyBench/gramschmidt.c} +3 -0
  27. data/examples/benchmarks/{jacobi-1d-imper.c → PolyBench/jacobi-1d-imper.c} +10 -2
  28. data/examples/benchmarks/{jacobi-2d-imper.c → PolyBench/jacobi-2d-imper.c} +8 -3
  29. data/examples/benchmarks/{lu.c → PolyBench/lu.c} +3 -0
  30. data/examples/benchmarks/{ludcmp.c → PolyBench/ludcmp.c} +3 -0
  31. data/examples/benchmarks/{mvt.c → PolyBench/mvt.c} +6 -2
  32. data/examples/benchmarks/{reg_detect.c → PolyBench/reg_detect.c} +3 -0
  33. data/examples/benchmarks/{seidel-2d.c → PolyBench/seidel-2d.c} +3 -0
  34. data/examples/benchmarks/{symm.c → PolyBench/symm.c} +3 -0
  35. data/examples/benchmarks/{syr2k.c → PolyBench/syr2k.c} +5 -2
  36. data/examples/benchmarks/{syrk.c → PolyBench/syrk.c} +7 -4
  37. data/examples/benchmarks/{trisolv.c → PolyBench/trisolv.c} +3 -0
  38. data/examples/benchmarks/{trmm.c → PolyBench/trmm.c} +3 -0
  39. data/examples/benchmarks/Rodinia/cfd.c +180 -0
  40. data/examples/benchmarks/Rodinia/hotspot.c +228 -0
  41. data/examples/benchmarks/Rodinia/kmeans.c +164 -0
  42. data/examples/benchmarks/Rodinia/srad.c +188 -0
  43. data/examples/benchmarks/other/common.h +0 -0
  44. data/examples/benchmarks/other/dct.c +58 -0
  45. data/examples/benchmarks/other/mm.c +50 -0
  46. data/examples/benchmarks/{saxpy.c → other/saxpy.c} +11 -7
  47. data/examples/chunk/{example1.c → example01.c} +0 -0
  48. data/examples/chunk/{example2.c → example02.c} +0 -0
  49. data/examples/chunk/{example3.c → example03.c} +0 -0
  50. data/examples/chunk/{example4.c → example04.c} +0 -0
  51. data/examples/chunk/{example5.c → example05.c} +0 -0
  52. data/examples/chunk/example06.c +45 -0
  53. data/examples/chunk/example07.c +49 -0
  54. data/examples/dependences/example01.c +42 -0
  55. data/examples/dependences/example02.c +40 -0
  56. data/examples/dependences/example03.c +43 -0
  57. data/examples/dependences/example04.c +44 -0
  58. data/examples/dependences/example05.c +42 -0
  59. data/examples/element/{example1.c → example01.c} +0 -0
  60. data/examples/element/{example2.c → example02.c} +2 -2
  61. data/examples/element/{example3.c → example03.c} +0 -0
  62. data/examples/element/{example4.c → example04.c} +0 -0
  63. data/examples/element/{example5.c → example05.c} +0 -0
  64. data/examples/element/{example6.c → example06.c} +0 -0
  65. data/examples/element/{example7.c → example07.c} +0 -0
  66. data/examples/element/{example8.c → example08.c} +0 -0
  67. data/examples/element/{example9.c → example09.c} +0 -0
  68. data/examples/element/example13.c +73 -0
  69. data/examples/fusion/example01.c +68 -0
  70. data/examples/fusion/example02.c +73 -0
  71. data/examples/fusion/example03.c +72 -0
  72. data/examples/fusion/example04.c +61 -0
  73. data/examples/fusion/example05.c +55 -0
  74. data/examples/neighbourhood/{example1.c → example01.c} +0 -0
  75. data/examples/neighbourhood/{example2.c → example02.c} +0 -0
  76. data/examples/neighbourhood/{example3.c → example03.c} +0 -0
  77. data/examples/neighbourhood/{example4.c → example04.c} +0 -0
  78. data/examples/neighbourhood/example05.c +44 -0
  79. data/examples/shared/{example1.c → example01.c} +0 -0
  80. data/examples/shared/{example2.c → example02.c} +0 -0
  81. data/examples/shared/{example3.c → example03.c} +0 -0
  82. data/examples/shared/{example4.c → example04.c} +0 -0
  83. data/examples/shared/{example5.c → example05.c} +0 -0
  84. data/lib/adarwin.rb +62 -0
  85. data/lib/adarwin/dependences.rb +268 -0
  86. data/lib/adarwin/engine.rb +277 -0
  87. data/lib/adarwin/fusion.rb +174 -0
  88. data/lib/adarwin/interval.rb +57 -0
  89. data/lib/adarwin/memorycopies.rb +153 -0
  90. data/lib/adarwin/nest.rb +225 -0
  91. data/lib/adarwin/preprocessor.rb +76 -0
  92. data/lib/adarwin/reference.rb +261 -0
  93. data/lib/bones.rb +4 -55
  94. data/lib/bones/algorithm.rb +77 -40
  95. data/lib/bones/copy.rb +26 -0
  96. data/lib/bones/engine.rb +147 -31
  97. data/lib/bones/preprocessor.rb +92 -12
  98. data/lib/bones/species.rb +4 -3
  99. data/lib/bones/structure.rb +14 -4
  100. data/lib/castaddon.rb +11 -6
  101. data/lib/castaddon/node_adarwin.rb +245 -0
  102. data/lib/castaddon/node_bones.rb +316 -0
  103. data/lib/castaddon/node_common.rb +289 -0
  104. data/lib/castaddon/transformations.rb +236 -0
  105. data/lib/common.rb +216 -0
  106. data/skeletons/CPU-C/common/header.c +3 -0
  107. data/skeletons/CPU-C/common/mem_global.c +0 -0
  108. data/skeletons/CPU-C/common/timer_2_start.c +11 -13
  109. data/skeletons/CPU-C/common/timer_2_stop.c +1 -1
  110. data/skeletons/CPU-C/common/timer_globals.c +29 -0
  111. data/skeletons/CPU-OPENCL-INTEL/common/globals.c +1 -1
  112. data/skeletons/CPU-OPENCL-INTEL/common/header.c +3 -0
  113. data/skeletons/CPU-OPENCL-INTEL/common/mem_copy_D2H.c +7 -2
  114. data/skeletons/CPU-OPENCL-INTEL/common/mem_copy_H2D.c +4 -2
  115. data/skeletons/CPU-OPENCL-INTEL/common/mem_global.c +0 -0
  116. data/skeletons/CPU-OPENCL-INTEL/common/mem_prologue.c +6 -3
  117. data/skeletons/CPU-OPENCL-INTEL/common/timer_2_stop.c +1 -1
  118. data/skeletons/CPU-OPENCL-INTEL/common/timer_globals.c +24 -0
  119. data/skeletons/CPU-OPENMP/common/globals.c +1 -0
  120. data/skeletons/CPU-OPENMP/common/header.c +3 -0
  121. data/skeletons/CPU-OPENMP/common/mem_global.c +0 -0
  122. data/skeletons/CPU-OPENMP/common/timer_1_start.c +0 -12
  123. data/skeletons/CPU-OPENMP/common/timer_2_stop.c +1 -1
  124. data/skeletons/CPU-OPENMP/common/timer_globals.c +33 -0
  125. data/skeletons/GPU-CUDA/common/globals.c +27 -3
  126. data/skeletons/GPU-CUDA/common/header.c +2 -0
  127. data/skeletons/GPU-CUDA/common/mem_async_alloc.c +6 -0
  128. data/skeletons/GPU-CUDA/common/mem_async_copyin.c +6 -0
  129. data/skeletons/GPU-CUDA/common/mem_async_copyout.c +6 -0
  130. data/skeletons/GPU-CUDA/common/mem_async_free.c +6 -0
  131. data/skeletons/GPU-CUDA/common/mem_copy_D2H.c +2 -1
  132. data/skeletons/GPU-CUDA/common/mem_copy_H2D.c +2 -1
  133. data/skeletons/GPU-CUDA/common/mem_global.c +1 -0
  134. data/skeletons/GPU-CUDA/common/mem_prologue.c +1 -2
  135. data/skeletons/GPU-CUDA/common/scheduler.c +86 -0
  136. data/skeletons/GPU-CUDA/common/timer_2_start.c +2 -4
  137. data/skeletons/GPU-CUDA/common/timer_2_stop.c +3 -5
  138. data/skeletons/GPU-CUDA/common/timer_globals.c +26 -0
  139. data/skeletons/GPU-CUDA/kernel/2xN-N-chunk-1-N-to-D-element.kernel.cu +5 -7
  140. data/skeletons/GPU-CUDA/kernel/N-N-chunk-1-N-to-D-element.kernel.cu +4 -6
  141. data/skeletons/GPU-CUDA/kernel/default.host.c +1 -1
  142. data/skeletons/GPU-CUDA/kernel/default.kernel.cu +6 -8
  143. data/skeletons/GPU-CUDA/skeletons.txt +6 -5
  144. data/{examples/benchmarks/2mm.c → test/examples/benchmarks/PolyBench/2mm_species.c} +19 -15
  145. data/test/examples/benchmarks/PolyBench/3mm_species.c +82 -0
  146. data/test/examples/benchmarks/PolyBench/adi_species.c +89 -0
  147. data/test/examples/benchmarks/PolyBench/atax_species.c +69 -0
  148. data/test/examples/benchmarks/PolyBench/bicg_species.c +71 -0
  149. data/test/examples/benchmarks/PolyBench/cholesky_species.c +68 -0
  150. data/test/examples/benchmarks/PolyBench/correlation_species.c +97 -0
  151. data/test/examples/benchmarks/PolyBench/covariance_species.c +78 -0
  152. data/test/examples/benchmarks/PolyBench/doitgen_species.c +67 -0
  153. data/test/examples/benchmarks/PolyBench/durbin_species.c +80 -0
  154. data/test/examples/benchmarks/PolyBench/dynprog_species.c +71 -0
  155. data/test/examples/benchmarks/PolyBench/fdtd-2d-apml_species.c +112 -0
  156. data/test/examples/benchmarks/PolyBench/fdtd-2d_species.c +78 -0
  157. data/test/examples/benchmarks/PolyBench/floyd-warshall_species.c +54 -0
  158. data/test/examples/benchmarks/PolyBench/gemm_species.c +73 -0
  159. data/test/examples/benchmarks/PolyBench/gemver_species.c +93 -0
  160. data/test/examples/benchmarks/PolyBench/gesummv_species.c +68 -0
  161. data/test/examples/benchmarks/PolyBench/gramschmidt_species.c +78 -0
  162. data/test/examples/benchmarks/PolyBench/jacobi-1d-imper_species.c +59 -0
  163. data/test/examples/benchmarks/PolyBench/jacobi-2d-imper_species.c +65 -0
  164. data/test/examples/benchmarks/PolyBench/lu_species.c +57 -0
  165. data/test/examples/benchmarks/PolyBench/ludcmp_species.c +89 -0
  166. data/test/examples/benchmarks/PolyBench/mvt_species.c +69 -0
  167. data/test/examples/benchmarks/PolyBench/reg_detect_species.c +86 -0
  168. data/test/examples/benchmarks/PolyBench/seidel-2d_species.c +53 -0
  169. data/test/examples/benchmarks/PolyBench/symm_species.c +74 -0
  170. data/test/examples/benchmarks/PolyBench/syr2k_species.c +69 -0
  171. data/test/examples/benchmarks/PolyBench/syrk_species.c +66 -0
  172. data/test/examples/benchmarks/PolyBench/trisolv_species.c +61 -0
  173. data/test/examples/benchmarks/PolyBench/trmm_species.c +61 -0
  174. data/test/examples/chunk/example01_species.c +58 -0
  175. data/test/examples/chunk/example02_species.c +48 -0
  176. data/test/examples/chunk/example03_species.c +63 -0
  177. data/test/examples/chunk/example04_species.c +58 -0
  178. data/test/examples/chunk/example05_species.c +56 -0
  179. data/test/examples/chunk/example06_species.c +49 -0
  180. data/test/examples/chunk/example07_species.c +53 -0
  181. data/test/examples/dependences/example01_species.c +46 -0
  182. data/test/examples/dependences/example02_species.c +44 -0
  183. data/test/examples/dependences/example03_species.c +47 -0
  184. data/test/examples/dependences/example04_species.c +48 -0
  185. data/test/examples/dependences/example05_species.c +46 -0
  186. data/test/examples/element/example01_species.c +50 -0
  187. data/test/examples/element/example02_species.c +50 -0
  188. data/test/examples/element/example03_species.c +62 -0
  189. data/test/examples/element/example04_species.c +53 -0
  190. data/test/examples/element/example05_species.c +59 -0
  191. data/test/examples/element/example06_species.c +50 -0
  192. data/test/examples/element/example07_species.c +58 -0
  193. data/test/examples/element/example08_species.c +49 -0
  194. data/test/examples/element/example09_species.c +52 -0
  195. data/test/examples/element/example10_species.c +54 -0
  196. data/test/examples/element/example11_species.c +51 -0
  197. data/test/examples/element/example12_species.c +60 -0
  198. data/test/examples/element/example13_species.c +77 -0
  199. data/test/examples/neighbourhood/example01_species.c +57 -0
  200. data/test/examples/neighbourhood/example02_species.c +56 -0
  201. data/test/examples/neighbourhood/example03_species.c +83 -0
  202. data/test/examples/neighbourhood/example04_species.c +55 -0
  203. data/test/examples/neighbourhood/example05_species.c +48 -0
  204. data/test/examples/shared/example01_species.c +49 -0
  205. data/test/examples/shared/example02_species.c +55 -0
  206. data/test/examples/shared/example03_species.c +59 -0
  207. data/test/examples/shared/example04_species.c +56 -0
  208. data/test/examples/shared/example05_species.c +52 -0
  209. metadata +193 -73
  210. data/examples/benchmarks/overview.txt +0 -38
  211. 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
+ }