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.
- checksums.yaml +15 -0
- data/CHANGELOG +37 -0
- data/LICENSE +1 -1
- data/README.rdoc +95 -70
- data/Rakefile +78 -3
- data/VERSION +1 -1
- data/bin/adarwin +17 -0
- data/examples/benchmarks/PolyBench/2mm.c +104 -0
- data/examples/benchmarks/{3mm.c → PolyBench/3mm.c} +5 -2
- data/examples/benchmarks/{adi.c → PolyBench/adi.c} +6 -3
- data/examples/benchmarks/{atax.c → PolyBench/atax.c} +5 -2
- data/examples/benchmarks/{bicg.c → PolyBench/bicg.c} +5 -2
- data/examples/benchmarks/{cholesky.c → PolyBench/cholesky.c} +3 -0
- data/examples/benchmarks/{common.h → PolyBench/common.h} +2 -2
- data/examples/benchmarks/{correlation.c → PolyBench/correlation.c} +16 -7
- data/examples/benchmarks/{covariance.c → PolyBench/covariance.c} +7 -2
- data/examples/benchmarks/{doitgen.c → PolyBench/doitgen.c} +5 -2
- data/examples/benchmarks/{durbin.c → PolyBench/durbin.c} +3 -0
- data/examples/benchmarks/{dynprog.c → PolyBench/dynprog.c} +3 -0
- data/examples/benchmarks/{fdtd-2d-apml.c → PolyBench/fdtd-2d-apml.c} +3 -0
- data/examples/benchmarks/{fdtd-2d.c → PolyBench/fdtd-2d.c} +5 -2
- data/examples/benchmarks/{floyd-warshall.c → PolyBench/floyd-warshall.c} +3 -0
- data/examples/benchmarks/{gemm.c → PolyBench/gemm.c} +5 -2
- data/examples/benchmarks/{gemver.c → PolyBench/gemver.c} +5 -2
- data/examples/benchmarks/{gesummv.c → PolyBench/gesummv.c} +5 -2
- data/examples/benchmarks/{gramschmidt.c → PolyBench/gramschmidt.c} +3 -0
- data/examples/benchmarks/{jacobi-1d-imper.c → PolyBench/jacobi-1d-imper.c} +10 -2
- data/examples/benchmarks/{jacobi-2d-imper.c → PolyBench/jacobi-2d-imper.c} +8 -3
- data/examples/benchmarks/{lu.c → PolyBench/lu.c} +3 -0
- data/examples/benchmarks/{ludcmp.c → PolyBench/ludcmp.c} +3 -0
- data/examples/benchmarks/{mvt.c → PolyBench/mvt.c} +6 -2
- data/examples/benchmarks/{reg_detect.c → PolyBench/reg_detect.c} +3 -0
- data/examples/benchmarks/{seidel-2d.c → PolyBench/seidel-2d.c} +3 -0
- data/examples/benchmarks/{symm.c → PolyBench/symm.c} +3 -0
- data/examples/benchmarks/{syr2k.c → PolyBench/syr2k.c} +5 -2
- data/examples/benchmarks/{syrk.c → PolyBench/syrk.c} +7 -4
- data/examples/benchmarks/{trisolv.c → PolyBench/trisolv.c} +3 -0
- data/examples/benchmarks/{trmm.c → PolyBench/trmm.c} +3 -0
- data/examples/benchmarks/Rodinia/cfd.c +180 -0
- data/examples/benchmarks/Rodinia/hotspot.c +228 -0
- data/examples/benchmarks/Rodinia/kmeans.c +164 -0
- data/examples/benchmarks/Rodinia/srad.c +188 -0
- data/examples/benchmarks/other/common.h +0 -0
- data/examples/benchmarks/other/dct.c +58 -0
- data/examples/benchmarks/other/mm.c +50 -0
- data/examples/benchmarks/{saxpy.c → other/saxpy.c} +11 -7
- data/examples/chunk/{example1.c → example01.c} +0 -0
- data/examples/chunk/{example2.c → example02.c} +0 -0
- data/examples/chunk/{example3.c → example03.c} +0 -0
- data/examples/chunk/{example4.c → example04.c} +0 -0
- data/examples/chunk/{example5.c → example05.c} +0 -0
- data/examples/chunk/example06.c +45 -0
- data/examples/chunk/example07.c +49 -0
- data/examples/dependences/example01.c +42 -0
- data/examples/dependences/example02.c +40 -0
- data/examples/dependences/example03.c +43 -0
- data/examples/dependences/example04.c +44 -0
- data/examples/dependences/example05.c +42 -0
- data/examples/element/{example1.c → example01.c} +0 -0
- data/examples/element/{example2.c → example02.c} +2 -2
- data/examples/element/{example3.c → example03.c} +0 -0
- data/examples/element/{example4.c → example04.c} +0 -0
- data/examples/element/{example5.c → example05.c} +0 -0
- data/examples/element/{example6.c → example06.c} +0 -0
- data/examples/element/{example7.c → example07.c} +0 -0
- data/examples/element/{example8.c → example08.c} +0 -0
- data/examples/element/{example9.c → example09.c} +0 -0
- data/examples/element/example13.c +73 -0
- data/examples/fusion/example01.c +68 -0
- data/examples/fusion/example02.c +73 -0
- data/examples/fusion/example03.c +72 -0
- data/examples/fusion/example04.c +61 -0
- data/examples/fusion/example05.c +55 -0
- data/examples/neighbourhood/{example1.c → example01.c} +0 -0
- data/examples/neighbourhood/{example2.c → example02.c} +0 -0
- data/examples/neighbourhood/{example3.c → example03.c} +0 -0
- data/examples/neighbourhood/{example4.c → example04.c} +0 -0
- data/examples/neighbourhood/example05.c +44 -0
- data/examples/shared/{example1.c → example01.c} +0 -0
- data/examples/shared/{example2.c → example02.c} +0 -0
- data/examples/shared/{example3.c → example03.c} +0 -0
- data/examples/shared/{example4.c → example04.c} +0 -0
- data/examples/shared/{example5.c → example05.c} +0 -0
- data/lib/adarwin.rb +62 -0
- data/lib/adarwin/dependences.rb +268 -0
- data/lib/adarwin/engine.rb +277 -0
- data/lib/adarwin/fusion.rb +174 -0
- data/lib/adarwin/interval.rb +57 -0
- data/lib/adarwin/memorycopies.rb +153 -0
- data/lib/adarwin/nest.rb +225 -0
- data/lib/adarwin/preprocessor.rb +76 -0
- data/lib/adarwin/reference.rb +261 -0
- data/lib/bones.rb +4 -55
- data/lib/bones/algorithm.rb +77 -40
- data/lib/bones/copy.rb +26 -0
- data/lib/bones/engine.rb +147 -31
- data/lib/bones/preprocessor.rb +92 -12
- data/lib/bones/species.rb +4 -3
- data/lib/bones/structure.rb +14 -4
- data/lib/castaddon.rb +11 -6
- data/lib/castaddon/node_adarwin.rb +245 -0
- data/lib/castaddon/node_bones.rb +316 -0
- data/lib/castaddon/node_common.rb +289 -0
- data/lib/castaddon/transformations.rb +236 -0
- data/lib/common.rb +216 -0
- data/skeletons/CPU-C/common/header.c +3 -0
- data/skeletons/CPU-C/common/mem_global.c +0 -0
- data/skeletons/CPU-C/common/timer_2_start.c +11 -13
- data/skeletons/CPU-C/common/timer_2_stop.c +1 -1
- data/skeletons/CPU-C/common/timer_globals.c +29 -0
- data/skeletons/CPU-OPENCL-INTEL/common/globals.c +1 -1
- data/skeletons/CPU-OPENCL-INTEL/common/header.c +3 -0
- data/skeletons/CPU-OPENCL-INTEL/common/mem_copy_D2H.c +7 -2
- data/skeletons/CPU-OPENCL-INTEL/common/mem_copy_H2D.c +4 -2
- data/skeletons/CPU-OPENCL-INTEL/common/mem_global.c +0 -0
- data/skeletons/CPU-OPENCL-INTEL/common/mem_prologue.c +6 -3
- data/skeletons/CPU-OPENCL-INTEL/common/timer_2_stop.c +1 -1
- data/skeletons/CPU-OPENCL-INTEL/common/timer_globals.c +24 -0
- data/skeletons/CPU-OPENMP/common/globals.c +1 -0
- data/skeletons/CPU-OPENMP/common/header.c +3 -0
- data/skeletons/CPU-OPENMP/common/mem_global.c +0 -0
- data/skeletons/CPU-OPENMP/common/timer_1_start.c +0 -12
- data/skeletons/CPU-OPENMP/common/timer_2_stop.c +1 -1
- data/skeletons/CPU-OPENMP/common/timer_globals.c +33 -0
- data/skeletons/GPU-CUDA/common/globals.c +27 -3
- data/skeletons/GPU-CUDA/common/header.c +2 -0
- data/skeletons/GPU-CUDA/common/mem_async_alloc.c +6 -0
- data/skeletons/GPU-CUDA/common/mem_async_copyin.c +6 -0
- data/skeletons/GPU-CUDA/common/mem_async_copyout.c +6 -0
- data/skeletons/GPU-CUDA/common/mem_async_free.c +6 -0
- data/skeletons/GPU-CUDA/common/mem_copy_D2H.c +2 -1
- data/skeletons/GPU-CUDA/common/mem_copy_H2D.c +2 -1
- data/skeletons/GPU-CUDA/common/mem_global.c +1 -0
- data/skeletons/GPU-CUDA/common/mem_prologue.c +1 -2
- data/skeletons/GPU-CUDA/common/scheduler.c +86 -0
- data/skeletons/GPU-CUDA/common/timer_2_start.c +2 -4
- data/skeletons/GPU-CUDA/common/timer_2_stop.c +3 -5
- data/skeletons/GPU-CUDA/common/timer_globals.c +26 -0
- data/skeletons/GPU-CUDA/kernel/2xN-N-chunk-1-N-to-D-element.kernel.cu +5 -7
- data/skeletons/GPU-CUDA/kernel/N-N-chunk-1-N-to-D-element.kernel.cu +4 -6
- data/skeletons/GPU-CUDA/kernel/default.host.c +1 -1
- data/skeletons/GPU-CUDA/kernel/default.kernel.cu +6 -8
- data/skeletons/GPU-CUDA/skeletons.txt +6 -5
- data/{examples/benchmarks/2mm.c → test/examples/benchmarks/PolyBench/2mm_species.c} +19 -15
- data/test/examples/benchmarks/PolyBench/3mm_species.c +82 -0
- data/test/examples/benchmarks/PolyBench/adi_species.c +89 -0
- data/test/examples/benchmarks/PolyBench/atax_species.c +69 -0
- data/test/examples/benchmarks/PolyBench/bicg_species.c +71 -0
- data/test/examples/benchmarks/PolyBench/cholesky_species.c +68 -0
- data/test/examples/benchmarks/PolyBench/correlation_species.c +97 -0
- data/test/examples/benchmarks/PolyBench/covariance_species.c +78 -0
- data/test/examples/benchmarks/PolyBench/doitgen_species.c +67 -0
- data/test/examples/benchmarks/PolyBench/durbin_species.c +80 -0
- data/test/examples/benchmarks/PolyBench/dynprog_species.c +71 -0
- data/test/examples/benchmarks/PolyBench/fdtd-2d-apml_species.c +112 -0
- data/test/examples/benchmarks/PolyBench/fdtd-2d_species.c +78 -0
- data/test/examples/benchmarks/PolyBench/floyd-warshall_species.c +54 -0
- data/test/examples/benchmarks/PolyBench/gemm_species.c +73 -0
- data/test/examples/benchmarks/PolyBench/gemver_species.c +93 -0
- data/test/examples/benchmarks/PolyBench/gesummv_species.c +68 -0
- data/test/examples/benchmarks/PolyBench/gramschmidt_species.c +78 -0
- data/test/examples/benchmarks/PolyBench/jacobi-1d-imper_species.c +59 -0
- data/test/examples/benchmarks/PolyBench/jacobi-2d-imper_species.c +65 -0
- data/test/examples/benchmarks/PolyBench/lu_species.c +57 -0
- data/test/examples/benchmarks/PolyBench/ludcmp_species.c +89 -0
- data/test/examples/benchmarks/PolyBench/mvt_species.c +69 -0
- data/test/examples/benchmarks/PolyBench/reg_detect_species.c +86 -0
- data/test/examples/benchmarks/PolyBench/seidel-2d_species.c +53 -0
- data/test/examples/benchmarks/PolyBench/symm_species.c +74 -0
- data/test/examples/benchmarks/PolyBench/syr2k_species.c +69 -0
- data/test/examples/benchmarks/PolyBench/syrk_species.c +66 -0
- data/test/examples/benchmarks/PolyBench/trisolv_species.c +61 -0
- data/test/examples/benchmarks/PolyBench/trmm_species.c +61 -0
- data/test/examples/chunk/example01_species.c +58 -0
- data/test/examples/chunk/example02_species.c +48 -0
- data/test/examples/chunk/example03_species.c +63 -0
- data/test/examples/chunk/example04_species.c +58 -0
- data/test/examples/chunk/example05_species.c +56 -0
- data/test/examples/chunk/example06_species.c +49 -0
- data/test/examples/chunk/example07_species.c +53 -0
- data/test/examples/dependences/example01_species.c +46 -0
- data/test/examples/dependences/example02_species.c +44 -0
- data/test/examples/dependences/example03_species.c +47 -0
- data/test/examples/dependences/example04_species.c +48 -0
- data/test/examples/dependences/example05_species.c +46 -0
- data/test/examples/element/example01_species.c +50 -0
- data/test/examples/element/example02_species.c +50 -0
- data/test/examples/element/example03_species.c +62 -0
- data/test/examples/element/example04_species.c +53 -0
- data/test/examples/element/example05_species.c +59 -0
- data/test/examples/element/example06_species.c +50 -0
- data/test/examples/element/example07_species.c +58 -0
- data/test/examples/element/example08_species.c +49 -0
- data/test/examples/element/example09_species.c +52 -0
- data/test/examples/element/example10_species.c +54 -0
- data/test/examples/element/example11_species.c +51 -0
- data/test/examples/element/example12_species.c +60 -0
- data/test/examples/element/example13_species.c +77 -0
- data/test/examples/neighbourhood/example01_species.c +57 -0
- data/test/examples/neighbourhood/example02_species.c +56 -0
- data/test/examples/neighbourhood/example03_species.c +83 -0
- data/test/examples/neighbourhood/example04_species.c +55 -0
- data/test/examples/neighbourhood/example05_species.c +48 -0
- data/test/examples/shared/example01_species.c +49 -0
- data/test/examples/shared/example02_species.c +55 -0
- data/test/examples/shared/example03_species.c +59 -0
- data/test/examples/shared/example04_species.c +56 -0
- data/test/examples/shared/example05_species.c +52 -0
- metadata +193 -73
- data/examples/benchmarks/overview.txt +0 -38
- data/lib/castaddon/node.rb +0 -753
|
@@ -0,0 +1,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
|
+
|