summaryrefslogtreecommitdiffstats
path: root/polly/test/polybench/linear-algebra/solvers/lu/lu.c
diff options
context:
space:
mode:
Diffstat (limited to 'polly/test/polybench/linear-algebra/solvers/lu/lu.c')
-rwxr-xr-xpolly/test/polybench/linear-algebra/solvers/lu/lu.c110
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;
+}
OpenPOWER on IntegriCloud