Kaynağa Gözat

It is possible that a task has not been submitted even if its (tags)
dependencies are already fulfilled. In StarPU, a task must be submitted
explicited (since it is possible that extra deps are added afterwards.

Cédric Augonnet 16 yıl önce
ebeveyn
işleme
adab8c8c23

+ 3 - 1
src/core/dependencies/tags.c

@@ -61,6 +61,7 @@ static struct tag_s *tag_init(starpu_tag_t id)
 
 	tag->job = NULL;
 	tag->is_assigned = 0;
+	tag->is_submitted = 0;
 
 	tag->id = id;
 	tag->state = READY;
@@ -160,7 +161,8 @@ static void notify_cg(cg_t *cg)
 		else
 		{
 //			take_mutex(&cg->tag->lock);
-			tag_set_ready(cg->tag);
+			if (cg->tag->is_submitted)
+				tag_set_ready(cg->tag);
 //			release_mutex(&cg->tag->lock);
 			free(cg);
 		}

+ 1 - 0
src/core/dependencies/tags.h

@@ -56,6 +56,7 @@ struct tag_s {
 	struct job_s *job; /* which job is associated to the tag if any ? */
 
 	unsigned is_assigned;
+	unsigned is_submitted;
 };
 
 typedef struct _cg_t {

+ 2 - 0
src/core/jobs.c

@@ -166,6 +166,8 @@ int starpu_submit_task(struct starpu_task *task)
 	/* enfore task dependencies */
 	if (task->use_tag)
 	{
+		j->tag->is_submitted = 1;
+
 		if (submit_job_enforce_task_deps(j))
 		{
 			if (is_sync)