Ver código fonte

Add optimization for queue/fifo in modular scheduling

Adrien Guilbaud 5 anos atrás
pai
commit
f4b6c0ef2f

+ 7 - 0
src/sched_policies/component_fifo.c

@@ -159,6 +159,13 @@ static struct starpu_task * fifo_pull_task(struct starpu_sched_component * compo
 	struct _starpu_fifo_taskq * fifo = data->fifo;
 	starpu_pthread_mutex_t * mutex = &data->mutex;
 	const double now = starpu_timing_now();
+
+	if (!STARPU_RUNNING_ON_VALGRIND && _starpu_fifo_empty(data->fifo))
+	{
+		starpu_sched_component_send_can_push_to_parents(component);
+		return NULL;
+	}
+
 	STARPU_COMPONENT_MUTEX_LOCK(mutex);
 	struct starpu_task * task;
 	if (data->ready && to->properties & STARPU_SCHED_COMPONENT_SINGLE_MEMORY_NODE)

+ 7 - 0
src/sched_policies/component_prio.c

@@ -179,6 +179,13 @@ static struct starpu_task * prio_pull_task(struct starpu_sched_component * compo
 	struct _starpu_prio_deque * prio = &data->prio;
 	starpu_pthread_mutex_t * mutex = &data->mutex;
 	const double now = starpu_timing_now();
+
+	if (!STARPU_RUNNING_ON_VALGRIND && _starpu_prio_deque_is_empty(prio))
+	{
+		starpu_sched_component_send_can_push_to_parents(component);
+		return NULL;
+	}
+
 	STARPU_COMPONENT_MUTEX_LOCK(mutex);
 	struct starpu_task * task;
 	if (data->ready && to->properties & STARPU_SCHED_COMPONENT_SINGLE_MEMORY_NODE)