From ec9ce5c03e32dfed0478f731ac26840fc44b4404 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Tue, 12 Oct 2021 12:30:17 +0200
Subject: [PATCH] compute: Prepare matrix generation algorithms toward
 recursive descriptors

---
 compute/pzlatms.c   | 4 ++--
 compute/pzplghe.c   | 8 ++++----
 compute/pzplgsy.c   | 8 ++++----
 compute/pzplrnt.c   | 7 ++++---
 compute/zplghe.c    | 2 +-
 compute/zplgsy.c    | 2 +-
 compute/zplrnt.c    | 2 +-
 control/compute_z.h | 6 +++---
 8 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/compute/pzlatms.c b/compute/pzlatms.c
index 7a1334d9d..ab0cbe473 100644
--- a/compute/pzlatms.c
+++ b/compute/pzlatms.c
@@ -181,7 +181,7 @@ void chameleon_pzlatms( cham_dist_t idist, unsigned long long int seed, cham_sym
         /* U is of size A->m by min(A->m, A->n) */
         chameleon_zdesc_copy_and_restrict( A, &descU, A->m, minmn );
 
-        chameleon_pzplrnt( &descU, seed, sequence, request );
+        chameleon_pzplrnt( &descU, descU.m, 0, 0, seed, sequence, request );
 
         /* Shift the seed to generate the next random unitary matrix */
 #if !defined(CHAMELEON_SIMULATION)
@@ -257,7 +257,7 @@ void chameleon_pzlatms( cham_dist_t idist, unsigned long long int seed, cham_sym
         /* V is of size min(A->m, A->n) by A->n */
         chameleon_zdesc_copy_and_restrict( A, &descV, minmn, A->n );
 
-        chameleon_pzplrnt( &descV, seed, sequence, request );
+        chameleon_pzplrnt( &descV, descV.m, 0, 0, seed, sequence, request );
 
         /* Apply a QR factorization */
         mat.mt    = descV.mt;
diff --git a/compute/pzplghe.c b/compute/pzplghe.c
index d20b36a61..7a1f03120 100644
--- a/compute/pzplghe.c
+++ b/compute/pzplghe.c
@@ -28,7 +28,7 @@
  *  chameleon_pzplghe - Generate a random hermitian (positive definite if 'bump' is large enough) half-matrix by tiles.
  */
 void chameleon_pzplghe( double bump, cham_uplo_t uplo, CHAM_desc_t *A,
-                        unsigned long long int seed,
+                        int bigM, int m0, int n0, unsigned long long int seed,
                         RUNTIME_sequence_t *sequence, RUNTIME_request_t *request )
 {
     CHAM_context_t *chamctxt;
@@ -56,7 +56,7 @@ void chameleon_pzplghe( double bump, cham_uplo_t uplo, CHAM_desc_t *A,
                 INSERT_TASK_zplghe(
                     &options,
                     bump, tempmm, tempnn, A(m, n),
-                    A->m, m*A->mb, n*A->nb, seed );
+                    bigM, m*A->mb + m0, n*A->nb + n0, seed );
             }
         }
         break;
@@ -72,7 +72,7 @@ void chameleon_pzplghe( double bump, cham_uplo_t uplo, CHAM_desc_t *A,
                 INSERT_TASK_zplghe(
                     &options,
                     bump, tempmm, tempnn, A(m, n),
-                    A->m, m*A->mb, n*A->nb, seed );
+                    bigM, m*A->mb + m0, n*A->nb + n0, seed );
             }
         }
         break;
@@ -89,7 +89,7 @@ void chameleon_pzplghe( double bump, cham_uplo_t uplo, CHAM_desc_t *A,
                 INSERT_TASK_zplghe(
                     &options,
                     bump, tempmm, tempnn, A(m, n),
-                    A->m, m*A->mb, n*A->nb, seed );
+                    bigM, m*A->mb + m0, n*A->nb + n0, seed );
             }
         }
     }
diff --git a/compute/pzplgsy.c b/compute/pzplgsy.c
index 726543b5a..b9a035620 100644
--- a/compute/pzplgsy.c
+++ b/compute/pzplgsy.c
@@ -28,7 +28,7 @@
  *  chameleon_pzplgsy - Generate a random symmetric (positive definite if 'bump' is large enough) half-matrix by tiles.
  */
 void chameleon_pzplgsy( CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_t *A,
-                        unsigned long long int seed,
+                        int bigM, int m0, int n0, unsigned long long int seed,
                         RUNTIME_sequence_t *sequence, RUNTIME_request_t *request )
 {
     CHAM_context_t *chamctxt;
@@ -56,7 +56,7 @@ void chameleon_pzplgsy( CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_
                 INSERT_TASK_zplgsy(
                     &options,
                     bump, tempmm, tempnn, A(m, n),
-                    A->m, m*A->mb, n*A->nb, seed );
+                    bigM, m*A->mb + m0, n*A->nb + n0, seed );
             }
         }
         break;
@@ -72,7 +72,7 @@ void chameleon_pzplgsy( CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_
                 INSERT_TASK_zplgsy(
                     &options,
                     bump, tempmm, tempnn, A(m, n),
-                    A->m, m*A->mb, n*A->nb, seed );
+                    bigM, m*A->mb + m0, n*A->nb + n0, seed );
             }
         }
         break;
@@ -89,7 +89,7 @@ void chameleon_pzplgsy( CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_
                 INSERT_TASK_zplgsy(
                     &options,
                     bump, tempmm, tempnn, A(m, n),
-                    A->m, m*A->mb, n*A->nb, seed );
+                    bigM, m*A->mb + m0, n*A->nb + n0, seed );
             }
         }
     }
diff --git a/compute/pzplrnt.c b/compute/pzplrnt.c
index 77845a2ed..a0d08d9be 100644
--- a/compute/pzplrnt.c
+++ b/compute/pzplrnt.c
@@ -28,8 +28,9 @@
 /**
  *  chameleon_pzplghe - Generate a random matrix by tiles.
  */
-void chameleon_pzplrnt( CHAM_desc_t *A, unsigned long long int seed,
-                    RUNTIME_sequence_t *sequence, RUNTIME_request_t *request )
+void chameleon_pzplrnt( CHAM_desc_t *A,
+                        int bigM, int m0, int n0, unsigned long long int seed,
+                        RUNTIME_sequence_t *sequence, RUNTIME_request_t *request )
 {
     CHAM_context_t *chamctxt;
     RUNTIME_option_t options;
@@ -52,7 +53,7 @@ void chameleon_pzplrnt( CHAM_desc_t *A, unsigned long long int seed,
             INSERT_TASK_zplrnt(
                 &options,
                 tempmm, tempnn, A(m, n),
-                A->m, m*A->mb, n*A->nb, seed );
+                bigM, m*A->mb + m0, n*A->nb + n0, seed );
         }
     }
     RUNTIME_options_finalize(&options, chamctxt);
diff --git a/compute/zplghe.c b/compute/zplghe.c
index 28f849ea4..ea6a7364f 100644
--- a/compute/zplghe.c
+++ b/compute/zplghe.c
@@ -270,7 +270,7 @@ int CHAMELEON_zplghe_Tile_Async( double                 bump,
     if (chameleon_min( A->m, A->n ) == 0)
         return CHAMELEON_SUCCESS;
 
-    chameleon_pzplghe( bump, uplo, A, seed, sequence, request );
+    chameleon_pzplghe( bump, uplo, A, A->m, A->i, A->j, seed, sequence, request );
 
     return CHAMELEON_SUCCESS;
 }
diff --git a/compute/zplgsy.c b/compute/zplgsy.c
index c09673df7..2f5921517 100644
--- a/compute/zplgsy.c
+++ b/compute/zplgsy.c
@@ -272,7 +272,7 @@ int CHAMELEON_zplgsy_Tile_Async( CHAMELEON_Complex64_t  bump,
     if (chameleon_min( A->m, A->n ) == 0)
         return CHAMELEON_SUCCESS;
 
-    chameleon_pzplgsy( bump, uplo, A, seed, sequence, request );
+    chameleon_pzplgsy( bump, uplo, A, A->m, A->i, A->j, seed, sequence, request );
 
     return CHAMELEON_SUCCESS;
 }
diff --git a/compute/zplrnt.c b/compute/zplrnt.c
index 272e5b4a8..4f25f18a0 100644
--- a/compute/zplrnt.c
+++ b/compute/zplrnt.c
@@ -261,7 +261,7 @@ int CHAMELEON_zplrnt_Tile_Async( CHAM_desc_t     *A,
     if (chameleon_min( A->m, A->n ) == 0)
         return CHAMELEON_SUCCESS;
 
-    chameleon_pzplrnt( A, seed, sequence, request );
+    chameleon_pzplrnt( A, A->m, A->i, A->j, seed, sequence, request );
 
     return CHAMELEON_SUCCESS;
 }
diff --git a/control/compute_z.h b/control/compute_z.h
index acc3c5445..0e3dc6ae2 100644
--- a/control/compute_z.h
+++ b/control/compute_z.h
@@ -97,9 +97,9 @@ void chameleon_pzlaswp(CHAM_desc_t *B, int *IPIV, int inc, RUNTIME_sequence_t *s
 void chameleon_pzlaswpc(CHAM_desc_t *B, int *IPIV, int inc, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request);
 void chameleon_pzlatms( cham_dist_t idist, unsigned long long int seed, cham_sym_t sym, double *D, int mode, double cond, double dmax, CHAM_desc_t *A, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request );
 void chameleon_pzlauum(cham_uplo_t uplo, CHAM_desc_t *A, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request);
-void chameleon_pzplghe(double bump, cham_uplo_t uplo, CHAM_desc_t *A, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request );
-void chameleon_pzplgsy(CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_t *A, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request );
-void chameleon_pzplrnt(CHAM_desc_t *A, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request );
+void chameleon_pzplghe(double bump, cham_uplo_t uplo, CHAM_desc_t *A, int bigM, int m0, int n0, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request );
+void chameleon_pzplgsy(CHAMELEON_Complex64_t bump, cham_uplo_t uplo, CHAM_desc_t *A, int bigM, int m0, int n0, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request );
+void chameleon_pzplrnt(CHAM_desc_t *A, int bigM, int m0, int n0, unsigned long long int seed, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request );
 void chameleon_pzplrnk(int K, CHAM_desc_t *C, unsigned long long int seedA, unsigned long long int seedB, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request );
 void chameleon_pzpotrf(cham_uplo_t uplo, CHAM_desc_t *A, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request);
 void chameleon_pzpotrimm(cham_uplo_t uplo, CHAM_desc_t *A, CHAM_desc_t *B, CHAM_desc_t *C, RUNTIME_sequence_t *sequence, RUNTIME_request_t *request);
-- 
GitLab