diff options
Diffstat (limited to 'polly/test/polybench/linear-algebra/solvers/lu/lu.c')
| -rwxr-xr-x | polly/test/polybench/linear-algebra/solvers/lu/lu.c | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/polly/test/polybench/linear-algebra/solvers/lu/lu.c b/polly/test/polybench/linear-algebra/solvers/lu/lu.c new file mode 100755 index 00000000000..d5dcc91abd6 --- /dev/null +++ b/polly/test/polybench/linear-algebra/solvers/lu/lu.c @@ -0,0 +1,110 @@ +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <math.h> + +#include "instrument.h" + + +/* Default problem size. */ +#ifndef N +# define N 1024 +#endif + +/* Default data type is double. */ +#ifndef DATA_TYPE +# define DATA_TYPE double +#endif +#ifndef DATA_PRINTF_MODIFIER +# define DATA_PRINTF_MODIFIER "%0.2lf " +#endif + +/* Array declaration. Enable malloc if POLYBENCH_TEST_MALLOC. */ +#ifndef POLYBENCH_TEST_MALLOC +DATA_TYPE A[N][N]; +#else +DATA_TYPE** A = (DATA_TYPE**)malloc(N * sizeof(DATA_TYPE*)); +{ + int i; + for (i = 0; i < M; ++i) + A[i] = (DATA_TYPE*)malloc(N * sizeof(DATA_TYPE)); +} +#endif + +inline +void init_array() +{ + int i, j; + + for (i = 0; i < N; i++) + for (j = 0; j < N; j++) + A[i][j] = ((DATA_TYPE) i*j + 1) / N; +} + +/* Define the live-out variables. Code is not executed unless + POLYBENCH_DUMP_ARRAYS is defined. */ +inline +void print_array(int argc, char** argv) +{ + int i, j; +#ifndef POLYBENCH_DUMP_ARRAYS + if (argc > 42 && ! strcmp(argv[0], "")) +#endif + { + for (i = 0; i < N; i++) + for (j = 0; j < N; j++) { + fprintf(stderr, DATA_PRINTF_MODIFIER, A[i][j]); + if ((i * N + j) % 80 == 20) fprintf(stderr, "\n"); + } + fprintf(stderr, "\n"); + } +} + +#ifndef SCOP_PARAM +void scop_func() { + long n = N; +#else +void scop_func(long n) { +#endif + long i, j, k; + +#pragma scop +#pragma live-out A + + for (k = 0; k < n; k++) + { + for (j = k + 1; j < n; j++) + A[k][j] = A[k][j] / A[k][k]; + for(i = k + 1; i < n; i++) + for (j = k + 1; j < n; j++) + A[i][j] = A[i][j] - A[i][k] * A[k][j]; + } + +#pragma endscop +} + +int main(int argc, char** argv) +{ + int i, j, k; + int n = N; + + /* Initialize array. */ + init_array(); + + /* Start timer. */ + polybench_start_instruments; + +#ifndef SCOP_PARAM + scop_func(); +#else + scop_func(n); +#endif + + /* Stop and print timer. */ + polybench_stop_instruments; + polybench_print_instruments; + + print_array(argc, argv); + + return 0; +} |

