|
@@ -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)
|