|
@@ -352,7 +352,7 @@ int _starpu_normalize_prio(int priority, int num_priorities, unsigned sched_ctx_
|
|
|
return ((num_priorities-1)/(max-min)) * (priority - min);
|
|
|
}
|
|
|
|
|
|
-size_t _starpu_count_non_ready_buffers(struct starpu_task *task, unsigned worker)
|
|
|
+size_t _starpu_size_non_ready_buffers(struct starpu_task *task, unsigned worker)
|
|
|
{
|
|
|
int cnt = 0;
|
|
|
unsigned nbuffers = STARPU_TASK_GET_NBUFFERS(task);
|
|
@@ -375,6 +375,29 @@ size_t _starpu_count_non_ready_buffers(struct starpu_task *task, unsigned worker
|
|
|
return cnt;
|
|
|
}
|
|
|
|
|
|
+int _starpu_count_non_ready_buffers(struct starpu_task *task, unsigned worker)
|
|
|
+{
|
|
|
+ int cnt = 0;
|
|
|
+ unsigned nbuffers = STARPU_TASK_GET_NBUFFERS(task);
|
|
|
+ unsigned index;
|
|
|
+
|
|
|
+ for (index = 0; index < nbuffers; index++)
|
|
|
+ {
|
|
|
+ starpu_data_handle_t handle;
|
|
|
+ unsigned buffer_node = _starpu_task_data_get_node_on_worker(task, index, worker);
|
|
|
+
|
|
|
+ handle = STARPU_TASK_GET_HANDLE(task, index);
|
|
|
+
|
|
|
+ int is_valid;
|
|
|
+ starpu_data_query_status(handle, buffer_node, NULL, &is_valid, NULL);
|
|
|
+
|
|
|
+ if (!is_valid)
|
|
|
+ cnt++;
|
|
|
+ }
|
|
|
+
|
|
|
+ return cnt;
|
|
|
+}
|
|
|
+
|
|
|
struct starpu_task *_starpu_fifo_pop_first_ready_task(struct _starpu_fifo_taskq *fifo_queue, unsigned workerid, int num_priorities)
|
|
|
{
|
|
|
struct starpu_task *task = NULL, *current;
|
|
@@ -400,7 +423,7 @@ struct starpu_task *_starpu_fifo_pop_first_ready_task(struct _starpu_fifo_taskq
|
|
|
|
|
|
if (priority >= first_task_priority)
|
|
|
{
|
|
|
- size_t non_ready = _starpu_count_non_ready_buffers(current, workerid);
|
|
|
+ size_t non_ready = _starpu_size_non_ready_buffers(current, workerid);
|
|
|
if (non_ready < non_ready_best)
|
|
|
{
|
|
|
non_ready_best = non_ready;
|