From 723095fb3767b16ccc837acf67674c9249fa2efc Mon Sep 17 00:00:00 2001
From: Samuel Thibault <samuel.thibault@inria.fr>
Date: Tue, 24 Mar 2015 16:27:34 +0000
Subject: [PATCH] Push flushed data to main memory when we have time to

---
 runtime/starpu/codelets/codelet_dataflush.c | 28 ++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/runtime/starpu/codelets/codelet_dataflush.c b/runtime/starpu/codelets/codelet_dataflush.c
index 8f9115237..3f366f696 100644
--- a/runtime/starpu/codelets/codelet_dataflush.c
+++ b/runtime/starpu/codelets/codelet_dataflush.c
@@ -4,7 +4,7 @@
  *                          of Tennessee Research Foundation.
  *                          All rights reserved.
  * @copyright (c) 2012-2014 Inria. All rights reserved.
- * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
+ * @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
  *
  **/
 
@@ -26,6 +26,19 @@
  **/
 #include "runtime/starpu/include/morse_starpu.h"
 
+#ifdef CHAMELEON_USE_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_dataflush(MORSE_option_t *options,
                           MORSE_desc_t *A, int Am, int An)
 {
@@ -36,15 +49,24 @@ void MORSE_TASK_dataflush(MORSE_option_t *options,
      * compute the handle address in starpu.  We have to be careful with this if
      * something similar happen in Quark.
      */
-#if defined(CHAMELEON_USE_MPI)
     {
         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
+
+            /* Push data to main memory when we have time to */
+#ifdef CHAMELEON_USE_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_dataflush_all()
-- 
GitLab