From 8c7df755287efb38773ea5fbda0b98accb99b5df Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Mon, 15 Jan 2018 11:37:01 +0100
Subject: [PATCH] Keep cleaning the flushing methods

---
 compute/pzbuild.c                            |   1 -
 compute/pzgelqf.c                            |   3 -
 compute/pzgelqf_param.c                      |   4 -
 compute/pzgelqfrh.c                          |   3 -
 compute/pzgemm.c                             |   8 +-
 compute/pzgeqrf.c                            |   3 -
 compute/pzgeqrf_param.c                      |   4 -
 compute/pzgeqrfrh.c                          |   3 -
 compute/pzgetrf_incpiv.c                     |   3 -
 compute/pzgetrf_nopiv.c                      |   2 -
 compute/pzhemm.c                             |   4 -
 compute/pzher2k.c                            |   4 -
 compute/pzherk.c                             |   2 -
 compute/pzhetrd_he2hb.c                      |   2 -
 compute/pzlacpy.c                            |   2 -
 compute/pzlag2c.c                            |   2 -
 compute/pzlange.c                            |   1 -
 compute/pzlanhe.c                            |   1 -
 compute/pzlansy.c                            |   1 -
 compute/pzlantr.c                            |   1 -
 compute/pzlascal.c                           |   1 -
 compute/pzlaset.c                            |   1 -
 compute/pzlaset2.c                           |   1 -
 compute/pzlauum.c                            |   9 +-
 compute/pzplghe.c                            |   1 -
 compute/pzplgsy.c                            |   1 -
 compute/pzplrnt.c                            |   1 -
 compute/pzpotrf.c                            |   8 +-
 compute/pzpotrimm.c                          |  37 +++---
 compute/pzsymm.c                             |  13 +-
 compute/pzsyr2k.c                            |   4 -
 compute/pzsyrk.c                             |   2 -
 compute/pzsytrf.c                            |   9 +-
 compute/pztile.c                             |   6 +-
 compute/pztile2band.c                        |   1 -
 compute/pztpgqrt.c                           |   7 --
 compute/pztpqrt.c                            |   3 -
 compute/pztradd.c                            |   2 -
 compute/pztrmm.c                             |   2 -
 compute/pztrsm.c                             |  48 +++----
 compute/pztrsmpl.c                           |   2 -
 compute/pztrtri.c                            |  13 +-
 compute/pzunglq.c                            |   4 -
 compute/pzunglq_param.c                      |   6 -
 compute/pzunglqrh.c                          |   4 -
 compute/pzungqr.c                            |   4 -
 compute/pzungqr_param.c                      |   6 -
 compute/pzungqrrh.c                          |   5 -
 compute/pzunmlq.c                            |   4 -
 compute/pzunmlq_param.c                      |   6 -
 compute/pzunmlqrh.c                          |   5 -
 compute/pzunmqr.c                            |   4 -
 compute/pzunmqr_param.c                      |   6 -
 compute/pzunmqrrh.c                          |   4 -
 compute/zgeadd.c                             |   4 +-
 compute/zgelqf.c                             |   2 +-
 compute/zgelqf_param.c                       |   2 +-
 compute/zgelqs.c                             |   4 +-
 compute/zgelqs_param.c                       |   4 +-
 compute/zgels.c                              |   4 +-
 compute/zgels_param.c                        |   4 +-
 compute/zgemm.c                              |   6 +-
 compute/zgeqrf.c                             |   2 +-
 compute/zgeqrf_param.c                       |   2 +-
 compute/zgeqrs.c                             |   6 +-
 compute/zgeqrs_param.c                       |   8 +-
 compute/zgesv_incpiv.c                       |   4 +-
 compute/zgesv_nopiv.c                        |   4 +-
 compute/zgetrf_incpiv.c                      |   2 +-
 compute/zgetrf_nopiv.c                       |   2 +-
 compute/zgetrs_incpiv.c                      |   4 +-
 compute/zgetrs_nopiv.c                       |   4 +-
 compute/zheevd.c                             |   4 +-
 compute/zhemm.c                              |   6 +-
 compute/zher2k.c                             |   6 +-
 compute/zherk.c                              |   4 +-
 compute/zlange.c                             |   2 +-
 compute/zlanhe.c                             |   2 +-
 compute/zlauum.c                             |   2 +-
 compute/zposv.c                              |   4 +-
 compute/zpotrf.c                             |   2 +-
 compute/zpotri.c                             |   2 +-
 compute/zpotrimm.c                           |   2 +-
 compute/zpotrs.c                             |   4 +-
 compute/zsymm.c                              |   6 +-
 compute/zsyr2k.c                             |   6 +-
 compute/zsyrk.c                              |   4 +-
 compute/zsysv.c                              |   4 +-
 compute/zsytrf.c                             |   2 +-
 compute/zsytrs.c                             |   4 +-
 compute/ztile.c                              |   4 +-
 compute/ztpgqrt.c                            |   4 +-
 compute/ztpqrt.c                             |   4 +-
 compute/ztradd.c                             |   4 +-
 compute/ztrmm.c                              |   4 +-
 compute/ztrsm.c                              |   4 +-
 compute/ztrsmpl.c                            |   4 +-
 compute/ztrtri.c                             |   2 +-
 compute/zunglq.c                             |   4 +-
 compute/zunglq_param.c                       |   4 +-
 compute/zungqr.c                             |   4 +-
 compute/zungqr_param.c                       |   4 +-
 compute/zunmlq.c                             |   4 +-
 compute/zunmlq_param.c                       |   4 +-
 compute/zunmqr.c                             |   4 +-
 compute/zunmqr_param.c                       |   4 +-
 control/control.c                            |   2 +-
 control/descriptor.c                         |  10 +-
 doc/orgmode/chapters/using.org               |   2 +-
 doc/texinfo/chapters/using.texi              |   2 +-
 example/lapack_to_morse/step4.c              |  10 +-
 example/lapack_to_morse/step5.c              |  10 +-
 example/lapack_to_morse/step6.c              |  10 +-
 example/lapack_to_morse/step7.c              |  10 +-
 include/chameleon/morse_runtime.h            |  73 +++++++----
 include/chameleon/morse_tasks.h              |   9 --
 include/morse.h                              |   2 +-
 runtime/starpu/CMakeLists.txt                |   1 -
 runtime/starpu/codelets/codelet_dataflush.c  | 118 -----------------
 runtime/starpu/control/runtime_descriptor.c  | 116 ++++++++++-------
 runtime/starpu/include/chameleon_starpu.h.in |   2 +-
 timing/time_zgetri_tile.c                    | 125 +++++++++----------
 timing/time_zpotri_tile.c                    |  36 +++---
 timing/time_zsytrf_tile.c                    |   9 +-
 124 files changed, 395 insertions(+), 632 deletions(-)
 delete mode 100644 runtime/starpu/codelets/codelet_dataflush.c

diff --git a/compute/pzbuild.c b/compute/pzbuild.c
index 1b8d361a4..2bf0f5075 100644
--- a/compute/pzbuild.c
+++ b/compute/pzbuild.c
@@ -86,6 +86,5 @@ void morse_pzbuild( MORSE_enum uplo, MORSE_desc_t *A, void *user_data, void* use
     }
   }
 
-  MORSE_TASK_flush_desc( &options, uplo, A );
   RUNTIME_options_finalize( &options, morse);
 }
diff --git a/compute/pzgelqf.c b/compute/pzgelqf.c
index 3821a1209..150335f7f 100644
--- a/compute/pzgelqf.c
+++ b/compute/pzgelqf.c
@@ -153,10 +153,7 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgelqf_param.c b/compute/pzgelqf_param.c
index 88588051e..8a889b05c 100644
--- a/compute/pzgelqf_param.c
+++ b/compute/pzgelqf_param.c
@@ -196,12 +196,8 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgelqfrh.c b/compute/pzgelqfrh.c
index 141d94195..ad11204ad 100644
--- a/compute/pzgelqfrh.c
+++ b/compute/pzgelqfrh.c
@@ -181,10 +181,7 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgemm.c b/compute/pzgemm.c
index e001af357..92c04d02c 100644
--- a/compute/pzgemm.c
+++ b/compute/pzgemm.c
@@ -134,19 +134,17 @@ void morse_pzgemm(MORSE_enum transA, MORSE_enum transB,
                     }
                 }
             }
-            MORSE_TASK_flush_data( &options, C(m, n) );
+            RUNTIME_data_flush( sequence, C(m, n) );
         }
         if (transA == MorseNoTrans) {
             for (k = 0; k < A->nt; k++) {
-                MORSE_TASK_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, A(m, k) );
             }
         } else {
             for (k = 0; k < A->mt; k++) {
-                MORSE_TASK_flush_data( &options, A(k, m) );
+                RUNTIME_data_flush( sequence, A(k, m) );
             }
         }
     }
-    MORSE_TASK_flush_desc( &options, MorseUpperLower, B );
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzgeqrf.c b/compute/pzgeqrf.c
index 1ccd8bb99..08796a3db 100644
--- a/compute/pzgeqrf.c
+++ b/compute/pzgeqrf.c
@@ -147,10 +147,7 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgeqrf_param.c b/compute/pzgeqrf_param.c
index 2382953a8..3845f4627 100644
--- a/compute/pzgeqrf_param.c
+++ b/compute/pzgeqrf_param.c
@@ -195,12 +195,8 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgeqrfrh.c b/compute/pzgeqrfrh.c
index aeec53fab..6fffcf2ed 100644
--- a/compute/pzgeqrfrh.c
+++ b/compute/pzgeqrfrh.c
@@ -180,10 +180,7 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzgetrf_incpiv.c b/compute/pzgetrf_incpiv.c
index 9b01a7552..058dc1018 100644
--- a/compute/pzgetrf_incpiv.c
+++ b/compute/pzgetrf_incpiv.c
@@ -136,11 +136,8 @@ 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_flush_all();
 
     morse_desc_mat_free(DIAG);
     free(DIAG);
diff --git a/compute/pzgetrf_nopiv.c b/compute/pzgetrf_nopiv.c
index 138546249..3a276b820 100644
--- a/compute/pzgetrf_nopiv.c
+++ b/compute/pzgetrf_nopiv.c
@@ -104,7 +104,5 @@ 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_flush_all();
 }
diff --git a/compute/pzhemm.c b/compute/pzhemm.c
index a8582ee59..06a5115a9 100644
--- a/compute/pzhemm.c
+++ b/compute/pzhemm.c
@@ -226,9 +226,5 @@ 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_flush_all();
 }
diff --git a/compute/pzher2k.c b/compute/pzher2k.c
index 9bde1020a..2462e4314 100644
--- a/compute/pzher2k.c
+++ b/compute/pzher2k.c
@@ -214,9 +214,5 @@ 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_flush_all();
 }
diff --git a/compute/pzherk.c b/compute/pzherk.c
index e3dd914f3..a83db2e5e 100644
--- a/compute/pzherk.c
+++ b/compute/pzherk.c
@@ -173,7 +173,5 @@ 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);
 }
diff --git a/compute/pzhetrd_he2hb.c b/compute/pzhetrd_he2hb.c
index 0d8ed1d2f..873721ed6 100644
--- a/compute/pzhetrd_he2hb.c
+++ b/compute/pzhetrd_he2hb.c
@@ -436,10 +436,8 @@ void morse_pzhetrd_he2hb(MORSE_enum uplo,
     }
 
 
-    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_flush_all();
 
     MORSE_Sequence_Wait(sequence);
     morse_desc_mat_free(D);
diff --git a/compute/pzlacpy.c b/compute/pzlacpy.c
index 220c8b9db..f38330bc9 100644
--- a/compute/pzlacpy.c
+++ b/compute/pzlacpy.c
@@ -129,7 +129,5 @@ 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);
 }
diff --git a/compute/pzlag2c.c b/compute/pzlag2c.c
index ec193214e..73f3798c7 100644
--- a/compute/pzlag2c.c
+++ b/compute/pzlag2c.c
@@ -67,7 +67,5 @@ 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);
 }
diff --git a/compute/pzlange.c b/compute/pzlange.c
index 83eee09a6..7e68eb189 100644
--- a/compute/pzlange.c
+++ b/compute/pzlange.c
@@ -412,5 +412,4 @@ 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_flush_all();
 }
diff --git a/compute/pzlanhe.c b/compute/pzlanhe.c
index a637a283d..781115b60 100644
--- a/compute/pzlanhe.c
+++ b/compute/pzlanhe.c
@@ -456,5 +456,4 @@ 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_flush_all();
 }
diff --git a/compute/pzlansy.c b/compute/pzlansy.c
index cdb4c1dca..7f3877c84 100644
--- a/compute/pzlansy.c
+++ b/compute/pzlansy.c
@@ -465,5 +465,4 @@ 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_flush_all();
 }
diff --git a/compute/pzlantr.c b/compute/pzlantr.c
index 7f6ded725..639ebdfde 100644
--- a/compute/pzlantr.c
+++ b/compute/pzlantr.c
@@ -665,5 +665,4 @@ void morse_pzlantr(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
     }
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzlascal.c b/compute/pzlascal.c
index 2659c3d7e..1809a5a12 100644
--- a/compute/pzlascal.c
+++ b/compute/pzlascal.c
@@ -97,6 +97,5 @@ void morse_pzlascal(MORSE_enum uplo, MORSE_Complex64_t alpha, MORSE_desc_t *A,
             }
         }
     }
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzlaset.c b/compute/pzlaset.c
index a14ba24f0..a0a71b0da 100644
--- a/compute/pzlaset.c
+++ b/compute/pzlaset.c
@@ -118,6 +118,5 @@ void morse_pzlaset(MORSE_enum uplo,
                A(j, j), ldaj);
        }
     }
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzlaset2.c b/compute/pzlaset2.c
index c56661594..94142791c 100644
--- a/compute/pzlaset2.c
+++ b/compute/pzlaset2.c
@@ -108,6 +108,5 @@ void morse_pzlaset2(MORSE_enum uplo, MORSE_Complex64_t alpha,
            }
        }
     }
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzlauum.c b/compute/pzlauum.c
index 9ff23bebe..de8faf8f8 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_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, A(m, k) );
                 MORSE_TASK_ztrmm(
                     &options,
                     MorseRight, uplo, MorseConjTrans, MorseNonUnit,
@@ -129,13 +129,12 @@ void morse_pzlauum(MORSE_enum uplo, MORSE_desc_t *A,
                     1.0, A(k, k), ldak,
                          A(m, k), ldam);
             }
-            MORSE_TASK_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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);
 }
diff --git a/compute/pzplghe.c b/compute/pzplghe.c
index d0b0d16e0..0f6e559dd 100644
--- a/compute/pzplghe.c
+++ b/compute/pzplghe.c
@@ -97,6 +97,5 @@ void morse_pzplghe( double bump, MORSE_enum uplo, MORSE_desc_t *A,
             }
         }
     }
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzplgsy.c b/compute/pzplgsy.c
index 3c8c288bf..a7c8b2828 100644
--- a/compute/pzplgsy.c
+++ b/compute/pzplgsy.c
@@ -97,6 +97,5 @@ void morse_pzplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, MORSE_desc_t *A,
             }
         }
     }
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pzplrnt.c b/compute/pzplrnt.c
index 1e2fc8c61..53fe68f27 100644
--- a/compute/pzplrnt.c
+++ b/compute/pzplrnt.c
@@ -60,6 +60,5 @@ 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);
 }
diff --git a/compute/pzpotrf.c b/compute/pzpotrf.c
index 662c96fd1..562d7109a 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(n, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, A(k, k) );
 
             for (m = k+1; m < A->mt; m++) {
                 tempmm = m == A->mt-1 ? A->m - m*A->mb : A->mb;
@@ -170,7 +170,7 @@ void morse_pzpotrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(k, n), ldak,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_flush_data( &options, A(k, m) );
+                RUNTIME_data_flush( sequence, A(k, m) );
             }
 
             RUNTIME_iteration_pop(morse);
diff --git a/compute/pzpotrimm.c b/compute/pzpotrimm.c
index abbbd1d03..09d6bd39d 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(n, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, A(m, k) );
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m, k) );
+                RUNTIME_data_flush( sequence, B(m, k) );
             }
             for (n = 0; n <= k; n++) {
-                MORSE_TASK_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, m) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, A(k, n) );
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m, k) );
+                RUNTIME_data_flush( sequence, B(m, k) );
             }
             for (m = 0; m <= k; m++) {
-                MORSE_TASK_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, A(m, k) );
             }
 
             RUNTIME_iteration_pop(morse);
@@ -479,5 +479,4 @@ 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 71b958957..a51cc6437 100644
--- a/compute/pzsymm.c
+++ b/compute/pzsymm.c
@@ -141,16 +141,16 @@ void morse_pzsymm(MORSE_enum side, MORSE_enum uplo,
                         }
                     }
                 }
-                MORSE_TASK_flush_data( &options, B(k, n) );
+                RUNTIME_data_flush( sequence, B(k, n) );
             }
             if (uplo == MorseLower) {
                 for (n = 0; n <= k; n++) {
-                    MORSE_TASK_flush_data( &options, A(k, n) );
+                    RUNTIME_data_flush( sequence, A(k, n) );
                 }
             }
             else {
                 for (m = 0; m <= k; m++) {
-                    MORSE_TASK_flush_data( &options, A(m, k) );
+                    RUNTIME_data_flush( sequence, A(m, k) );
                 }
             }
         }
@@ -242,20 +242,19 @@ void morse_pzsymm(MORSE_enum side, MORSE_enum uplo,
                         }
                     }
                 }
-                MORSE_TASK_flush_data( &options, B(m, k) );
+                RUNTIME_data_flush( sequence, B(m, k) );
             }
             if (uplo == MorseLower) {
                 for (n = 0; n <= k; n++) {
-                    MORSE_TASK_flush_data( &options, A(k, n) );
+                    RUNTIME_data_flush( sequence, A(k, n) );
                 }
             }
             else {
                 for (m = 0; m <= k; m++) {
-                    MORSE_TASK_flush_data( &options, A(m, k) );
+                    RUNTIME_data_flush( sequence, A(m, k) );
                 }
             }
         }
     }
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_flush_all();
 }
diff --git a/compute/pzsyr2k.c b/compute/pzsyr2k.c
index 68e4d6ee1..9903b623a 100644
--- a/compute/pzsyr2k.c
+++ b/compute/pzsyr2k.c
@@ -213,9 +213,5 @@ 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_flush_all();
 }
diff --git a/compute/pzsyrk.c b/compute/pzsyrk.c
index 49508895c..41b5efd0a 100644
--- a/compute/pzsyrk.c
+++ b/compute/pzsyrk.c
@@ -172,7 +172,5 @@ 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);
 }
diff --git a/compute/pzsytrf.c b/compute/pzsytrf.c
index 2ea509a51..2a4ce3a6e 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(n, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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,13 @@ void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A,
                                A(k, n), ldak,
                         zone,  A(m, n), ldam);
                 }
-                MORSE_TASK_flush_data( &options, A(k, m) );
+                RUNTIME_data_flush( sequence, A(k, m) );
             }
 
             RUNTIME_iteration_pop(morse);
         }
     }
 
-    MORSE_TASK_flush_desc( &options, uplo, A );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
 }
diff --git a/compute/pztile.c b/compute/pztile.c
index c52220010..6b9b49a82 100644
--- a/compute/pztile.c
+++ b/compute/pztile.c
@@ -72,10 +72,9 @@ void morse_pzlapack_to_tile(MORSE_Complex64_t *Af77, int ldaf77, MORSE_desc_t *A
         }
     }
 
+    RUNTIME_desc_flush( &B, sequence );
     RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
-    MORSE_TASK_flush_all();
-    RUNTIME_desc_getoncpu( &B );
     RUNTIME_desc_destroy( &B );
 }
 
@@ -122,10 +121,9 @@ void morse_pztile_to_lapack(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int ldaf77
         }
     }
 
-    MORSE_TASK_flush_desc( &options, MorseUpperLower, A );
+    RUNTIME_desc_flush( &B, sequence );
     RUNTIME_sequence_wait( morse, sequence );
     RUNTIME_options_finalize( &options, morse );
-    RUNTIME_desc_getoncpu( &B );
     RUNTIME_desc_destroy( &B );
 }
 
diff --git a/compute/pztile2band.c b/compute/pztile2band.c
index 22b8ca68f..cf71f839f 100644
--- a/compute/pztile2band.c
+++ b/compute/pztile2band.c
@@ -118,7 +118,6 @@ void morse_pztile2band(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B,
        }
     }
     RUNTIME_options_finalize(&options, morse);
-    MORSE_TASK_flush_all();
 }
 #undef B
 #undef A
diff --git a/compute/pztpgqrt.c b/compute/pztpgqrt.c
index fe4b413ea..0746b2786 100644
--- a/compute/pztpgqrt.c
+++ b/compute/pztpgqrt.c
@@ -162,13 +162,6 @@ 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);
     (void)D;
diff --git a/compute/pztpqrt.c b/compute/pztpqrt.c
index 6101c0934..da8d152c1 100644
--- a/compute/pztpqrt.c
+++ b/compute/pztpqrt.c
@@ -111,9 +111,6 @@ 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);
 }
diff --git a/compute/pztradd.c b/compute/pztradd.c
index 8d121b7e9..34baf5eab 100644
--- a/compute/pztradd.c
+++ b/compute/pztradd.c
@@ -194,7 +194,5 @@ 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 b9f6cb006..ce0d54345 100644
--- a/compute/pztrmm.c
+++ b/compute/pztrmm.c
@@ -311,7 +311,5 @@ 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);
 }
diff --git a/compute/pztrsm.c b/compute/pztrsm.c
index c861890cc..6338801f6 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_flush_data( &options, A(B->mt-1-k, B->mt-1-k) );
+                    RUNTIME_data_flush( sequence, 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_flush_data( &options, A(B->mt-1-m, B->mt-1-k) );
+                        RUNTIME_data_flush( sequence, A(B->mt-1-m, B->mt-1-k) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, B(B->mt-1-k, n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+                    RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, m) );
+                        RUNTIME_data_flush( sequence, A(k, m) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, B(k, n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+                    RUNTIME_data_flush( sequence, 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_flush_data( &options, A(m, k) );
+                        RUNTIME_data_flush( sequence, A(m, k) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, B(k, n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(B->mt-1-k, B->mt-1-k) );
+                    RUNTIME_data_flush( sequence, 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_flush_data( &options, A(B->mt-1-k, B->mt-1-m) );
+                        RUNTIME_data_flush( sequence, A(B->mt-1-k, B->mt-1-m) );
                     }
                     for (n = 0; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, B(B->mt-1-k, n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+                    RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m, k) );
+                        RUNTIME_data_flush( sequence, B(m, k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, A(k, n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(B->nt-1-k, B->nt-1-k) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m,        B->nt-1-k) );
+                        RUNTIME_data_flush( sequence, B(m,        B->nt-1-k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, A(B->nt-1-n, B->nt-1-k) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(B->nt-1-k, B->nt-1-k) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m,        B->nt-1-k) );
+                        RUNTIME_data_flush( sequence, B(m,        B->nt-1-k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, A(B->nt-1-k, B->nt-1-n) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+                        RUNTIME_data_flush( sequence, 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_flush_data( &options, B(m, k) );
+                        RUNTIME_data_flush( sequence, B(m, k) );
                     }
                     for (n = k+1; n < B->nt; n++) {
-                        MORSE_TASK_flush_data( &options, A(n, k) );
+                        RUNTIME_data_flush( sequence, A(n, k) );
                     }
 
                 }
diff --git a/compute/pztrsmpl.c b/compute/pztrsmpl.c
index 4c51e7a5e..5da3da0c8 100644
--- a/compute/pztrsmpl.c
+++ b/compute/pztrsmpl.c
@@ -87,7 +87,5 @@ 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);
 }
diff --git a/compute/pztrtri.c b/compute/pztrtri.c
index fbea4fe03..c81fcb941 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_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, A(m, k) );
             }
             for (n = 0; n < k; n++) {
-                MORSE_TASK_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, n) );
+                RUNTIME_data_flush( sequence, A(k, n) );
             }
             for (m = 0; m < k; m++) {
                 ldam = BLKLDD(A, m);
-                MORSE_TASK_flush_data( &options, A(m, k) );
+                RUNTIME_data_flush( sequence, 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_flush_data( &options, A(k, k) );
+            RUNTIME_data_flush( sequence, A(k, k) );
             MORSE_TASK_ztrtri(
                 &options,
                 uplo, diag,
@@ -155,6 +155,5 @@ 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);
 }
diff --git a/compute/pzunglq.c b/compute/pzunglq.c
index d764b3a71..bd038ef98 100644
--- a/compute/pzunglq.c
+++ b/compute/pzunglq.c
@@ -142,10 +142,6 @@ 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);
     (void)D;
diff --git a/compute/pzunglq_param.c b/compute/pzunglq_param.c
index 6da5c3070..adc3512ff 100644
--- a/compute/pzunglq_param.c
+++ b/compute/pzunglq_param.c
@@ -169,14 +169,8 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzunglqrh.c b/compute/pzunglqrh.c
index bd76fe5be..72836940f 100644
--- a/compute/pzunglqrh.c
+++ b/compute/pzunglqrh.c
@@ -164,10 +164,6 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
         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);
     (void)D;
diff --git a/compute/pzungqr.c b/compute/pzungqr.c
index c2e0829d1..6e42f5371 100644
--- a/compute/pzungqr.c
+++ b/compute/pzungqr.c
@@ -142,10 +142,6 @@ void morse_pzungqr(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, MorseLower,      T );
-    MORSE_TASK_flush_desc( &options, MorseUpperLower, D );
     RUNTIME_options_ws_free(&options);
     RUNTIME_options_finalize(&options, morse);
     (void)D;
diff --git a/compute/pzungqr_param.c b/compute/pzungqr_param.c
index 13b1be1c6..a0849b634 100644
--- a/compute/pzungqr_param.c
+++ b/compute/pzungqr_param.c
@@ -175,14 +175,8 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzungqrrh.c b/compute/pzungqrrh.c
index c383858d2..1d0516298 100644
--- a/compute/pzungqrrh.c
+++ b/compute/pzungqrrh.c
@@ -169,12 +169,7 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
         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_flush_all();
     (void)D;
 }
diff --git a/compute/pzunmlq.c b/compute/pzunmlq.c
index c6547f3dc..25a5369ac 100644
--- a/compute/pzunmlq.c
+++ b/compute/pzunmlq.c
@@ -313,10 +313,6 @@ 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);
     (void)D;
diff --git a/compute/pzunmlq_param.c b/compute/pzunmlq_param.c
index 0b5ef65f8..5ad102180 100644
--- a/compute/pzunmlq_param.c
+++ b/compute/pzunmlq_param.c
@@ -432,15 +432,9 @@ 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_flush_all();
 
     (void)D;
 }
diff --git a/compute/pzunmlqrh.c b/compute/pzunmlqrh.c
index ac288111c..371d08e4f 100644
--- a/compute/pzunmlqrh.c
+++ b/compute/pzunmlqrh.c
@@ -408,12 +408,7 @@ 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_flush_all();
     (void)D;
 }
diff --git a/compute/pzunmqr.c b/compute/pzunmqr.c
index 86dc63bd7..0f05f4edf 100644
--- a/compute/pzunmqr.c
+++ b/compute/pzunmqr.c
@@ -318,10 +318,6 @@ 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);
     (void)D;
diff --git a/compute/pzunmqr_param.c b/compute/pzunmqr_param.c
index 5f7b20032..ae9b46d5e 100644
--- a/compute/pzunmqr_param.c
+++ b/compute/pzunmqr_param.c
@@ -431,15 +431,9 @@ 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_flush_all();
 
     (void)D;
 }
diff --git a/compute/pzunmqrrh.c b/compute/pzunmqrrh.c
index 80f9879db..d6d57629e 100644
--- a/compute/pzunmqrrh.c
+++ b/compute/pzunmqrrh.c
@@ -413,10 +413,6 @@ 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);
     (void)D;
diff --git a/compute/zgeadd.c b/compute/zgeadd.c
index bb3e9afec..b6e85b322 100644
--- a/compute/zgeadd.c
+++ b/compute/zgeadd.c
@@ -249,8 +249,8 @@ int MORSE_zgeadd_Tile(MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgeadd_Tile_Async(trans, alpha, A, beta, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgelqf.c b/compute/zgelqf.c
index 9dcd6e8f1..55b928483 100644
--- a/compute/zgelqf.c
+++ b/compute/zgelqf.c
@@ -200,7 +200,7 @@ int MORSE_zgelqf_Tile(MORSE_desc_t *A, MORSE_desc_t *T)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgelqf_Tile_Async(A, T, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgelqf_param.c b/compute/zgelqf_param.c
index 215f6efd5..d650ba8ad 100644
--- a/compute/zgelqf_param.c
+++ b/compute/zgelqf_param.c
@@ -197,7 +197,7 @@ int MORSE_zgelqf_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgelqf_param_Tile_Async(qrtree, A, TS, TT, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgelqs.c b/compute/zgelqs.c
index c82f52ecd..b9410fd3d 100644
--- a/compute/zgelqs.c
+++ b/compute/zgelqs.c
@@ -222,8 +222,8 @@ int MORSE_zgelqs_Tile(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgelqs_Tile_Async(A, T, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgelqs_param.c b/compute/zgelqs_param.c
index 76384fb7d..ac5c26520 100644
--- a/compute/zgelqs_param.c
+++ b/compute/zgelqs_param.c
@@ -227,8 +227,8 @@ int MORSE_zgelqs_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgelqs_param_Tile_Async(qrtree, A, TS, TT, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgels.c b/compute/zgels.c
index 9a83d4fa9..4ab15cb6d 100644
--- a/compute/zgels.c
+++ b/compute/zgels.c
@@ -286,8 +286,8 @@ int MORSE_zgels_Tile(MORSE_enum trans, MORSE_desc_t *A,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgels_Tile_Async(trans, A, T, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgels_param.c b/compute/zgels_param.c
index 4588de3a1..9e91871be 100644
--- a/compute/zgels_param.c
+++ b/compute/zgels_param.c
@@ -291,8 +291,8 @@ int MORSE_zgels_param_Tile(const libhqr_tree_t *qrtree, MORSE_enum trans, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgels_param_Tile_Async(qrtree, trans, A, TS, TT, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgemm.c b/compute/zgemm.c
index b69e804a3..332b54006 100644
--- a/compute/zgemm.c
+++ b/compute/zgemm.c
@@ -321,9 +321,9 @@ int MORSE_zgemm_Tile(MORSE_enum transA, MORSE_enum transB,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgemm_Tile_Async(transA, transB, alpha, A, B, beta, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgeqrf.c b/compute/zgeqrf.c
index 04433b567..5e500472b 100644
--- a/compute/zgeqrf.c
+++ b/compute/zgeqrf.c
@@ -199,7 +199,7 @@ int MORSE_zgeqrf_Tile(MORSE_desc_t *A, MORSE_desc_t *T)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgeqrf_Tile_Async(A, T, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgeqrf_param.c b/compute/zgeqrf_param.c
index 3924becd6..a67f508db 100644
--- a/compute/zgeqrf_param.c
+++ b/compute/zgeqrf_param.c
@@ -206,7 +206,7 @@ int MORSE_zgeqrf_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgeqrf_param_Tile_Async(qrtree, A, TS, TT, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgeqrs.c b/compute/zgeqrs.c
index 99e7cea47..29b962f4f 100644
--- a/compute/zgeqrs.c
+++ b/compute/zgeqrs.c
@@ -221,9 +221,9 @@ int MORSE_zgeqrs_Tile(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgeqrs_Tile_Async(A, T, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( T, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( T, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgeqrs_param.c b/compute/zgeqrs_param.c
index 83d16068e..6e6cb28b3 100644
--- a/compute/zgeqrs_param.c
+++ b/compute/zgeqrs_param.c
@@ -216,10 +216,10 @@ int MORSE_zgeqrs_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgeqrs_param_Tile_Async(qrtree, A, TS, TT, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( TS, sequence );
-    RUNTIME_desc_getoncpu_async( TT, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( TS, sequence );
+    RUNTIME_desc_flush( TT, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgesv_incpiv.c b/compute/zgesv_incpiv.c
index 59b3b9f81..ca0ca1e6a 100644
--- a/compute/zgesv_incpiv.c
+++ b/compute/zgesv_incpiv.c
@@ -226,8 +226,8 @@ int MORSE_zgesv_incpiv_Tile(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_d
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgesv_incpiv_Tile_Async(A, L, IPIV, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zgesv_nopiv.c b/compute/zgesv_nopiv.c
index 0e8ae5277..bc0d9bdf9 100644
--- a/compute/zgesv_nopiv.c
+++ b/compute/zgesv_nopiv.c
@@ -218,8 +218,8 @@ int MORSE_zgesv_nopiv_Tile(MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgesv_nopiv_Tile_Async(A, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zgetrf_incpiv.c b/compute/zgetrf_incpiv.c
index 9ea8c5562..aaf96f147 100644
--- a/compute/zgetrf_incpiv.c
+++ b/compute/zgetrf_incpiv.c
@@ -204,7 +204,7 @@ int MORSE_zgetrf_incpiv_Tile(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgetrf_incpiv_Tile_Async(A, L, IPIV, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zgetrf_nopiv.c b/compute/zgetrf_nopiv.c
index 14546df8d..5e56c4a8b 100644
--- a/compute/zgetrf_nopiv.c
+++ b/compute/zgetrf_nopiv.c
@@ -192,7 +192,7 @@ int MORSE_zgetrf_nopiv_Tile(MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgetrf_nopiv_Tile_Async(A, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zgetrs_incpiv.c b/compute/zgetrs_incpiv.c
index 5cf6d483a..195b0895d 100644
--- a/compute/zgetrs_incpiv.c
+++ b/compute/zgetrs_incpiv.c
@@ -229,8 +229,8 @@ int MORSE_zgetrs_incpiv_Tile(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgetrs_incpiv_Tile_Async(A, L, IPIV, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zgetrs_nopiv.c b/compute/zgetrs_nopiv.c
index 8be6d99d9..f92c66abf 100644
--- a/compute/zgetrs_nopiv.c
+++ b/compute/zgetrs_nopiv.c
@@ -217,8 +217,8 @@ int MORSE_zgetrs_nopiv_Tile(MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zgetrs_nopiv_Tile_Async(A, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zheevd.c b/compute/zheevd.c
index 548c38b9e..c7f85cce3 100644
--- a/compute/zheevd.c
+++ b/compute/zheevd.c
@@ -261,8 +261,8 @@ int MORSE_zheevd_Tile(MORSE_enum jobz, MORSE_enum uplo,
     MORSE_zheevd_Tile_Async(jobz, uplo, A, W, T, sequence, &request);
     morse_sequence_wait(morse, sequence);
 
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( T, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( T, sequence );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zhemm.c b/compute/zhemm.c
index ad7429942..5b6b31852 100644
--- a/compute/zhemm.c
+++ b/compute/zhemm.c
@@ -286,9 +286,9 @@ int MORSE_zhemm_Tile(MORSE_enum side, MORSE_enum uplo,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zhemm_Tile_Async(side, uplo, alpha, A, B, beta, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zher2k.c b/compute/zher2k.c
index 2f41bd1a7..e8f2e6d89 100644
--- a/compute/zher2k.c
+++ b/compute/zher2k.c
@@ -285,9 +285,9 @@ int MORSE_zher2k_Tile(MORSE_enum uplo, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zher2k_Tile_Async(uplo, trans, alpha, A, B, beta, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zherk.c b/compute/zherk.c
index e0a0a1b87..6fbe72d55 100644
--- a/compute/zherk.c
+++ b/compute/zherk.c
@@ -261,8 +261,8 @@ int MORSE_zherk_Tile(MORSE_enum uplo, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zherk_Tile_Async(uplo, trans, alpha, A, beta, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zlange.c b/compute/zlange.c
index a11499a2b..82831613f 100644
--- a/compute/zlange.c
+++ b/compute/zlange.c
@@ -147,7 +147,7 @@ double MORSE_zlange(MORSE_enum norm, int M, int N,
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
         morse_zooptile2lap(descA, A, NB, NB, LDA, N,  sequence, &request);
-    RUNTIME_desc_getoncpu_async( &descA, sequence );
+    RUNTIME_desc_flush( &descA, sequence );
         morse_sequence_wait(morse, sequence);
         morse_desc_mat_free(&descA);
 /*    } else {*/
diff --git a/compute/zlanhe.c b/compute/zlanhe.c
index 7130bd6bd..e666221ac 100644
--- a/compute/zlanhe.c
+++ b/compute/zlanhe.c
@@ -147,7 +147,7 @@ double MORSE_zlanhe(MORSE_enum norm, MORSE_enum uplo, int N,
 
 /*    if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {*/
     morse_zooptile2lap(descA, A, NB, NB, LDA, N,  sequence, &request);
-    RUNTIME_desc_getoncpu_async( &descA, sequence );
+    RUNTIME_desc_flush( &descA, sequence );
     morse_sequence_wait(morse, sequence);
     morse_desc_mat_free(&descA);
 /*    } else {*/
diff --git a/compute/zlauum.c b/compute/zlauum.c
index 23ac0ebb2..8ef3f032d 100644
--- a/compute/zlauum.c
+++ b/compute/zlauum.c
@@ -201,7 +201,7 @@ int MORSE_zlauum_Tile(MORSE_enum uplo, MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zlauum_Tile_Async(uplo, A, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zposv.c b/compute/zposv.c
index 4bcbd9c59..5fe1ab279 100644
--- a/compute/zposv.c
+++ b/compute/zposv.c
@@ -244,8 +244,8 @@ int MORSE_zposv_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zposv_Tile_Async(uplo, A, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zpotrf.c b/compute/zpotrf.c
index 63c1b7b2c..082618489 100644
--- a/compute/zpotrf.c
+++ b/compute/zpotrf.c
@@ -213,7 +213,7 @@ int MORSE_zpotrf_Tile(MORSE_enum uplo, MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zpotrf_Tile_Async(uplo, A, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zpotri.c b/compute/zpotri.c
index cf15fe29e..801f077cc 100644
--- a/compute/zpotri.c
+++ b/compute/zpotri.c
@@ -201,7 +201,7 @@ int MORSE_zpotri_Tile(MORSE_enum uplo, MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zpotri_Tile_Async(uplo, A, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zpotrimm.c b/compute/zpotrimm.c
index 2d2089164..180725746 100644
--- a/compute/zpotrimm.c
+++ b/compute/zpotrimm.c
@@ -219,7 +219,7 @@ int MORSE_zpotrimm_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zpotrimm_Tile_Async(uplo, A, B, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zpotrs.c b/compute/zpotrs.c
index 21cb261cf..0494b6884 100644
--- a/compute/zpotrs.c
+++ b/compute/zpotrs.c
@@ -219,8 +219,8 @@ int MORSE_zpotrs_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zpotrs_Tile_Async(uplo, A, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zsymm.c b/compute/zsymm.c
index 51fdca0bd..344f04da6 100644
--- a/compute/zsymm.c
+++ b/compute/zsymm.c
@@ -286,9 +286,9 @@ int MORSE_zsymm_Tile(MORSE_enum side, MORSE_enum uplo,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsymm_Tile_Async(side, uplo, alpha, A, B, beta, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zsyr2k.c b/compute/zsyr2k.c
index 9ad897f4e..50c9b234e 100644
--- a/compute/zsyr2k.c
+++ b/compute/zsyr2k.c
@@ -285,9 +285,9 @@ int MORSE_zsyr2k_Tile(MORSE_enum uplo, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsyr2k_Tile_Async(uplo, trans, alpha, A, B, beta, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zsyrk.c b/compute/zsyrk.c
index ac57f0292..4b29d6b7f 100644
--- a/compute/zsyrk.c
+++ b/compute/zsyrk.c
@@ -261,8 +261,8 @@ int MORSE_zsyrk_Tile(MORSE_enum uplo, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsyrk_Tile_Async(uplo, trans, alpha, A, beta, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zsysv.c b/compute/zsysv.c
index 818b77282..d39bda8bf 100644
--- a/compute/zsysv.c
+++ b/compute/zsysv.c
@@ -237,8 +237,8 @@ int MORSE_zsysv_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsysv_Tile_Async(uplo, A, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zsytrf.c b/compute/zsytrf.c
index c0cce1f3d..c2e3eeead 100644
--- a/compute/zsytrf.c
+++ b/compute/zsytrf.c
@@ -202,7 +202,7 @@ int MORSE_zsytrf_Tile(MORSE_enum uplo, MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsytrf_Tile_Async(uplo, A, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zsytrs.c b/compute/zsytrs.c
index 7411d2479..df6f7d9de 100644
--- a/compute/zsytrs.c
+++ b/compute/zsytrs.c
@@ -215,8 +215,8 @@ int MORSE_zsytrs_Tile(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zsytrs_Tile_Async(uplo, A, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/ztile.c b/compute/ztile.c
index cdeb0e1e9..6e1ae3843 100644
--- a/compute/ztile.c
+++ b/compute/ztile.c
@@ -84,7 +84,7 @@ int MORSE_zLapack_to_Tile(MORSE_Complex64_t *Af77, int LDA, MORSE_desc_t *A)
     morse_pzlapack_to_tile( Af77, LDA, A, sequence, &request);
 
     RUNTIME_sequence_wait( morse, sequence );
-    RUNTIME_desc_getoncpu_async( A , sequence );
+    RUNTIME_desc_flush( A , sequence );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -211,7 +211,7 @@ int MORSE_zTile_to_Lapack(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int LDA)
 
     morse_pztile_to_lapack( A, Af77, LDA, sequence, &request);
     RUNTIME_sequence_wait( morse, sequence );
-    RUNTIME_desc_getoncpu_async( A , sequence );
+    RUNTIME_desc_flush( A , sequence );
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
     return status;
diff --git a/compute/ztpgqrt.c b/compute/ztpgqrt.c
index f5f2b0595..bf6fee28d 100644
--- a/compute/ztpgqrt.c
+++ b/compute/ztpgqrt.c
@@ -296,8 +296,8 @@ int MORSE_ztpgqrt_Tile( int L,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztpgqrt_Tile_Async(L, V1, T1, V2, T2, Q1, Q2, sequence, &request);
-    RUNTIME_desc_getoncpu_async( Q1, sequence );
-    RUNTIME_desc_getoncpu_async( Q2, sequence );
+    RUNTIME_desc_flush( Q1, sequence );
+    RUNTIME_desc_flush( Q2, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/ztpqrt.c b/compute/ztpqrt.c
index b8cf1b384..3298638e0 100644
--- a/compute/ztpqrt.c
+++ b/compute/ztpqrt.c
@@ -268,8 +268,8 @@ int MORSE_ztpqrt_Tile( int L, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *T
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztpqrt_Tile_Async(L, A, B, T, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/ztradd.c b/compute/ztradd.c
index ab16ed277..7bbf05f99 100644
--- a/compute/ztradd.c
+++ b/compute/ztradd.c
@@ -265,8 +265,8 @@ int MORSE_ztradd_Tile(MORSE_enum uplo, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztradd_Tile_Async(uplo, trans, alpha, A, beta, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/ztrmm.c b/compute/ztrmm.c
index 1e7411a54..434621d6d 100644
--- a/compute/ztrmm.c
+++ b/compute/ztrmm.c
@@ -287,8 +287,8 @@ int MORSE_ztrmm_Tile(MORSE_enum side, MORSE_enum uplo,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztrmm_Tile_Async(side, uplo, transA, diag, alpha, A, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/ztrsm.c b/compute/ztrsm.c
index 282ec5e2e..db4e89dec 100644
--- a/compute/ztrsm.c
+++ b/compute/ztrsm.c
@@ -285,8 +285,8 @@ int MORSE_ztrsm_Tile(MORSE_enum side, MORSE_enum uplo,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztrsm_Tile_Async(side, uplo, transA, diag, alpha, A, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/ztrsmpl.c b/compute/ztrsmpl.c
index 6bac3866c..043983410 100644
--- a/compute/ztrsmpl.c
+++ b/compute/ztrsmpl.c
@@ -214,8 +214,8 @@ int MORSE_ztrsmpl_Tile(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_desc_t
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztrsmpl_Tile_Async(A, L, IPIV, B, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( B, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( B, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/ztrtri.c b/compute/ztrtri.c
index 01ca06dbc..2f2d36c60 100644
--- a/compute/ztrtri.c
+++ b/compute/ztrtri.c
@@ -220,7 +220,7 @@ int MORSE_ztrtri_Tile(MORSE_enum uplo, MORSE_enum diag, MORSE_desc_t *A)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_ztrtri_Tile_Async(uplo, diag, A, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
+    RUNTIME_desc_flush( A, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zunglq.c b/compute/zunglq.c
index ff911006d..7ececcb75 100644
--- a/compute/zunglq.c
+++ b/compute/zunglq.c
@@ -216,8 +216,8 @@ int MORSE_zunglq_Tile(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *Q)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunglq_Tile_Async(A, T, Q, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( Q, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( Q, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zunglq_param.c b/compute/zunglq_param.c
index 957ae5b3c..5b6d30e60 100644
--- a/compute/zunglq_param.c
+++ b/compute/zunglq_param.c
@@ -213,8 +213,8 @@ int MORSE_zunglq_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunglq_param_Tile_Async(qrtree, A, TS, TT, Q, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( Q, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( Q, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zungqr.c b/compute/zungqr.c
index 9e0b3d1bf..822dc4e56 100644
--- a/compute/zungqr.c
+++ b/compute/zungqr.c
@@ -215,8 +215,8 @@ int MORSE_zungqr_Tile(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *Q)
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zungqr_Tile_Async(A, T, Q, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( Q, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( Q, sequence );
     morse_sequence_wait(morse, sequence);
     
     status = sequence->status;
diff --git a/compute/zungqr_param.c b/compute/zungqr_param.c
index 5a3b71855..af88ea598 100644
--- a/compute/zungqr_param.c
+++ b/compute/zungqr_param.c
@@ -214,8 +214,8 @@ int MORSE_zungqr_param_Tile(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zungqr_param_Tile_Async(qrtree, A, TS, TT, Q, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( Q, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( Q, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zunmlq.c b/compute/zunmlq.c
index ef13e6fca..81535c19d 100644
--- a/compute/zunmlq.c
+++ b/compute/zunmlq.c
@@ -269,8 +269,8 @@ int MORSE_zunmlq_Tile(MORSE_enum side, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunmlq_Tile_Async(side, trans, A, T, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zunmlq_param.c b/compute/zunmlq_param.c
index 6a2fdcfa3..b6f746d02 100644
--- a/compute/zunmlq_param.c
+++ b/compute/zunmlq_param.c
@@ -268,8 +268,8 @@ int MORSE_zunmlq_param_Tile(const libhqr_tree_t *qrtree, MORSE_enum side, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunmlq_param_Tile_Async(qrtree, side, trans, A, TS, TT, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zunmqr.c b/compute/zunmqr.c
index ab3d7659d..4464aaecb 100644
--- a/compute/zunmqr.c
+++ b/compute/zunmqr.c
@@ -273,8 +273,8 @@ int MORSE_zunmqr_Tile(MORSE_enum side, MORSE_enum trans,
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunmqr_Tile_Async(side, trans, A, T, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/compute/zunmqr_param.c b/compute/zunmqr_param.c
index a8cb3ae25..d285caabf 100644
--- a/compute/zunmqr_param.c
+++ b/compute/zunmqr_param.c
@@ -274,8 +274,8 @@ int MORSE_zunmqr_param_Tile(const libhqr_tree_t *qrtree, MORSE_enum side, MORSE_
     }
     morse_sequence_create(morse, &sequence);
     MORSE_zunmqr_param_Tile_Async(qrtree, side, trans, A, TS, TT, C, sequence, &request);
-    RUNTIME_desc_getoncpu_async( A, sequence );
-    RUNTIME_desc_getoncpu_async( C, sequence );
+    RUNTIME_desc_flush( A, sequence );
+    RUNTIME_desc_flush( C, sequence );
     morse_sequence_wait(morse, sequence);
 
     status = sequence->status;
diff --git a/control/control.c b/control/control.c
index fb742b5b4..58bc403c1 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_flush_all();
+    RUNTIME_flush();
 #  if !defined(CHAMELEON_SIMULATION)
     RUNTIME_barrier(morse);
 #  endif
diff --git a/control/descriptor.c b/control/descriptor.c
index 798c97f50..de7d216bd 100644
--- a/control/descriptor.c
+++ b/control/descriptor.c
@@ -809,8 +809,7 @@ int MORSE_Desc_Release (MORSE_desc_t  *desc) {
  *
  * @ingroup Descriptor
  *
- *  MORSE_Desc_Getoncpu - Apply an acquire and a release on the data of the
- *  descriptors so that its values are up-to-date in the main memory.
+ *  MORSE_Desc_Flush - Flushes the data in the sequence when they won't be reused. This calls cleans up the distributed communication caches, and transfer the data back to the CPU.
  *
  ******************************************************************************
  *
@@ -823,8 +822,11 @@ int MORSE_Desc_Release (MORSE_desc_t  *desc) {
  *          \retval MORSE_SUCCESS successful exit
  *
  *****************************************************************************/
-int MORSE_Desc_Getoncpu(MORSE_desc_t  *desc) {
-    return RUNTIME_desc_getoncpu( desc );
+int MORSE_Desc_Flush( MORSE_desc_t     *desc,
+                      MORSE_sequence_t *sequence )
+{
+    RUNTIME_desc_flush( desc, sequence );
+    return MORSE_SUCCESS;
 }
 
 /**
diff --git a/doc/orgmode/chapters/using.org b/doc/orgmode/chapters/using.org
index 5bc65eaed..7bf39140f 100644
--- a/doc/orgmode/chapters/using.org
+++ b/doc/orgmode/chapters/using.org
@@ -1004,7 +1004,7 @@
      Ensure that all data are up-to-date in main memory (even if some
      tasks have been processed on GPUs).
      #+begin_src
-     int MORSE_Desc_Getoncpu(MORSE_desc_t  *desc);
+     int MORSE_Desc_Flush(MORSE_desc_t  *desc, MORSE_sequence_t *sequence);
      #+end_src
 
      Set the sizes for the MPI tags.  Default value: tag_width=31,
diff --git a/doc/texinfo/chapters/using.texi b/doc/texinfo/chapters/using.texi
index bb50d74f5..ae7dbe100 100644
--- a/doc/texinfo/chapters/using.texi
+++ b/doc/texinfo/chapters/using.texi
@@ -830,7 +830,7 @@ int MORSE_Desc_Destroy (MORSE_desc_t **desc);
 Ensure that all data are up-to-date in main memory (even if some tasks have
 been processed on GPUs)
 @verbatim
-int MORSE_Desc_Getoncpu(MORSE_desc_t  *desc);
+int MORSE_Desc_Flush(MORSE_desc_t  *desc, MORSE_sequence_t *sequence);
 @end verbatim
 
 @node Options routines
diff --git a/example/lapack_to_morse/step4.c b/example/lapack_to_morse/step4.c
index b4111cdab..3c37878e5 100644
--- a/example/lapack_to_morse/step4.c
+++ b/example/lapack_to_morse/step4.c
@@ -141,15 +141,15 @@ int main(int argc, char *argv[]) {
      */
     MORSE_dpotrs_Tile_Async( UPLO, descA, descX, sequence, &request);
 
+    /* Ensure that all data processed on the gpus we are depending on are back
+     * in main memory */
+    MORSE_Desc_Flush( descA, sequence );
+    MORSE_Desc_Flush( descX, sequence );
+
     /* Synchronization barrier (the runtime ensures that all submitted tasks
      * have been terminated */
     MORSE_Sequence_Wait(sequence);
 
-    /* Ensure that all data processed on the gpus we are depending on are back
-     * in main memory */
-    RUNTIME_desc_getoncpu(descA);
-    RUNTIME_desc_getoncpu(descX);
-
     status = sequence->status;
     if ( status != 0 ) {
         fprintf(stderr, "Error in computation (%d)\n", status);
diff --git a/example/lapack_to_morse/step5.c b/example/lapack_to_morse/step5.c
index 46aa1d29a..addff8e7c 100644
--- a/example/lapack_to_morse/step5.c
+++ b/example/lapack_to_morse/step5.c
@@ -145,15 +145,15 @@ int main(int argc, char *argv[]) {
      */
     MORSE_dpotrs_Tile_Async( UPLO, descA, descX, sequence, &request);
 
+    /* Ensure that all data processed on the gpus we are depending on are back
+     * in main memory */
+    MORSE_Desc_Flush( descA, sequence );
+    MORSE_Desc_Flush( descX, sequence );
+
     /* Synchronization barrier (the runtime ensures that all submitted tasks
      * have been terminated */
     MORSE_Sequence_Wait(sequence);
 
-    /* Ensure that all data processed on the gpus we are depending on are back
-     * in main memory */
-    RUNTIME_desc_getoncpu(descA);
-    RUNTIME_desc_getoncpu(descX);
-
     status = sequence->status;
     if ( status != 0 ) {
         fprintf(stderr, "Error in computation (%d)\n", status);
diff --git a/example/lapack_to_morse/step6.c b/example/lapack_to_morse/step6.c
index 68850db3f..074d4cfa8 100644
--- a/example/lapack_to_morse/step6.c
+++ b/example/lapack_to_morse/step6.c
@@ -167,15 +167,15 @@ int main(int argc, char *argv[]) {
      */
     MORSE_dpotrs_Tile_Async( UPLO, descA, descX, sequence, &request);
 
+    /* Ensure that all data processed on the gpus we are depending on are back
+     * in main memory */
+    MORSE_Desc_Flush( descA, sequence );
+    MORSE_Desc_Flush( descX, sequence );
+
     /* Synchronization barrier (the runtime ensures that all submitted tasks
      * have been terminated */
     MORSE_Sequence_Wait(sequence);
 
-    /* Ensure that all data processed on the gpus we are depending on are back
-     * in main memory */
-    RUNTIME_desc_getoncpu(descA);
-    RUNTIME_desc_getoncpu(descX);
-
     status = sequence->status;
     if ( status != 0 ) {
         fprintf(stderr, "Error in computation (%d)\n", status);
diff --git a/example/lapack_to_morse/step7.c b/example/lapack_to_morse/step7.c
index 15e00f587..fbb48e4e5 100644
--- a/example/lapack_to_morse/step7.c
+++ b/example/lapack_to_morse/step7.c
@@ -175,15 +175,15 @@ int main(int argc, char *argv[]) {
      */
     MORSE_dpotrs_Tile_Async( UPLO, descA, descX, sequence, &request);
 
+    /* Ensure that all data processed on the gpus we are depending on are back
+     * in main memory */
+    MORSE_Desc_Flush( descA, sequence );
+    MORSE_Desc_Flush( descX, sequence );
+
     /* Synchronization barrier (the runtime ensures that all submitted tasks
      * have been terminated */
     MORSE_Sequence_Wait(sequence);
 
-    /* Ensure that all data processed on the gpus we are depending on are back
-     * in main memory */
-    RUNTIME_desc_getoncpu(descA);
-    RUNTIME_desc_getoncpu(descX);
-
     status = sequence->status;
     if ( status != 0 ) {
         fprintf(stderr, "Error in computation (%d)\n", status);
diff --git a/include/chameleon/morse_runtime.h b/include/chameleon/morse_runtime.h
index c9f098f3f..76c83ce85 100644
--- a/include/chameleon/morse_runtime.h
+++ b/include/chameleon/morse_runtime.h
@@ -394,52 +394,73 @@ int
 RUNTIME_desc_release( const MORSE_desc_t *desc );
 
 /**
- * @brief Make sure the data is brought back to the CPU main memory at the
- * end of the algorithm.
+ * @brief Flush all pieces of data from a descriptor.
+ *
+ * This function marks all pieces of data from the descriptor as unused in the future to:
+ *   - cleanup the data from the distributed cache if present.
+ *   - mark for eviction from the GPU if space is needed
+ *   - move the data back to the main memory
  *
  * @param[in] desc
- *            The descriptor to release.
+ *            The descriptor to flush.
  *
- * @retval MORSE_SUCCESS on success
+ * @param[in] sequence
+ *            The sequence in which the data is used.
  */
-int
-RUNTIME_desc_getoncpu( const MORSE_desc_t *desc );
+void
+RUNTIME_desc_flush( const MORSE_desc_t     *desc,
+                    const MORSE_sequence_t *sequence );
 
 /**
- * @brief Make sure the data will be brought back to the CPU main memory at the
- * end of the algorithm.
+ * @brief Flush all data submitted to the runtime systems from the distributed
+ * cache, and/or mark for eviction from the GPU memory.
  *
- * This function is a asynchronous call that submit the data movement from
- * remote memory to the main memory. This call must be completed by a call to
- * RUNTIME_sequence_wait() to ensure that all data have been moved.
- * Users should avoid to call this function as it sequentially moves back the
- * data from outside the main memory to main memory, and should prefer
- * RUNTIME_desc_getoncpu_async().
+ * This function flushes all data from the distributed cache of the runtime system.
+ */
+void
+RUNTIME_flush( );
+
+/**
+ * @brief Flush a single piece of data.
  *
- * @param[in] desc
- *            The descriptor to release.
+ * This function marks a piece of data as unused in the future to:
+ *   - cleanup the data from the distributed cache if present.
+ *   - mark for eviction from the GPU if space is needed
+ *   - move the data back to the main memory
  *
  * @param[in] sequence
- *            The sequence to which submit the data movements
+ *            The sequence in which the data is used.
  *
- * @retval MORSE_SUCCESS on success
+ * @param[in] A
+ *            The descriptor to which the piece of data belongs.
+ *
+ * @param[in] Am
+ *            The row coordinate of the piece of data in the matrix
+ *
+ * @param[in] An
+ *            The column coordinate of the piece of data in the matrix
  */
-int
-RUNTIME_desc_getoncpu_async( const MORSE_desc_t *desc,
-                             MORSE_sequence_t   *sequence );
+void
+RUNTIME_data_flush( const MORSE_sequence_t *sequence,
+                    const MORSE_desc_t *A, int Am, int An );
 
 /**
  * @brief Get the pointer to the data or the runtime handler associated to the
  * piece of data (m, n) in desc.
  *
- * @param[in] desc
- *            The descriptor to release.
+ * @param[in] A
+ *            The descriptor to which belongs the piece of data.
  *
- * @retval MORSE_SUCCESS on success
+ * @param[in] Am
+ *            The row coordinate of the piece of data in the matrix
+ *
+ * @param[in] An
+ *            The column coordinate of the piece of data in the matrix
+ *
+ * @retval The runtime handler address of the piece of data.
  */
 void *
-RUNTIME_desc_getaddr( const MORSE_desc_t *desc,
-                      int m, int n );
+RUNTIME_data_getaddr( const MORSE_desc_t *A, int Am, int An );
 
 /**
  * @}
diff --git a/include/chameleon/morse_tasks.h b/include/chameleon/morse_tasks.h
index 82abf2c78..a048e391e 100644
--- a/include/chameleon/morse_tasks.h
+++ b/include/chameleon/morse_tasks.h
@@ -46,15 +46,6 @@ void MORSE_TASK_stile_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);
 
-/*
- * Mark a data as unused after this call
- */
-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"
 #include "chameleon/morse_tasks_c.h"
diff --git a/include/morse.h b/include/morse.h
index 6d745743f..f967dd5c1 100644
--- a/include/morse.h
+++ b/include/morse.h
@@ -114,7 +114,7 @@ int MORSE_Desc_Create_OOC_User(MORSE_desc_t **desc, MORSE_enum dtyp,
 int MORSE_Desc_Destroy (MORSE_desc_t **desc);
 int MORSE_Desc_Acquire (MORSE_desc_t  *desc);
 int MORSE_Desc_Release (MORSE_desc_t  *desc);
-int MORSE_Desc_Getoncpu(MORSE_desc_t  *desc);
+int MORSE_Desc_Flush(MORSE_desc_t  *desc, MORSE_sequence_t *sequence);
 void MORSE_user_tag_size(int, int) ;
 
 /* Workspaces */
diff --git a/runtime/starpu/CMakeLists.txt b/runtime/starpu/CMakeLists.txt
index 2bc2c94d1..a6d06b1ad 100644
--- a/runtime/starpu/CMakeLists.txt
+++ b/runtime/starpu/CMakeLists.txt
@@ -95,7 +95,6 @@ set(RUNTIME_COMMON
   control/runtime_options.c
   control/runtime_profiling.c
   control/runtime_workspace.c
-  codelets/codelet_dataflush.c
   ${RUNTIME_COMMON_GENERATED}
   )
 
diff --git a/runtime/starpu/codelets/codelet_dataflush.c b/runtime/starpu/codelets/codelet_dataflush.c
deleted file mode 100644
index a5347caf6..000000000
--- a/runtime/starpu/codelets/codelet_dataflush.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- *
- * @copyright (c) 2009-2014 The University of Tennessee and The University
- *                          of Tennessee Research Foundation.
- *                          All rights reserved.
- * @copyright (c) 2012-2014 Inria. All rights reserved.
- * @copyright (c) 2012-2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
- *
- **/
-
-/**
- *
- * @file codelet_dataflush.c
- *
- *  MORSE codelets kernel
- *  MORSE is a software package provided by Univ. of Tennessee,
- *  Univ. of California Berkeley and Univ. of Colorado Denver
- *
- * @version 2.5.0
- * @comment This file has been automatically generated
- *          from Plasma 2.5.0 for MORSE 1.0.0
- * @author Mathieu Faverge
- * @author Marc Sergent
- * @date 2014-02-05
- *
- **/
-#include "chameleon_starpu.h"
-#include "chameleon/morse_tasks.h"
-
-#ifdef HAVE_STARPU_DATA_WONT_USE
-#elif defined HAVE_STARPU_IDLE_PREFETCH
-static void data_flush(void *handle)
-{
-        starpu_data_idle_prefetch_on_node(handle, STARPU_MAIN_RAM, 1);
-        starpu_data_release_on_node(handle, -1);
-}
-#else
-static void data_release(void *handle)
-{
-        starpu_data_release(handle);
-}
-#endif
-
-void MORSE_TASK_flush_data( const MORSE_option_t *options,
-                            const MORSE_desc_t *A, int Am, int An )
-{
-    (void)options;
-
-    {
-        starpu_data_handle_t *ptrtile = (starpu_data_handle_t*)(A->schedopt);
-        ptrtile += ((int64_t)(A->lmt) * (int64_t)An + (int64_t)Am);
-
-        if (*ptrtile != NULL)
-        {
-#if defined(CHAMELEON_USE_MPI)
-            starpu_mpi_cache_flush(MPI_COMM_WORLD, *ptrtile);
-#endif
-
-            if ( A->myrank == A->get_rankof( A, Am, An ) )
-            {
-                /* Push data to main memory when we have time to */
-#ifdef HAVE_STARPU_DATA_WONT_USE
-                starpu_data_wont_use(*ptrtile);
-#elif defined HAVE_STARPU_IDLE_PREFETCH
-                starpu_data_acquire_on_node_cb(*ptrtile, -1, STARPU_R, data_flush, *ptrtile);
-#else
-                starpu_data_acquire_cb(*ptrtile, STARPU_R, data_release, *ptrtile);
-#endif
-            }
-        }
-    }
-}
-
-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);
-#endif
-}
diff --git a/runtime/starpu/control/runtime_descriptor.c b/runtime/starpu/control/runtime_descriptor.c
index 16308ce3f..ee2350065 100644
--- a/runtime/starpu/control/runtime_descriptor.c
+++ b/runtime/starpu/control/runtime_descriptor.c
@@ -296,76 +296,96 @@ int RUNTIME_desc_release( const MORSE_desc_t *desc )
 }
 
 /*******************************************************************************
- *  Get data on cpu - Synchronous call
+ *  Flush cached data
  **/
-int RUNTIME_desc_getoncpu( const MORSE_desc_t *desc )
+void RUNTIME_flush()
+{
+#if defined(CHAMELEON_USE_MPI)
+    starpu_mpi_cache_flush_all_data(MPI_COMM_WORLD);
+#endif
+}
+
+/*****************************************************************************
+ * Different implementations of the flush call based on StarPU version
+ */
+#ifdef HAVE_STARPU_DATA_WONT_USE
+
+static inline void
+chameleon_starpu_data_wont_use( starpu_data_handle_t handle ) {
+    starpu_data_wont_use( handle );
+}
+
+#elif defined HAVE_STARPU_IDLE_PREFETCH
+
+static inline void
+chameleon_starpu_data_flush( starpu_data_handle_t handle)
+{
+    starpu_data_idle_prefetch_on_node(handle, STARPU_MAIN_RAM, 1);
+    starpu_data_release_on_node(handle, -1);
+}
+
+static inline void
+chameleon_starpu_data_wont_use( starpu_data_handle_t handle ) {
+    starpu_data_acquire_on_node_cb( handle, -1, STARPU_R,
+                                    chameleon_starpu_data_flush, handle );
+}
+
+#else
+
+static inline void
+chameleon_starpu_data_wont_use( starpu_data_handle_t handle ) {
+    starpu_data_acquire_cb( handle, STARPU_R,
+                            (void (*)(void*))&starpu_data_release, handle );
+
+#endif
+
+void RUNTIME_desc_flush( const MORSE_desc_t     *desc,
+                         const MORSE_sequence_t *sequence )
 {
     starpu_data_handle_t *handle = (starpu_data_handle_t*)(desc->schedopt);
     int lmt = desc->lmt;
     int lnt = desc->lnt;
     int m, n;
 
-    if ( desc->ooc ) {
-        /* May not even fit */
-        morse_warning( "RUNTIME_desc_getoncpu(StarPU)",
-                       "Try to get an out-of-core matrix on main memory. Cancelled as it might not fit" );
-        return MORSE_SUCCESS;
-    }
-
-    for (n = 0; n < lnt; n++) {
-        for (m = 0; m < lmt; m++)
+    for (n = 0; n < lnt; n++)
+    {
+        for (m = 0; m < lmt; m++, handle++)
         {
-            if ( (*handle == NULL) ||
-                 !morse_desc_islocal( desc, m, n ) )
-            {
-                handle++;
+            if ( *handle == NULL ) {
                 continue;
             }
 
-            starpu_data_acquire(*handle, STARPU_R);
-            starpu_data_release(*handle);
-            handle++;
+#if defined(CHAMELEON_USE_MPI)
+            starpu_mpi_cache_flush( MPI_COMM_WORLD, *handle );
+#endif
+            if ( morse_desc_islocal( desc, m, n ) ) {
+                chameleon_starpu_data_wont_use( *handle );
+            }
         }
     }
-    return MORSE_SUCCESS;
+
+    (void)sequence;
 }
 
-/*******************************************************************************
- *  Get data on cpu - Asynchronous call
- **/
-int RUNTIME_desc_getoncpu_async( const MORSE_desc_t *desc,
-                                 MORSE_sequence_t   *sequence )
+void RUNTIME_data_flush( const MORSE_sequence_t *sequence,
+                         const MORSE_desc_t *A, int Am, int An )
 {
-    starpu_data_handle_t *handle = (starpu_data_handle_t*)(desc->schedopt);
-    int lmt = desc->lmt;
-    int lnt = desc->lnt;
-    int m, n;
+    starpu_data_handle_t *handle = (starpu_data_handle_t*)(A->schedopt);
+    handle += ((int64_t)(A->lmt) * (int64_t)An + (int64_t)Am);
 
-    if ( desc->ooc ) {
-        /* May not even fit */
-        morse_warning( "RUNTIME_desc_getoncpu_async(StarPU)",
-                       "Try to get an out-of-core matrix on main memory. Cancelled as it might not fit" );
-        return MORSE_SUCCESS;
+    if (*handle == NULL) {
+        return;
     }
 
-    for (n = 0; n < lnt; n++) {
-        for (m = 0; m < lmt; m++)
-        {
-            if ( (*handle == NULL) ||
-                 !morse_desc_islocal( desc, m, n ) )
-            {
-                handle++;
-                continue;
-            }
+#if defined(CHAMELEON_USE_MPI)
+    starpu_mpi_cache_flush( MPI_COMM_WORLD, *handle );
+#endif
 
-            starpu_data_acquire_cb( *handle, STARPU_R,
-                                    (void (*)(void*))&starpu_data_release, *handle );
-            handle++;
-        }
+    if ( morse_desc_islocal( A, Am, An ) ) {
+        chameleon_starpu_data_wont_use( *handle );
     }
 
     (void)sequence;
-    return MORSE_SUCCESS;
 }
 
 /*******************************************************************************
@@ -377,7 +397,7 @@ int RUNTIME_desc_getoncpu_async( const MORSE_desc_t *desc,
 #define STARPU_MAIN_RAM 0
 #endif
 
-void *RUNTIME_desc_getaddr( const MORSE_desc_t *desc, int m, int n )
+void *RUNTIME_data_getaddr( const MORSE_desc_t *desc, int m, int n )
 {
     int64_t im = m + (desc->i / desc->mb);
     int64_t jn = n + (desc->j / desc->nb);
diff --git a/runtime/starpu/include/chameleon_starpu.h.in b/runtime/starpu/include/chameleon_starpu.h.in
index 8e3692f8e..7567425e6 100644
--- a/runtime/starpu/include/chameleon_starpu.h.in
+++ b/runtime/starpu/include/chameleon_starpu.h.in
@@ -117,7 +117,7 @@ typedef struct starpu_conf starpu_conf_t;
 /**
  * Access to block pointer and leading dimension
  */
-#define RTBLKADDR( desc, type, m, n ) ( (starpu_data_handle_t)RUNTIME_desc_getaddr( desc, m, n ) )
+#define RTBLKADDR( desc, type, m, n ) ( (starpu_data_handle_t)RUNTIME_data_getaddr( desc, m, n ) )
 
 void RUNTIME_set_reduction_methods(starpu_data_handle_t handle, MORSE_enum dtyp);
 
diff --git a/timing/time_zgetri_tile.c b/timing/time_zgetri_tile.c
index 471f30f62..ebd0a74f2 100644
--- a/timing/time_zgetri_tile.c
+++ b/timing/time_zgetri_tile.c
@@ -40,10 +40,10 @@ static int check_getri_factorization(MORSE_desc_t *descA1, MORSE_desc_t *descA2,
     MORSE_Complex64_t *b = (MORSE_Complex64_t *)malloc((descA1->m)*sizeof(MORSE_Complex64_t));
     MORSE_Complex64_t *x = (MORSE_Complex64_t *)malloc((descA1->m)*sizeof(MORSE_Complex64_t));
 
-    MORSE_Desc_Create(&descB, b, MorseComplexDouble, descA1->mb, descA1->nb, descA1->bsiz, 
-		      descA1->m, 1, 0, 0, descA1->m, 1, 1, 1);
-    MORSE_Desc_Create(&descX, x, MorseComplexDouble, descA1->mb, descA1->nb, descA1->bsiz, 
-		      descA1->m, 1, 0, 0, descA1->m, 1, 1, 1);
+    MORSE_Desc_Create(&descB, b, MorseComplexDouble, descA1->mb, descA1->nb, descA1->bsiz,
+                      descA1->m, 1, 0, 0, descA1->m, 1, 1, 1);
+    MORSE_Desc_Create(&descX, x, MorseComplexDouble, descA1->mb, descA1->nb, descA1->bsiz,
+                      descA1->m, 1, 0, 0, descA1->m, 1, 1, 1);
 
     MORSE_zplrnt_Tile( descX, 537 );
     MORSE_zlacpy_Tile( MorseUpperLower, descX, descB);
@@ -55,9 +55,9 @@ static int check_getri_factorization(MORSE_desc_t *descA1, MORSE_desc_t *descA2,
     Bnorm = MORSE_zlange_Tile(MorseInfNorm, descB,  work);
 
     MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans,
-                       (MORSE_Complex64_t)1.,  descA1, descX, 
+                       (MORSE_Complex64_t)1.,  descA1, descX,
                        (MORSE_Complex64_t)-1., descB);
-    
+
     Rnorm = MORSE_zlange_Tile(MorseInfNorm, descB, work);
 
     if (getenv("MORSE_TESTING_VERBOSE"))
@@ -96,26 +96,26 @@ static int check_getri_inverse(MORSE_desc_t *descA1, MORSE_desc_t *descA2, int *
     double eps = LAPACKE_dlamch_work('e');
     MORSE_desc_t        *descW;
 
-    MORSE_Desc_Create(&descW, work, MorseComplexDouble,  descA1->mb, descA1->nb, descA1->bsiz, 
+    MORSE_Desc_Create(&descW, work, MorseComplexDouble,  descA1->mb, descA1->nb, descA1->bsiz,
                        descA1->m, descA1->n, 0, 0, descA1->m, descA1->n);
-    
+
     MORSE_zlaset_Tile( MorseUpperLower, (MORSE_Complex64_t)0., (MORSE_Complex64_t)1., descW);
-    MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans, 
-                       (MORSE_Complex64_t)-1., descA2, descA1, 
+    MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans,
+                       (MORSE_Complex64_t)-1., descA2, descA1,
                        (MORSE_Complex64_t)1.,  descW);
 
     Anorm    = MORSE_zlange_Tile(MorseInfNorm, descA1, W);
     Ainvnorm = MORSE_zlange_Tile(MorseInfNorm, descA2, W);
     Rnorm    = MORSE_zlange_Tile(MorseInfNorm, descW,  W);
-    
-    dparam[IPARAM_ANORM] = Anorm;    
-    dparam[IPARAM_BNORM] = Ainvnorm; 
+
+    dparam[IPARAM_ANORM] = Anorm;
+    dparam[IPARAM_BNORM] = Ainvnorm;
 
     result = Rnorm / ( (Anorm*Ainvnorm)*descA1->m*eps ) ;
     dparam[IPARAM_RES] = Rnorm;
 
     if (  isnan(Ainvnorm) || isinf(Ainvnorm) || isnan(result) || isinf(result) || (result > 60.0) ) {
-        dparam[IPARAM_XNORM] = -1.;    
+        dparam[IPARAM_XNORM] = -1.;
     }
     else{
         dparam[IPARAM_XNORM] = 0.;
@@ -129,12 +129,12 @@ static int check_getri_inverse(MORSE_desc_t *descA1, MORSE_desc_t *descA2, int *
 }
 
 static int
-RunTest(int *iparam, double *dparam, morse_time_t *t_) 
+RunTest(int *iparam, double *dparam, morse_time_t *t_)
 {
     MORSE_desc_t descW;
     int ret = 0;
     PASTE_CODE_IPARAM_LOCALS( iparam );
-    
+
     if ( M != N ) {
         fprintf(stderr, "This timing works only with M == N\n");
         return -1;
@@ -155,69 +155,65 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
     /* MORSE ZGETRF / ZTRTRI / ZTRSMRV  */
     {
 #if defined(TRACE_BY_SEQUENCE)
-        MORSE_sequence_t *sequence[4];
-        MORSE_request_t request[4] = { MORSE_REQUEST_INITIALIZER, 
-                                      MORSE_REQUEST_INITIALIZER, 
-                                      MORSE_REQUEST_INITIALIZER, 
-                                      MORSE_REQUEST_INITIALIZER };
-        
-        MORSE_Sequence_Create(&sequence[0]);
-        MORSE_Sequence_Create(&sequence[1]);
-        MORSE_Sequence_Create(&sequence[2]);
-        MORSE_Sequence_Create(&sequence[3]);
+        MORSE_sequence_t *sequence;
+        MORSE_request_t request[4] = { MORSE_REQUEST_INITIALIZER,
+                                       MORSE_REQUEST_INITIALIZER,
+                                       MORSE_REQUEST_INITIALIZER,
+                                       MORSE_REQUEST_INITIALIZER };
+
+        MORSE_Sequence_Create(&sequence);
 
         if ( ! iparam[IPARAM_ASYNC] ) {
-            
+
             START_TIMING();
-            MORSE_zgetrf_Tile_Async(descA, piv, sequence[0], &request[0]); 
-            MORSE_Sequence_Wait(sequence[0]);
-            
-            MORSE_ztrtri_Tile_Async(MorseUpper, MorseNonUnit, descA, sequence[1], &request[1]);
-            MORSE_Sequence_Wait(sequence[1]);
-            
-            MORSE_ztrsmrv_Tile_Async(MorseRight, MorseLower, MorseNoTrans, MorseUnit, 
-                                      (MORSE_Complex64_t) 1.0, descA, &descW, sequence[2], &request[2]);
-            MORSE_Sequence_Wait(sequence[2]);
-            
-            MORSE_zlaswpc_Tile_Async(descA, 1, descA->m, piv, -1, sequence[3], &request[3]);
-            MORSE_Sequence_Wait(sequence[3]);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_zgetrf_Tile_Async( descA, piv, sequence, &request[0] );
+            MORSE_Sequence_Wait(sequence);
+
+            MORSE_ztrtri_Tile_Async( MorseUpper, MorseNonUnit, descA, sequence, &request[1] );
+            MORSE_Sequence_Wait(sequence);
+
+            MORSE_ztrsmrv_Tile_Async( MorseRight, MorseLower, MorseNoTrans, MorseUnit,
+                                      (MORSE_Complex64_t) 1.0, descA, &descW,
+                                      sequence, &request[2] );
+            MORSE_Sequence_Wait(sequence);
+
+            MORSE_zlaswpc_Tile_Async( descA, 1, descA->m, piv, -1,
+                                      sequence, &request[3] );
+            MORSE_Sequence_Wait(sequence);
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
 
         } else {
 
             START_TIMING();
-            MORSE_zgetrf_Tile_Async( descA, piv, sequence[0], &request[0]);
-            MORSE_ztrtri_Tile_Async( MorseUpper, MorseNonUnit, 
-                                      descA, sequence[1], &request[1]);
-            MORSE_ztrsmrv_Tile_Async(MorseRight, MorseLower, MorseNoTrans, MorseUnit, 
-                                      (MORSE_Complex64_t) 1.0, 
-                                      descA, &descW, sequence[2], &request[2]);
-            MORSE_zlaswpc_Tile_Async(descA, 1, descA->m, piv, -1, 
-                                      sequence[3], &request[3]);
-            
+            MORSE_zgetrf_Tile_Async( descA, piv, sequence, &request[0]);
+            MORSE_ztrtri_Tile_Async( MorseUpper, MorseNonUnit,
+                                     descA, sequence, &request[1] );
+            MORSE_ztrsmrv_Tile_Async( MorseRight, MorseLower, MorseNoTrans, MorseUnit,
+                                      (MORSE_Complex64_t) 1.0,
+                                      descA, &descW, sequence, &request[2] );
+            MORSE_zlaswpc_Tile_Async( descA, 1, descA->m, piv, -1,
+                                      sequence, &request[3] );
+
             /* Wait for everything */
-            MORSE_Sequence_Wait(sequence[0]);
-            MORSE_Sequence_Wait(sequence[1]);
-            MORSE_Sequence_Wait(sequence[2]);
-            MORSE_Sequence_Wait(sequence[3]);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_Sequence_Wait( sequence );
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
-        
+
         }
 
         MORSE_Sequence_Destroy(sequence[0]);
         MORSE_Sequence_Destroy(sequence[1]);
         MORSE_Sequence_Destroy(sequence[2]);
         MORSE_Sequence_Destroy(sequence[3]);
-        
+
 #else
         if ( ! iparam[IPARAM_ASYNC] ) {
 
             START_TIMING();
             MORSE_zgetrf_Tile(descA, piv);
             MORSE_ztrtri_Tile(MorseUpper, MorseNonUnit, descA);
-            MORSE_ztrsmrv_Tile(MorseRight, MorseLower, MorseNoTrans, MorseUnit, 
+            MORSE_ztrsmrv_Tile(MorseRight, MorseLower, MorseNoTrans, MorseUnit,
                                 (MORSE_Complex64_t) 1.0, descA, &descW);
             MORSE_zlaswpc_Tile(descA, 1, descA->m, piv, -1);
             STOP_TIMING();
@@ -225,28 +221,28 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
         } else {
 
             MORSE_sequence_t *sequence;
-            MORSE_request_t request[2] = { MORSE_REQUEST_INITIALIZER, 
+            MORSE_request_t request[2] = { MORSE_REQUEST_INITIALIZER,
                                           MORSE_REQUEST_INITIALIZER };
 
             MORSE_Sequence_Create(&sequence);
-            
+
             START_TIMING();
             MORSE_zgetrf_Tile_Async(descA, piv, sequence, &request[0]);
             MORSE_zgetri_Tile_Async(descA, piv, &descW, sequence, &request[1]);
             MORSE_Sequence_Wait(sequence);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
-        
-            MORSE_Sequence_Destroy(sequence);       
+
+            MORSE_Sequence_Destroy(sequence);
         }
 #endif
     }
-    
+
     /* Check the solution */
     if ( check )
     {
         ret = check_getri_inverse(descA2, descA, piv, dparam);
-    
+
         PASTE_CODE_FREE_MATRIX( descA2 );
     }
 
@@ -256,4 +252,3 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
 
     return ret;
 }
-
diff --git a/timing/time_zpotri_tile.c b/timing/time_zpotri_tile.c
index 07ef6007f..3a2d59e5b 100644
--- a/timing/time_zpotri_tile.c
+++ b/timing/time_zpotri_tile.c
@@ -50,40 +50,36 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
      */
 #if defined(TRACE_BY_SEQUENCE)
     {
-        MORSE_sequence_t *sequence[3];
+        MORSE_sequence_t *sequence;
         MORSE_request_t request[3] = { MORSE_REQUEST_INITIALIZER,
                                        MORSE_REQUEST_INITIALIZER,
                                        MORSE_REQUEST_INITIALIZER };
 
-        MORSE_Sequence_Create(&sequence[0]);
-        MORSE_Sequence_Create(&sequence[1]);
-        MORSE_Sequence_Create(&sequence[2]);
+        MORSE_Sequence_Create(&sequence);
 
         if ( ! iparam[IPARAM_ASYNC] ) {
             START_TIMING();
 
-            MORSE_zpotrf_Tile_Async(uplo, descA,                sequence[0], &request[0]);
-            MORSE_Sequence_Wait(sequence[0]);
+            MORSE_zpotrf_Tile_Async(uplo, descA,               sequence, &request[0]);
+            MORSE_Sequence_Wait(sequence);
 
-            MORSE_ztrtri_Tile_Async(uplo, MorseNonUnit, descA, sequence[1], &request[1]);
-            MORSE_Sequence_Wait(sequence[1]);
+            MORSE_ztrtri_Tile_Async(uplo, MorseNonUnit, descA, sequence, &request[1]);
+            MORSE_Sequence_Wait(sequence);
 
-            MORSE_zlauum_Tile_Async(uplo, descA,                sequence[2], &request[2]);
-            MORSE_Sequence_Wait(sequence[2]);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_zlauum_Tile_Async(uplo, descA,               sequence, &request[2]);
+            MORSE_Sequence_Wait(sequence);
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
 
         } else {
 
             START_TIMING();
-            MORSE_zpotrf_Tile_Async(uplo, descA,                sequence[0], &request[0]);
-            MORSE_ztrtri_Tile_Async(uplo, MorseNonUnit, descA, sequence[1], &request[1]);
-            MORSE_zlauum_Tile_Async(uplo, descA,                sequence[2], &request[2]);
-
-            MORSE_Sequence_Wait(sequence[0]);
-            MORSE_Sequence_Wait(sequence[1]);
-            MORSE_Sequence_Wait(sequence[2]);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_zpotrf_Tile_Async(uplo, descA,               sequence, &request[0]);
+            MORSE_ztrtri_Tile_Async(uplo, MorseNonUnit, descA, sequence, &request[1]);
+            MORSE_zlauum_Tile_Async(uplo, descA,               sequence, &request[2]);
+
+            MORSE_Sequence_Wait(sequence);
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
         }
 
@@ -113,7 +109,7 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
             MORSE_zpotrf_Tile_Async(uplo, descA, sequence, &request[0]);
             MORSE_zpotri_Tile_Async(uplo, descA, sequence, &request[1]);
             MORSE_Sequence_Wait(sequence);
-            MORSE_Desc_Getoncpu( descA );
+            MORSE_Desc_Flush( descA, sequence );
             STOP_TIMING();
 
             MORSE_Sequence_Destroy(sequence);
diff --git a/timing/time_zsytrf_tile.c b/timing/time_zsytrf_tile.c
index 423b77b70..54cf33655 100644
--- a/timing/time_zsytrf_tile.c
+++ b/timing/time_zsytrf_tile.c
@@ -58,17 +58,16 @@ RunTest(int *iparam, double *dparam, morse_time_t *t_)
         dparam[IPARAM_ANORM] = MORSE_zlange_Tile(MorseInfNorm, descAC);
         dparam[IPARAM_BNORM] = MORSE_zlange_Tile(MorseInfNorm, descB);
         dparam[IPARAM_XNORM] = MORSE_zlange_Tile(MorseInfNorm, descX);
-		MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans, 1.0, descAC, descX, -1.0, descB );
-		dparam[IPARAM_RES] = MORSE_zlange_Tile(MorseInfNorm, descB);
+                MORSE_zgemm_Tile( MorseNoTrans, MorseNoTrans, 1.0, descAC, descX, -1.0, descB );
+                dparam[IPARAM_RES] = MORSE_zlange_Tile(MorseInfNorm, descB);
 
         PASTE_CODE_FREE_MATRIX( descB  );
         PASTE_CODE_FREE_MATRIX( descAC );
         PASTE_CODE_FREE_MATRIX( descX  );
 
-    } 
-	
+    }
+
     PASTE_CODE_FREE_MATRIX( descA );
-    MORSE_TASK_flush_all();
 
     return 0;
 }
-- 
GitLab