Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add a test of the creation of a parallel task graph from a dot file
authorsuter <frederic.suter@cc.in2p3.fr>
Thu, 17 Jan 2013 15:56:28 +0000 (16:56 +0100)
committersuter <frederic.suter@cc.in2p3.fr>
Thu, 17 Jan 2013 15:57:49 +0000 (16:57 +0100)
examples/simdag/dot/CMakeLists.txt
examples/simdag/dot/ptg.dot [new file with mode: 0644]
examples/simdag/dot/ptg_test.c [new file with mode: 0644]

index eaabdf8..d541688 100644 (file)
@@ -5,11 +5,13 @@ if(HAVE_GRAPHVIZ)
 
   #add_executable(<name_of_target> <src list>)
   add_executable(dot_test dot_test.c)
 
   #add_executable(<name_of_target> <src list>)
   add_executable(dot_test dot_test.c)
+  add_executable(ptg_test ptg_test.c)
   add_executable(simulate_dot simulate_dot.c)
   add_executable(dot_test2 dot_test2.c)
 
   if(NOT WIN32)
     target_link_libraries(dot_test simgrid pthread m)  #target_link_libraries(<name_of_targe> <dependencies>)
   add_executable(simulate_dot simulate_dot.c)
   add_executable(dot_test2 dot_test2.c)
 
   if(NOT WIN32)
     target_link_libraries(dot_test simgrid pthread m)  #target_link_libraries(<name_of_targe> <dependencies>)
+    target_link_libraries(ptg_test simgrid pthread m)   #target_link_libraries(<name_of_targe> <dependencies>)
     target_link_libraries(simulate_dot simgrid pthread m)      #target_link_libraries(<name_of_targe> <dependencies>)
     target_link_libraries(dot_test2 simgrid pthread m)         #target_link_libraries(<name_of_targe> <dependencies>)
 
     target_link_libraries(simulate_dot simgrid pthread m)      #target_link_libraries(<name_of_targe> <dependencies>)
     target_link_libraries(dot_test2 simgrid pthread m)         #target_link_libraries(<name_of_targe> <dependencies>)
 
@@ -20,6 +22,7 @@ if(HAVE_GRAPHVIZ)
 
   else()
     target_link_libraries(dot_test simgrid)    #target_link_libraries(<name_of_targe> <dependencies>)
 
   else()
     target_link_libraries(dot_test simgrid)    #target_link_libraries(<name_of_targe> <dependencies>)
+    target_link_libraries(ptg_test simgrid)   #target_link_libraries(<name_of_targe> <dependencies>)
     target_link_libraries(simulate_dot simgrid)        #target_link_libraries(<name_of_targe> <dependencies>)
     target_link_libraries(dot_test2 simgrid)   #target_link_libraries(<name_of_targe> <dependencies>)
     set_directory_properties(
     target_link_libraries(simulate_dot simgrid)        #target_link_libraries(<name_of_targe> <dependencies>)
     target_link_libraries(dot_test2 simgrid)   #target_link_libraries(<name_of_targe> <dependencies>)
     set_directory_properties(
@@ -40,6 +43,7 @@ set(xml_files
 set(examples_src
   ${examples_src}
   ${CMAKE_CURRENT_SOURCE_DIR}/dot_test.c
 set(examples_src
   ${examples_src}
   ${CMAKE_CURRENT_SOURCE_DIR}/dot_test.c
+  ${CMAKE_CURRENT_SOURCE_DIR}/ptg_test.c
   ${CMAKE_CURRENT_SOURCE_DIR}/dot_test2.c
   ${CMAKE_CURRENT_SOURCE_DIR}/simulate_dot.c
   PARENT_SCOPE
   ${CMAKE_CURRENT_SOURCE_DIR}/dot_test2.c
   ${CMAKE_CURRENT_SOURCE_DIR}/simulate_dot.c
   PARENT_SCOPE
@@ -54,5 +58,6 @@ set(txt_files
   ${CMAKE_CURRENT_SOURCE_DIR}/dag_with_cycle.dot
   ${CMAKE_CURRENT_SOURCE_DIR}/dag_with_good_schedule.dot
   ${CMAKE_CURRENT_SOURCE_DIR}/dag.dot
   ${CMAKE_CURRENT_SOURCE_DIR}/dag_with_cycle.dot
   ${CMAKE_CURRENT_SOURCE_DIR}/dag_with_good_schedule.dot
   ${CMAKE_CURRENT_SOURCE_DIR}/dag.dot
+  ${CMAKE_CURRENT_SOURCE_DIR}/ptg.dot
   PARENT_SCOPE
   )
   PARENT_SCOPE
   )
diff --git a/examples/simdag/dot/ptg.dot b/examples/simdag/dot/ptg.dot
new file mode 100644 (file)
index 0000000..4804bde
--- /dev/null
@@ -0,0 +1,10 @@
+digraph G {
+  c1 [size="1e9", alpha="0.2"];
+  c2 [size="5e9", alpha="0.5"];
+  c3 [size="2e9"];
+  root->c1 [size="2e8"];
+  root->c2 [size="1e8"];
+  c1->c3   [size="5e8"];
+  c2->c3   [size="-1."];
+  c3->end  [size="2e8"];
+}
diff --git a/examples/simdag/dot/ptg_test.c b/examples/simdag/dot/ptg_test.c
new file mode 100644 (file)
index 0000000..f206fff
--- /dev/null
@@ -0,0 +1,81 @@
+/* Copyright (c) 2013. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "simdag/simdag.h"
+#include "xbt/log.h"
+#include "xbt/ex.h"
+#include <string.h>
+#include <libgen.h>
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(test,
+                             "Logging specific to this SimDag example");
+
+/* simple test trying to load a Parallel Task Graph (PTG) as a DOT file.    */
+int main(int argc, char **argv){
+  xbt_dynar_t dot;
+  unsigned int cursor;
+  SD_task_t task;
+
+  /* initialization of SD */
+  SD_init(&argc, argv);
+
+  /* Check our arguments */
+  if (argc < 2) {
+    XBT_INFO("Usage: %s platform_file dot_file ", argv[0]);
+    XBT_INFO("example: %s ../2clusters.xml ptg.dot", argv[0]);
+    exit(1);
+  }
+
+  /* creation of the environment */
+  SD_create_environment(argv[1]);
+
+  /* load the DOT file */
+  dot = SD_PTG_dotload(argv[2]);
+  if(dot == NULL){
+    SD_exit();
+    xbt_die("No dot load may be you have a cycle in your graph");
+  }
+
+  /* Display all the tasks */
+  XBT_INFO
+      ("------------------- Display all tasks of the loaded DAG ---------------------------");
+  xbt_dynar_foreach(dot, cursor, task) {
+    SD_task_dump(task);
+  }
+
+  FILE *dotout = fopen("dot.dot", "w");
+  fprintf(dotout, "digraph A {\n");
+  xbt_dynar_foreach(dot, cursor, task) {
+    SD_task_dotty(task, dotout);
+  }
+  fprintf(dotout, "}\n");
+  fclose(dotout);
+
+  /* Schedule them all on all the first workstation */
+  XBT_INFO("------------------- Schedule tasks ---------------------------");
+  const SD_workstation_t *ws_list = SD_workstation_get_list();
+  int count = SD_workstation_get_number();
+  xbt_dynar_foreach(dot, cursor, task) {
+    if (SD_task_get_kind(task) == SD_TASK_COMP_PAR_AMDAHL) {
+        SD_task_schedulev(task, count, ws_list);
+    }
+  }
+
+  XBT_INFO
+      ("------------------- Run the schedule ---------------------------");
+  SD_simulate(-1);
+  XBT_INFO("Makespan: %f", SD_get_clock());
+  xbt_dynar_foreach(dot, cursor, task) {
+    SD_task_destroy(task);
+  }
+  xbt_dynar_free_container(&dot);
+
+  /* exit */
+  SD_exit();
+  return 0;
+}