Browse Source

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.
Sylvain Henry 13 years ago
parent
commit
34ea06259e
2 changed files with 12 additions and 0 deletions
  1. 5 0
      include/starpu_data.h
  2. 7 0
      src/datawizard/interfaces/data_interface.c

+ 5 - 0
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);

+ 7 - 0
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);