Accéder au contenu.
Menu Sympa

starpu-devel - [Starpu-devel] Lazy data unregistering

Objet : Developers list for StarPU

Archives de la liste

[Starpu-devel] Lazy data unregistering


Chronologique Discussions 
  • From: Sylvain HENRY <sylvain.henry@inria.fr>
  • To: "starpu-devel@lists.gforge.inria.fr" <starpu-devel@lists.gforge.inria.fr>
  • Subject: [Starpu-devel] Lazy data unregistering
  • Date: Tue, 29 May 2012 20:09:15 +0200
  • List-archive: <http://lists.gforge.inria.fr/pipermail/starpu-devel>
  • List-id: "Developers list. For discussion of new features, code changes, etc." <starpu-devel.lists.gforge.inria.fr>

Hey!

I want to be able to tell StarPU when a data is no longer required by host code, so that it can destroy it once every task that may use it has completed.

Does the attached patch seem correct? I tried to reuse lazy unregistering used internally by the reduction mode but I may have missed something.

Cheers
Sylvain
>From 619e2574cb656d9c4f318304a634ad4d26595058 Mon Sep 17 00:00:00 2001
From: Sylvain HENRY <sylvain.henry@inria.fr>
Date: Tue, 29 May 2012 19:58:13 +0200
Subject: [PATCH] Add starpu_data_unregister_lazy(handle)

Sometimes applications want to be able to tell StarPU to destroy a data once
every task submitted that may use it has completed. This new API allows it.
---
 include/starpu_data.h                      |    5 +++++
 src/datawizard/interfaces/data_interface.c |    7 +++++++
 2 files changed, 12 insertions(+)

diff --git a/include/starpu_data.h b/include/starpu_data.h
index b1ef5ef..9b656d6 100644
--- a/include/starpu_data.h
+++ b/include/starpu_data.h
@@ -52,6 +52,11 @@ struct starpu_data_interface_ops;
 void starpu_data_unregister(starpu_data_handle_t handle);
 void starpu_data_unregister_no_coherency(starpu_data_handle_t handle);
 
+/* Destroy the data handle once it is not needed anymore by any submitted task.
+ * No coherency is assumed.
+ */
+void starpu_data_unregister_lazy(starpu_data_handle_t handle);
+
 /* Destroy all data replicates. After data invalidation, the first access to
  * the handle must be performed in write-only mode. */
 void starpu_data_invalidate(starpu_data_handle_t handle);
diff --git a/src/datawizard/interfaces/data_interface.c b/src/datawizard/interfaces/data_interface.c
index aa895e8..50dafa9 100644
--- a/src/datawizard/interfaces/data_interface.c
+++ b/src/datawizard/interfaces/data_interface.c
@@ -586,6 +586,13 @@ void starpu_data_unregister_no_coherency(starpu_data_handle_t handle)
 	_starpu_data_unregister(handle, 0);
 }
 
+void starpu_data_unregister_lazy(starpu_data_handle_t handle) {
+	_starpu_spin_lock(&handle->header_lock);
+	handle->lazy_unregister = 1;
+	_starpu_spin_unlock(&handle->header_lock);
+	_starpu_data_unregister(handle, 0);
+}
+
 void starpu_data_invalidate(starpu_data_handle_t handle)
 {
 	STARPU_ASSERT(handle);
-- 
1.7.10.2




Archives gérées par MHonArc 2.6.19+.

Haut de le page