浏览代码

fix subgraph tests for both CUDA and MIC cases

Samuel Thibault 12 年之前
父节点
当前提交
7338c6368c

+ 29 - 0
tests/Makefile.am

@@ -122,6 +122,7 @@ noinst_PROGRAMS =				\
 	main/regenerate				\
 	main/wait_all_regenerable_tasks		\
 	main/subgraph_repeat			\
+	main/subgraph_repeat_tag			\
 	main/subgraph_repeat_regenerate		\
 	main/subgraph_repeat_regenerate_tag	\
 	main/empty_task				\
@@ -373,6 +374,34 @@ datawizard_wt_broadcast_SOURCES =		\
 main_deprecated_func_CFLAGS = $(AM_CFLAGS) -Wno-deprecated-declarations
 main_deprecated_buffer_CFLAGS = $(AM_CFLAGS) -Wno-deprecated-declarations
 
+main_subgraph_repeat_SOURCES =		\
+	main/subgraph_repeat.c
+if STARPU_USE_CUDA
+main_subgraph_repeat_SOURCES +=		\
+	main/increment.cu
+endif
+
+main_subgraph_repeat_tag_SOURCES =		\
+	main/subgraph_repeat_tag.c
+if STARPU_USE_CUDA
+main_subgraph_repeat_tag_SOURCES +=		\
+	main/increment.cu
+endif
+
+main_subgraph_repeat_regenerate_SOURCES =		\
+	main/subgraph_repeat.c
+if STARPU_USE_CUDA
+main_subgraph_repeat_regenerate_SOURCES +=		\
+	main/increment.cu
+endif
+
+main_subgraph_repeat_regenerate_tag_SOURCES =		\
+	main/subgraph_repeat_regenerate_tag.c
+if STARPU_USE_CUDA
+main_subgraph_repeat_regenerate_tag_SOURCES +=		\
+	main/increment.cu
+endif
+
 ###################
 # Block interface #
 ###################

+ 31 - 0
tests/main/increment.cu

@@ -0,0 +1,31 @@
+/* StarPU --- Runtime system for heterogeneous multicore architectures.
+ *
+ * Copyright (C) 2013  Université de Bordeaux 1
+ *
+ * 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
+ * the Free Software Foundation; either version 2.1 of the License, or (at
+ * your option) any later version.
+ *
+ * StarPU is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * See the GNU Lesser General Public License in COPYING.LGPL for more details.
+ */
+
+#include <starpu.h>
+
+static __global__ void cuda_increment(unsigned *var)
+{
+	*var++;
+}
+
+extern "C" void cuda_host_increment(void *descr[], void *_args)
+{
+	(void)_args;
+	unsigned *var = (unsigned *)STARPU_VARIABLE_GET_PTR(descr[0]);
+
+	cuda_increment<<<1,1, 0, starpu_cuda_get_local_stream()>>>(var);
+	cudaStreamSynchronize(starpu_cuda_get_local_stream());
+}

+ 12 - 7
tests/main/subgraph_repeat.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010, 2012  Université de Bordeaux 1
+ * Copyright (C) 2010, 2012-2013  Université de Bordeaux 1
  * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -49,17 +49,22 @@ static unsigned *check_cnt;
 static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
-void dummy_func(void *descr[], void *arg __attribute__ ((unused)))
+extern void cuda_host_increment(void *descr[], void *_args);
+
+void cpu_increment(void *descr[], void *arg __attribute__ ((unused)))
 {
-	unsigned *tmp = (unsigned *)STARPU_VARIABLE_GET_PTR(descr[0]);
-	(*tmp)++;
+	unsigned *var = (unsigned *)STARPU_VARIABLE_GET_PTR(descr[0]);
+	(*var)++;
 }
 
 static struct starpu_codelet dummy_codelet =
 {
-	.cpu_funcs = {dummy_func, NULL},
-	.cuda_funcs = {dummy_func, NULL},
-	.opencl_funcs = {dummy_func, NULL},
+	.cpu_funcs = {cpu_increment, NULL},
+#ifdef STARPU_USE_CUDA
+	.cuda_funcs = {cuda_host_increment, NULL},
+#endif
+	// TODO
+	//.opencl_funcs = {dummy_func, NULL},
 	.cpu_funcs_name = {"dummy_func", NULL},
 	.model = NULL,
 	.modes = { STARPU_RW },

+ 12 - 8
tests/main/subgraph_repeat_regenerate.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010-2012  Université de Bordeaux 1
+ * Copyright (C) 2010-2013  Université de Bordeaux 1
  * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -49,17 +49,22 @@ static unsigned *check_cnt;
 static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
-void dummy_func(void *descr[] __attribute__ ((unused)), void *arg __attribute__ ((unused)))
+extern void cuda_host_increment(void *descr[], void *_args);
+
+void cpu_increment(void *descr[], void *arg __attribute__ ((unused)))
 {
-	unsigned *tmp = (unsigned *)STARPU_VARIABLE_GET_PTR(descr[0]);
-	(*tmp)++;
+	unsigned *var = (unsigned *)STARPU_VARIABLE_GET_PTR(descr[0]);
+	(*var)++;
 }
 
 static struct starpu_codelet dummy_codelet =
 {
-	.cpu_funcs = {dummy_func, NULL},
-	.cuda_funcs = {dummy_func, NULL},
-	.opencl_funcs = {dummy_func, NULL},
+	.cpu_funcs = {cpu_increment, NULL},
+#ifdef STARPU_USE_CUDA
+	.cuda_funcs = {cuda_host_increment, NULL},
+#endif
+	// TODO
+	//.opencl_funcs = {dummy_func, NULL},
 	.cpu_funcs_name = {"dummy_func", NULL},
 	.model = NULL,
 	.modes = { STARPU_RW },
@@ -159,7 +164,6 @@ int main(int argc, char **argv)
 	starpu_data_acquire(check_data, STARPU_R);
 	starpu_data_release(check_data);
 
-	printf("%d\n", *check_cnt);
 	STARPU_ASSERT(*check_cnt == (4*loop_cnt));
 
 	starpu_free(check_cnt);

+ 37 - 10
tests/main/subgraph_repeat_regenerate_tag.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010-2012  Université de Bordeaux 1
+ * Copyright (C) 2010-2013  Université de Bordeaux 1
  * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -51,22 +51,30 @@ static unsigned niter = 16384;
 static struct starpu_task taskA, taskB, taskC, taskD;
 
 static unsigned loop_cnt = 0;
-static unsigned check_cnt = 0;
+static unsigned *check_cnt;
 static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
-static void dummy_func(void *descr[] __attribute__ ((unused)), void *arg __attribute__ ((unused)))
+extern void cuda_host_increment(void *descr[], void *_args);
+
+void cpu_increment(void *descr[], void *arg __attribute__ ((unused)))
 {
-	(void) STARPU_ATOMIC_ADD(&check_cnt, 1);
+	unsigned *var = (unsigned *)STARPU_VARIABLE_GET_PTR(descr[0]);
+	(*var)++;
 }
 
 static struct starpu_codelet dummy_codelet =
 {
-	.cpu_funcs = {dummy_func, NULL},
-	.cuda_funcs = {dummy_func, NULL},
-	.opencl_funcs = {dummy_func, NULL},
+	.cpu_funcs = {cpu_increment, NULL},
+#ifdef STARPU_USE_CUDA
+	.cuda_funcs = {cuda_host_increment, NULL},
+#endif
+	// TODO
+	//.opencl_funcs = {dummy_func, NULL},
+	.cpu_funcs_name = {"dummy_func", NULL},
 	.model = NULL,
-	.nbuffers = 0
+	.modes = { STARPU_RW },
+	.nbuffers = 1
 };
 
 static void callback_task_D(void *arg __attribute__((unused)))
@@ -98,41 +106,55 @@ int main(int argc, char **argv)
 //	struct timeval end;
 	int ret;
 
-	ret = starpu_init(NULL);
+	ret = starpu_initialize(NULL, &argc, &argv);
 	if (ret == -ENODEV) return STARPU_TEST_SKIPPED;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
 
 	/* Implicit data dependencies and regeneratable tasks are not compatible */
 	starpu_data_set_default_sequential_consistency_flag(0);
 
+	starpu_malloc((void**)&check_cnt, sizeof(*check_cnt));
+	*check_cnt = 0;
+
+	starpu_data_handle_t check_data;
+	starpu_variable_data_register(&check_data, 0, (uintptr_t)check_cnt, sizeof(*check_cnt));
+
 	starpu_task_init(&taskA);
 	taskA.cl = &dummy_codelet;
 	taskA.cl_arg = &taskA;
+	taskA.cl_arg_size = sizeof(&taskA);
 	taskA.regenerate = 1; /* this task will be explicitely resubmitted if needed */
 	taskA.use_tag = 1;
 	taskA.tag_id = TAG_A;
+	taskA.handles[0] = check_data;
 
 	starpu_task_init(&taskB);
 	taskB.cl = &dummy_codelet;
 	taskB.cl_arg = &taskB;
+	taskB.cl_arg_size = sizeof(&taskB);
 	taskB.regenerate = 1;
 	taskB.use_tag = 1;
 	taskB.tag_id = TAG_B;
+	taskB.handles[0] = check_data;
 
 	starpu_task_init(&taskC);
 	taskC.cl = &dummy_codelet;
 	taskC.cl_arg = &taskC;
+	taskC.cl_arg_size = sizeof(&taskC);
 	taskC.regenerate = 1;
 	taskC.use_tag = 1;
 	taskC.tag_id = TAG_C;
+	taskC.handles[0] = check_data;
 
 	starpu_task_init(&taskD);
 	taskD.cl = &dummy_codelet;
 	taskD.cl_arg = &taskD;
+	taskD.cl_arg_size = sizeof(&taskD);
 	taskD.callback_func = callback_task_D;
 	taskD.regenerate = 1;
 	taskD.use_tag = 1;
 	taskD.tag_id = TAG_D;
+	taskD.handles[0] = check_data;
 
 	starpu_tag_declare_deps((starpu_tag_t) TAG_A, 1, (starpu_tag_t) TAG_START);
 
@@ -154,7 +176,12 @@ int main(int argc, char **argv)
 		STARPU_PTHREAD_COND_WAIT(&cond, &mutex);
 	STARPU_PTHREAD_MUTEX_UNLOCK(&mutex);
 
-	STARPU_ASSERT(check_cnt == (4*loop_cnt));
+	starpu_data_acquire(check_data, STARPU_R);
+	starpu_data_release(check_data);
+
+	STARPU_ASSERT(*check_cnt == (4*loop_cnt));
+
+	starpu_free(check_cnt);
 
 	starpu_shutdown();
 

+ 37 - 10
tests/main/subgraph_repeat_tag.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010-2012  Université de Bordeaux 1
+ * Copyright (C) 2010-2013  Université de Bordeaux 1
  * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -44,22 +44,30 @@ static unsigned niter = 16384;
 static struct starpu_task taskA, taskB, taskC, taskD;
 
 static unsigned loop_cnt = 0;
-static unsigned check_cnt = 0;
+static unsigned *check_cnt;
 static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
-static void dummy_func(void *descr[] __attribute__ ((unused)), void *arg __attribute__ ((unused)))
+extern void cuda_host_increment(void *descr[], void *_args);
+
+void cpu_increment(void *descr[], void *arg __attribute__ ((unused)))
 {
-	(void) STARPU_ATOMIC_ADD(&check_cnt, 1);
+	unsigned *var = (unsigned *)STARPU_VARIABLE_GET_PTR(descr[0]);
+	(*var)++;
 }
 
 static struct starpu_codelet dummy_codelet =
 {
-	.cpu_funcs = {dummy_func, NULL},
-	.cuda_funcs = {dummy_func, NULL},
-	.opencl_funcs = {dummy_func, NULL},
+	.cpu_funcs = {cpu_increment, NULL},
+#ifdef STARPU_USE_CUDA
+	.cuda_funcs = {cuda_host_increment, NULL},
+#endif
+	// TODO
+	//.opencl_funcs = {dummy_func, NULL},
+	.cpu_funcs_name = {"dummy_func", NULL},
 	.model = NULL,
-	.nbuffers = 0
+	.modes = { STARPU_RW },
+	.nbuffers = 1
 };
 
 static void callback_task_D(void *arg __attribute__((unused)))
@@ -92,33 +100,47 @@ int main(int argc, char **argv)
 //	struct timeval end;
 	int ret;
 
-	ret = starpu_init(NULL);
+	ret = starpu_initialize(NULL, &argc, &argv);
 	if (ret == -ENODEV) return STARPU_TEST_SKIPPED;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
 
 	/* Implicit data dependencies and regeneratable tasks are not compatible */
 	starpu_data_set_default_sequential_consistency_flag(0);
 
+	starpu_malloc((void**)&check_cnt, sizeof(*check_cnt));
+	*check_cnt = 0;
+
+	starpu_data_handle_t check_data;
+	starpu_variable_data_register(&check_data, 0, (uintptr_t)check_cnt, sizeof(*check_cnt));
+
 	starpu_task_init(&taskA);
 	taskA.cl = &dummy_codelet;
 	taskA.cl_arg = &taskA;
+	taskA.cl_arg_size = sizeof(&taskA);
 	taskA.regenerate = 0; /* this task will be explicitely resubmitted if needed */
+	taskA.handles[0] = check_data;
 
 	starpu_task_init(&taskB);
 	taskB.cl = &dummy_codelet;
 	taskB.cl_arg = &taskB;
+	taskB.cl_arg_size = sizeof(&taskB);
 	taskB.regenerate = 1;
+	taskB.handles[0] = check_data;
 
 	starpu_task_init(&taskC);
 	taskC.cl = &dummy_codelet;
 	taskC.cl_arg = &taskC;
+	taskC.cl_arg_size = sizeof(&taskC);
 	taskC.regenerate = 1;
+	taskC.handles[0] = check_data;
 
 	starpu_task_init(&taskD);
 	taskD.cl = &dummy_codelet;
 	taskD.cl_arg = &taskD;
+	taskD.cl_arg_size = sizeof(&taskD);
 	taskD.callback_func = callback_task_D;
 	taskD.regenerate = 1;
+	taskD.handles[0] = check_data;
 
 	struct starpu_task *depsBC_array[1] = {&taskA};
 	starpu_task_declare_deps_array(&taskB, 1, depsBC_array);
@@ -138,7 +160,12 @@ int main(int argc, char **argv)
 		STARPU_PTHREAD_COND_WAIT(&cond, &mutex);
 	STARPU_PTHREAD_MUTEX_UNLOCK(&mutex);
 
-	STARPU_ASSERT(check_cnt == (4*loop_cnt));
+	starpu_data_acquire(check_data, STARPU_R);
+	starpu_data_release(check_data);
+
+	STARPU_ASSERT(*check_cnt == (4*loop_cnt));
+
+	starpu_free(check_cnt);
 
 	starpu_shutdown();