浏览代码

main/insert_task.c: check more testcasese

Nathalie Furmento 12 年之前
父节点
当前提交
a57110af5a
共有 1 个文件被更改,包括 93 次插入59 次删除
  1. 93 59
      tests/main/insert_task.c

+ 93 - 59
tests/main/insert_task.c

@@ -18,7 +18,10 @@
 #include <starpu.h>
 #include "../helper.h"
 
-void func_cpu(void *descr[], void *_args)
+static int _ifactor = 12;
+static float _ffactor = 10.0;
+
+void func_cpu_args(void *descr[], void *_args)
 {
 	/*
 	 * Do not use STARPU_SKIP_IF_VALGRIND here.
@@ -40,88 +43,119 @@ void func_cpu(void *descr[], void *_args)
         *x1 = *x1 * ffactor;
 }
 
-struct starpu_codelet mycodelet =
+void func_cpu_noargs(void *descr[], void *_args)
+{
+	STARPU_SKIP_IF_VALGRIND;
+
+	int *x0 = (int *)STARPU_VARIABLE_GET_PTR(descr[0]);
+	float *x1 = (float *)STARPU_VARIABLE_GET_PTR(descr[1]);
+
+        *x0 = *x0 * _ifactor;
+        *x1 = *x1 * _ffactor;
+}
+
+struct starpu_codelet mycodelet_args =
 {
 	.modes = { STARPU_RW, STARPU_RW },
-	.cpu_funcs = {func_cpu, NULL},
-	.cpu_funcs_name = {"func_cpu", NULL},
+	.cpu_funcs = {func_cpu_args, NULL},
+	.cpu_funcs_name = {"func_cpu_args", NULL},
         .nbuffers = 2
 };
 
-int main(int argc, char **argv)
+struct starpu_codelet mycodelet_noargs =
 {
-        int x; float f;
-        int i, ret;
-	int ifactor=12;
-	float ffactor=10.0;
-        starpu_data_handle_t data_handles[2];
-
-	ret = starpu_init(NULL);
-	if (ret == -ENODEV) return STARPU_TEST_SKIPPED;
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
-
-	x = 1;
-	starpu_variable_data_register(&data_handles[0], STARPU_MAIN_RAM, (uintptr_t)&x, sizeof(x));
-	f = 2.0;
-	starpu_variable_data_register(&data_handles[1], STARPU_MAIN_RAM, (uintptr_t)&f, sizeof(f));
+	.modes = { STARPU_RW, STARPU_RW },
+	.cpu_funcs = {func_cpu_noargs, NULL},
+	.cpu_funcs_name = {"func_cpu_noargs", NULL},
+        .nbuffers = 2
+};
 
-        FPRINTF(stderr, "VALUES: %d (%d) %f (%f)\n", x, ifactor, f, ffactor);
+int test_codelet(struct starpu_codelet *codelet, int insert_task, int args, int x, float f)
+{
+        starpu_data_handle_t data_handles[2];
+	int xx = x;
+	float ff = f;
+	int i, ret;
 
-        ret = starpu_insert_task(&mycodelet,
-				 STARPU_VALUE, &ifactor, sizeof(ifactor),
-				 STARPU_VALUE, &ffactor, sizeof(ffactor),
-				 STARPU_RW, data_handles[0], STARPU_RW, data_handles[1],
-				 0);
-	if (ret == -ENODEV) goto enodev;
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
+	starpu_variable_data_register(&data_handles[0], STARPU_MAIN_RAM, (uintptr_t)&xx, sizeof(xx));
+	starpu_variable_data_register(&data_handles[1], STARPU_MAIN_RAM, (uintptr_t)&ff, sizeof(ff));
 
-        ret = starpu_task_wait_for_all();
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_wait_for_all");
+        FPRINTF(stderr, "VALUES: %d (%d) %f (%f)\n", xx, _ifactor, ff, _ffactor);
 
-        for(i=0 ; i<2 ; i++)
+	if (insert_task)
 	{
-                ret = starpu_data_acquire(data_handles[i], STARPU_R);
-		STARPU_CHECK_RETURN_VALUE(ret, "starpu_data_acquire");
-        }
-        FPRINTF(stderr, "VALUES: %d %f\n", x, f);
+		if (args)
+			ret = starpu_insert_task(codelet,
+						 STARPU_VALUE, &_ifactor, sizeof(_ifactor),
+						 STARPU_VALUE, &_ffactor, sizeof(_ffactor),
+						 STARPU_RW, data_handles[0], STARPU_RW, data_handles[1],
+						 0);
+		else
+			ret = starpu_insert_task(codelet,
+						 STARPU_RW, data_handles[0], STARPU_RW, data_handles[1],
+						 0);
+		if (ret == -ENODEV) goto enodev;
+		STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
+	}
+	else
+	{
+		struct starpu_task *task = starpu_task_create();
+		task->cl = codelet;
+		task->handles[0] = data_handles[0];
+		task->handles[1] = data_handles[1];
+		if (args)
+			starpu_codelet_pack_args(&task->cl_arg, &task->cl_arg_size,
+						 STARPU_VALUE, &_ifactor, sizeof(_ifactor),
+						 STARPU_VALUE, &_ffactor, sizeof(_ffactor),
+						 0);
+		ret = starpu_task_submit(task);
+		if (ret == -ENODEV) goto enodev;
+		STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
+	}
 
+enodev:
         for(i=0 ; i<2 ; i++)
 	{
-                starpu_data_release(data_handles[i]);
+                starpu_data_unregister(data_handles[i]);
         }
 
-	struct starpu_task *task = starpu_task_create();
-	task->cl = &mycodelet;
-	task->handles[0] = data_handles[0];
-	task->handles[1] = data_handles[1];
-	starpu_codelet_pack_args(&task->cl_arg, &task->cl_arg_size,
-			    STARPU_VALUE, &ifactor, sizeof(ifactor),
-			    STARPU_VALUE, &ffactor, sizeof(ffactor),
-			    0);
+        FPRINTF(stderr, "VALUES: %d (should be %d) %f (should be %f)\n", xx, x*_ifactor, ff, f*_ffactor);
+	return (ret == -ENODEV ? 0 : xx == x*_ifactor && ff == f*_ffactor);
+}
 
-	ret = starpu_task_submit(task);
-	if (ret == -ENODEV) goto enodev;
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_insert_task");
+int main(int argc, char **argv)
+{
+        int x; float f;
+        int i, ret;
+	int ifactor=12;
+	float ffactor=10.0;
+        starpu_data_handle_t data_handles[2];
 
-        ret = starpu_task_wait_for_all();
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_wait_for_all");
+	ret = starpu_init(NULL);
+	if (ret == -ENODEV) return STARPU_TEST_SKIPPED;
+	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
 
-        for(i=0 ; i<2 ; i++)
+	FPRINTF(stderr, "Testing codelet with insert task and with arguments\n");
+	ret = test_codelet(&mycodelet_args, 1, 1, 4, 2.0);
+	if (ret)
 	{
-                ret = starpu_data_acquire(data_handles[i], STARPU_R);
-		STARPU_CHECK_RETURN_VALUE(ret, "starpu_data_acquire");
-        }
-        FPRINTF(stderr, "VALUES: %d %f\n", x, f);
-
-        for(i=0 ; i<2 ; i++)
+		FPRINTF(stderr, "Testing codelet with insert task and without arguments\n");
+		ret = test_codelet(&mycodelet_noargs, 1, 0, 9, 7.0);
+	}
+	if (ret)
 	{
-                starpu_data_release(data_handles[i]);
-		starpu_data_unregister(data_handles[i]);
-        }
+		FPRINTF(stderr, "Testing codelet with task_create and with arguments\n");
+		ret = test_codelet(&mycodelet_args, 0, 1, 5, 3.0);
+	}
+	if (ret)
+	{
+		FPRINTF(stderr, "Testing codelet with task_create and without arguments\n");
+		ret = test_codelet(&mycodelet_noargs, 0, 0, 7, 5.0);
+	}
 
 	starpu_shutdown();
 
-	return EXIT_SUCCESS;
+	STARPU_RETURN(ret?0:1);
 
 enodev:
 	starpu_shutdown();