Samuel Thibault лет назад: 5
Родитель
Сommit
ca05fbca04
1 измененных файлов с 51 добавлено и 4 удалено
  1. 51 4
      tests/datawizard/acquire_cb.c

+ 51 - 4
tests/datawizard/acquire_cb.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2011,2013,2014,2016                      Université de Bordeaux
+ * Copyright (C) 2011,2013,2014,2016, 2020                      Université de Bordeaux
  * Copyright (C) 2011-2013                                Inria
  * Copyright (C) 2011-2013,2017                           CNRS
  *
@@ -20,20 +20,27 @@
 #include "../helper.h"
 
 /*
- * Test that when using starpu_data_acquire_cb, the callback is properly called
+ * Test that when using starpu_data_acquire_cb, the callback_w is properly called
  */
 
 unsigned token = 0;
 starpu_data_handle_t token_handle;
 
 static
-void callback(void *arg)
+void callback_w(void *arg)
 {
 	(void)arg;
 	token = 42;
         starpu_data_release(token_handle);
 }
 
+static
+void callback_r(void *arg)
+{
+	(void)arg;
+        starpu_data_release(token_handle);
+}
+
 int main(int argc, char **argv)
 {
 	int ret;
@@ -42,8 +49,48 @@ int main(int argc, char **argv)
 	if (ret == -ENODEV) return STARPU_TEST_SKIPPED;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
 
+	starpu_variable_data_register(&token_handle, -1, 0, sizeof(unsigned));
+	starpu_data_acquire_cb(token_handle, STARPU_W, callback_w, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_unregister(token_handle);
+	STARPU_ASSERT(token == 42);
+
+	token = 0;
+
+	starpu_variable_data_register(&token_handle, -1, 0, sizeof(unsigned));
+	starpu_data_acquire(token_handle, STARPU_W);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_release(token_handle);
+	starpu_data_unregister(token_handle);
+
+	token = 0;
+
 	starpu_variable_data_register(&token_handle, STARPU_MAIN_RAM, (uintptr_t)&token, sizeof(unsigned));
-        starpu_data_acquire_cb(token_handle, STARPU_RW, callback, NULL);
+	/* These are getting executed immediately */
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_W, callback_w, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_W, callback_w, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_RW, callback_w, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_RW, callback_w, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+
+	starpu_data_acquire(token_handle, STARPU_W);
+	/* These will wait for our relase */
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_W, callback_w, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_W, callback_w, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_RW, callback_w, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_RW, callback_w, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_acquire_cb(token_handle, STARPU_R, callback_r, NULL);
+	starpu_data_release(token_handle);
 
 	starpu_data_unregister(token_handle);