Przeglądaj źródła

tests: Update towards new codelet/task interface which defines access modes for data handles into starpu_codelet and no longer in starpu_task

Nathalie Furmento 13 lat temu
rodzic
commit
18c4c8c9b4

+ 25 - 26
tests/core/execute_on_a_specific_worker.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2009, 2010  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -58,29 +58,14 @@ static void codelet_null(void *descr[], __attribute__ ((unused)) void *_args)
 //	fprintf(stderr, "worker #%d\n", id);
 }
 
-static enum starpu_access_mode select_random_mode(void)
-{
-	int r = rand();
-
-	switch (r % 3)
-	{
-		case 0:
-			return STARPU_R;
-		case 1:
-			return STARPU_W;
-		case 2:
-			return STARPU_RW;
-	};
-	return STARPU_RW;
-}
-
 static struct starpu_codelet cl_r =
 {
 	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
 	.cpu_funcs = {codelet_null, NULL},
 	.cuda_funcs = {codelet_null, NULL},
         .opencl_funcs = {codelet_null, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_R}
 };
 
 static struct starpu_codelet cl_w =
@@ -89,7 +74,8 @@ static struct starpu_codelet cl_w =
 	.cpu_funcs = {codelet_null, NULL},
 	.cuda_funcs = {codelet_null, NULL},
         .opencl_funcs = {codelet_null, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_W}
 };
 
 static struct starpu_codelet cl_rw =
@@ -98,9 +84,26 @@ static struct starpu_codelet cl_rw =
 	.cpu_funcs = {codelet_null, NULL},
 	.cuda_funcs = {codelet_null, NULL},
         .opencl_funcs = {codelet_null, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_RW}
 };
 
+static struct starpu_codelet *select_codelet_with_random_mode(void)
+{
+	int r = rand();
+
+	switch (r % 3)
+	{
+		case 0:
+			return &cl_r;
+		case 1:
+			return &cl_w;
+		case 2:
+			return &cl_rw;
+	};
+	return &cl_rw;
+}
+
 int main(int argc, char **argv)
 {
 	int ret;
@@ -125,12 +128,8 @@ int main(int argc, char **argv)
 			/* execute a task on that worker */
 			struct starpu_task *task = starpu_task_create();
 
-			task->buffers[0].handle = v_handle;
-			task->buffers[0].mode = select_random_mode();
-
-			if (task->buffers[0].mode == STARPU_R) task->cl = &cl_r;
-			else if (task->buffers[0].mode == STARPU_W) task->cl = &cl_w;
-			else if (task->buffers[0].mode == STARPU_RW) task->cl = &cl_rw;
+			task->handles[0] = v_handle;
+			task->cl = select_codelet_with_random_mode();
 
 			task->callback_func = callback;
 			task->callback_arg = NULL;

+ 7 - 7
tests/datawizard/copy.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010-2011  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -29,7 +29,8 @@ static struct starpu_codelet cpu_codelet =
         .where = STARPU_CPU,
         .cpu_funcs = {dummy_func, NULL},
         .model = NULL,
-        .nbuffers = 1
+        .nbuffers = 1,
+	.modes = {STARPU_RW}
 };
 
 static struct starpu_codelet gpu_codelet =
@@ -38,7 +39,8 @@ static struct starpu_codelet gpu_codelet =
         .cuda_funcs = {dummy_func, NULL},
         .opencl_funcs = {dummy_func, NULL},
         .model = NULL,
-        .nbuffers = 1
+        .nbuffers = 1,
+	.modes = {STARPU_RW}
 };
 
 
@@ -71,13 +73,11 @@ int main(int argc, char **argv)
 
 		task_cpu->cl = &cpu_codelet;
 		task_cpu->callback_func = NULL;
-		task_cpu->buffers[0].handle = float_array_handle;
-		task_cpu->buffers[0].mode = STARPU_RW;
+		task_cpu->handles[0] = float_array_handle;
 
 		task_gpu->cl = &gpu_codelet;
 		task_gpu->callback_func = NULL;
-		task_gpu->buffers[0].handle = float_array_handle;
-		task_gpu->buffers[0].mode = STARPU_RW;
+		task_gpu->handles[0] = float_array_handle;
 
 		ret = starpu_task_submit(task_cpu);
 		if (ret == -ENODEV) goto enodev;

+ 5 - 4
tests/datawizard/critical_section_with_void_interface.c

@@ -1,6 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010  Université de Bordeaux 1
+ * Copyright (C) 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -38,7 +39,8 @@ static struct starpu_codelet cl =
 	.cpu_funcs = {critical_section, NULL},
 	.cuda_funcs = {critical_section, NULL},
 	.opencl_funcs = {critical_section, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_RW}
 };
 
 int main(int argc, char **argv)
@@ -62,9 +64,8 @@ int main(int argc, char **argv)
 	for (i = 0; i < ntasks; i++)
 	{
 		struct starpu_task *task = starpu_task_create();
-			task->cl = &cl;
-			task->buffers[0].handle = void_handle;
-			task->buffers[0].mode = STARPU_RW;
+		task->cl = &cl;
+		task->handles[0] = void_handle;
 
 		ret = starpu_task_submit(task);
 		if (ret == -ENODEV) goto enodev;

+ 7 - 6
tests/datawizard/data_invalidation.c

@@ -1,6 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010  Université de Bordeaux 1
+ * Copyright (C) 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -57,7 +58,8 @@ static struct starpu_codelet memset_cl =
 #ifdef STARPU_USE_CUDA
 	.cuda_funcs = {cuda_memset_codelet, NULL},
 #endif
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_W}
 };
 
 /*
@@ -84,7 +86,8 @@ static struct starpu_codelet check_content_cl =
 {
 	.where = STARPU_CPU,
 	.cpu_funcs = {cpu_check_content_codelet, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_R}
 };
 
 
@@ -106,8 +109,7 @@ int main(int argc, char **argv)
 
 		memset_task = starpu_task_create();
 		memset_task->cl = &memset_cl;
-		memset_task->buffers[0].handle = v_handle;
-		memset_task->buffers[0].mode = STARPU_W;
+		memset_task->handles[0] = v_handle;
 		memset_task->detach = 0;
 
 		ret = starpu_task_submit(memset_task);
@@ -119,8 +121,7 @@ int main(int argc, char **argv)
 
 		check_content_task = starpu_task_create();
 		check_content_task->cl = &check_content_cl;
-		check_content_task->buffers[0].handle = v_handle;
-		check_content_task->buffers[0].mode = STARPU_R;
+		check_content_task->handles[0] = v_handle;
 		check_content_task->detach = 0;
 
 		ret = starpu_task_submit(check_content_task);

+ 49 - 39
tests/datawizard/double_parameter.c

@@ -1,6 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2011  Université de Bordeaux 1
+ * Copyright (C) 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -26,7 +27,8 @@ static struct starpu_codelet codelet_R_R =
         .where = STARPU_CPU,
         .cpu_funcs = { dummy_func, NULL },
         .model = NULL,
-        .nbuffers = 2
+        .nbuffers = 2,
+	.modes = {STARPU_R, STARPU_R}
 };
 
 static struct starpu_codelet codelet_R_W =
@@ -34,7 +36,8 @@ static struct starpu_codelet codelet_R_W =
         .where = STARPU_CPU,
         .cpu_funcs = { dummy_func, NULL },
         .model = NULL,
-        .nbuffers = 2
+        .nbuffers = 2,
+	.modes = {STARPU_R, STARPU_W}
 };
 
 static struct starpu_codelet codelet_R_RW =
@@ -42,7 +45,8 @@ static struct starpu_codelet codelet_R_RW =
         .where = STARPU_CPU,
         .cpu_funcs = { dummy_func, NULL },
         .model = NULL,
-        .nbuffers = 2
+        .nbuffers = 2,
+	.modes = {STARPU_R, STARPU_RW}
 };
 
 static struct starpu_codelet codelet_W_R =
@@ -50,7 +54,8 @@ static struct starpu_codelet codelet_W_R =
         .where = STARPU_CPU,
         .cpu_funcs = { dummy_func, NULL },
         .model = NULL,
-        .nbuffers = 2
+        .nbuffers = 2,
+	.modes = {STARPU_W, STARPU_R}
 };
 
 static struct starpu_codelet codelet_W_W =
@@ -58,7 +63,8 @@ static struct starpu_codelet codelet_W_W =
         .where = STARPU_CPU,
         .cpu_funcs = { dummy_func, NULL },
         .model = NULL,
-        .nbuffers = 2
+        .nbuffers = 2,
+	.modes = {STARPU_W, STARPU_W}
 };
 
 static struct starpu_codelet codelet_W_RW =
@@ -66,7 +72,8 @@ static struct starpu_codelet codelet_W_RW =
         .where = STARPU_CPU,
         .cpu_funcs = { dummy_func, NULL },
         .model = NULL,
-        .nbuffers = 2
+        .nbuffers = 2,
+	.modes = {STARPU_W, STARPU_RW}
 };
 
 static struct starpu_codelet codelet_RW_R =
@@ -74,7 +81,8 @@ static struct starpu_codelet codelet_RW_R =
         .where = STARPU_CPU,
         .cpu_funcs = { dummy_func, NULL },
         .model = NULL,
-        .nbuffers = 2
+        .nbuffers = 2,
+	.modes = {STARPU_RW, STARPU_R}
 };
 
 static struct starpu_codelet codelet_RW_W =
@@ -82,7 +90,8 @@ static struct starpu_codelet codelet_RW_W =
         .where = STARPU_CPU,
         .cpu_funcs = { dummy_func, NULL },
         .model = NULL,
-        .nbuffers = 2
+        .nbuffers = 2,
+	.modes = {STARPU_RW, STARPU_W}
 };
 
 static struct starpu_codelet codelet_RW_RW =
@@ -90,10 +99,10 @@ static struct starpu_codelet codelet_RW_RW =
         .where = STARPU_CPU,
         .cpu_funcs = { dummy_func, NULL },
         .model = NULL,
-        .nbuffers = 2
+        .nbuffers = 2,
+	.modes = {STARPU_RW, STARPU_RW}
 };
 
-
 int main(int argc, char **argv)
 {
 	float foo = 0.0f;
@@ -106,35 +115,36 @@ int main(int argc, char **argv)
 
 	starpu_variable_data_register(&handle, 0, (uintptr_t)&foo, sizeof(foo));
 
-#define SUBMIT(mode1, mode2) \
-	task = starpu_task_create(); \
-\
-	task->buffers[0].handle = handle; \
-	task->buffers[0].mode = STARPU_##mode1; \
-	task->buffers[1].handle = handle; \
-	task->buffers[1].mode = STARPU_##mode2; \
-	if      (task->buffers[0].mode == STARPU_R && task->buffers[1].mode == STARPU_R) \
-		task->cl = &codelet_R_R;				\
-	else if (task->buffers[0].mode == STARPU_R && task->buffers[1].mode == STARPU_W) \
-		task->cl = &codelet_R_W;				\
-	else if (task->buffers[0].mode == STARPU_R && task->buffers[1].mode == STARPU_RW) \
-		task->cl = &codelet_R_RW;				\
-	else if (task->buffers[0].mode == STARPU_W && task->buffers[1].mode == STARPU_R) \
-		task->cl = &codelet_W_R;				\
-	else if (task->buffers[0].mode == STARPU_W && task->buffers[1].mode == STARPU_W) \
-		task->cl = &codelet_W_W; \
-	else if (task->buffers[0].mode == STARPU_W && task->buffers[1].mode == STARPU_RW)  \
-		task->cl = &codelet_W_RW;					\
-	else if (task->buffers[0].mode == STARPU_RW && task->buffers[1].mode == STARPU_R) \
-		task->cl = &codelet_RW_R;					\
-	else if (task->buffers[0].mode == STARPU_RW && task->buffers[1].mode == STARPU_W) \
-		task->cl = &codelet_RW_W;					\
-	else if (task->buffers[0].mode == STARPU_RW && task->buffers[1].mode == STARPU_RW) \
-		task->cl = &codelet_RW_RW; \
-\
-	ret = starpu_task_submit(task); \
-	if (ret == -ENODEV) goto enodev; \
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");
+#define SUBMIT(mode0, mode1) \
+	{ \
+		task = starpu_task_create();	\
+		task->handles[0] = handle;	\
+		task->handles[1] = handle;		 \
+		enum starpu_access_mode smode0 = STARPU_##mode0;	\
+		enum starpu_access_mode smode1 = STARPU_##mode0;	\
+		if      (smode0 == STARPU_R && smode1 == STARPU_R)	\
+			task->cl = &codelet_R_R;			\
+		else if (smode0 == STARPU_R && smode1 == STARPU_W)	\
+			task->cl = &codelet_R_W;			\
+		else if (smode0 == STARPU_R && smode1 == STARPU_RW)	\
+			task->cl = &codelet_R_RW;			\
+		else if (smode0 == STARPU_W && smode1 == STARPU_R)	\
+			task->cl = &codelet_W_R;			\
+		else if (smode0 == STARPU_W && smode1 == STARPU_W)	\
+			task->cl = &codelet_W_W;			\
+		else if (smode0 == STARPU_W && smode1 == STARPU_RW)	\
+			task->cl = &codelet_W_RW;			\
+		else if (smode0 == STARPU_RW && smode1 == STARPU_R)	\
+			task->cl = &codelet_RW_R;			\
+		else if (smode0 == STARPU_RW && smode1 == STARPU_W)	\
+			task->cl = &codelet_RW_W;			\
+		else if (smode0 == STARPU_RW && smode1 == STARPU_RW)	\
+			task->cl = &codelet_RW_RW;			\
+									\
+		ret = starpu_task_submit(task);				\
+		if (ret == -ENODEV) goto enodev;			\
+		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");   \
+	}
 
 	SUBMIT(R,R);
 	SUBMIT(R,W);

+ 32 - 24
tests/datawizard/dsm_stress.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -81,14 +81,14 @@ static enum starpu_access_mode select_random_mode(void)
 	return STARPU_RW;
 }
 
-
 static struct starpu_codelet cl_r_r =
 {
 	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
 	.cpu_funcs = {cpu_codelet_null, NULL},
 	.cuda_funcs = {cuda_codelet_null, NULL},
         .opencl_funcs = {opencl_codelet_null, NULL},
-	.nbuffers = 2
+	.nbuffers = 2,
+	.modes = {STARPU_R, STARPU_R}
 };
 
 static struct starpu_codelet cl_r_w =
@@ -97,7 +97,8 @@ static struct starpu_codelet cl_r_w =
 	.cpu_funcs = {cpu_codelet_null, NULL},
 	.cuda_funcs = {cuda_codelet_null, NULL},
         .opencl_funcs = {opencl_codelet_null, NULL},
-	.nbuffers = 2
+	.nbuffers = 2,
+	.modes = {STARPU_R, STARPU_W}
 };
 
 static struct starpu_codelet cl_r_rw =
@@ -106,7 +107,8 @@ static struct starpu_codelet cl_r_rw =
 	.cpu_funcs = {cpu_codelet_null, NULL},
 	.cuda_funcs = {cuda_codelet_null, NULL},
         .opencl_funcs = {opencl_codelet_null, NULL},
-	.nbuffers = 2
+	.nbuffers = 2,
+	.modes = {STARPU_R, STARPU_RW}
 };
 
 static struct starpu_codelet cl_w_r =
@@ -115,7 +117,8 @@ static struct starpu_codelet cl_w_r =
 	.cpu_funcs = {cpu_codelet_null, NULL},
 	.cuda_funcs = {cuda_codelet_null, NULL},
         .opencl_funcs = {opencl_codelet_null, NULL},
-	.nbuffers = 2
+	.nbuffers = 2,
+	.modes = {STARPU_W, STARPU_R}
 };
 
 static struct starpu_codelet cl_w_w =
@@ -124,7 +127,8 @@ static struct starpu_codelet cl_w_w =
 	.cpu_funcs = {cpu_codelet_null, NULL},
 	.cuda_funcs = {cuda_codelet_null, NULL},
         .opencl_funcs = {opencl_codelet_null, NULL},
-	.nbuffers = 2
+	.nbuffers = 2,
+	.modes = {STARPU_W, STARPU_W}
 };
 
 static struct starpu_codelet cl_w_rw =
@@ -133,7 +137,8 @@ static struct starpu_codelet cl_w_rw =
 	.cpu_funcs = {cpu_codelet_null, NULL},
 	.cuda_funcs = {cuda_codelet_null, NULL},
         .opencl_funcs = {opencl_codelet_null, NULL},
-	.nbuffers = 2
+	.nbuffers = 2,
+	.modes = {STARPU_W, STARPU_RW}
 };
 
 static struct starpu_codelet cl_rw_r =
@@ -142,7 +147,8 @@ static struct starpu_codelet cl_rw_r =
 	.cpu_funcs = {cpu_codelet_null, NULL},
 	.cuda_funcs = {cuda_codelet_null, NULL},
         .opencl_funcs = {opencl_codelet_null, NULL},
-	.nbuffers = 2
+	.nbuffers = 2,
+	.modes = {STARPU_RW, STARPU_R}
 };
 
 static struct starpu_codelet cl_rw_w =
@@ -151,7 +157,8 @@ static struct starpu_codelet cl_rw_w =
 	.cpu_funcs = {cpu_codelet_null, NULL},
 	.cuda_funcs = {cuda_codelet_null, NULL},
         .opencl_funcs = {opencl_codelet_null, NULL},
-	.nbuffers = 2
+	.nbuffers = 2,
+	.modes = {STARPU_RW, STARPU_W}
 };
 
 static struct starpu_codelet cl_rw_rw =
@@ -160,7 +167,8 @@ static struct starpu_codelet cl_rw_rw =
 	.cpu_funcs = {cpu_codelet_null, NULL},
 	.cuda_funcs = {cuda_codelet_null, NULL},
         .opencl_funcs = {opencl_codelet_null, NULL},
-	.nbuffers = 2
+	.nbuffers = 2,
+	.modes = {STARPU_RW, STARPU_RW}
 };
 
 
@@ -184,29 +192,29 @@ int main(int argc, char **argv)
 	{
 		struct starpu_task *task = starpu_task_create();
 
-		task->buffers[0].handle = v_handle;
-		task->buffers[0].mode = select_random_mode();
+		task->handles[0] = v_handle;
+		task->handles[1] = v_handle2;
 
-		task->buffers[1].handle = v_handle2;
-		task->buffers[1].mode = select_random_mode();
+		enum starpu_access_mode mode0 = select_random_mode();
+		enum starpu_access_mode mode1 = select_random_mode();
 
-		if      (task->buffers[0].mode == STARPU_R && task->buffers[1].mode == STARPU_R)
+		if (mode0 == STARPU_R && mode1 == STARPU_R)
 			task->cl = &cl_r_r;
-		else if (task->buffers[0].mode == STARPU_R && task->buffers[1].mode == STARPU_W)
+		else if (mode0 == STARPU_R && mode1 == STARPU_W)
 			task->cl = &cl_r_w;
-		else if (task->buffers[0].mode == STARPU_R && task->buffers[1].mode == STARPU_RW)
+		else if (mode0 == STARPU_R && mode1 == STARPU_RW)
 			task->cl = &cl_r_rw;
-		else if (task->buffers[0].mode == STARPU_W && task->buffers[1].mode == STARPU_R)
+		else if (mode0 == STARPU_W && mode1 == STARPU_R)
 			task->cl = &cl_w_r;
-		else if (task->buffers[0].mode == STARPU_W && task->buffers[1].mode == STARPU_W)
+		else if (mode0 == STARPU_W && mode1 == STARPU_W)
 			task->cl = &cl_w_w;
-		else if (task->buffers[0].mode == STARPU_W && task->buffers[1].mode == STARPU_RW)
+		else if (mode0 == STARPU_W && mode1 == STARPU_RW)
 			task->cl = &cl_w_rw;
-		else if (task->buffers[0].mode == STARPU_RW && task->buffers[1].mode == STARPU_R)
+		else if (mode0 == STARPU_RW && mode1 == STARPU_R)
 			task->cl = &cl_rw_r;
-		else if (task->buffers[0].mode == STARPU_RW && task->buffers[1].mode == STARPU_W)
+		else if (mode0 == STARPU_RW && mode1 == STARPU_W)
 			task->cl = &cl_rw_w;
-		else if (task->buffers[0].mode == STARPU_RW && task->buffers[1].mode == STARPU_RW)
+		else if (mode0 == STARPU_RW && mode1 == STARPU_RW)
 			task->cl = &cl_rw_rw;
 
 		task->callback_func = callback;

+ 6 - 7
tests/datawizard/manual_reduction.c

@@ -1,6 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010  Université de Bordeaux 1
+ * Copyright (C) 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -95,6 +96,7 @@ static struct starpu_codelet reduction_codelet =
 	.cpu_funcs = {cpu_redux_func, NULL},
 	.cuda_funcs = {NULL},
 	.nbuffers = 2,
+	.modes = {STARPU_RW, STARPU_R},
 	.model = NULL
 };
 
@@ -148,6 +150,7 @@ static struct starpu_codelet use_data_on_worker_codelet =
 	.opencl_funcs = {opencl_func_incr, NULL},
 #endif
 	.nbuffers = 1,
+	.modes = {STARPU_RW},
 	.model = NULL
 };
 
@@ -186,8 +189,7 @@ int main(int argc, char **argv)
 		task->cl = &use_data_on_worker_codelet;
 
 		int workerid = (i % nworkers);
-		task->buffers[0].handle = per_worker_handle[workerid];
-		task->buffers[0].mode = STARPU_RW;
+		task->handles[0] = per_worker_handle[workerid];
 
 		task->execute_on_a_specific_worker = 1;
 		task->workerid = (unsigned)workerid;
@@ -204,11 +206,8 @@ int main(int argc, char **argv)
 		struct starpu_task *task = starpu_task_create();
 		task->cl = &reduction_codelet;
 
-		task->buffers[0].handle = variable_handle;
-		task->buffers[0].mode = STARPU_RW;
-
-		task->buffers[1].handle = per_worker_handle[worker];
-		task->buffers[1].mode = STARPU_R;
+		task->handles[0] = variable_handle;
+		task->handles[1] = per_worker_handle[worker];
 
 		int ret = starpu_task_submit(task);
 		if (ret == -ENODEV) goto enodev;

+ 9 - 7
tests/datawizard/readers_and_writers.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2009, 2010  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -31,7 +31,8 @@ static struct starpu_codelet r_cl =
 	.cuda_funcs = {dummy_kernel, NULL},
 	.cpu_funcs = {dummy_kernel, NULL},
 	.opencl_funcs = {dummy_kernel, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_R}
 };
 
 static struct starpu_codelet w_cl =
@@ -40,7 +41,8 @@ static struct starpu_codelet w_cl =
 	.cuda_funcs = {dummy_kernel, NULL},
 	.cpu_funcs = {dummy_kernel, NULL},
 	.opencl_funcs = {dummy_kernel, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_W}
 };
 
 int main(int argc, char **argv)
@@ -60,12 +62,12 @@ int main(int argc, char **argv)
 	{
 		struct starpu_task *task = starpu_task_create();
 
+		task->handles[0] = book_handle;
+
 		/* we randomly select either a reader or a writer (give 10
 		 * times more chances to be a reader) */
-		task->buffers[0].mode = ((rand() % 10)==0)?STARPU_W:STARPU_R;
-		task->buffers[0].handle = book_handle;
-
-		if (task->buffers[0].mode == STARPU_W)
+		enum starpu_access_mode mode = ((rand() % 10)==0)?STARPU_W:STARPU_R;
+		if (mode == STARPU_W)
 			task->cl = &w_cl;
 		else
 			task->cl = &r_cl;

+ 7 - 7
tests/datawizard/reclaim.c

@@ -1,6 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010-2011  Université de Bordeaux 1
+ * Copyright (C) 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -56,7 +57,8 @@ static struct starpu_codelet dummy_cl =
         .where = STARPU_CPU|STARPU_CUDA,
 	.cpu_funcs = {dummy_func, NULL},
 	.cuda_funcs = {dummy_func, NULL},
-	.nbuffers = 3
+	.nbuffers = 3,
+	.modes = {STARPU_RW, STARPU_R, STARPU_R}
 };
 
 /* Number of chunks */
@@ -105,12 +107,10 @@ int main(int argc, char **argv)
 	{
 		struct starpu_task *task = starpu_task_create();
 		task->cl = &dummy_cl;
-		task->buffers[0].handle = handle_array[taskid%mb];
-		task->buffers[0].mode = STARPU_RW;
-		task->buffers[1].handle = handle_array[(taskid+1)%mb];
-		task->buffers[1].mode = STARPU_R;
-		task->buffers[2].handle = handle_array[(taskid+2)%mb];
-		task->buffers[2].mode = STARPU_R;
+		task->handles[0] = handle_array[taskid%mb];
+		task->handles[1] = handle_array[(taskid+1)%mb];
+		task->handles[2] = handle_array[(taskid+2)%mb];
+
 		ret = starpu_task_submit(task);
 		if (ret == -ENODEV) goto enodev;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");

+ 5 - 6
tests/datawizard/scratch.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -58,7 +58,8 @@ static struct starpu_codelet cl_f =
 #ifdef STARPU_USE_CUDA
 	.cuda_funcs = {cuda_f, NULL},
 #endif
-	.nbuffers = 2
+	.nbuffers = 2,
+	.modes = {STARPU_RW, STARPU_SCRATCH}
 };
 
 int main(int argc, char **argv)
@@ -78,10 +79,8 @@ int main(int argc, char **argv)
 	{
 		struct starpu_task *task_f = starpu_task_create();
 		task_f->cl = &cl_f;
-		task_f->buffers[0].handle = A_handle;
-		task_f->buffers[0].mode = STARPU_RW;
-		task_f->buffers[1].handle = B_handle;
-		task_f->buffers[1].mode = STARPU_SCRATCH;
+		task_f->handles[0] = A_handle;
+		task_f->handles[1] = B_handle;
 
 		ret = starpu_task_submit(task_f);
 		if (ret == -ENODEV) goto enodev;

+ 4 - 5
tests/datawizard/sync_and_notify_data.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -120,14 +120,13 @@ int main(int argc, char **argv)
 #ifdef STARPU_USE_GORDON
 				.gordon_func = kernel_incA_id,
 #endif
-				.nbuffers = 1
+				.nbuffers = 1,
+				.modes = {STARPU_RW}
 			};
 
 			struct starpu_task *task = starpu_task_create();
 			task->cl = &cl_inc_a;
-
-			task->buffers[0].handle = v_handle;
-			task->buffers[0].mode = STARPU_RW;
+			task->handles[0] = v_handle;
 
 			task->synchronous = 1;
 

+ 7 - 9
tests/datawizard/sync_and_notify_data_implicit.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -89,7 +89,8 @@ static struct starpu_codelet cl_inc_a =
 #ifdef STARPU_USE_GORDON
 	.gordon_func = kernel_incA_id,
 #endif
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_RW}
 };
 
 /* increment c = v[2] */
@@ -106,7 +107,8 @@ struct starpu_codelet cl_inc_c =
 #ifdef STARPU_USE_GORDON
 	.gordon_func = kernel_incC_id,
 #endif
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_RW}
 };
 
 int main(int argc, char **argv)
@@ -144,9 +146,7 @@ int main(int argc, char **argv)
 		{
 			struct starpu_task *task = starpu_task_create();
 			task->cl = &cl_inc_a;
-
-			task->buffers[0].handle = v_handle;
-			task->buffers[0].mode = STARPU_RW;
+			task->handles[0] = v_handle;
 
 			ret = starpu_task_submit(task);
 			if (ret == -ENODEV) goto enodev;
@@ -166,9 +166,7 @@ int main(int argc, char **argv)
 		{
 			struct starpu_task *task = starpu_task_create();
 			task->cl = &cl_inc_c;
-
-			task->buffers[0].handle = v_handle;
-			task->buffers[0].mode = STARPU_RW;
+			task->handles[0] = v_handle;
 
 			ret = starpu_task_submit(task);
 			if (ret == -ENODEV) goto enodev;

+ 11 - 11
tests/datawizard/write_only_tmp_buffer.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2009, 2010-2011  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -78,14 +78,16 @@ static struct starpu_codelet cl =
 #ifdef STARPU_USE_OPENCL
 	.opencl_funcs = {opencl_codelet_null, NULL},
 #endif
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_W}
 };
 
 static struct starpu_codelet display_cl =
 {
 	.where = STARPU_CPU,
 	.cpu_funcs = {display_var, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_R}
 };
 
 
@@ -100,10 +102,9 @@ int main(int argc, char **argv)
 	starpu_vector_data_register(&v_handle, (uint32_t)-1, (uintptr_t)NULL, VECTORSIZE, sizeof(char));
 
 	struct starpu_task *task = starpu_task_create();
-		task->cl = &cl;
-		task->buffers[0].handle = v_handle;
-		task->buffers[0].mode = STARPU_W;
-		task->detach = 0;
+	task->cl = &cl;
+	task->handles[0] = v_handle;
+	task->detach = 0;
 
 	ret = starpu_task_submit(task);
 	if (ret == -ENODEV) goto enodev;
@@ -113,10 +114,9 @@ int main(int argc, char **argv)
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_wait");
 
 	task = starpu_task_create();
-		task->cl = &display_cl;
-		task->buffers[0].handle = v_handle;
-		task->buffers[0].mode = STARPU_R;
-		task->detach = 0;
+	task->cl = &display_cl;
+	task->handles[0] = v_handle;
+	task->detach = 0;
 
 	ret = starpu_task_submit(task);
 	if (ret == -ENODEV) goto enodev;

+ 28 - 41
tests/microbenchs/prefetch_data_on_node.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2009-2011  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -43,30 +43,14 @@ static void codelet_null(void *descr[], __attribute__ ((unused)) void *_args)
 //	fflush(stderr);
 }
 
-static enum starpu_access_mode select_random_mode(void)
-{
-	int r = rand();
-
-	switch (r % 3)
-	{
-		case 0:
-			return STARPU_R;
-		case 1:
-			return STARPU_RW;
-			//return STARPU_W;
-		case 2:
-			return STARPU_RW;
-	};
-	return STARPU_RW;
-}
-
 static struct starpu_codelet cl_r =
 {
 	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
 	.cpu_funcs = {codelet_null, NULL},
 	.cuda_funcs = {codelet_null, NULL},
 	.opencl_funcs = {codelet_null, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_R}
 };
 
 static struct starpu_codelet cl_w =
@@ -75,7 +59,8 @@ static struct starpu_codelet cl_w =
 	.cpu_funcs = {codelet_null, NULL},
 	.cuda_funcs = {codelet_null, NULL},
 	.opencl_funcs = {codelet_null, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_W}
 };
 
 static struct starpu_codelet cl_rw =
@@ -84,9 +69,27 @@ static struct starpu_codelet cl_rw =
 	.cpu_funcs = {codelet_null, NULL},
 	.cuda_funcs = {codelet_null, NULL},
 	.opencl_funcs = {codelet_null, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_RW}
 };
 
+static struct starpu_codelet *select_codelet_with_random_mode(void)
+{
+	int r = rand();
+
+	switch (r % 3)
+	{
+		case 0:
+			return &cl_r;
+		case 1:
+			return &cl_rw;
+			//return &cl_w;
+		case 2:
+			return &cl_rw;
+	};
+	return &cl_rw;
+}
+
 int main(int argc, char **argv)
 {
 	int ret;
@@ -112,16 +115,8 @@ int main(int argc, char **argv)
 			/* execute a task */
 			struct starpu_task *task = starpu_task_create();
 
-			task->buffers[0].handle = v_handle;
-			task->buffers[0].mode = select_random_mode();
-
-			if (task->buffers[0].mode == STARPU_R)
-				task->cl = &cl_r;
-			else if (task->buffers[0].mode == STARPU_W)
-				task->cl = &cl_w;
-			else if (task->buffers[0].mode == STARPU_RW)
-				task->cl = &cl_rw;
-
+			task->handles[0] = v_handle;
+			task->cl = select_codelet_with_random_mode();
 			task->synchronous = 1;
 
 			int ret = starpu_task_submit(task);
@@ -142,16 +137,8 @@ int main(int argc, char **argv)
 			/* execute a task */
 			struct starpu_task *task = starpu_task_create();
 
-			task->buffers[0].handle = v_handle;
-			task->buffers[0].mode = select_random_mode();
-
-			if (task->buffers[0].mode == STARPU_R)
-				task->cl = &cl_r;
-			else if (task->buffers[0].mode == STARPU_W)
-				task->cl = &cl_w;
-			else if (task->buffers[0].mode == STARPU_RW)
-				task->cl = &cl_rw;
-
+			task->handles[0] = v_handle;
+			task->cl = select_codelet_with_random_mode();
 			task->callback_func = callback;
 			task->callback_arg = (void*)(uintptr_t) starpu_worker_get_memory_node((worker+1)%nworker);
 

+ 5 - 7
tests/microbenchs/redundant_buffer.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2009, 2010  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -47,7 +47,8 @@ static struct starpu_codelet cl =
 	.cpu_funcs = {cpu_codelet_null, NULL},
 	.cuda_funcs = {cuda_codelet_null, NULL},
 	.opencl_funcs = {opencl_codelet_null, NULL},
-        .nbuffers = 2
+        .nbuffers = 2,
+	.modes = {STARPU_R, STARPU_R}
 };
 
 
@@ -68,11 +69,8 @@ int main(int argc, char **argv)
 		struct starpu_task *task = starpu_task_create();
 		task->cl = &cl;
 
-		task->buffers[0].handle = v_handle;
-		task->buffers[0].mode = STARPU_R;
-
-		task->buffers[1].handle = v_handle;
-		task->buffers[1].mode = STARPU_R;
+		task->handles[0] = v_handle;
+		task->handles[1] = v_handle;
 
 		int ret = starpu_task_submit(task);
 		if (ret == -ENODEV) goto enodev;

+ 6 - 5
tests/microbenchs/tasks_overhead.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010-2011  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -42,7 +42,8 @@ static struct starpu_codelet dummy_codelet =
 	.cuda_funcs = {dummy_func, NULL},
 	.opencl_funcs = {dummy_func, NULL},
 	.model = NULL,
-	.nbuffers = 0
+	.nbuffers = 0,
+	.modes = {STARPU_RW, STARPU_RW, STARPU_RW, STARPU_RW, STARPU_RW, STARPU_RW, STARPU_RW, STARPU_RW}
 };
 
 int inject_one_task(void)
@@ -106,11 +107,12 @@ int main(int argc, char **argv)
 	fprintf(stderr, "#tasks : %u\n#buffers : %u\n", ntasks, nbuffers);
 
 	/* submit tasks (but don't execute them yet !) */
-	tasks = (struct starpu_task *) malloc(ntasks*sizeof(struct starpu_task));
+	tasks = (struct starpu_task *) calloc(1, ntasks*sizeof(struct starpu_task));
 
 	gettimeofday(&start_submit, NULL);
 	for (i = 0; i < ntasks; i++)
 	{
+		starpu_task_init(&tasks[i]);
 		tasks[i].callback_func = NULL;
 		tasks[i].cl = &dummy_codelet;
 		tasks[i].cl_arg = NULL;
@@ -121,8 +123,7 @@ int main(int argc, char **argv)
 		/* we have 8 buffers at most */
 		for (buffer = 0; buffer < nbuffers; buffer++)
 		{
-			tasks[i].buffers[buffer].handle = data_handles[buffer];
-			tasks[i].buffers[buffer].mode = STARPU_RW;
+			tasks[i].handles[buffer] = data_handles[buffer];
 		}
 	}
 

+ 3 - 3
tests/overlap/overlap.c

@@ -2,7 +2,7 @@
  *
  * Copyright (C) 2009-2011  Université de Bordeaux 1
  * Copyright (C) 2010  Mehdi Juhoor <mjuhoor@gmail.com>
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -67,6 +67,7 @@ static struct starpu_codelet cl =
 	.cuda_funcs = {codelet_sleep, NULL},
         .opencl_funcs = {codelet_sleep, NULL},
 	.nbuffers = 1,
+	.modes = {STARPU_R},
 	.model =  &model
 };
 
@@ -106,8 +107,7 @@ int main(int argc, char **argv)
 		struct starpu_task *task = starpu_task_create();
 		task->cl = &cl;
 
-		task->buffers[0].handle = starpu_data_get_sub_data(handle, 1, iter);
-		task->buffers[0].mode = STARPU_R;
+		task->handles[0] = starpu_data_get_sub_data(handle, 1, iter);
 
 		task->callback_func = callback;
 		task->callback_arg = NULL;

+ 4 - 4
tests/parallel_tasks/explicit_combined_worker.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -43,7 +43,8 @@ static struct starpu_codelet cl =
 	.cpu_funcs = {codelet_null, NULL},
 	.cuda_funcs = {codelet_null, NULL},
         .opencl_funcs = {codelet_null, NULL},
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_R}
 };
 
 
@@ -83,8 +84,7 @@ int main(int argc, char **argv)
 			struct starpu_task *task = starpu_task_create();
 			task->cl = &cl;
 
-			task->buffers[0].handle = v_handle;
-			task->buffers[0].mode = STARPU_R;
+			task->handles[0] = v_handle;
 
 			task->execute_on_a_specific_worker = 1;
 			task->workerid = worker;

+ 4 - 4
tests/parallel_tasks/parallel_kernels.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -50,7 +50,8 @@ static struct starpu_codelet cl =
 	.cuda_funcs = {codelet_null, NULL},
         .opencl_funcs = {codelet_null, NULL},
 	.model = &model,
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_R}
 };
 
 
@@ -90,8 +91,7 @@ int main(int argc, char **argv)
 			struct starpu_task *task = starpu_task_create();
 			task->cl = &cl;
 
-			task->buffers[0].handle = v_handle;
-			task->buffers[0].mode = STARPU_R;
+			task->handles[0] = v_handle;
 
 			int ret = starpu_task_submit(task);
 			if (ret == -ENODEV) goto enodev;

+ 4 - 3
tests/perfmodels/non_linear_regression_based.c

@@ -1,6 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2011  Université de Bordeaux 1
+ * Copyright (C) 2012  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -50,7 +51,8 @@ static struct starpu_codelet memset_cl =
 #endif
 	.cpu_funcs = {memset_cpu, NULL},
 	.model = &model,
-	.nbuffers = 1
+	.nbuffers = 1,
+	.modes = {STARPU_W}
 };
 
 static void test_memset(int nelems)
@@ -66,8 +68,7 @@ static void test_memset(int nelems)
 		struct starpu_task *task = starpu_task_create();
 
 		task->cl = &memset_cl;
-		task->buffers[0].handle = handle;
-		task->buffers[0].mode = STARPU_W;
+		task->handles[0] = handle;
 
 		int ret = starpu_task_submit(task);
 		if (ret == -ENODEV)