Преглед на файлове

add relax_on/_off around mutex_locks in graph.c
display warning about missing perf model only once

Olivier Aumage преди 8 години
родител
ревизия
0b4a7d4d69
променени са 2 файла, в които са добавени 24 реда и са изтрити 2 реда
  1. 11 0
      src/common/graph.c
  2. 13 2
      src/sched_policies/graph_test_policy.c

+ 11 - 0
src/common/graph.c

@@ -28,6 +28,7 @@
 #include <starpu.h>
 #include <core/jobs.h>
 #include <common/graph.h>
+#include <core/workers.h>
 
 /* Protects the whole task graph except the dropped list */
 static starpu_pthread_rwlock_t graph_lock;
@@ -60,7 +61,9 @@ void _starpu_graph_init(void)
 /* LockWR the graph lock */
 void _starpu_graph_wrlock(void)
 {
+	_starpu_worker_relax_on();
 	STARPU_PTHREAD_RWLOCK_WRLOCK(&graph_lock);
+	_starpu_worker_relax_off();
 }
 
 void _starpu_graph_drop_node(struct _starpu_graph_node *node);
@@ -94,14 +97,18 @@ void _starpu_graph_drop_dropped_nodes(void)
 /* UnlockWR the graph lock */
 void _starpu_graph_wrunlock(void)
 {
+	_starpu_worker_relax_on();
 	STARPU_PTHREAD_MUTEX_LOCK(&dropped_lock);
+	_starpu_worker_relax_off();
 	_starpu_graph_drop_dropped_nodes();
 }
 
 /* LockRD the graph lock */
 void _starpu_graph_rdlock(void)
 {
+	_starpu_worker_relax_on();
 	STARPU_PTHREAD_RWLOCK_RDLOCK(&graph_lock);
+	_starpu_worker_relax_off();
 }
 
 /* UnlockRD the graph lock */
@@ -247,12 +254,16 @@ void _starpu_graph_drop_job(struct _starpu_job *job)
 	if (!node)
 		return;
 
+	_starpu_worker_relax_on();
 	STARPU_PTHREAD_MUTEX_LOCK(&node->mutex);
+	_starpu_worker_relax_off();
 	/* Will not be able to use the job any more */
 	node->job = NULL;
 	STARPU_PTHREAD_MUTEX_UNLOCK(&node->mutex);
 
+	_starpu_worker_relax_on();
 	STARPU_PTHREAD_MUTEX_LOCK(&dropped_lock);
+	_starpu_worker_relax_off();
 	/* Queue for removal when lock becomes available */
 	_starpu_graph_node_multilist_push_back_dropped(&dropped, node);
 	if (STARPU_PTHREAD_RWLOCK_TRYWRLOCK(&graph_lock) == 0)

+ 13 - 2
src/sched_policies/graph_test_policy.c

@@ -124,8 +124,19 @@ static struct _starpu_prio_deque *select_prio(unsigned sched_ctx_id, struct _sta
 			length = 0.;
 		if (length == 0.)
 		{
-			_STARPU_DISP("Warning: graph_test needs performance models for all tasks, including %s\n",
-					starpu_task_get_name(task));
+			if (!task->cl || task->cl->model == NULL)
+			{
+				static unsigned _warned;
+				if (STARPU_ATOMIC_ADD(&_warned, 1) == 1)
+				{
+					_STARPU_DISP("Warning: graph_test needs performance models for all tasks, including %s\n",
+							starpu_task_get_name(task));
+				}
+				else
+				{
+					(void)STARPU_ATOMIC_ADD(&_warned, -1);
+				}
+			}
 			power = 0.;
 		}
 		else