瀏覽代碼

tests/datawizard: add new test

Nathalie Furmento 14 年之前
父節點
當前提交
98d7d163e5
共有 2 個文件被更改,包括 93 次插入0 次删除
  1. 10 0
      tests/Makefile.am
  2. 83 0
      tests/datawizard/acquire_release2.c

+ 10 - 0
tests/Makefile.am

@@ -99,6 +99,7 @@ check_PROGRAMS += 				\
 	core/declare_deps_after_submission_synchronous	\
 	core/get_current_task			\
 	datawizard/acquire_release		\
+	datawizard/acquire_release2		\
 	datawizard/data_implicit_deps		\
 	datawizard/scratch			\
 	datawizard/sync_and_notify_data		\
@@ -250,6 +251,15 @@ datawizard_acquire_release_SOURCES +=		\
 endif
 
 testbin_PROGRAMS +=				\
+	datawizard/acquire_release2
+datawizard_acquire_release2_SOURCES =		\
+	datawizard/acquire_release2.c
+if STARPU_USE_CUDA
+datawizard_acquire_release2_SOURCES +=		\
+	datawizard/acquire_release_cuda.cu
+endif
+
+testbin_PROGRAMS +=				\
 	datawizard/data_implicit_deps
 datawizard_data_implicit_deps_SOURCES =		\
 	datawizard/data_implicit_deps.c

+ 83 - 0
tests/datawizard/acquire_release2.c

@@ -0,0 +1,83 @@
+/*
+ * StarPU
+ * Copyright (C) Université Bordeaux 1, CNRS 2008-2010 (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 <starpu.h>
+
+static unsigned ntasks = 40000;
+
+#ifdef STARPU_USE_CUDA
+extern void increment_cuda(void *descr[], __attribute__ ((unused)) void *_args);
+#endif
+
+void increment_cpu(void *descr[], __attribute__ ((unused)) void *_args)
+{
+	unsigned *tokenptr = (unsigned *)STARPU_VARIABLE_GET_PTR(descr[0]);
+	(*tokenptr)++;
+}
+
+static starpu_codelet increment_cl = {
+        .where = STARPU_CPU|STARPU_CUDA,
+	.cpu_func = increment_cpu,
+#ifdef STARPU_USE_CUDA
+	.cuda_func = increment_cuda,
+#endif
+	.nbuffers = 1
+};
+
+unsigned token = 0;
+starpu_data_handle token_handle;
+
+void increment_token(int synchronous)
+{
+	struct starpu_task *task = starpu_task_create();
+        task->synchronous = synchronous;
+	task->cl = &increment_cl;
+	task->buffers[0].handle = token_handle;
+	task->buffers[0].mode = STARPU_RW;
+	starpu_task_submit(task);
+}
+
+void callback(void *arg __attribute__ ((unused)))
+{
+        starpu_data_release(token_handle);
+}
+
+#warning add threads
+
+int main(int argc, char **argv)
+{
+	int i;
+
+        starpu_init(NULL);
+	starpu_variable_data_register(&token_handle, 0, (uintptr_t)&token, sizeof(unsigned));
+
+        fprintf(stderr, "Token: %d\n", token);
+
+	for(i=0; i<ntasks; i++)
+	{
+                starpu_data_acquire_cb(token_handle, STARPU_W, callback, NULL);  // recv
+                increment_token(0);
+                starpu_data_acquire_cb(token_handle, STARPU_R, callback, NULL);  // send
+	}
+
+	starpu_data_unregister(token_handle);
+        fprintf(stderr, "Token: %d\n", token);
+        assert(token==ntasks);
+
+	starpu_shutdown();
+
+	return 0;
+}