Pārlūkot izejas kodu

The starpu_data_query_status function describes the status of a data handle on
a memory node. This may be useful to scheduling policies for instance.

Cédric Augonnet 14 gadi atpakaļ
vecāks
revīzija
a46c76bdaa

+ 2 - 1
include/starpu_data.h

@@ -75,7 +75,8 @@ void starpu_data_set_sequential_consistency_flag(starpu_data_handle handle, unsi
 unsigned starpu_data_get_default_sequential_consistency_flag(void);
 void starpu_data_set_default_sequential_consistency_flag(unsigned flag);
 
-unsigned starpu_data_test_if_allocated_on_node(starpu_data_handle handle, uint32_t memory_node);
+/* Query the status of the handle on the specified memory node. */
+void starpu_data_query_status(starpu_data_handle handle, int memory_node, int *is_allocated, int *is_valid, int *is_requested);
 
 #ifdef __cplusplus
 }

+ 2 - 0
src/datawizard/coherency.h

@@ -172,6 +172,8 @@ __attribute__((warn_unused_result))
 int _starpu_fetch_task_input(struct starpu_task *task, uint32_t mask);
 
 unsigned _starpu_is_data_present_or_requested(struct starpu_data_state_t *state, uint32_t node);
+unsigned starpu_data_test_if_allocated_on_node(starpu_data_handle handle, uint32_t memory_node);
+
 
 void _starpu_set_data_requested_flag_if_needed(struct starpu_data_state_t *state, uint32_t node);
 

+ 17 - 0
src/datawizard/user_interactions.c

@@ -379,3 +379,20 @@ void starpu_data_set_default_sequential_consistency_flag(unsigned flag)
 {
 	default_sequential_consistency_flag = flag;
 }
+
+/* Query the status of the handle on the specified memory node. */
+void starpu_data_query_status(starpu_data_handle handle, int memory_node, int *is_allocated, int *is_valid, int *is_requested)
+{
+	_starpu_spin_lock(&handle->header_lock);
+
+	if (is_allocated)
+		*is_allocated = handle->per_node[memory_node].allocated;
+
+	if (is_valid)
+		*is_valid = (handle->per_node[memory_node].state != STARPU_INVALID);
+
+	if (is_requested)
+		*is_requested = handle->per_node[memory_node].requested;
+
+	_starpu_spin_unlock(&handle->header_lock);
+}