Procházet zdrojové kódy

Fix having different min/max priorities between schedulers

Samuel Thibault před 8 roky
rodič
revize
25c1bc1124

+ 1 - 1
src/sched_policies/eager_central_priority_policy.c

@@ -125,7 +125,7 @@ static int _starpu_priority_push_task(struct starpu_task *task)
 	struct _starpu_priority_taskq *taskq = data->taskq;
 
 	STARPU_PTHREAD_MUTEX_LOCK(&data->policy_mutex);
-	unsigned priolevel = task->priority - STARPU_MIN_PRIO;
+	unsigned priolevel = task->priority - starpu_sched_ctx_get_min_priority(sched_ctx_id);
 
 	starpu_task_list_push_back(&taskq->taskq[priolevel], task);
 	taskq->ntasks[priolevel]++;

+ 8 - 6
src/sched_policies/heteroprio.c

@@ -159,16 +159,18 @@ inline void starpu_heteroprio_set_arch_slow_factor(unsigned sched_ctx_id, enum s
 /** If the user does not provide an init callback we create a single bucket for all architectures */
 static inline void default_init_sched(unsigned sched_ctx_id)
 {
+	int min_prio = starpu_sched_ctx_get_min_priority(sched_ctx_id);
+	int max_prio = starpu_sched_ctx_get_max_priority(sched_ctx_id);
 	// By default each type of devices uses 1 bucket and no slow factor
-	starpu_heteroprio_set_nb_prios(sched_ctx_id, STARPU_CPU_IDX, STARPU_MAX_PRIO-STARPU_MIN_PRIO+1);
-	starpu_heteroprio_set_nb_prios(sched_ctx_id, STARPU_CUDA_IDX, STARPU_MAX_PRIO-STARPU_MIN_PRIO+1);
-	starpu_heteroprio_set_nb_prios(sched_ctx_id, STARPU_OPENCL_IDX, STARPU_MAX_PRIO-STARPU_MIN_PRIO+1);
-	starpu_heteroprio_set_nb_prios(sched_ctx_id, STARPU_MIC_IDX, STARPU_MAX_PRIO-STARPU_MIN_PRIO+1);
-	starpu_heteroprio_set_nb_prios(sched_ctx_id, STARPU_SCC_IDX, STARPU_MAX_PRIO-STARPU_MIN_PRIO+1);
+	starpu_heteroprio_set_nb_prios(sched_ctx_id, STARPU_CPU_IDX, max_prio-min_prio+1);
+	starpu_heteroprio_set_nb_prios(sched_ctx_id, STARPU_CUDA_IDX, max_prio-min_prio+1);
+	starpu_heteroprio_set_nb_prios(sched_ctx_id, STARPU_OPENCL_IDX, max_prio-min_prio+1);
+	starpu_heteroprio_set_nb_prios(sched_ctx_id, STARPU_MIC_IDX, max_prio-min_prio+1);
+	starpu_heteroprio_set_nb_prios(sched_ctx_id, STARPU_SCC_IDX, max_prio-min_prio+1);
 
 	// Direct mapping
 	int prio;
-	for(prio=STARPU_MIN_PRIO ; prio<=STARPU_MAX_PRIO ; prio++)
+	for(prio=min_prio ; prio<=max_prio ; prio++)
 	{
 		starpu_heteroprio_set_mapping(sched_ctx_id, STARPU_CPU_IDX, prio, prio);
 		starpu_heteroprio_set_mapping(sched_ctx_id, STARPU_CUDA_IDX, prio, prio);