소스 검색

Add optimization for queue/fifo in modular scheduling

Adrien Guilbaud 5 년 전
부모
커밋
f4b6c0ef2f
2개의 변경된 파일14개의 추가작업 그리고 0개의 파일을 삭제
  1. 7 0
      src/sched_policies/component_fifo.c
  2. 7 0
      src/sched_policies/component_prio.c

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