浏览代码

examples/sched_ctx/sched_ctx.c: submitting tasks to a context without the required workers is now possible

Nathalie Furmento 6 年之前
父节点
当前提交
cdfa25094a
共有 1 个文件被更改,包括 9 次插入19 次删除
  1. 9 19
      examples/sched_ctx/sched_ctx.c

+ 9 - 19
examples/sched_ctx/sched_ctx.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  *
  * Copyright (C) 2012-2014,2017-2018                      Inria
  * Copyright (C) 2012-2014,2017-2018                      Inria
- * Copyright (C) 2010-2017                                CNRS
+ * Copyright (C) 2010-2018                                CNRS
  * Copyright (C) 2010-2014                                Université de Bordeaux
  * Copyright (C) 2010-2014                                Université de Bordeaux
  *
  *
  * StarPU is free software; you can redistribute it and/or modify
  * StarPU is free software; you can redistribute it and/or modify
@@ -28,6 +28,8 @@
 int tasks_executed = 0;
 int tasks_executed = 0;
 int ctx1_tasks_executed = 0;
 int ctx1_tasks_executed = 0;
 int ctx2_tasks_executed = 0;
 int ctx2_tasks_executed = 0;
+int cpu_tasks_executed = 0;
+int gpu_tasks_executed = 0;
 
 
 static void sched_ctx_cpu_func(void *descr[], void *arg)
 static void sched_ctx_cpu_func(void *descr[], void *arg)
 {
 {
@@ -35,6 +37,7 @@ static void sched_ctx_cpu_func(void *descr[], void *arg)
 	(void)arg;
 	(void)arg;
 	(void)STARPU_ATOMIC_ADD(&tasks_executed,1);
 	(void)STARPU_ATOMIC_ADD(&tasks_executed,1);
 	(void)STARPU_ATOMIC_ADD(&ctx1_tasks_executed,1);
 	(void)STARPU_ATOMIC_ADD(&ctx1_tasks_executed,1);
+	(void)STARPU_ATOMIC_ADD(&cpu_tasks_executed,1);
 }
 }
 
 
 static void sched_ctx2_cpu_func(void *descr[], void *arg)
 static void sched_ctx2_cpu_func(void *descr[], void *arg)
@@ -43,6 +46,7 @@ static void sched_ctx2_cpu_func(void *descr[], void *arg)
 	(void)arg;
 	(void)arg;
 	(void)STARPU_ATOMIC_ADD(&tasks_executed,1);
 	(void)STARPU_ATOMIC_ADD(&tasks_executed,1);
 	(void)STARPU_ATOMIC_ADD(&ctx2_tasks_executed,1);
 	(void)STARPU_ATOMIC_ADD(&ctx2_tasks_executed,1);
+	(void)STARPU_ATOMIC_ADD(&cpu_tasks_executed,1);
 }
 }
 
 
 static void sched_ctx2_cuda_func(void *descr[], void *arg)
 static void sched_ctx2_cuda_func(void *descr[], void *arg)
@@ -51,6 +55,7 @@ static void sched_ctx2_cuda_func(void *descr[], void *arg)
 	(void)arg;
 	(void)arg;
 	(void)STARPU_ATOMIC_ADD(&tasks_executed,1);
 	(void)STARPU_ATOMIC_ADD(&tasks_executed,1);
 	(void)STARPU_ATOMIC_ADD(&ctx2_tasks_executed,1);
 	(void)STARPU_ATOMIC_ADD(&ctx2_tasks_executed,1);
+	(void)STARPU_ATOMIC_ADD(&gpu_tasks_executed,1);
 }
 }
 
 
 static struct starpu_codelet sched_ctx_codelet1 =
 static struct starpu_codelet sched_ctx_codelet1 =
@@ -127,25 +132,8 @@ int main(void)
 	/* tell starpu when you finished submitting tasks to this context
 	/* tell starpu when you finished submitting tasks to this context
 	   in order to allow moving resources from this context to the inheritor one
 	   in order to allow moving resources from this context to the inheritor one
 	   when its corresponding tasks finished executing */
 	   when its corresponding tasks finished executing */
-
 	starpu_sched_ctx_finished_submit(sched_ctx1);
 	starpu_sched_ctx_finished_submit(sched_ctx1);
 
 
-	/* task with no cuda impl submitted to a ctx with gpus only */
-	struct starpu_task *task2 = starpu_task_create();
-	task2->cl = &sched_ctx_codelet1;
-	task2->cl_arg = NULL;
-
-	/*submit tasks to context*/
-	ret = starpu_task_submit_to_ctx(task2,sched_ctx2);
-	if (ncuda == 0)
-	{
-		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
-	}
-	else
-	{
-		STARPU_ASSERT_MSG(ret == -ENODEV, "submit task should ret enodev when the ctx does not have the PUs needed by the task");
-	}
-
 	for (i = 0; i < ntasks/2; i++)
 	for (i = 0; i < ntasks/2; i++)
 	{
 	{
 		struct starpu_task *task = starpu_task_create();
 		struct starpu_task *task = starpu_task_create();
@@ -166,9 +154,11 @@ int main(void)
 	starpu_sched_ctx_add_workers(procs1, nprocs1, sched_ctx2);
 	starpu_sched_ctx_add_workers(procs1, nprocs1, sched_ctx2);
 	starpu_sched_ctx_delete(sched_ctx1);
 	starpu_sched_ctx_delete(sched_ctx1);
 	starpu_sched_ctx_delete(sched_ctx2);
 	starpu_sched_ctx_delete(sched_ctx2);
-	printf("tasks executed %d out of %d\n", tasks_executed, ntasks+1);
+	printf("tasks executed %d out of %d\n", tasks_executed, ntasks);
 	printf("tasks executed on ctx1: %d\n", ctx1_tasks_executed);
 	printf("tasks executed on ctx1: %d\n", ctx1_tasks_executed);
 	printf("tasks executed on ctx2: %d\n", ctx2_tasks_executed);
 	printf("tasks executed on ctx2: %d\n", ctx2_tasks_executed);
+	printf("tasks executed on CPU: %d\n", cpu_tasks_executed);
+	printf("tasks executed on GPU: %d\n", gpu_tasks_executed);
 
 
 enodev:
 enodev:
 	starpu_shutdown();
 	starpu_shutdown();