From 3d8f5fd668051ffe08077e8bea24b8c4c6841bc2 Mon Sep 17 00:00:00 2001 From: shudson Date: Thu, 16 Jan 2025 17:28:55 -0600 Subject: [PATCH] Init lu array similar to orig polybench --- polybench-cuda/lu/lu.c | 39 ++++++++++++++++++++++++++++++-------- polybench-cuda/lu/lu_omp.c | 38 +++++++++++++++++++++++++++++-------- 2 files changed, 61 insertions(+), 16 deletions(-) diff --git a/polybench-cuda/lu/lu.c b/polybench-cuda/lu/lu.c index f8dc7dda..33d33f2f 100644 --- a/polybench-cuda/lu/lu.c +++ b/polybench-cuda/lu/lu.c @@ -11,20 +11,43 @@ #include #include - static -void init_array (int n, - double *A) -{ - int i, j; - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - A[i*n+j] = ((double) (i+1)*(j+1)) / n; +static +void init_array(int n, double *A) { + int i, j; + + for (i = 0; i < n; i++) { + for (j = 0; j <= i; j++) { + A[i * n + j] = (double)(-j % n) / n + 1; + } + for (j = i + 1; j < n; j++) { + A[i * n + j] = 0; + } + A[i * n + i] = 1; + } + + // Make A positive semi-definite. + double *B = (double *)malloc(n * n * sizeof(double)); + for (int r = 0; r < n; r++) { + for (int s = 0; s < n; s++) { + B[r * n + s] = 0.0; + } + } + for (int t = 0; t < n; t++) { + for (int r = 0; r < n; r++) { + for (int s = 0; s < n; s++) { + B[r * n + s] += A[r * n + t] * A[s * n + t]; + } + } + } + memcpy(A, B, n * n * sizeof(double)); + free(B); } + static void print_array(int n, double *A) diff --git a/polybench-cuda/lu/lu_omp.c b/polybench-cuda/lu/lu_omp.c index 101d4cc4..3c440a90 100644 --- a/polybench-cuda/lu/lu_omp.c +++ b/polybench-cuda/lu/lu_omp.c @@ -11,20 +11,42 @@ #include #include - static -void init_array (int n, - double *A) -{ - int i, j; +static +void init_array(int n, double *A) { + int i, j; + + for (i = 0; i < n; i++) { + for (j = 0; j <= i; j++) { + A[i * n + j] = (double)(-j % n) / n + 1; + } + for (j = i + 1; j < n; j++) { + A[i * n + j] = 0; + } + A[i * n + i] = 1; + } - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - A[i*n+j] = ((double) (i+1)*(j+1)) / n; + // Make A positive semi-definite. + double *B = (double *)malloc(n * n * sizeof(double)); + for (int r = 0; r < n; r++) { + for (int s = 0; s < n; s++) { + B[r * n + s] = 0.0; + } + } + for (int t = 0; t < n; t++) { + for (int r = 0; r < n; r++) { + for (int s = 0; s < n; s++) { + B[r * n + s] += A[r * n + t] * A[s * n + t]; + } + } + } + memcpy(A, B, n * n * sizeof(double)); + free(B); } + static void print_array(int n, double *A)