From a9204f6e7ebdc05f10b0a50951172deded55a6c4 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Tue, 12 Dec 2017 15:19:45 +0100
Subject: [PATCH] Rename the flush functions

---
 compute/pzbuild.c                            |  4 +-
 compute/pzgelqf.c                            |  5 +-
 compute/pzgelqf_param.c                      |  5 +-
 compute/pzgelqfrh.c                          |  5 +-
 compute/pzgemm.c                             | 11 ++-
 compute/pzgeqrf.c                            |  5 +-
 compute/pzgeqrf_param.c                      |  5 +-
 compute/pzgeqrfrh.c                          |  6 +-
 compute/pzgetrf_incpiv.c                     |  5 +-
 compute/pzgetrf_nopiv.c                      |  4 +-
 compute/pzhemm.c                             |  5 +-
 compute/pzher2k.c                            |  5 +-
 compute/pzherk.c                             |  3 +-
 compute/pzhetrd_he2hb.c                      |  4 +-
 compute/pzlacpy.c                            |  3 +-
 compute/pzlag2c.c                            |  3 +-
 compute/pzlange.c                            |  2 +-
 compute/pzlanhe.c                            |  2 +-
 compute/pzlansy.c                            |  2 +-
 compute/pzlantr.c                            |  2 +-
 compute/pzlascal.c                           |  3 +-
 compute/pzlaset.c                            |  2 +-
 compute/pzlaset2.c                           |  4 +-
 compute/pzlauum.c                            | 10 +--
 compute/pzplghe.c                            | 80 ++++++++++----------
 compute/pzplgsy.c                            | 16 ++--
 compute/pzplrnt.c                            |  2 +-
 compute/pzpotrf.c                            |  9 +--
 compute/pzpotrimm.c                          | 37 ++++-----
 compute/pzsymm.c                             | 14 ++--
 compute/pzsyr2k.c                            |  5 +-
 compute/pzsyrk.c                             |  3 +-
 compute/pzsytrf.c                            | 10 +--
 compute/pztile.c                             |  5 +-
 compute/pztile2band.c                        |  2 +-
 compute/pztpgqrt.c                           |  9 ++-
 compute/pztpqrt.c                            |  5 +-
 compute/pztradd.c                            |  4 +
 compute/pztrmm.c                             |  4 +-
 compute/pztrsm.c                             | 48 ++++++------
 compute/pztrsmpl.c                           |  3 +-
 compute/pztrtri.c                            | 14 ++--
 compute/pzunglq.c                            |  6 +-
 compute/pzunglq_param.c                      |  7 +-
 compute/pzunglqrh.c                          |  7 +-
 compute/pzungqr.c                            |  7 +-
 compute/pzungqr_param.c                      |  7 +-
 compute/pzungqrrh.c                          |  8 +-
 compute/pzunmlq.c                            |  6 +-
 compute/pzunmlq_param.c                      |  7 +-
 compute/pzunmlqrh.c                          |  7 +-
 compute/pzunmqr.c                            |  6 +-
 compute/pzunmqr_param.c                      |  7 +-
 compute/pzunmqrrh.c                          |  6 +-
 control/control.c                            |  2 +-
 include/chameleon/morse_tasks.h              |  8 +-
 runtime/parsec/codelets/codelet_dataflush.c  | 23 ++++--
 runtime/quark/codelets/codelet_dataflush.c   | 21 +++--
 runtime/starpu/codelets/codelet_dataflush.c  | 48 ++++++++++--
 runtime/starpu/codelets/codelet_ztile_zero.c |  6 +-
 timing/time_zsytrf_tile.c                    |  2 +-
 61 files changed, 362 insertions(+), 204 deletions(-)

diff --git a/compute/pzbuild.c b/compute/pzbuild.c
index 2dc7586d7..1b8d361a4 100644
--- a/compute/pzbuild.c
+++ b/compute/pzbuild.c
@@ -86,6 +86,6 @@ void morse_pzbuild( MORSE_enum uplo, MORSE_desc_t *A, void *user_data, void* use
     }
   }
 
-  RUNTIME_options_finalize(&options, morse);
-  MORSE_TASK_dataflush_all();
+  MORSE_TASK_flush_desc( &options, uplo, A );
+  RUNTIME_options_finalize( &options, morse);
 }
diff --git a/compute/pzgelqf.c b/compute/pzgelqf.c
index 14b8d1c94..3821a1209 100644
--- a/compute/pzgelqf.c
+++ b/compute/pzgelqf.c
@@ -152,8 +152,11 @@ void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D,
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpper, T );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgelqf_param.c b/compute/pzgelqf_param.c
index 4ab23160f..88588051e 100644
--- a/compute/pzgelqf_param.c
+++ b/compute/pzgelqf_param.c
@@ -196,9 +196,12 @@ void morse_pzgelqf_param( const libhqr_tree_t *qrtree, MORSE_desc_t *A,
         RUNTIME_iteration_pop(morse);
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpper, TS );
+    MORSE_TASK_flush_desc( &options, MorseUpper, TT );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgelqfrh.c b/compute/pzgelqfrh.c
index 5f906d0ac..141d94195 100644
--- a/compute/pzgelqfrh.c
+++ b/compute/pzgelqfrh.c
@@ -180,8 +180,11 @@ void morse_pzgelqfrh(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D, int BS,
         }
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpper, T );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgemm.c b/compute/pzgemm.c
index e661dbf64..e001af357 100644
--- a/compute/pzgemm.c
+++ b/compute/pzgemm.c
@@ -134,20 +134,19 @@ void morse_pzgemm(MORSE_enum transA, MORSE_enum transB,
                     }
                 }
             }
+            MORSE_TASK_flush_data( &options, C(m, n) );
         }
         if (transA == MorseNoTrans) {
             for (k = 0; k < A->nt; k++) {
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
             }
         } else {
             for (k = 0; k < A->mt; k++) {
-                MORSE_TASK_dataflush( &options, A(k, m) );
+                MORSE_TASK_flush_data( &options, A(k, m) );
             }
         }
-        for (n = 0; n < C->nt; n++) {
-            MORSE_TASK_dataflush( &options, C(m, n) );
-        }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzgeqrf.c b/compute/pzgeqrf.c
index 1944e03d8..1ccd8bb99 100644
--- a/compute/pzgeqrf.c
+++ b/compute/pzgeqrf.c
@@ -146,8 +146,11 @@ void morse_pzgeqrf(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D,
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseLower, T );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgeqrf_param.c b/compute/pzgeqrf_param.c
index 945a07029..2382953a8 100644
--- a/compute/pzgeqrf_param.c
+++ b/compute/pzgeqrf_param.c
@@ -195,9 +195,12 @@ void morse_pzgeqrf_param( const libhqr_tree_t *qrtree, MORSE_desc_t *A,
         RUNTIME_iteration_pop(morse);
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseLower, TS );
+    MORSE_TASK_flush_desc( &options, MorseLower, TT );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgeqrfrh.c b/compute/pzgeqrfrh.c
index 0176d8c19..aeec53fab 100644
--- a/compute/pzgeqrfrh.c
+++ b/compute/pzgeqrfrh.c
@@ -177,11 +177,13 @@ void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *D, int BS,
                 }
             }
         }
-
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseLower, T );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzgetrf_incpiv.c b/compute/pzgetrf_incpiv.c
index 83efd149d..9b01a7552 100644
--- a/compute/pzgetrf_incpiv.c
+++ b/compute/pzgetrf_incpiv.c
@@ -135,9 +135,12 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseLower, L );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 
     morse_desc_mat_free(DIAG);
     free(DIAG);
diff --git a/compute/pzgetrf_nopiv.c b/compute/pzgetrf_nopiv.c
index 16150478f..138546249 100644
--- a/compute/pzgetrf_nopiv.c
+++ b/compute/pzgetrf_nopiv.c
@@ -103,6 +103,8 @@ void morse_pzgetrf_nopiv(MORSE_desc_t *A,
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzhemm.c b/compute/pzhemm.c
index 1b00663ec..a8582ee59 100644
--- a/compute/pzhemm.c
+++ b/compute/pzhemm.c
@@ -226,6 +226,9 @@ void morse_pzhemm(MORSE_enum side, MORSE_enum uplo,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, C );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzher2k.c b/compute/pzher2k.c
index 87778f4eb..9bde1020a 100644
--- a/compute/pzher2k.c
+++ b/compute/pzher2k.c
@@ -214,6 +214,9 @@ void morse_pzher2k(MORSE_enum uplo, MORSE_enum trans,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, C );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzherk.c b/compute/pzherk.c
index dcb567fcf..e3dd914f3 100644
--- a/compute/pzherk.c
+++ b/compute/pzherk.c
@@ -173,6 +173,7 @@ void morse_pzherk(MORSE_enum uplo, MORSE_enum trans,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, uplo, C );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzhetrd_he2hb.c b/compute/pzhetrd_he2hb.c
index 090f185fb..0d8ed1d2f 100644
--- a/compute/pzhetrd_he2hb.c
+++ b/compute/pzhetrd_he2hb.c
@@ -435,9 +435,11 @@ void morse_pzhetrd_he2hb(MORSE_enum uplo,
                           A(k, k), ldak);
     }
 
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 
     MORSE_Sequence_Wait(sequence);
     morse_desc_mat_free(D);
diff --git a/compute/pzlacpy.c b/compute/pzlacpy.c
index 1f88ed10a..220c8b9db 100644
--- a/compute/pzlacpy.c
+++ b/compute/pzlacpy.c
@@ -129,6 +129,7 @@ void morse_pzlacpy(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzlag2c.c b/compute/pzlag2c.c
index 191526ee6..ec193214e 100644
--- a/compute/pzlag2c.c
+++ b/compute/pzlag2c.c
@@ -67,6 +67,7 @@ void morse_pclag2z(MORSE_desc_t *SA, MORSE_desc_t *B,
                 B(m, n), ldbm);
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, SA );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzlange.c b/compute/pzlange.c
index ff9ccd9fc..83eee09a6 100644
--- a/compute/pzlange.c
+++ b/compute/pzlange.c
@@ -412,5 +412,5 @@ void morse_pzlange(MORSE_enum norm, MORSE_desc_t *A, double *result,
     MORSE_Desc_Destroy( &(RESULT) );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzlanhe.c b/compute/pzlanhe.c
index 8e0bb19e0..a637a283d 100644
--- a/compute/pzlanhe.c
+++ b/compute/pzlanhe.c
@@ -456,5 +456,5 @@ void morse_pzlanhe(MORSE_enum norm, MORSE_enum uplo, MORSE_desc_t *A, double *re
     }
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzlansy.c b/compute/pzlansy.c
index 4fc9c6bde..cdb4c1dca 100644
--- a/compute/pzlansy.c
+++ b/compute/pzlansy.c
@@ -465,5 +465,5 @@ void morse_pzlansy(MORSE_enum norm, MORSE_enum uplo, MORSE_desc_t *A, double *re
     }
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzlantr.c b/compute/pzlantr.c
index c9dc86e77..7f6ded725 100644
--- a/compute/pzlantr.c
+++ b/compute/pzlantr.c
@@ -665,5 +665,5 @@ void morse_pzlantr(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
     }
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzlascal.c b/compute/pzlascal.c
index 9829782dc..2659c3d7e 100644
--- a/compute/pzlascal.c
+++ b/compute/pzlascal.c
@@ -97,7 +97,6 @@ void morse_pzlascal(MORSE_enum uplo, MORSE_Complex64_t alpha, MORSE_desc_t *A,
             }
         }
     }
-    RUNTIME_options_ws_free(&options);
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzlaset.c b/compute/pzlaset.c
index 314acf23f..a14ba24f0 100644
--- a/compute/pzlaset.c
+++ b/compute/pzlaset.c
@@ -118,6 +118,6 @@ void morse_pzlaset(MORSE_enum uplo,
                A(j, j), ldaj);
        }
     }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzlaset2.c b/compute/pzlaset2.c
index 7c0ce6306..c56661594 100644
--- a/compute/pzlaset2.c
+++ b/compute/pzlaset2.c
@@ -107,7 +107,7 @@ void morse_pzlaset2(MORSE_enum uplo, MORSE_Complex64_t alpha,
                    A(i, j), ldai);
            }
        }
-    } 
+    }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzlauum.c b/compute/pzlauum.c
index 1dbba64e5..9ff23bebe 100644
--- a/compute/pzlauum.c
+++ b/compute/pzlauum.c
@@ -76,7 +76,7 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
                 }
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
                 MORSE_TASK_ztrmm(
                     &options,
                     MorseLeft, uplo, MorseConjTrans, MorseNonUnit,
@@ -84,7 +84,7 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
                     1.0, A(k, k), ldak,
                          A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_zlauum(
                 &options,
                 uplo, tempkm, A->mb,
@@ -121,7 +121,7 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
                 MORSE_TASK_ztrmm(
                     &options,
                     MorseRight, uplo, MorseConjTrans, MorseNonUnit,
@@ -129,13 +129,13 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
                     1.0, A(k, k), ldak,
                          A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_zlauum(
                 &options,
                 uplo, tempkn, A->mb,
                 A(k, k), ldak);
         }
     }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzplghe.c b/compute/pzplghe.c
index 068ca66cb..d0b0d16e0 100644
--- a/compute/pzplghe.c
+++ b/compute/pzplghe.c
@@ -36,7 +36,7 @@
  *  morse_pzplghe - Generate a random hermitian (positive definite if 'bump' is large enough) half-matrix by tiles.
  **/
 void morse_pzplghe( double bump, MORSE_enum uplo, MORSE_desc_t *A,
-		            unsigned long long int seed,
+                    unsigned long long int seed,
                     MORSE_sequence_t *sequence, MORSE_request_t *request )
 {
     MORSE_context_t *morse;
@@ -55,48 +55,48 @@ void morse_pzplghe( double bump, MORSE_enum uplo, MORSE_desc_t *A,
     	tempmm = m == A->mt-1 ? A->m-m*A->mb : A->mb;
     	ldam = BLKLDD(A, m);
 
-		/*
-		 *  MorseLower
-		 */
-		if (uplo == MorseLower) {
-			for (n = 0; n <= m; n++) {
-				tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
+        /*
+         *  MorseLower
+         */
+        if (uplo == MorseLower) {
+            for (n = 0; n <= m; n++) {
+                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
 
-				options.priority = m + n;
-				MORSE_TASK_zplghe(
-					&options,
-					bump, tempmm, tempnn, A(m, n), ldam,
-					A->m, m*A->mb, n*A->nb, seed );
-			}
-		}
-		/*
-		 * MorseUpper
-		 */
-		else if (uplo == MorseUpper) {
-			for (n = m; n < A->nt; n++) {
-				tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
+                options.priority = m + n;
+                MORSE_TASK_zplghe(
+                    &options,
+                    bump, tempmm, tempnn, A(m, n), ldam,
+                    A->m, m*A->mb, n*A->nb, seed );
+            }
+        }
+        /*
+         * MorseUpper
+         */
+        else if (uplo == MorseUpper) {
+            for (n = m; n < A->nt; n++) {
+                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
 
-				options.priority = m + n;
-				MORSE_TASK_zplghe(
-					&options,
-					bump, tempmm, tempnn, A(m, n), ldam,
-					A->m, m*A->mb, n*A->nb, seed );
-			}
-		}
-		/*
-		 * MorseUpperLower
-		 */
-		else {
-			for (n = 0; n < A->nt; n++) {
-				tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
+                options.priority = m + n;
+                MORSE_TASK_zplghe(
+                    &options,
+                    bump, tempmm, tempnn, A(m, n), ldam,
+                    A->m, m*A->mb, n*A->nb, seed );
+            }
+        }
+        /*
+         * MorseUpperLower
+         */
+        else {
+            for (n = 0; n < A->nt; n++) {
+                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
 
-				MORSE_TASK_zplghe(
-					&options,
-					bump, tempmm, tempnn, A(m, n), ldam,
-					A->m, m*A->mb, n*A->nb, seed );
-			}
-		}
+                MORSE_TASK_zplghe(
+                    &options,
+                    bump, tempmm, tempnn, A(m, n), ldam,
+                    A->m, m*A->mb, n*A->nb, seed );
+            }
+        }
     }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzplgsy.c b/compute/pzplgsy.c
index 9e0ae59de..3c8c288bf 100644
--- a/compute/pzplgsy.c
+++ b/compute/pzplgsy.c
@@ -87,16 +87,16 @@ void morse_pzplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, MORSE_desc_t *A,
          * MorseUpperLower
          */
         else {
-			for (n = 0; n < A->nt; n++) {
-				tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
+            for (n = 0; n < A->nt; n++) {
+                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
 
-				MORSE_TASK_zplgsy(
-					&options,
-					bump, tempmm, tempnn, A(m, n), ldam,
-					A->m, m*A->mb, n*A->nb, seed );
-			}
+                MORSE_TASK_zplgsy(
+                    &options,
+                    bump, tempmm, tempnn, A(m, n), ldam,
+                    A->m, m*A->mb, n*A->nb, seed );
+            }
         }
     }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzplrnt.c b/compute/pzplrnt.c
index 29ff7e47e..1e2fc8c61 100644
--- a/compute/pzplrnt.c
+++ b/compute/pzplrnt.c
@@ -60,6 +60,6 @@ void morse_pzplrnt( MORSE_desc_t *A, unsigned long long int seed,
                 A->m, m*A->mb, n*A->nb, seed );
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzpotrf.c b/compute/pzpotrf.c
index bc648c74c..662c96fd1 100644
--- a/compute/pzpotrf.c
+++ b/compute/pzpotrf.c
@@ -84,7 +84,7 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (n = k+1; n < A->nt; n++) {
                 tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
@@ -111,7 +111,7 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(n, k), ldan,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(n, k) );
+                MORSE_TASK_flush_data( &options, A(n, k) );
             }
             RUNTIME_iteration_pop(morse);
         }
@@ -144,7 +144,7 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (m = k+1; m < A->mt; m++) {
                 tempmm = m == A->mt-1 ? A->m - m*A->mb : A->mb;
@@ -170,13 +170,12 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(k, n), ldak,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(k, m) );
+                MORSE_TASK_flush_data( &options, A(k, m) );
             }
 
             RUNTIME_iteration_pop(morse);
         }
     }
-
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzpotrimm.c b/compute/pzpotrimm.c
index a9d779b30..abbbd1d03 100644
--- a/compute/pzpotrimm.c
+++ b/compute/pzpotrimm.c
@@ -85,7 +85,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     zone, A(k, k), ldak,
                           A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (n = k+1; n < A->nt; n++) {
                 tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
@@ -108,7 +108,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                                A(n, k), ldan,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(n, k) );
+                MORSE_TASK_flush_data( &options, A(n, k) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -143,10 +143,10 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                               A(k, n), ldak,
                         zone, A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
                 MORSE_TASK_ztrsm(
                     &options,
                     MorseLeft, uplo, MorseNoTrans, MorseNonUnit,
@@ -154,7 +154,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     zone, A(k, k), ldak,
                           A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_ztrtri(
                 &options,
                 uplo, MorseNonUnit,
@@ -192,7 +192,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                 }
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
                 MORSE_TASK_ztrmm(
                     &options,
                     MorseLeft, uplo, MorseConjTrans, MorseNonUnit,
@@ -200,7 +200,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     1.0, A(k, k), ldak,
                          A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_zlauum(
                 &options,
                 uplo, tempkm, A->mb,
@@ -257,10 +257,10 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                         }
                     }
                 }
-                MORSE_TASK_dataflush( &options, B(m, k) );
+                MORSE_TASK_flush_data( &options, B(m, k) );
             }
             for (n = 0; n <= k; n++) {
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -293,7 +293,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     zone, A(k, k), ldak,
                           A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (m = k+1; m < A->mt; m++) {
                 tempmm = m == A->mt-1 ? A->m - m*A->mb : A->mb;
@@ -317,7 +317,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                                A(k, n), ldak,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(k, m) );
+                MORSE_TASK_flush_data( &options, A(k, m) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -351,11 +351,11 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                               A(k, n), ldak,
                         zone, A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
                 MORSE_TASK_ztrsm(
                     &options,
                     MorseRight, uplo, MorseNoTrans, MorseNonUnit,
@@ -363,7 +363,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     zone, A(k, k), ldak,
                           A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_ztrtri(
                 &options,
                 uplo, MorseNonUnit,
@@ -403,7 +403,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
                 MORSE_TASK_ztrmm(
                     &options,
                     MorseRight, uplo, MorseConjTrans, MorseNonUnit,
@@ -411,7 +411,7 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                     1.0, A(k, k), ldak,
                          A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_zlauum(
                 &options,
                 uplo, tempkn, A->mb,
@@ -468,10 +468,10 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
                         }
                     }
                 }
-                MORSE_TASK_dataflush( &options, B(m, k) );
+                MORSE_TASK_flush_data( &options, B(m, k) );
             }
             for (m = 0; m <= k; m++) {
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -479,4 +479,5 @@ void morse_pzpotrimm(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_de
     }
 
     RUNTIME_options_finalize(&options, morse);
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzsymm.c b/compute/pzsymm.c
index eda68c35c..71b958957 100644
--- a/compute/pzsymm.c
+++ b/compute/pzsymm.c
@@ -141,16 +141,16 @@ void morse_pzsymm(MORSE_enum side, MORSE_enum uplo,
                         }
                     }
                 }
-                MORSE_TASK_dataflush( &options, B(k, n) );
+                MORSE_TASK_flush_data( &options, B(k, n) );
             }
             if (uplo == MorseLower) {
                 for (n = 0; n <= k; n++) {
-                    MORSE_TASK_dataflush( &options, A(k, n) );
+                    MORSE_TASK_flush_data( &options, A(k, n) );
                 }
             }
             else {
                 for (m = 0; m <= k; m++) {
-                    MORSE_TASK_dataflush( &options, A(m, k) );
+                    MORSE_TASK_flush_data( &options, A(m, k) );
                 }
             }
         }
@@ -242,20 +242,20 @@ void morse_pzsymm(MORSE_enum side, MORSE_enum uplo,
                         }
                     }
                 }
-                MORSE_TASK_dataflush( &options, B(m, k) );
+                MORSE_TASK_flush_data( &options, B(m, k) );
             }
             if (uplo == MorseLower) {
                 for (n = 0; n <= k; n++) {
-                    MORSE_TASK_dataflush( &options, A(k, n) );
+                    MORSE_TASK_flush_data( &options, A(k, n) );
                 }
             }
             else {
                 for (m = 0; m <= k; m++) {
-                    MORSE_TASK_dataflush( &options, A(m, k) );
+                    MORSE_TASK_flush_data( &options, A(m, k) );
                 }
             }
         }
     }
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzsyr2k.c b/compute/pzsyr2k.c
index ada387ab2..68e4d6ee1 100644
--- a/compute/pzsyr2k.c
+++ b/compute/pzsyr2k.c
@@ -213,6 +213,9 @@ void morse_pzsyr2k(MORSE_enum uplo, MORSE_enum trans,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, uplo, C );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzsyrk.c b/compute/pzsyrk.c
index 3312af9ff..49508895c 100644
--- a/compute/pzsyrk.c
+++ b/compute/pzsyrk.c
@@ -172,6 +172,7 @@ void morse_pzsyrk(MORSE_enum uplo, MORSE_enum trans,
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, uplo, C );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzsytrf.c b/compute/pzsytrf.c
index 818ba9625..2ea509a51 100644
--- a/compute/pzsytrf.c
+++ b/compute/pzsytrf.c
@@ -80,7 +80,7 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (n = k+1; n < A->nt; n++) {
                 tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
@@ -103,7 +103,7 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(n, k), ldan,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(n, k) );
+                MORSE_TASK_flush_data( &options, A(n, k) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -133,7 +133,7 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
 
             for (m = k+1; m < A->mt; m++) {
                 tempmm = m == A->mt-1 ? A->m - m*A->mb : A->mb;
@@ -157,14 +157,14 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(k, n), ldak,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(k, m) );
+                MORSE_TASK_flush_data( &options, A(k, m) );
             }
 
             RUNTIME_iteration_pop(morse);
         }
     }
 
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pztile.c b/compute/pztile.c
index 1732f5bd0..c52220010 100644
--- a/compute/pztile.c
+++ b/compute/pztile.c
@@ -74,7 +74,7 @@ void morse_pzlapack_to_tile(MORSE_Complex64_t *Af77, int ldaf77, MORSE_desc_t *A
 
     RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     RUNTIME_desc_getoncpu( &B );
     RUNTIME_desc_destroy( &B );
 }
@@ -122,9 +122,9 @@ void morse_pztile_to_lapack(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int ldaf77
         }
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
     RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
-    MORSE_TASK_dataflush_all();
     RUNTIME_desc_getoncpu( &B );
     RUNTIME_desc_destroy( &B );
 }
@@ -160,5 +160,4 @@ void morse_pztile_zero(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_reques
 
     RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pztile2band.c b/compute/pztile2band.c
index a5efb2777..22b8ca68f 100644
--- a/compute/pztile2band.c
+++ b/compute/pztile2band.c
@@ -118,7 +118,7 @@ void morse_pztile2band(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B,
        }
     }
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 }
 #undef B
 #undef A
diff --git a/compute/pztpgqrt.c b/compute/pztpgqrt.c
index 6abd4af7a..fe4b413ea 100644
--- a/compute/pztpgqrt.c
+++ b/compute/pztpgqrt.c
@@ -162,9 +162,14 @@ void morse_pztpgqrt( int L,
         RUNTIME_iteration_pop(morse);
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, V1 );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, V2 );
+    MORSE_TASK_flush_desc( &options, MorseLower,      T1 );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, T2 );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q1 );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q2 );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D  );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
-
     (void)D;
 }
diff --git a/compute/pztpqrt.c b/compute/pztpqrt.c
index d20512803..6101c0934 100644
--- a/compute/pztpqrt.c
+++ b/compute/pztpqrt.c
@@ -110,7 +110,10 @@ void morse_pztpqrt( int L, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *T,
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseLower,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pztradd.c b/compute/pztradd.c
index 152960e9a..8d121b7e9 100644
--- a/compute/pztradd.c
+++ b/compute/pztradd.c
@@ -193,4 +193,8 @@ void morse_pztradd(MORSE_enum uplo, MORSE_enum trans,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, uplo, B );
+    RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pztrmm.c b/compute/pztrmm.c
index 1d9b20c0a..b9f6cb006 100644
--- a/compute/pztrmm.c
+++ b/compute/pztrmm.c
@@ -310,6 +310,8 @@ void morse_pztrmm(MORSE_enum side, MORSE_enum uplo,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, uplo, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pztrsm.c b/compute/pztrsm.c
index f981f68bb..c861890cc 100644
--- a/compute/pztrsm.c
+++ b/compute/pztrsm.c
@@ -75,7 +75,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             lalpha, A(B->mt-1-k, B->mt-1-k), ldak,  /* lda * tempkm */
                                     B(B->mt-1-k,        n), ldbk); /* ldb * tempnn */
                     }
-                    MORSE_TASK_dataflush( &options, A(B->mt-1-k, B->mt-1-k) );
+                    MORSE_TASK_flush_data( &options, A(B->mt-1-k, B->mt-1-k) );
                     for (m = k+1; m < B->mt; m++) {
                         ldam = BLKLDD(A, B->mt-1-m);
                         ldbm = BLKLDD(B, B->mt-1-m);
@@ -89,10 +89,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         B(B->mt-1-k, n       ), ldbk,
                                 lalpha, B(B->mt-1-m, n       ), ldbm);
                         }
-                        MORSE_TASK_dataflush( &options, A(B->mt-1-m, B->mt-1-k) );
+                        MORSE_TASK_flush_data( &options, A(B->mt-1-m, B->mt-1-k) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, B(B->mt-1-k, n) );
+                        MORSE_TASK_flush_data( &options, B(B->mt-1-k, n) );
                     }
                 }
             }
@@ -114,7 +114,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             lalpha, A(k, k), ldak,
                                     B(k, n), ldbk);
                     }
-                    MORSE_TASK_dataflush( &options, A(k, k) );
+                    MORSE_TASK_flush_data( &options, A(k, k) );
                     for (m = k+1; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
                         ldbm = BLKLDD(B, m);
@@ -128,10 +128,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         B(k, n), ldbk,
                                 lalpha, B(m, n), ldbm);
                         }
-                        MORSE_TASK_dataflush( &options, A(k, m) );
+                        MORSE_TASK_flush_data( &options, A(k, m) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, B(k, n) );
+                        MORSE_TASK_flush_data( &options, B(k, n) );
                     }
 
                 }
@@ -156,7 +156,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             lalpha, A(k, k), ldak,
                                     B(k, n), ldbk);
                     }
-                    MORSE_TASK_dataflush( &options, A(k, k) );
+                    MORSE_TASK_flush_data( &options, A(k, k) );
                     for (m = k+1; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
                         ldam = BLKLDD(A, m);
@@ -171,10 +171,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         B(k, n), ldbk,
                                 lalpha, B(m, n), ldbm);
                         }
-                        MORSE_TASK_dataflush( &options, A(m, k) );
+                        MORSE_TASK_flush_data( &options, A(m, k) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, B(k, n) );
+                        MORSE_TASK_flush_data( &options, B(k, n) );
                     }
                 }
             }
@@ -196,7 +196,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             lalpha, A(B->mt-1-k, B->mt-1-k), ldak,
                                     B(B->mt-1-k,        n), ldbk);
                     }
-                    MORSE_TASK_dataflush( &options, A(B->mt-1-k, B->mt-1-k) );
+                    MORSE_TASK_flush_data( &options, A(B->mt-1-k, B->mt-1-k) );
                     for (m = k+1; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
                         ldbm = BLKLDD(B, B->mt-1-m);
@@ -210,10 +210,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         B(B->mt-1-k, n       ), ldbk,
                                 lalpha, B(B->mt-1-m, n       ), ldbm);
                         }
-                        MORSE_TASK_dataflush( &options, A(B->mt-1-k, B->mt-1-m) );
+                        MORSE_TASK_flush_data( &options, A(B->mt-1-k, B->mt-1-m) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, B(B->mt-1-k, n) );
+                        MORSE_TASK_flush_data( &options, B(B->mt-1-k, n) );
                     }
                 }
             }
@@ -239,7 +239,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             lalpha, A(k, k), ldak,  /* lda * tempkn */
                                     B(m, k), ldbm); /* ldb * tempkn */
                     }
-                    MORSE_TASK_dataflush( &options, A(k, k) );
+                    MORSE_TASK_flush_data( &options, A(k, k) );
                     for (m = 0; m < B->mt; m++) {
                         tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
                         ldbm = BLKLDD(B, m);
@@ -253,10 +253,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         A(k, n), ldak,  /* lda * tempnn */
                                 lalpha, B(m, n), ldbm); /* ldb * tempnn */
                         }
-                        MORSE_TASK_dataflush( &options, B(m, k) );
+                        MORSE_TASK_flush_data( &options, B(m, k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, A(k, n) );
+                        MORSE_TASK_flush_data( &options, A(k, n) );
                     }
                 }
             }
@@ -276,7 +276,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             tempmm, tempkn, A->mb,
                             alpha, A(B->nt-1-k, B->nt-1-k), ldak,  /* lda * tempkn */
                                    B(       m, B->nt-1-k), ldbm); /* ldb * tempkn */
-                        MORSE_TASK_dataflush( &options, A(B->nt-1-k, B->nt-1-k) );
+                        MORSE_TASK_flush_data( &options, A(B->nt-1-k, B->nt-1-k) );
 
                         for (n = k+1; n < B->nt; n++) {
                             ldan = BLKLDD(A, B->nt-1-n);
@@ -288,10 +288,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                            A(B->nt-1-n, B->nt-1-k), ldan, /* A->mb * tempkn (Never last row) */
                                 zone,      B(m,        B->nt-1-n), ldbm); /* ldb  * B->nb   */
                         }
-                        MORSE_TASK_dataflush( &options, B(m,        B->nt-1-k) );
+                        MORSE_TASK_flush_data( &options, B(m,        B->nt-1-k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, A(B->nt-1-n, B->nt-1-k) );
+                        MORSE_TASK_flush_data( &options, A(B->nt-1-n, B->nt-1-k) );
                     }
                 }
             }
@@ -314,7 +314,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             tempmm, tempkn, A->mb,
                             lalpha, A(B->nt-1-k, B->nt-1-k), ldak,  /* lda * tempkn */
                                     B(       m, B->nt-1-k), ldbm); /* ldb * tempkn */
-                        MORSE_TASK_dataflush( &options, A(B->nt-1-k, B->nt-1-k) );
+                        MORSE_TASK_flush_data( &options, A(B->nt-1-k, B->nt-1-k) );
 
                         for (n = k+1; n < B->nt; n++) {
                             MORSE_TASK_zgemm(
@@ -325,10 +325,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                         A(B->nt-1-k, B->nt-1-n), ldak,  /* lda * B->nb   */
                                 lalpha, B(m,        B->nt-1-n), ldbm); /* ldb * B->nb   */
                         }
-                        MORSE_TASK_dataflush( &options, B(m,        B->nt-1-k) );
+                        MORSE_TASK_flush_data( &options, B(m,        B->nt-1-k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, A(B->nt-1-k, B->nt-1-n) );
+                        MORSE_TASK_flush_data( &options, A(B->nt-1-k, B->nt-1-n) );
                     }
                 }
             }
@@ -348,7 +348,7 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                             tempmm, tempkn, A->mb,
                             alpha, A(k, k), ldak,  /* lda * tempkn */
                                    B(m, k), ldbm); /* ldb * tempkn */
-                        MORSE_TASK_dataflush( &options, A(k, k) );
+                        MORSE_TASK_flush_data( &options, A(k, k) );
 
                         for (n = k+1; n < B->nt; n++) {
                             tempnn = n == B->nt-1 ? B->n-n*B->nb : B->nb;
@@ -361,10 +361,10 @@ void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum trans, MORSE_enum
                                            A(n, k), ldan, /* ldan * tempkn */
                                 zone,      B(m, n), ldbm); /* ldb  * tempnn */
                         }
-                        MORSE_TASK_dataflush( &options, B(m, k) );
+                        MORSE_TASK_flush_data( &options, B(m, k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_dataflush( &options, A(n, k) );
+                        MORSE_TASK_flush_data( &options, A(n, k) );
                     }
 
                 }
diff --git a/compute/pztrsmpl.c b/compute/pztrsmpl.c
index 4c8631b3d..4c51e7a5e 100644
--- a/compute/pztrsmpl.c
+++ b/compute/pztrsmpl.c
@@ -87,6 +87,7 @@ void morse_pztrsmpl(MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *L, int *IPIV
             }
         }
     }
+    MORSE_TASK_flush_desc( &options, MorseLower, L );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pztrtri.c b/compute/pztrtri.c
index 732659656..fbea4fe03 100644
--- a/compute/pztrtri.c
+++ b/compute/pztrtri.c
@@ -82,10 +82,10 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
                               A(k, n), ldak,
                         zone, A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
                 MORSE_TASK_ztrsm(
                     &options,
                     MorseLeft, uplo, MorseNoTrans, diag,
@@ -93,7 +93,7 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(k, n), ldak);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_ztrtri(
                 &options,
                 uplo, diag,
@@ -133,11 +133,11 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
                               A(k, n), ldak,
                         zone, A(m, n), ldam);
                 }
-                MORSE_TASK_dataflush( &options, A(k, n) );
+                MORSE_TASK_flush_data( &options, A(k, n) );
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_dataflush( &options, A(m, k) );
+                MORSE_TASK_flush_data( &options, A(m, k) );
                 MORSE_TASK_ztrsm(
                     &options,
                     MorseRight, uplo, MorseNoTrans, diag,
@@ -145,7 +145,7 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
                     zone, A(k, k), ldak,
                           A(m, k), ldam);
             }
-            MORSE_TASK_dataflush( &options, A(k, k) );
+            MORSE_TASK_flush_data( &options, A(k, k) );
             MORSE_TASK_ztrtri(
                 &options,
                 uplo, diag,
@@ -155,6 +155,6 @@ void morse_pztrtri(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A,
             RUNTIME_iteration_pop(morse);
         }
     }
+    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
 }
diff --git a/compute/pzunglq.c b/compute/pzunglq.c
index 3ae06f9cd..d764b3a71 100644
--- a/compute/pzunglq.c
+++ b/compute/pzunglq.c
@@ -141,8 +141,12 @@ void morse_pzunglq(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T, MORSE_desc
 
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/compute/pzunglq_param.c b/compute/pzunglq_param.c
index 4a5d7c21c..6da5c3070 100644
--- a/compute/pzunglq_param.c
+++ b/compute/pzunglq_param.c
@@ -169,9 +169,14 @@ void morse_pzunglq_param(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_des
         RUNTIME_iteration_pop(morse);
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A  );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q  );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      TS );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      TT );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D  );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzunglqrh.c b/compute/pzunglqrh.c
index ae0bd1f35..bd76fe5be 100644
--- a/compute/pzunglqrh.c
+++ b/compute/pzunglqrh.c
@@ -161,11 +161,14 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
                     Q(m, N), ldqm);
             }
         }
-
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/compute/pzungqr.c b/compute/pzungqr.c
index 15d2d6a55..c2e0829d1 100644
--- a/compute/pzungqr.c
+++ b/compute/pzungqr.c
@@ -139,11 +139,14 @@ void morse_pzungqr(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T, MORSE_desc
                 T(k, k), T->mb,
                 Q(k, n), ldqk);
         }
-
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q );
+    MORSE_TASK_flush_desc( &options, MorseLower,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/compute/pzungqr_param.c b/compute/pzungqr_param.c
index 5c9df7ac5..13b1be1c6 100644
--- a/compute/pzungqr_param.c
+++ b/compute/pzungqr_param.c
@@ -175,9 +175,14 @@ void morse_pzungqr_param(const libhqr_tree_t *qrtree,
         RUNTIME_iteration_pop(morse);
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A  );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q  );
+    MORSE_TASK_flush_desc( &options, MorseLower,      TS );
+    MORSE_TASK_flush_desc( &options, MorseLower,      TT );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D  );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzungqrrh.c b/compute/pzungqrrh.c
index 46d4412a1..c383858d2 100644
--- a/compute/pzungqrrh.c
+++ b/compute/pzungqrrh.c
@@ -166,11 +166,15 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
                     Q(M, n), ldqM);
             }
         }
-
         RUNTIME_iteration_pop(morse);
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, Q );
+    MORSE_TASK_flush_desc( &options, MorseLower,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzunmlq.c b/compute/pzunmlq.c
index 572ac0254..c6547f3dc 100644
--- a/compute/pzunmlq.c
+++ b/compute/pzunmlq.c
@@ -312,8 +312,12 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/compute/pzunmlq_param.c b/compute/pzunmlq_param.c
index 10731ba05..0b5ef65f8 100644
--- a/compute/pzunmlq_param.c
+++ b/compute/pzunmlq_param.c
@@ -432,10 +432,15 @@ void morse_pzunmlq_param(const libhqr_tree_t *qrtree,
         }
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A  );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B  );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      TS );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      TT );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D  );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 
     (void)D;
 }
diff --git a/compute/pzunmlqrh.c b/compute/pzunmlqrh.c
index 7d7c142eb..ac288111c 100644
--- a/compute/pzunmlqrh.c
+++ b/compute/pzunmlqrh.c
@@ -407,8 +407,13 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseUpper,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
     (void)D;
 }
diff --git a/compute/pzunmqr.c b/compute/pzunmqr.c
index da5d91797..86dc63bd7 100644
--- a/compute/pzunmqr.c
+++ b/compute/pzunmqr.c
@@ -317,8 +317,12 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseLower,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/compute/pzunmqr_param.c b/compute/pzunmqr_param.c
index 6dc3e7dac..5f7b20032 100644
--- a/compute/pzunmqr_param.c
+++ b/compute/pzunmqr_param.c
@@ -431,10 +431,15 @@ void morse_pzunmqr_param(const libhqr_tree_t *qrtree,
         }
     }
 
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A  );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B  );
+    MORSE_TASK_flush_desc( &options, MorseLower,      TS );
+    MORSE_TASK_flush_desc( &options, MorseLower,      TT );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D  );
     free(tiles);
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 
     (void)D;
 }
diff --git a/compute/pzunmqrrh.c b/compute/pzunmqrrh.c
index f077cac75..80f9879db 100644
--- a/compute/pzunmqrrh.c
+++ b/compute/pzunmqrrh.c
@@ -412,8 +412,12 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
             }
         }
     }
+
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
+    MORSE_TASK_flush_desc( &options, MorseLower,      T );
+    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_dataflush_all();
     (void)D;
 }
diff --git a/control/control.c b/control/control.c
index 587a24ae1..4a9dff466 100644
--- a/control/control.c
+++ b/control/control.c
@@ -134,7 +134,7 @@ int MORSE_Finalize(void)
         morse_error("MORSE_Finalize()", "MORSE not initialized");
         return MORSE_ERR_NOT_INITIALIZED;
     }
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 #  if !defined(CHAMELEON_SIMULATION)
     RUNTIME_barrier(morse);
 #  endif
diff --git a/include/chameleon/morse_tasks.h b/include/chameleon/morse_tasks.h
index a2fc5efe6..82abf2c78 100644
--- a/include/chameleon/morse_tasks.h
+++ b/include/chameleon/morse_tasks.h
@@ -49,9 +49,11 @@ void MORSE_TASK_stile_zero(const MORSE_option_t *options,
 /*
  * Mark a data as unused after this call
  */
-void MORSE_TASK_dataflush(const MORSE_option_t *options,
-                          const MORSE_desc_t *A, int Am, int An);
-void MORSE_TASK_dataflush_all();
+void MORSE_TASK_flush_data( const MORSE_option_t *options,
+                           const MORSE_desc_t *A, int Am, int An);
+void MORSE_TASK_flush_desc( const MORSE_option_t *options,
+                           MORSE_enum uplo, const MORSE_desc_t *A );
+void MORSE_TASK_flush_all();
 
 #include "chameleon/morse_tasks_z.h"
 #include "chameleon/morse_tasks_d.h"
diff --git a/runtime/parsec/codelets/codelet_dataflush.c b/runtime/parsec/codelets/codelet_dataflush.c
index 606f8dc7d..9b3e40a3d 100644
--- a/runtime/parsec/codelets/codelet_dataflush.c
+++ b/runtime/parsec/codelets/codelet_dataflush.c
@@ -22,17 +22,28 @@
 #include "chameleon_parsec.h"
 #include "chameleon/chameleon_tasks.h"
 
-void MORSE_TASK_dataflush(const MORSE_option_t *options,
-                          const MORSE_desc_t *A, int Am, int An)
+void MORSE_TASK_flush_data( const MORSE_option_t *options,
+                           const MORSE_desc_t *A, int Am, int An )
 {
-    (void)options; (void)A;
+    (void)options; (void)A; (void)Am; (void)An;
 
     /*
-     * This is useful for StarPU implementation, if it happens in Quark, it will
-     * need to be done carefuly to not break both runtimes.
+     * This is useful for StarPU and PaRSEC MPI implementation, if it happens in
+     * Quark, it will need to be done carefuly to not break other runtimes.
      */
 }
 
-void MORSE_TASK_dataflush_all()
+void MORSE_TASK_flush_desc( const MORSE_option_t *options,
+                           MORSE_enum uplo, const MORSE_desc_t *A )
+{
+    (void)options; (void)uplo; (void)A;
+
+    /*
+     * This is useful for StarPU and PaRSEC MPI implementation, if it happens in
+     * Quark, it will need to be done carefuly to not break other runtimes.
+     */
+}
+
+void MORSE_TASK_flush_all()
 {
 }
diff --git a/runtime/quark/codelets/codelet_dataflush.c b/runtime/quark/codelets/codelet_dataflush.c
index 300f33584..cbec78c35 100644
--- a/runtime/quark/codelets/codelet_dataflush.c
+++ b/runtime/quark/codelets/codelet_dataflush.c
@@ -26,17 +26,28 @@
  **/
 #include "chameleon_quark.h"
 
-void MORSE_TASK_dataflush(const MORSE_option_t *options,
-                          const MORSE_desc_t *A, int Am, int An)
+void MORSE_TASK_flush_data( const MORSE_option_t *options,
+                           const MORSE_desc_t *A, int Am, int An )
 {
     (void)options; (void)A; (void)Am; (void)An;
 
     /*
-     * This is useful for StarPU implementation, if it happens in Quark, it will
-     * need to be done carefuly to not break both runtimes.
+     * This is useful for StarPU and PaRSEC MPI implementation, if it happens in
+     * Quark, it will need to be done carefuly to not break other runtimes.
      */
 }
 
-void MORSE_TASK_dataflush_all()
+void MORSE_TASK_flush_desc( const MORSE_option_t *options,
+                           MORSE_enum uplo, const MORSE_desc_t *A )
+{
+    (void)options; (void)uplo; (void)A;
+
+    /*
+     * This is useful for StarPU and PaRSEC MPI implementation, if it happens in
+     * Quark, it will need to be done carefuly to not break other runtimes.
+     */
+}
+
+void MORSE_TASK_flush_all()
 {
 }
diff --git a/runtime/starpu/codelets/codelet_dataflush.c b/runtime/starpu/codelets/codelet_dataflush.c
index 2e43d5ec1..be96e164c 100644
--- a/runtime/starpu/codelets/codelet_dataflush.c
+++ b/runtime/starpu/codelets/codelet_dataflush.c
@@ -56,16 +56,11 @@ int RUNTIME_desc_iscached(const MORSE_desc_t *A, int Am, int An)
 #endif
 #endif
 
-void MORSE_TASK_dataflush(const MORSE_option_t *options,
+void MORSE_TASK_flush_data(const MORSE_option_t *options,
                           const MORSE_desc_t *A, int Am, int An)
 {
     (void)options;
 
-    /*
-     * We can use MORSE_Complex64_t for all precisions since it is not use to
-     * compute the handle address in starpu.  We have to be careful with this if
-     * something similar happen in Quark.
-     */
     {
         starpu_data_handle_t *ptrtile = (starpu_data_handle_t*)(A->schedopt);
         ptrtile += ((int64_t)(A->lmt) * (int64_t)An + (int64_t)Am);
@@ -91,7 +86,46 @@ void MORSE_TASK_dataflush(const MORSE_option_t *options,
     }
 }
 
-void MORSE_TASK_dataflush_all()
+void MORSE_TASK_flush_desc( const MORSE_option_t *options,
+                           MORSE_enum uplo, const MORSE_desc_t *A )
+{
+    int m, n;
+
+    switch (uplo) {
+    /*
+     *  MorseUpper
+     */
+    case MorseUpper:
+        for (m = 0; m < A->mt; m++) {
+            for (n = m; n < A->nt; n++) {
+                MORSE_TASK_flush_data( options, A, m, n );
+            }
+        }
+        break;
+    /*
+     *  MorseLower
+     */
+    case MorseLower:
+        for (m = 0; m < A->mt; m++) {
+            for (n = 0; n < chameleon_min(m+1, A->nt); n++) {
+                MORSE_TASK_flush_data( options, A, m, n );
+            }
+        }
+        break;
+    /*
+     *  MorseUpperLower
+     */
+    case MorseUpperLower:
+    default:
+        for (m = 0; m < A->mt; m++) {
+            for (n = 0; n < A->nt; n++) {
+                MORSE_TASK_flush_data( options, A, m, n );
+            }
+        }
+    }
+}
+
+void MORSE_TASK_flush_all()
 {
 #if defined(CHAMELEON_USE_MPI)
     starpu_mpi_cache_flush_all_data(MPI_COMM_WORLD);
diff --git a/runtime/starpu/codelets/codelet_ztile_zero.c b/runtime/starpu/codelets/codelet_ztile_zero.c
index 26841ceb3..218a0ed15 100644
--- a/runtime/starpu/codelets/codelet_ztile_zero.c
+++ b/runtime/starpu/codelets/codelet_ztile_zero.c
@@ -30,9 +30,9 @@
 /*****************************************************************************
  *
  **/
-void MORSE_TASK_ztile_zero(const const MORSE_option_t *options,
-                           int X1, int X2, int Y1, int Y2,
-                           const MORSE_desc_t *A, int Am, int An, int lda)
+void MORSE_TASK_ztile_zero( const MORSE_option_t *options,
+                            int X1, int X2, int Y1, int Y2,
+                            const MORSE_desc_t *A, int Am, int An, int lda )
 {
     struct starpu_codelet *codelet;
     codelet = &cl_ztile_zero;
diff --git a/timing/time_zsytrf_tile.c b/timing/time_zsytrf_tile.c
index b3ea2ab4b..423b77b70 100644
--- a/timing/time_zsytrf_tile.c
+++ b/timing/time_zsytrf_tile.c
@@ -68,7 +68,7 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
     } 
 	
     PASTE_CODE_FREE_MATRIX( descA );
-    MORSE_TASK_dataflush_all();
+    MORSE_TASK_flush_all();
 
     return 0;
 }
-- 
GitLab