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,73 @@
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/gemm.c
17
+ // Author.............Cedric Nugteren
18
+ // Last modified on...04-April-2012
19
+ //
20
+
21
+ #include "common.h"
22
+
23
+ // This is 'gemm', a general matrix multiplication kernel
24
+ int main(void) {
25
+ int i,j,k;
26
+
27
+ // Declare arrays on the stack
28
+ float A[NI][NK];
29
+ float B[NK][NJ];
30
+ float C[NI][NJ];
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<NK; j++) {
39
+ A[i][j] = ((float) i*j) / NI;
40
+ }
41
+ }
42
+ for (i=0; i<NK; i++) {
43
+ for (j=0; j<NJ; j++) {
44
+ B[i][j] = ((float) i*j) / NI;
45
+ }
46
+ }
47
+ for (i=0; i<NI; i++) {
48
+ for (j=0; j<NJ; j++) {
49
+ C[i][j] = ((float) i*j) / NI;
50
+ }
51
+ }
52
+
53
+ // Perform the computation (C := alpha*A*B + beta*C)
54
+ #pragma scop
55
+ {
56
+ #pragma species kernel C[0:NI-1,0:NJ-1]|element ^ A[0:NI-1,0:NK-1]|chunk(0:0,0:NK-1) ^ B[0:NK-1,0:NJ-1]|chunk(0:NK-1,0:0) -> C[0:NI-1,0:NJ-1]|element
57
+ for (i = 0; i < NI; i++) {
58
+ for (j = 0; j < NJ; j++) {
59
+ C[i][j] *= beta;
60
+ for (k = 0; k < NK; k++) {
61
+ C[i][j] += alpha * A[i][k] * B[k][j];
62
+ }
63
+ }
64
+ }
65
+ #pragma species endkernel gemm_k1
66
+ }
67
+ #pragma endscop
68
+
69
+ // Clean-up and exit the function
70
+ fflush(stdout);
71
+ return 0;
72
+ }
73
+
@@ -0,0 +1,93 @@
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/gemver.c
17
+ // Author.............Cedric Nugteren
18
+ // Last modified on...04-April-2012
19
+ //
20
+
21
+ #include "common.h"
22
+
23
+ // This is 'gemver', a general matrix vector multiplication and matrix addition kernel
24
+ int main(void) {
25
+ int i,j;
26
+
27
+ // Declare arrays on the stack
28
+ float A[NX][NX];
29
+ float u1[NX];
30
+ float u2[NX];
31
+ float v1[NX];
32
+ float v2[NX];
33
+ float w[NX];
34
+ float x[NX];
35
+ float y[NX];
36
+ float z[NX];
37
+
38
+ // Set the constants
39
+ int alpha = 43532;
40
+ int beta = 12313;
41
+
42
+ // Set the input data
43
+ for (i=0; i<NX; i++) {
44
+ u1[i] = i;
45
+ u2[i] = (i+1)/NX/2.0;
46
+ v1[i] = (i+1)/NX/4.0;
47
+ v2[i] = (i+1)/NX/6.0;
48
+ w[i] = 0.0;
49
+ x[i] = 0.0;
50
+ y[i] = (i+1)/NX/8.0;
51
+ z[i] = (i+1)/NX/9.0;
52
+ for (j=0; j<NX; j++) {
53
+ A[i][j] = ((float) i*j) / NX;
54
+ }
55
+ }
56
+
57
+ // Perform the computation
58
+ #pragma scop
59
+ {
60
+ #pragma species kernel A[0:NX-1,0:NX-1]|element ^ u1[0:NX-1]|element ^ v1[0:NX-1]|element ^ u2[0:NX-1]|element ^ v2[0:NX-1]|element -> A[0:NX-1,0:NX-1]|element
61
+ for (i = 0; i < NX; i++) {
62
+ for (j = 0; j < NX; j++) {
63
+ A[i][j] = A[i][j] + u1[i] * v1[j] + u2[i] * v2[j];
64
+ }
65
+ }
66
+ #pragma species endkernel gemver_k1
67
+ #pragma species kernel x[0:NX-1]|element ^ A[0:NX-1,0:NX-1]|chunk(0:NX-1,0:0) ^ y[0:NX-1]|full -> x[0:NX-1]|element
68
+ for (i = 0; i < NX; i++) {
69
+ for (j = 0; j < NX; j++) {
70
+ x[i] = x[i] + beta * A[j][i] * y[j];
71
+ }
72
+ }
73
+ #pragma species endkernel gemver_k2
74
+ #pragma species kernel x[0:NX-1]|element ^ z[0:NX-1]|element -> x[0:NX-1]|element
75
+ for (i = 0; i < NX; i++) {
76
+ x[i] = x[i] + z[i];
77
+ }
78
+ #pragma species endkernel gemver_k3
79
+ #pragma species kernel w[0:NX-1]|element ^ A[0:NX-1,0:NX-1]|chunk(0:0,0:NX-1) ^ x[0:NX-1]|full -> w[0:NX-1]|element
80
+ for (i = 0; i < NX; i++) {
81
+ for (j = 0; j < NX; j++) {
82
+ w[i] = w[i] + alpha * A[i][j] * x[j];
83
+ }
84
+ }
85
+ #pragma species endkernel gemver_k4
86
+ }
87
+ #pragma endscop
88
+
89
+ // Clean-up and exit the function
90
+ fflush(stdout);
91
+ return 0;
92
+ }
93
+
@@ -0,0 +1,68 @@
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/gesummv.c
17
+ // Author.............Cedric Nugteren
18
+ // Last modified on...20-Jul-2012
19
+ //
20
+
21
+ #include "common.h"
22
+
23
+ // This is 'gesummv', a general scalar, vector and matrix multiplication kernel
24
+ int main(void) {
25
+ int i,j;
26
+
27
+ // Declare arrays on the stack
28
+ float A[NX][NX];
29
+ float B[NX][NX];
30
+ float x[NX];
31
+ float y[NX];
32
+ float tmp[NX];
33
+
34
+ // Set the constants
35
+ float alpha = 43532;
36
+ float beta = 12313;
37
+
38
+ // Set the input data
39
+ for (i=0; i<NX; i++) {
40
+ x[i] = ((float) i) / NX;
41
+ for (j=0; j<NX; j++) {
42
+ A[i][j] = ((float) i*(j+1)) / NX;
43
+ B[i][j] = ((float) (i+3)*j) / NX;
44
+ }
45
+ }
46
+
47
+ // Perform the computation
48
+ #pragma scop
49
+ {
50
+ #pragma species kernel A[0:NX-1,0:NX-1]|chunk(0:0,0:NX-1) ^ x[0:NX-1]|full ^ B[0:NX-1,0:NX-1]|chunk(0:0,0:NX-1) -> tmp[0:NX-1]|element ^ y[0:NX-1]|element
51
+ for (i = 0; i < NX; i++) {
52
+ tmp[i] = 0;
53
+ y[i] = 0;
54
+ for (j = 0; j < NX; j++) {
55
+ tmp[i] = A[i][j] * x[j] + tmp[i];
56
+ y[i] = B[i][j] * x[j] + y[i];
57
+ }
58
+ y[i] = alpha * tmp[i] + beta * y[i];
59
+ }
60
+ #pragma species endkernel gesummv_k1
61
+ }
62
+ #pragma endscop
63
+
64
+ // Clean-up and exit the function
65
+ fflush(stdout);
66
+ return 0;
67
+ }
68
+
@@ -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/gramschmidt.c
17
+ // Author.............Cedric Nugteren
18
+ // Last modified on...26-Jun-2012
19
+ //
20
+
21
+ #include "common.h"
22
+
23
+ // This is 'gramschmidt', an algorithm for the Gram-Schmidt process
24
+ int main(void) {
25
+ int i,j,k;
26
+ float nrm[1];
27
+ float rkk;
28
+ float rkj;
29
+
30
+ // Declare arrays on the stack
31
+ float A[NI][NJ];
32
+ float R[NJ][NJ];
33
+ float Q[NI][NJ];
34
+
35
+ // Set the input data
36
+ for (i=0; i<NI; i++) {
37
+ for (j=0; j<NJ; j++) {
38
+ A[i][j] = ((float) i*j) / NI + 1;
39
+ Q[i][j] = ((float) i*(j+1)) / NJ;
40
+ }
41
+ }
42
+ for (i=0; i<NJ; i++) {
43
+ for (j=0; j<NJ; j++) {
44
+ R[i][j] = ((float) i*(j+2)) / NJ;
45
+ }
46
+ }
47
+
48
+ // Perform the computation
49
+ #pragma scop
50
+ {
51
+ for (k = 0; k < NJ; k++) {
52
+ nrm[0] = 0;
53
+ for (i = 0; i < NI; i++) {
54
+ nrm[0] += A[i][k] * A[i][k];
55
+ }
56
+ R[k][k] = sqrt(nrm[0]);
57
+ rkk = R[k][k];
58
+ for (i = 0; i < NI; i++) {
59
+ Q[i][k] = A[i][k] / rkk;
60
+ }
61
+ for (j = k + 1; j < NJ; j++) {
62
+ R[k][j] = 0;
63
+ for (i = 0; i < NI; i++) {
64
+ R[k][j] += Q[i][k] * A[i][j];
65
+ }
66
+ rkj = R[k][j];
67
+ for (i = 0; i < NI; i++) {
68
+ A[i][j] = A[i][j] - Q[i][k] * rkj;
69
+ }
70
+ }
71
+ }
72
+ }
73
+ #pragma endscop
74
+
75
+ // Clean-up and exit the function
76
+ fflush(stdout);
77
+ return 0;
78
+ }
@@ -0,0 +1,59 @@
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/jacobi-1d-imper.c
17
+ // Author.............Cedric Nugteren
18
+ // Last modified on...03-April-2012
19
+ //
20
+
21
+ #include "common.h"
22
+
23
+ // This is 'jacobi-1d-imper', a 1D Jacobi stencil computation
24
+ int main(void) {
25
+ int i,j,t;
26
+
27
+ // Declare arrays on the stack
28
+ float A[LARGE_N];
29
+ float B[LARGE_N];
30
+
31
+ // Set the input data
32
+ for (i=0; i<LARGE_N; i++) {
33
+ A[i] = ((float) i+2) / LARGE_N;
34
+ B[i] = ((float) i+3) / LARGE_N;
35
+ }
36
+
37
+ // Perform the computation
38
+ #pragma scop
39
+ {
40
+ for (t = 0; t < TSTEPS; t++) {
41
+ #pragma species kernel A[0:LARGE_N-1]|neighbourhood(-1:1) -> B[1:LARGE_N-2]|element
42
+ for (i = 1; i < LARGE_N - 1; i++) {
43
+ B[i] = 0.33333 * (A[i - 1] + A[i] + A[i + 1]);
44
+ }
45
+ #pragma species endkernel jacobi-1d-imper_k2
46
+ #pragma species kernel B[1:LARGE_N-2]|element -> A[1:LARGE_N-2]|element
47
+ for (j = 1; j < LARGE_N - 1; j++) {
48
+ A[j] = B[j];
49
+ }
50
+ #pragma species endkernel jacobi-1d-imper_k3
51
+ }
52
+ }
53
+ #pragma endscop
54
+
55
+ // Clean-up and exit the function
56
+ fflush(stdout);
57
+ return 0;
58
+ }
59
+
@@ -0,0 +1,65 @@
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/jacobi-2d-imper.c
17
+ // Author.............Cedric Nugteren
18
+ // Last modified on...03-April-2012
19
+ //
20
+
21
+ #include "common.h"
22
+
23
+ // This is 'jacobi-2d-imper', a 2D Jacobi stencil computation
24
+ int main(void) {
25
+ int i,j,t;
26
+
27
+ // Declare arrays on the stack
28
+ float A[N][N];
29
+ float B[N][N];
30
+
31
+ // Set the input data
32
+ for (i=0; i<N; i++) {
33
+ for (j=0; j<N; j++) {
34
+ A[i][j] = ((float) i*(j+2) + 2) / N;
35
+ B[i][j] = ((float) i*(j+3) + 3) / N;
36
+ }
37
+ }
38
+
39
+ // Perform the computation
40
+ #pragma scop
41
+ {
42
+ for (t = 0; t < TSTEPS; t++) {
43
+ #pragma species kernel A[0:N-1,0:N-1]|neighbourhood(-1:1,-1:1) -> B[1:N-2,1:N-2]|element
44
+ for (i = 1; i < N - 1; i++) {
45
+ for (j = 1; j < N - 1; j++) {
46
+ B[i][j] = 0.2 * (A[i][j] + A[i][j - 1] + A[i][1 + j] + A[1 + i][j] + A[i - 1][j]);
47
+ }
48
+ }
49
+ #pragma species endkernel jacobi-2d-imper_k2
50
+ #pragma species kernel B[1:N-2,1:N-2]|element -> A[1:N-2,1:N-2]|element
51
+ for (i = 1; i < N - 1; i++) {
52
+ for (j = 1; j < N - 1; j++) {
53
+ A[i][j] = B[i][j];
54
+ }
55
+ }
56
+ #pragma species endkernel jacobi-2d-imper_k3
57
+ }
58
+ }
59
+ #pragma endscop
60
+
61
+ // Clean-up and exit the function
62
+ fflush(stdout);
63
+ return 0;
64
+ }
65
+
@@ -0,0 +1,57 @@
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/lu.c
17
+ // Author.............Cedric Nugteren
18
+ // Last modified on...26-Jun-2012
19
+ //
20
+
21
+ #include "common.h"
22
+
23
+ // This is 'lu', an LU decomposition kernel
24
+ int main(void) {
25
+ int i,j,k;
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+1)*(j+1)) / N;
34
+ }
35
+ }
36
+
37
+ // Perform the computation
38
+ #pragma scop
39
+ {
40
+ for (k = 0; k < N; k++) {
41
+ for (j = k + 1; j < N; j++) {
42
+ A[k][j] = A[k][j] / A[k][k];
43
+ }
44
+ for (i = k + 1; i < N; i++) {
45
+ for (j = k + 1; j < N; j++) {
46
+ A[i][j] = A[i][j] - A[i][k] * A[k][j];
47
+ }
48
+ }
49
+ }
50
+ }
51
+ #pragma endscop
52
+
53
+ // Clean-up and exit the function
54
+ fflush(stdout);
55
+ return 0;
56
+ }
57
+