Переглянути джерело

Add starpu_data_query_status2 function

Samuel Thibault 4 роки тому
батько
коміт
86f42a0b5d
3 змінених файлів з 21 додано та 1 видалено
  1. 1 0
      ChangeLog
  2. 11 0
      include/starpu_data.h
  3. 9 1
      src/datawizard/user_interactions.c

+ 1 - 0
ChangeLog

@@ -52,6 +52,7 @@ New features:
     MPI/NUMA/GPUDirect.
   * Add peek_data interface method.
   * Add STARPU_MPI_REDUX
+  * Add starpu_data_query_status2 function.
 
 Small features:
   * New configure option --with-check-cflags to define flags for C,

+ 11 - 0
include/starpu_data.h

@@ -560,6 +560,17 @@ unsigned starpu_data_get_ooc_flag(starpu_data_handle_t handle);
 
 /**
    Query the status of \p handle on the specified \p memory_node.
+
+   \p is_allocated tells whether memory was allocated there for the data.
+   \p is_valid tells whether the actual value is available there.
+   \p is_loading tells whether the actual value is getting loaded there.
+   \p is_requested tells whether the actual value is requested to be loaded
+   there by some fetch/prefetch/idlefetch request.
+*/
+void starpu_data_query_status2(starpu_data_handle_t handle, int memory_node, int *is_allocated, int *is_valid, int *is_loading, int *is_requested);
+
+/**
+   Same as starpu_data_query_status2(), but without the is_loading parameter.
 */
 void starpu_data_query_status(starpu_data_handle_t handle, int memory_node, int *is_allocated, int *is_valid, int *is_requested);
 

+ 9 - 1
src/datawizard/user_interactions.c

@@ -802,7 +802,7 @@ void starpu_data_set_default_sequential_consistency_flag(unsigned flag)
 }
 
 /* Query the status of the handle on the specified memory node. */
-void starpu_data_query_status(starpu_data_handle_t handle, int memory_node, int *is_allocated, int *is_valid, int *is_requested)
+void starpu_data_query_status2(starpu_data_handle_t handle, int memory_node, int *is_allocated, int *is_valid, int *is_loading, int *is_requested)
 {
 // XXX : this is just a hint, so we don't take the lock ...
 //	_starpu_spin_lock(&handle->header_lock);
@@ -813,6 +813,9 @@ void starpu_data_query_status(starpu_data_handle_t handle, int memory_node, int
 	if (is_valid)
 		*is_valid = (handle->per_node[memory_node].state != STARPU_INVALID);
 
+	if (is_loading)
+		*is_loading = handle->per_node[memory_node].load_request != NULL;
+
 	if (is_requested)
 	{
 		int requested = 0;
@@ -832,3 +835,8 @@ void starpu_data_query_status(starpu_data_handle_t handle, int memory_node, int
 
 //	_starpu_spin_unlock(&handle->header_lock);
 }
+
+void starpu_data_query_status(starpu_data_handle_t handle, int memory_node, int *is_allocated, int *is_valid, int *is_requested)
+{
+	return starpu_data_query_status2(handle, memory_node, is_allocated, is_valid, NULL, is_requested);
+}