Browse Source

Gordon requires that drivers are non-blocking

Cédric Augonnet 16 years ago
parent
commit
a79341479c

+ 1 - 0
configure.ac

@@ -218,6 +218,7 @@ AM_CONDITIONAL(USE_GORDON, test x$enable_gordon = xyes)
 
 if test x$enable_gordon = xyes; then
 	AC_DEFINE(USE_GORDON, [1], [Cell support is enabled])
+	AC_DEFINE(NON_BLOCKING_DRIVERS, [1], [drivers must progress])
 fi
 
 ###############################################################################

+ 6 - 0
src/core/mechanisms/deque_queues.c

@@ -125,7 +125,13 @@ job_t deque_pop_task(struct jobq_s *q)
 	pthread_mutex_lock(&q->activity_mutex);
 
 	if ((deque_queue->njobs == 0) && machine_is_running())
+	{
+#ifdef NON_BLOCKING_DRIVERS
+		datawizard_progress(q->memory_node);
+#else
 		pthread_cond_wait(&q->activity_cond, &q->activity_mutex);
+#endif
+	}
 
 	if (deque_queue->njobs > 0) 
 	{

+ 6 - 0
src/core/mechanisms/fifo_queues.c

@@ -126,7 +126,13 @@ job_t fifo_pop_task(struct jobq_s *q)
 	pthread_mutex_lock(&q->activity_mutex);
 
 	if ((fifo_queue->njobs == 0) && machine_is_running())
+	{
+#ifdef NON_BLOCKING_DRIVERS
+		datawizard_progress(q->memory_node);
+#else
 		pthread_cond_wait(&q->activity_cond, &q->activity_mutex);
+#endif
+	}
 
 	if (fifo_queue->njobs > 0) 
 	{

+ 7 - 1
src/core/mechanisms/priority_queues.c

@@ -99,7 +99,13 @@ job_t priority_pop_task(struct jobq_s *q)
 	pthread_mutex_lock(&q->activity_mutex);
 
 	if ((queue->total_njobs == 0) && machine_is_running())
-		 pthread_cond_wait(&q->activity_cond, &q->activity_mutex);
+	{
+#ifdef NON_BLOCKING_DRIVERS
+		datawizard_progress(q->memory_node);
+#else
+		pthread_cond_wait(&q->activity_cond, &q->activity_mutex);
+#endif
+	}
 
 	if (queue->total_njobs > 0)
 	{

+ 6 - 0
src/core/mechanisms/stack_queues.c

@@ -145,7 +145,13 @@ job_t stack_pop_task(struct jobq_s *q)
 	pthread_mutex_lock(&q->activity_mutex);
 
 	if ((stack_queue->njobs == 0) && machine_is_running())
+	{
+#ifdef NON_BLOCKING_DRIVERS
+		datawizard_progress(q->memory_node);
+#else
 		pthread_cond_wait(&q->activity_cond, &q->activity_mutex);
+#endif
+	}
 
 	if (stack_queue->njobs > 0) 
 	{

+ 5 - 0
src/core/policies/sched_policy.c

@@ -17,6 +17,7 @@
 #include <pthread.h>
 
 #include <starpu.h>
+#include <common/config.h>
 #include <core/mechanisms/queues.h>
 #include <core/policies/sched_policy.h>
 #include <core/policies/no-prio-policy.h>
@@ -185,7 +186,11 @@ void wait_on_sched_event(void)
 	pthread_mutex_lock(&q->activity_mutex);
 
 	if (machine_is_running())
+	{
+#ifndef NON_BLOCKING_DRIVERS
 		pthread_cond_wait(&q->activity_cond, &q->activity_mutex);
+#endif
+	}
 
 	pthread_mutex_unlock(&q->activity_mutex);
 }