Browse Source

add a test to make sure that starpu_create_sync_task is working properly

Cédric Augonnet 15 years ago
parent
commit
92c6d51fb0
2 changed files with 88 additions and 0 deletions
  1. 4 0
      tests/Makefile.am
  2. 84 0
      tests/helper/starpu_create_sync_task.c

+ 4 - 0
tests/Makefile.am

@@ -91,6 +91,7 @@ check_PROGRAMS += 				\
 	helper/cublas_init			\
 	helper/pinned_memory			\
 	helper/execute_on_all			\
+	helper/starpu_create_sync_task		\
 	microbenchs/async-tasks-overhead	\
 	microbenchs/sync-tasks-overhead		\
 	microbenchs/tasks-overhead		\
@@ -164,6 +165,9 @@ helper_pinned_memory_SOURCES =			\
 helper_execute_on_all_SOURCES =			\
 	helper/execute_on_all.c
 
+helper_starpu_create_sync_task_SOURCES =	\
+	helper/starpu_create_sync_task.c
+
 microbenchs_async_tasks_overhead_SOURCES =	\
 	microbenchs/async-tasks-overhead.c
 

+ 84 - 0
tests/helper/starpu_create_sync_task.c

@@ -0,0 +1,84 @@
+/*
+ * StarPU
+ * Copyright (C) INRIA 2008-2009 (see AUTHORS file)
+ *
+ * This program 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.
+ *
+ * This program 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 <stdio.h>
+#include <starpu.h>
+
+#define NITER	10
+
+static void dummy_func(void *descr[] __attribute__ ((unused)), void *arg __attribute__ ((unused)))
+{
+}
+
+static starpu_codelet dummy_codelet =
+{
+	.where = CORE|CUDA,
+	.core_func = dummy_func,
+	.cuda_func = dummy_func,
+	.nbuffers = 0
+};
+
+static create_dummy_task(starpu_tag_t tag)
+{
+	struct starpu_task *task = starpu_task_create();
+
+	task->use_tag = 1;
+	task->tag_id = tag;
+	task->cl = &dummy_codelet;
+	
+	int ret = starpu_submit_task(task);
+	if (ret)
+	{
+		fprintf(stderr, "Warning, no worker can execute the tasks\n");
+		/* This is not a bug from StarPU so we return a valid value. */
+		exit(0);
+	}
+}
+
+int main(int argc, char **argv)
+{
+	starpu_init(NULL);
+
+	starpu_tag_t sync_tags[NITER];
+
+	unsigned iter;
+	for (iter = 0; iter < NITER; iter++)
+	{
+		starpu_tag_t sync_tag = (starpu_tag_t)iter*100;
+
+		sync_tags[iter] = sync_tag;
+
+		unsigned ndeps = 10;
+		starpu_tag_t deps[ndeps];
+
+		unsigned d;
+		for (d = 0; d < ndeps; d++)
+		{
+			deps[d] = sync_tag + d + 1; 
+
+			create_dummy_task(deps[d]);
+		}
+
+		starpu_create_sync_task(sync_tag, ndeps, deps);
+	}
+
+	/* Wait all the synchronization tasks */
+	starpu_tag_wait_array(NITER, sync_tags);
+
+	starpu_shutdown();
+
+	return 0;
+}