From e09de9d1cd5e7862af82e707e15dc933a29ca8a9 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Mon, 15 Oct 2018 19:37:19 +0200
Subject: [PATCH] Hotfix/minor

---
 .gitlab-ci.yml                               |  17 +++
 CTestConfig.cmake                            |   4 +
 compute/zgesvd.c                             | 110 ++++++++++---------
 compute/zhetrd.c                             |  19 ++--
 hqr                                          |   2 +-
 runtime/starpu/include/chameleon_starpu.h.in |   5 +-
 timing/time_zlange_tile.c                    |   4 +-
 tools/analysis.sh                            |   1 +
 8 files changed, 99 insertions(+), 63 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e8210f94f..31826071d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -237,6 +237,23 @@ test_parsec_master:
   only:
     - master@solverstack/chameleon
 
+coverage:
+  stage: analyse
+  dependencies:
+    - test_starpu_branches
+    - test_starpu_simgrid_branches
+    - test_quark_branches
+    - test_parsec_branches
+  script:
+      - lcov -a chameleon_starpu.lcov
+             -a chameleon_starpu_simgrid.lcov
+             -a chameleon_quark.lcov
+             -a chameleon_parsec.lcov
+             -o chameleon.lcov
+      - lcov --summary chameleon.lcov
+  only:
+    - branches
+
 coverity:
   stage: analyse
   dependencies: []
diff --git a/CTestConfig.cmake b/CTestConfig.cmake
index 2b2d786a4..e79cbcc92 100644
--- a/CTestConfig.cmake
+++ b/CTestConfig.cmake
@@ -47,6 +47,10 @@ if(NOT BUILDNAME)
     set(BUILDNAME "${BUILDNAME}-StarPU")
   endif(CHAMELEON_SCHED_STARPU)
 
+  if(CHAMELEON_SCHED_PARSEC)
+    set(BUILDNAME "${BUILDNAME}-PaRSEC")
+  endif(CHAMELEON_SCHED_STARPU)
+
   if(CHAMELEON_SIMULATION)
     set(BUILDNAME "${BUILDNAME}-SimGrid")
   endif(CHAMELEON_SIMULATION)
diff --git a/compute/zgesvd.c b/compute/zgesvd.c
index 3914ee386..0fef6eb2b 100644
--- a/compute/zgesvd.c
+++ b/compute/zgesvd.c
@@ -407,9 +407,10 @@ int CHAMELEON_zgesvd_Tile_Async( cham_job_t jobu, cham_job_t jobvt,
     CHAM_desc_t *subA, *subT, *subUVT;
     double *E;
     int M, N, MINMN, NB, LDAB;
-    int KL, KU, uplo, nru, ncvt;
-    int info = 0;
-    char gbbrd_vect;
+    cham_uplo_t uplo;
+#if !defined(CHAMELEON_SIMULATION)
+    int KL, KU, nru, ncvt;
+#endif
 
     CHAM_context_t *chamctxt;
     chamctxt = chameleon_context_self();
@@ -500,54 +501,59 @@ int CHAMELEON_zgesvd_Tile_Async( cham_job_t jobu, cham_job_t jobvt,
     memset(E, 0, MINMN * sizeof(double) );
 
 #if !defined(CHAMELEON_SIMULATION)
-    /* NCC = 0, C = NULL, we do not update any matrix with new singular vectors */
-    /* On exit, AB = U (S +~ E) VT */
-    if (uplo == ChamUpper){
-        KL = 0;
-        KU = NB;
-    }
-    else{
-        KL = NB;
-        KU = 0;
-    }
-
-    /* Manage the case where only singular values are required */
-    if (jobu == ChamNoVec) {
-        nru = 0;
-        if (jobvt == ChamNoVec) {
-            gbbrd_vect = 'N';
-            ncvt = 0;
+    {
+        char gbbrd_vect;
+        int info;
+
+        /* NCC = 0, C = NULL, we do not update any matrix with new singular vectors */
+        /* On exit, AB = U (S +~ E) VT */
+        if (uplo == ChamUpper){
+            KL = 0;
+            KU = NB;
         }
-        else {
-            gbbrd_vect = 'P';
-            ncvt = N;
+        else{
+            KL = NB;
+            KU = 0;
         }
-    }
-    else {
-        nru = M;
-        if (jobvt == ChamNoVec) {
-            gbbrd_vect = 'Q';
-            ncvt = 0;
+
+        /* Manage the case where only singular values are required */
+        if (jobu == ChamNoVec) {
+            nru = 0;
+            if (jobvt == ChamNoVec) {
+                gbbrd_vect = 'N';
+                ncvt = 0;
+            }
+            else {
+                gbbrd_vect = 'P';
+                ncvt = N;
+            }
         }
         else {
-            gbbrd_vect = 'B';
-            ncvt = N;
+            nru = M;
+            if (jobvt == ChamNoVec) {
+                gbbrd_vect = 'Q';
+                ncvt = 0;
+            }
+            else {
+                gbbrd_vect = 'B';
+                ncvt = N;
+            }
         }
-    }
-
-    chameleon_sequence_wait( chamctxt, sequence );
 
-    info = LAPACKE_zgbbrd( LAPACK_COL_MAJOR,
-                           gbbrd_vect,
-                           M, N,
-                           0, KL, KU,
-                           (CHAMELEON_Complex64_t *) descAB.mat, LDAB,
-                           S, E,
-                           U, LDU,
-                           VT, LDVT,
-                           NULL, 1 );
-    if (info != 0) {
-        fprintf(stderr, "CHAMELEON_zgesvd_Tile_Async: LAPACKE_zgbbrd = %d\n", info );
+        chameleon_sequence_wait( chamctxt, sequence );
+
+        info = LAPACKE_zgbbrd( LAPACK_COL_MAJOR,
+                               gbbrd_vect,
+                               M, N,
+                               0, KL, KU,
+                               (CHAMELEON_Complex64_t *) descAB.mat, LDAB,
+                               S, E,
+                               U, LDU,
+                               VT, LDVT,
+                               NULL, 1 );
+        if (info != 0) {
+            fprintf(stderr, "CHAMELEON_zgesvd_Tile_Async: LAPACKE_zgbbrd = %d\n", info );
+        }
     }
 #else
     chameleon_sequence_wait( chamctxt, sequence );
@@ -621,12 +627,14 @@ int CHAMELEON_zgesvd_Tile_Async( cham_job_t jobu, cham_job_t jobvt,
     /* Solve the bidiagonal SVD problem */
     /* On exit, U and VT are updated with bidiagonal matrix singular vectors */
 #if !defined(CHAMELEON_SIMULATION)
-    info = LAPACKE_zbdsqr( LAPACK_COL_MAJOR, 'U',
-                           MINMN, ncvt, nru, 0,
-                           S, E,
-                           VT, LDVT, U, LDU, NULL, 1 );
-    if (info != 0) {
-        fprintf(stderr, "CHAMELEON_zgesvd_Tile_Async: LAPACKE_zbdsqr = %d\n", info );
+    {
+        int info = LAPACKE_zbdsqr( LAPACK_COL_MAJOR, 'U',
+                                   MINMN, ncvt, nru, 0,
+                                   S, E,
+                                   VT, LDVT, U, LDU, NULL, 1 );
+        if (info != 0) {
+            fprintf(stderr, "CHAMELEON_zgesvd_Tile_Async: LAPACKE_zbdsqr = %d\n", info );
+        }
     }
 #endif /* !defined(CHAMELEON_SIMULATION) */
 
diff --git a/compute/zhetrd.c b/compute/zhetrd.c
index 3f2b1ec64..96ff06b67 100644
--- a/compute/zhetrd.c
+++ b/compute/zhetrd.c
@@ -334,7 +334,6 @@ int CHAMELEON_zhetrd_Tile_Async( cham_job_t jobz,
     CHAM_desc_t descA;
     CHAM_desc_t descAB;
     int N, NB, LDAB;
-    int status;
     CHAM_desc_t D, *Dptr = NULL;
 
     chamctxt = chameleon_context_self();
@@ -420,14 +419,16 @@ int CHAMELEON_zhetrd_Tile_Async( cham_job_t jobz,
 
     /* Reduce band matrix to tridiagonal matrix */
 #if !defined(CHAMELEON_SIMULATION)
-    status = LAPACKE_zhbtrd( LAPACK_COL_MAJOR,
-                             chameleon_lapack_const(jobz),
-                             chameleon_lapack_const(uplo),
-                             N, NB,
-                             (CHAMELEON_Complex64_t *) descAB.mat, LDAB,
-                             W, E, Q, LDQ );
-    if (status != 0) {
-        chameleon_error("CHAMELEON_zhetrd_Tile_Async", "LAPACKE_zhbtrd failed");
+    {
+        int info = LAPACKE_zhbtrd( LAPACK_COL_MAJOR,
+                                   chameleon_lapack_const(jobz),
+                                   chameleon_lapack_const(uplo),
+                                   N, NB,
+                                   (CHAMELEON_Complex64_t *) descAB.mat, LDAB,
+                                   W, E, Q, LDQ );
+        if (info != 0) {
+            chameleon_error("CHAMELEON_zhetrd_Tile_Async", "LAPACKE_zhbtrd failed");
+        }
     }
 #endif /* !defined(CHAMELEON_SIMULATION) */
     if (Dptr != NULL) {
diff --git a/hqr b/hqr
index 1e7bad3a5..7ad2afcef 160000
--- a/hqr
+++ b/hqr
@@ -1 +1 @@
-Subproject commit 1e7bad3a5e56c28514f8121195ffefdda70335bb
+Subproject commit 7ad2afcef2901aa04c772369b3aa0deb4da9158b
diff --git a/runtime/starpu/include/chameleon_starpu.h.in b/runtime/starpu/include/chameleon_starpu.h.in
index 27d220f4b..7b8da64bf 100644
--- a/runtime/starpu/include/chameleon_starpu.h.in
+++ b/runtime/starpu/include/chameleon_starpu.h.in
@@ -128,8 +128,9 @@ chameleon_starpu_data_iscached(const CHAM_desc_t *A, int m, int n)
     starpu_data_handle_t *ptrtile = A->schedopt;
     ptrtile += ((int64_t)A->lmt) * nn + mm;
 
-    if (!(*ptrtile))
+    if (!(*ptrtile)) {
         return 0;
+    }
 
     return starpu_mpi_cached_receive(*ptrtile);
 }
@@ -139,7 +140,9 @@ chameleon_starpu_data_iscached(const CHAM_desc_t *A, int m, int n)
 
 #else
 
+#if defined(CHAMELEON_USE_MPI)
 #warning "WAR dependencies need starpu_mpi_cached_receive support from StarPU 1.2.1 or greater"
+#endif
 #define RUNTIME_ACCESS_WRITE_CACHED(A, Am, An) do {} while (0)
 
 #endif
diff --git a/timing/time_zlange_tile.c b/timing/time_zlange_tile.c
index 8c445d2a5..7991a9366 100644
--- a/timing/time_zlange_tile.c
+++ b/timing/time_zlange_tile.c
@@ -27,7 +27,7 @@
 static int
 RunTest(int *iparam, double *dparam, chameleon_time_t *t_)
 {
-    double normcham, normlapack, result;
+    double normcham;
     int    norm = ChamInfNorm;
 
     PASTE_CODE_IPARAM_LOCALS( iparam );
@@ -45,6 +45,8 @@ RunTest(int *iparam, double *dparam, chameleon_time_t *t_)
     /* Check the solution */
     if ( check )
     {
+        double normlapack, result;
+
         /* Allocate Data */
         PASTE_TILE_TO_LAPACK( descA, A, check, CHAMELEON_Complex64_t, M, N );
         double *work = (double*) malloc(chameleon_max(M,N)*sizeof(double));
diff --git a/tools/analysis.sh b/tools/analysis.sh
index a68733b07..2359771ec 100755
--- a/tools/analysis.sh
+++ b/tools/analysis.sh
@@ -17,6 +17,7 @@ lcov -a $PWD/chameleon_starpu.lcov
      -a $PWD/chameleon_quark.lcov
      -a $PWD/chameleon_parsec.lcov
      -o $PWD/chameleon.lcov
+lcov --summary chameleon.lcov
 lcov_cobertura.py chameleon.lcov --output chameleon_coverage.xml
 
 # Undefine this because not relevant in our configuration
-- 
GitLab