浏览代码

fix heteroprio with contexts (the ctx id sent to the callback function as a parameter)

Andra Hugo 8 年之前
父节点
当前提交
fe1885bdbe
共有 5 个文件被更改,包括 14 次插入14 次删除
  1. 9 9
      examples/scheduler/heteroprio_test.c
  2. 1 1
      include/starpu_sched_ctx.h
  3. 1 1
      src/core/sched_ctx.c
  4. 1 1
      src/core/sched_ctx.h
  5. 2 2
      src/sched_policies/heteroprio.c

+ 9 - 9
examples/scheduler/heteroprio_test.c

@@ -25,7 +25,7 @@
 
 #define FPRINTF(ofile, fmt, ...) do { if (!getenv("STARPU_SSILENT")) {fprintf(ofile, fmt, ## __VA_ARGS__); }} while(0)
 
-void initSchedulerCallback()
+void initSchedulerCallback(unsigned sched_ctx)
 {
 	// CPU uses 3 buckets
 #ifdef STARPU_USE_CPU
@@ -36,28 +36,28 @@ void initSchedulerCallback()
 		unsigned idx;
 		for(idx = 0; idx < 3; ++idx)
 		{
-			starpu_heteroprio_set_mapping(0, STARPU_CPU_IDX, idx, idx);
-			starpu_heteroprio_set_faster_arch(0, STARPU_CPU_IDX, idx);
+			starpu_heteroprio_set_mapping(sched_ctx, STARPU_CPU_IDX, idx, idx);
+			starpu_heteroprio_set_faster_arch(sched_ctx, STARPU_CPU_IDX, idx);
 		}
 	}
 #endif
 #ifdef STARPU_USE_OPENCL
 	// OpenCL is enabled and uses 2 buckets
-	starpu_heteroprio_set_nb_prios(0, STARPU_OPENCL_IDX, 2);
+	starpu_heteroprio_set_nb_prios(sched_ctx, STARPU_OPENCL_IDX, 2);
 	// OpenCL will first look to priority 2
 	int prio2 = starpu_cpu_worker_get_count() ? 2 : 1;
-	starpu_heteroprio_set_mapping(0, STARPU_OPENCL_IDX, 0, prio2);
+	starpu_heteroprio_set_mapping(sched_ctx, STARPU_OPENCL_IDX, 0, prio2);
 	// For this bucket OpenCL is the fastest
-	starpu_heteroprio_set_faster_arch(0, STARPU_OPENCL_IDX, prio2);
+	starpu_heteroprio_set_faster_arch(sched_ctx, STARPU_OPENCL_IDX, prio2);
 	// And CPU is 4 times slower
 #ifdef STARPU_USE_CPU
-	starpu_heteroprio_set_arch_slow_factor(0, STARPU_CPU_IDX, 2, 4.0f);
+	starpu_heteroprio_set_arch_slow_factor(sched_ctx, STARPU_CPU_IDX, 2, 4.0f);
 #endif
 
 	int prio1 = starpu_cpu_worker_get_count() ? 1 : 0;
-	starpu_heteroprio_set_mapping(0, STARPU_OPENCL_IDX, 1, prio1);
+	starpu_heteroprio_set_mapping(sched_ctx, STARPU_OPENCL_IDX, 1, prio1);
 	// We let the CPU as the fastest and tell that OpenCL is 1.7 times slower
-	starpu_heteroprio_set_arch_slow_factor(0, STARPU_OPENCL_IDX, prio1, 1.7f);
+	starpu_heteroprio_set_arch_slow_factor(sched_ctx, STARPU_OPENCL_IDX, prio1, 1.7f);
 #endif
 }
 

+ 1 - 1
include/starpu_sched_ctx.h

@@ -161,7 +161,7 @@ void starpu_sched_ctx_move_task_to_ctx(struct starpu_task *task, unsigned sched_
 
 int starpu_sched_ctx_get_worker_rank(unsigned sched_ctx_id);
 
-void (*starpu_sched_ctx_get_sched_policy_init(unsigned sched_ctx_id))(void);
+void (*starpu_sched_ctx_get_sched_policy_init(unsigned sched_ctx_id))(unsigned);
 
 unsigned starpu_sched_ctx_has_starpu_scheduler(unsigned sched_ctx_id, unsigned *awake_workers);
 #ifdef STARPU_USE_SC_HYPERVISOR

+ 1 - 1
src/core/sched_ctx.c

@@ -2577,7 +2577,7 @@ int starpu_sched_ctx_get_worker_rank(unsigned sched_ctx_id)
 	return -1;
 }
 
-void (*starpu_sched_ctx_get_sched_policy_init(unsigned sched_ctx_id))(void)
+void (*starpu_sched_ctx_get_sched_policy_init(unsigned sched_ctx_id))(unsigned)
 {
 	struct _starpu_sched_ctx *sched_ctx = _starpu_get_sched_ctx_struct(sched_ctx_id);
 	return sched_ctx->init_sched;

+ 1 - 1
src/core/sched_ctx.h

@@ -173,7 +173,7 @@ struct _starpu_sched_ctx
 	unsigned awake_workers;
 
 	/* function called when initializing the scheduler */
-	void (*init_sched)();
+	void (*init_sched)(unsigned);
 };
 
 struct _starpu_machine_config;

+ 2 - 2
src/sched_policies/heteroprio.c

@@ -213,10 +213,10 @@ static void initialize_heteroprio_policy(unsigned sched_ctx_id)
 	for(idx_prio = 0; idx_prio < STARPU_HETEROPRIO_MAX_PRIO; ++idx_prio)
 		_heteroprio_bucket_init(&hp->buckets[idx_prio]);
 
-	void (*init_sched)(void) = starpu_sched_ctx_get_sched_policy_init(sched_ctx_id);
+	void (*init_sched)(unsigned) = starpu_sched_ctx_get_sched_policy_init(sched_ctx_id);
 
 	if(init_sched)
-		init_sched();
+		init_sched(sched_ctx_id);
 	else
 		default_init_sched(sched_ctx_id);