Browse Source

tests: update codelet usage

	access modes should now be defined in the codelet. Keep the old code
	which defines them in the task, but define several codelets, one
	per access mode.
Nathalie Furmento 13 years ago
parent
commit
9ff1de2de3

+ 21 - 2
tests/core/execute_on_a_specific_worker.c

@@ -74,8 +74,16 @@ static enum starpu_access_mode select_random_mode(void)
 	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
+};
 
-static struct starpu_codelet cl =
+static struct starpu_codelet cl_w =
 {
 	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
 	.cpu_funcs = {codelet_null, NULL},
@@ -84,6 +92,14 @@ static struct starpu_codelet cl =
 	.nbuffers = 1
 };
 
+static struct starpu_codelet cl_rw =
+{
+	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
+	.cpu_funcs = {codelet_null, NULL},
+	.cuda_funcs = {codelet_null, NULL},
+        .opencl_funcs = {codelet_null, NULL},
+	.nbuffers = 1
+};
 
 int main(int argc, char **argv)
 {
@@ -108,11 +124,14 @@ int main(int argc, char **argv)
 		{
 			/* execute a task on that worker */
 			struct starpu_task *task = starpu_task_create();
-			task->cl = &cl;
 
 			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->callback_func = callback;
 			task->callback_arg = NULL;
 

+ 83 - 2
tests/datawizard/double_parameter.c

@@ -21,7 +21,71 @@ static void dummy_func(void *descr[] __attribute__ ((unused)), void *arg __attri
 {
 }
 
-static struct starpu_codelet codelet =
+static struct starpu_codelet codelet_R_R =
+{
+        .where = STARPU_CPU,
+        .cpu_funcs = { dummy_func, NULL },
+        .model = NULL,
+        .nbuffers = 2
+};
+
+static struct starpu_codelet codelet_R_W =
+{
+        .where = STARPU_CPU,
+        .cpu_funcs = { dummy_func, NULL },
+        .model = NULL,
+        .nbuffers = 2
+};
+
+static struct starpu_codelet codelet_R_RW =
+{
+        .where = STARPU_CPU,
+        .cpu_funcs = { dummy_func, NULL },
+        .model = NULL,
+        .nbuffers = 2
+};
+
+static struct starpu_codelet codelet_W_R =
+{
+        .where = STARPU_CPU,
+        .cpu_funcs = { dummy_func, NULL },
+        .model = NULL,
+        .nbuffers = 2
+};
+
+static struct starpu_codelet codelet_W_W =
+{
+        .where = STARPU_CPU,
+        .cpu_funcs = { dummy_func, NULL },
+        .model = NULL,
+        .nbuffers = 2
+};
+
+static struct starpu_codelet codelet_W_RW =
+{
+        .where = STARPU_CPU,
+        .cpu_funcs = { dummy_func, NULL },
+        .model = NULL,
+        .nbuffers = 2
+};
+
+static struct starpu_codelet codelet_RW_R =
+{
+        .where = STARPU_CPU,
+        .cpu_funcs = { dummy_func, NULL },
+        .model = NULL,
+        .nbuffers = 2
+};
+
+static struct starpu_codelet codelet_RW_W =
+{
+        .where = STARPU_CPU,
+        .cpu_funcs = { dummy_func, NULL },
+        .model = NULL,
+        .nbuffers = 2
+};
+
+static struct starpu_codelet codelet_RW_RW =
 {
         .where = STARPU_CPU,
         .cpu_funcs = { dummy_func, NULL },
@@ -45,11 +109,28 @@ int main(int argc, char **argv)
 #define SUBMIT(mode1, mode2) \
 	task = starpu_task_create(); \
 \
-	task->cl = &codelet; \
 	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; \

+ 92 - 2
tests/datawizard/dsm_stress.c

@@ -82,7 +82,79 @@ static enum starpu_access_mode select_random_mode(void)
 }
 
 
-static struct starpu_codelet cl =
+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
+};
+
+static struct starpu_codelet cl_r_w =
+{
+	.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
+};
+
+static struct starpu_codelet cl_r_rw =
+{
+	.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
+};
+
+static struct starpu_codelet cl_w_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
+};
+
+static struct starpu_codelet cl_w_w =
+{
+	.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
+};
+
+static struct starpu_codelet cl_w_rw =
+{
+	.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
+};
+
+static struct starpu_codelet cl_rw_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
+};
+
+static struct starpu_codelet cl_rw_w =
+{
+	.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
+};
+
+static struct starpu_codelet cl_rw_rw =
 {
 	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
 	.cpu_funcs = {cpu_codelet_null, NULL},
@@ -111,7 +183,6 @@ int main(int argc, char **argv)
 	for (iter = 0; iter < N; iter++)
 	{
 		struct starpu_task *task = starpu_task_create();
-		task->cl = &cl;
 
 		task->buffers[0].handle = v_handle;
 		task->buffers[0].mode = select_random_mode();
@@ -119,6 +190,25 @@ int main(int argc, char **argv)
 		task->buffers[1].handle = v_handle2;
 		task->buffers[1].mode = select_random_mode();
 
+		if      (task->buffers[0].mode == STARPU_R && task->buffers[1].mode == STARPU_R)
+			task->cl = &cl_r_r;
+		else if (task->buffers[0].mode == STARPU_R && task->buffers[1].mode == STARPU_W)
+			task->cl = &cl_r_w;
+		else if (task->buffers[0].mode == STARPU_R && task->buffers[1].mode == STARPU_RW)
+			task->cl = &cl_r_rw;
+		else if (task->buffers[0].mode == STARPU_W && task->buffers[1].mode == STARPU_R)
+			task->cl = &cl_w_r;
+		else if (task->buffers[0].mode == STARPU_W && task->buffers[1].mode == STARPU_W)
+			task->cl = &cl_w_w;
+		else if (task->buffers[0].mode == STARPU_W && task->buffers[1].mode == STARPU_RW)
+			task->cl = &cl_w_rw;
+		else if (task->buffers[0].mode == STARPU_RW && task->buffers[1].mode == STARPU_R)
+			task->cl = &cl_rw_r;
+		else if (task->buffers[0].mode == STARPU_RW && task->buffers[1].mode == STARPU_W)
+			task->cl = &cl_rw_w;
+		else if (task->buffers[0].mode == STARPU_RW && task->buffers[1].mode == STARPU_RW)
+			task->cl = &cl_rw_rw;
+
 		task->callback_func = callback;
 		task->callback_arg = NULL;
 

+ 23 - 3
tests/datawizard/increment_redux_v2.c

@@ -192,6 +192,19 @@ static struct starpu_codelet increment_cl =
 	.nbuffers = 1
 };
 
+static struct starpu_codelet increment_cl_redux =
+{
+	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
+#ifdef STARPU_USE_CUDA
+	.cuda_funcs = {increment_cuda_kernel, NULL},
+#endif
+#ifdef STARPU_USE_OPENCL
+	.opencl_funcs = {increment_opencl_kernel, NULL},
+#endif
+	.cpu_funcs = {increment_cpu_kernel, NULL},
+	.nbuffers = 1
+};
+
 int main(int argc, char **argv)
 {
 	int ret;
@@ -215,9 +228,16 @@ int main(int argc, char **argv)
 		{
 			struct starpu_task *task = starpu_task_create();
 
-			task->cl = &increment_cl;
-
-			task->buffers[0].mode = (t % 10 == 0)?STARPU_RW:STARPU_REDUX;
+			if (t % 10 == 0)
+			{
+				task->cl = &increment_cl;
+				task->buffers[0].mode = STARPU_RW;
+			}
+			else
+			{
+				task->cl = &increment_cl_redux;
+				task->buffers[0].mode = STARPU_REDUX;
+			}
 			task->buffers[0].handle = handle;
 
 			int ret = starpu_task_submit(task);

+ 15 - 3
tests/datawizard/readers_and_writers.c

@@ -25,7 +25,16 @@ static void dummy_kernel(void *descr[], void *arg)
 {
 }
 
-static struct starpu_codelet rw_cl =
+static struct starpu_codelet r_cl =
+{
+	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
+	.cuda_funcs = {dummy_kernel, NULL},
+	.cpu_funcs = {dummy_kernel, NULL},
+	.opencl_funcs = {dummy_kernel, NULL},
+	.nbuffers = 1
+};
+
+static struct starpu_codelet w_cl =
 {
 	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
 	.cuda_funcs = {dummy_kernel, NULL},
@@ -51,13 +60,16 @@ int main(int argc, char **argv)
 	{
 		struct starpu_task *task = starpu_task_create();
 
-		task->cl = &rw_cl;
-
 		/* 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)
+			task->cl = &w_cl;
+		else
+			task->cl = &r_cl;
+
 		int ret = starpu_task_submit(task);
 		if (ret == -ENODEV) goto enodev;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");

+ 33 - 3
tests/microbenchs/prefetch_data_on_node.c

@@ -60,7 +60,25 @@ static enum starpu_access_mode select_random_mode(void)
 	return STARPU_RW;
 }
 
-static struct starpu_codelet cl =
+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
+};
+
+static struct starpu_codelet cl_w =
+{
+	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
+	.cpu_funcs = {codelet_null, NULL},
+	.cuda_funcs = {codelet_null, NULL},
+	.opencl_funcs = {codelet_null, NULL},
+	.nbuffers = 1
+};
+
+static struct starpu_codelet cl_rw =
 {
 	.where = STARPU_CPU|STARPU_CUDA|STARPU_OPENCL,
 	.cpu_funcs = {codelet_null, NULL},
@@ -93,11 +111,17 @@ int main(int argc, char **argv)
 
 			/* execute a task */
 			struct starpu_task *task = starpu_task_create();
-			task->cl = &cl;
 
 			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->synchronous = 1;
 
 			int ret = starpu_task_submit(task);
@@ -117,11 +141,17 @@ int main(int argc, char **argv)
 
 			/* execute a task */
 			struct starpu_task *task = starpu_task_create();
-			task->cl = &cl;
 
 			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->callback_func = callback;
 			task->callback_arg = (void*)(uintptr_t) starpu_worker_get_memory_node((worker+1)%nworker);