From 1b50f2e9e7ba178cce8ed0be879b9554969b295c Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Thu, 23 Feb 2023 15:05:46 +0100
Subject: [PATCH] coreblas: Add print function

---
 cmake_modules/local_subs.py                |  1 +
 coreblas/compute/CMakeLists.txt            |  1 +
 coreblas/compute/core_zprint.c             | 46 ++++++++++++++++++++++
 coreblas/compute/core_ztile.c              | 10 +++++
 coreblas/include/coreblas/coreblas_z.h     |  4 ++
 coreblas/include/coreblas/coreblas_ztile.h |  1 +
 6 files changed, 63 insertions(+)
 create mode 100644 coreblas/compute/core_zprint.c

diff --git a/cmake_modules/local_subs.py b/cmake_modules/local_subs.py
index 227afc049..02af5df38 100644
--- a/cmake_modules/local_subs.py
+++ b/cmake_modules/local_subs.py
@@ -43,6 +43,7 @@ _extra_blas = [
     ('',                     'scesca',               'dcesca',               'ccesca',               'zcesca'              ),
     ('',                     'sgesum',               'dgesum',               'cgesum',               'zgesum'              ),
     ('',                     'sgersum',              'dgersum',              'cgersum',              'zgersum'             ),
+    ('',                     'sprint',               'dprint',               'cprint',               'zprint'              ),
 ]
 
 _extra_BLAS = [ [ x.upper() for x in row ] for row in _extra_blas ]
diff --git a/coreblas/compute/CMakeLists.txt b/coreblas/compute/CMakeLists.txt
index d880039fe..40baddc59 100644
--- a/coreblas/compute/CMakeLists.txt
+++ b/coreblas/compute/CMakeLists.txt
@@ -107,6 +107,7 @@ set(ZSRC
     core_zttqrt.c
     core_zunmlq.c
     core_zunmqr.c
+    core_zprint.c
     )
 if( CHAMELEON_USE_HMAT )
   list( APPEND ZSRC
diff --git a/coreblas/compute/core_zprint.c b/coreblas/compute/core_zprint.c
new file mode 100644
index 000000000..0e4fdc887
--- /dev/null
+++ b/coreblas/compute/core_zprint.c
@@ -0,0 +1,46 @@
+/**
+ *
+ * @file core_zprint.c
+ *
+ * @copyright 2012-2023 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                      Univ. Bordeaux. All rights reserved.
+ *
+ ***
+ *
+ * @brief Chameleon core_zprint CPU kernel
+ *
+ * @version 1.0.0
+ * @author Mathieu Faverge
+ * @date 2020-03-03
+ * @precisions normal z -> c d s
+ *
+ */
+#include "coreblas/lapacke.h"
+#include "coreblas.h"
+
+void
+CORE_zprint( FILE *file, const char *header,
+             cham_uplo_t uplo, int M, int N, int Am, int An,
+             const CHAMELEON_Complex64_t *A, int lda )
+{
+    FILE *output = (file == NULL) ? stdout : file;
+    int   i, j;
+
+    fflush( output );
+    fprintf( output, "--- %10s (%2d, %2d) / %p, %d:\n", header, Am, An, A, lda );
+    for(i=0; i<M; i++) {
+        fprintf( output, "  " );
+        for(j=0; j<N; j++) {
+#if defined(PRECISION_z) || defined(PRECISION_c)
+            fprintf( output, " (% e, % e)",
+                     creal( A[j*lda + i] ),
+                     cimag( A[j*lda + i] ));
+#else
+            fprintf( output, " % e", A[j*lda + i] );
+#endif
+        }
+        fprintf( output, "\n" );
+    }
+    fprintf( output, "-------------------------\n" );
+    fflush( output );
+}
diff --git a/coreblas/compute/core_ztile.c b/coreblas/compute/core_ztile.c
index 986d587f8..6de9b2c63 100644
--- a/coreblas/compute/core_ztile.c
+++ b/coreblas/compute/core_ztile.c
@@ -1072,3 +1072,13 @@ TCORE_zgram( cham_uplo_t        uplo,
     return CORE_zgram(
         uplo, M, N, Mt, Nt, CHAM_tile_get_ptr( Di ), Di->ld, CHAM_tile_get_ptr( Dj ), Dj->ld, CHAM_tile_get_ptr( D ), CHAM_tile_get_ptr( A ), A->ld );
 }
+
+void
+TCORE_zprint( FILE *file, const char *header,
+              cham_uplo_t uplo, int M, int N,
+              int Am, int An, const CHAM_tile_t *A )
+{
+    coreblas_kernel_trace( A );
+    assert( A->format & CHAMELEON_TILE_FULLRANK );
+    CORE_zprint( file, header, uplo, M, N, Am, An, CHAM_tile_get_ptr( A ), A->ld );
+}
diff --git a/coreblas/include/coreblas/coreblas_z.h b/coreblas/include/coreblas/coreblas_z.h
index b0bcf3bdb..050a79687 100644
--- a/coreblas/include/coreblas/coreblas_z.h
+++ b/coreblas/include/coreblas/coreblas_z.h
@@ -393,4 +393,8 @@ int CORE_zgram( cham_uplo_t uplo, int M, int N, int Mt, int Nt,
                 const double *D,
                 double *A, int LDA );
 
+void CORE_zprint( FILE *file, const char *header,
+                  cham_uplo_t uplo, int m, int n, int Am, int An,
+                  const CHAMELEON_Complex64_t *A, int lda );
+
 #endif /* _coreblas_z_h_ */
diff --git a/coreblas/include/coreblas/coreblas_ztile.h b/coreblas/include/coreblas/coreblas_ztile.h
index aa66fdd75..74cd41316 100644
--- a/coreblas/include/coreblas/coreblas_ztile.h
+++ b/coreblas/include/coreblas/coreblas_ztile.h
@@ -86,5 +86,6 @@ int  TCORE_zunmqr( cham_side_t side, cham_trans_t trans, int M, int N, int K, in
 int  TCORE_zgesum( cham_store_t storev, int M, int N, const CHAM_tile_t *A, CHAM_tile_t *sum );
 int  TCORE_zcesca( int center, int scale, cham_store_t axis, int M, int N, int Mt, int Nt, const CHAM_tile_t *Gi, const CHAM_tile_t *Gj, const CHAM_tile_t *G, const CHAM_tile_t *Di, const CHAM_tile_t *Dj, CHAM_tile_t *A );
 int  TCORE_zgram( cham_uplo_t uplo, int M, int N, int Mt, int Nt, const CHAM_tile_t *Di, const CHAM_tile_t *Dj, const CHAM_tile_t *D, CHAM_tile_t *A );
+void TCORE_zprint( FILE *file, const char *header, cham_uplo_t uplo, int M, int N, int Am, int An, const CHAM_tile_t *A );
 
 #endif /* _coreblas_ztile_h_ */
-- 
GitLab