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.
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
+ }