From aac3e3c5f3a51fa88717c20bae44405824846273 Mon Sep 17 00:00:00 2001
From: lhausamm <loic_hausammann@hotmail.com>
Date: Thu, 9 Nov 2017 09:19:35 +0100
Subject: [PATCH] Add subtask for dependency tree

---
 src/scheduler.c | 21 +++++++++++++++++++--
 src/scheduler.h |  1 +
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/scheduler.c b/src/scheduler.c
index 68b95abaf7..c61b089a01 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -109,7 +109,11 @@ void scheduler_addunlock(struct scheduler *s, struct task *ta,
   s->unlocks[ind] = tb;
   s->unlock_ind[ind] = ta - s->tasks;
   atomic_inc(&s->completed_unlock_writes);
-  
+
+  scheduler_write_dependency(ta,tb);
+}
+
+void scheduler_write_dependency(struct task *ta, struct task *tb) {
   int test = ta->ci->ti_end_min == 0 && tb->ci->ti_end_min == 0;
   test = test && ta->ci->parent == NULL && tb->ci->parent == NULL;
   if (test)
@@ -120,7 +124,12 @@ void scheduler_addunlock(struct scheduler *s, struct task *ta,
       ssize_t read;
       FILE *f;
       
-      sprintf(tmp, "%s->%s;\n", taskID_names[ta->type], taskID_names[tb->type]);
+      sprintf(tmp, "\t%s_%s->%s_%s;\n",
+	      taskID_names[ta->type],
+	      subtaskID_names[ta->subtype],
+	      taskID_names[tb->type],
+	      subtaskID_names[tb->subtype]
+	      );
 
       f = fopen("test_graph.viz", "r");
 
@@ -138,6 +147,12 @@ void scheduler_addunlock(struct scheduler *s, struct task *ta,
       
 	  fclose(f);
 	}
+      else
+	{
+	  f = fopen("test_graph.viz", "w");
+	  fprintf(f,"digraph task_dep {\n\tcompound=true;\n\tratio=0.66;\n\tnode[nodesep=0.15];\n");
+	  fclose(f);
+	}
 
       if (test)
 	{
@@ -147,8 +162,10 @@ void scheduler_addunlock(struct scheduler *s, struct task *ta,
 	}
 
     }
+
 }
 
+
 /**
  * @brief Split a hydrodynamic task if too large.
  *
diff --git a/src/scheduler.h b/src/scheduler.h
index c5ccbf43f3..3d397da628 100644
--- a/src/scheduler.h
+++ b/src/scheduler.h
@@ -168,5 +168,6 @@ void scheduler_dump_queue(struct scheduler *s);
 void scheduler_print_tasks(const struct scheduler *s, const char *fileName);
 void scheduler_clean(struct scheduler *s);
 void scheduler_free_tasks(struct scheduler *s);
+void scheduler_write_dependency(struct task *ta, struct task *tb);
 
 #endif /* SWIFT_SCHEDULER_H */
-- 
GitLab