Bläddra i källkod

backport r14407 from 1.2: Check that the data access mode is not bogus

Samuel Thibault 10 år sedan
förälder
incheckning
9de161f711
3 ändrade filer med 31 tillägg och 25 borttagningar
  1. 3 2
      include/starpu_data.h
  2. 24 22
      include/starpu_task_util.h
  3. 4 1
      src/datawizard/coherency.c

+ 3 - 2
include/starpu_data.h

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010-2014  Université de Bordeaux
+ * Copyright (C) 2010-2015  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -37,7 +37,8 @@ enum starpu_data_access_mode
 	STARPU_SCRATCH=(1<<2),
 	STARPU_REDUX=(1<<3),
 	STARPU_COMMUTE=(1<<4),
-	STARPU_SSEND=(1<<5)
+	STARPU_SSEND=(1<<5),
+	STARPU_ACCESS_MODE_MAX=(1<<6)
 	/* Note: other STARPU_* values in include/starpu_task_util.h */
 };
 

+ 24 - 22
include/starpu_task_util.h

@@ -35,28 +35,30 @@ void starpu_create_sync_task(starpu_tag_t sync_tag, unsigned ndeps, starpu_tag_t
 /* NOTE: when adding a value here, please make sure to update both
  * src/util/starpu_task_insert_utils.c (in two places) and
  * mpi/src/starpu_mpi_task_insert.c */
-#define STARPU_VALUE		 (1<<16)
-#define STARPU_CALLBACK		 (2<<16)
-#define STARPU_CALLBACK_WITH_ARG (3<<16)
-#define STARPU_CALLBACK_ARG	 (4<<16)
-#define STARPU_PRIORITY		 (5<<16)
-#define STARPU_EXECUTE_ON_NODE	 (6<<16)
-#define STARPU_EXECUTE_ON_DATA	 (7<<16)
-#define STARPU_DATA_ARRAY        (8<<16)
-#define STARPU_DATA_MODE_ARRAY   (9<<16)
-#define STARPU_TAG               (10<<16)
-#define STARPU_HYPERVISOR_TAG	 (11<<16)
-#define STARPU_FLOPS	         (12<<16)
-#define STARPU_SCHED_CTX	 (13<<16)
-#define STARPU_PROLOGUE_CALLBACK   (14<<16)
-#define STARPU_PROLOGUE_CALLBACK_ARG (15<<16)
-#define STARPU_PROLOGUE_CALLBACK_POP   (16<<16)
-#define STARPU_PROLOGUE_CALLBACK_POP_ARG (17<<16)
-#define STARPU_EXECUTE_ON_WORKER (18<<16)
-#define STARPU_TAG_ONLY          (19<<16)
-#define STARPU_POSSIBLY_PARALLEL    (20<<16)
-#define STARPU_WORKER_ORDER      (21<<16)
-#define STARPU_NODE_SELECTION_POLICY (22<<16)
+#define STARPU_MODE_SHIFT	16
+#define STARPU_VALUE		 (1<<STARPU_MODE_SHIFT)
+#define STARPU_CALLBACK		 (2<<STARPU_MODE_SHIFT)
+#define STARPU_CALLBACK_WITH_ARG (3<<STARPU_MODE_SHIFT)
+#define STARPU_CALLBACK_ARG	 (4<<STARPU_MODE_SHIFT)
+#define STARPU_PRIORITY		 (5<<STARPU_MODE_SHIFT)
+#define STARPU_EXECUTE_ON_NODE	 (6<<STARPU_MODE_SHIFT)
+#define STARPU_EXECUTE_ON_DATA	 (7<<STARPU_MODE_SHIFT)
+#define STARPU_DATA_ARRAY        (8<<STARPU_MODE_SHIFT)
+#define STARPU_DATA_MODE_ARRAY   (9<<STARPU_MODE_SHIFT)
+#define STARPU_TAG               (10<<STARPU_MODE_SHIFT)
+#define STARPU_HYPERVISOR_TAG	 (11<<STARPU_MODE_SHIFT)
+#define STARPU_FLOPS	         (12<<STARPU_MODE_SHIFT)
+#define STARPU_SCHED_CTX	 (13<<STARPU_MODE_SHIFT)
+#define STARPU_PROLOGUE_CALLBACK   (14<<STARPU_MODE_SHIFT)
+#define STARPU_PROLOGUE_CALLBACK_ARG (15<<STARPU_MODE_SHIFT)
+#define STARPU_PROLOGUE_CALLBACK_POP   (16<<STARPU_MODE_SHIFT)
+#define STARPU_PROLOGUE_CALLBACK_POP_ARG (17<<STARPU_MODE_SHIFT)
+#define STARPU_EXECUTE_ON_WORKER (18<<STARPU_MODE_SHIFT)
+#define STARPU_TAG_ONLY          (19<<STARPU_MODE_SHIFT)
+#define STARPU_POSSIBLY_PARALLEL    (20<<STARPU_MODE_SHIFT)
+#define STARPU_WORKER_ORDER      (21<<STARPU_MODE_SHIFT)
+#define STARPU_NODE_SELECTION_POLICY (22<<STARPU_MODE_SHIFT)
+#define STARPU_SHIFTED_MODE_MAX (23<<STARPU_MODE_SHIFT)
 
 struct starpu_task *starpu_task_build(struct starpu_codelet *cl, ...);
 int starpu_task_insert(struct starpu_codelet *cl, ...);

+ 4 - 1
src/datawizard/coherency.c

@@ -1,5 +1,5 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures. *
- * Copyright (C) 2009-2014  Université de Bordeaux
+ * Copyright (C) 2009-2015  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015  Centre National de la Recherche Scientifique
  * Copyright (C) 2014  Inria
  *
@@ -807,6 +807,9 @@ int _starpu_fetch_task_input(struct _starpu_job *j)
 		int node = descrs[index].node;
 		if (node == -1)
 			node = local_memory_node;
+		if ((mode & ((1<<STARPU_MODE_SHIFT) - 1)) >= STARPU_ACCESS_MODE_MAX ||
+			(mode >> STARPU_MODE_SHIFT) >= STARPU_SHIFTED_MODE_MAX)
+			STARPU_ASSERT_MSG(0, "mode %d (0x%x) is bogus\n", mode, mode);
 
 		struct _starpu_data_replicate *local_replicate;