From: suter Date: Thu, 17 Jan 2013 15:56:28 +0000 (+0100) Subject: add a test of the creation of a parallel task graph from a dot file X-Git-Tag: v3_9_rc1~79 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/c8b6d6839f2cd40cdb9b86c52c5bdacd2b271166?ds=sidebyside add a test of the creation of a parallel task graph from a dot file --- diff --git a/examples/simdag/dot/CMakeLists.txt b/examples/simdag/dot/CMakeLists.txt index eaabdf8e40..d541688b01 100644 --- a/examples/simdag/dot/CMakeLists.txt +++ b/examples/simdag/dot/CMakeLists.txt @@ -5,11 +5,13 @@ if(HAVE_GRAPHVIZ) #add_executable( ) 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( ) + target_link_libraries(ptg_test simgrid pthread m) #target_link_libraries( ) target_link_libraries(simulate_dot simgrid pthread m) #target_link_libraries( ) target_link_libraries(dot_test2 simgrid pthread m) #target_link_libraries( ) @@ -20,6 +22,7 @@ if(HAVE_GRAPHVIZ) else() target_link_libraries(dot_test simgrid) #target_link_libraries( ) + target_link_libraries(ptg_test simgrid) #target_link_libraries( ) target_link_libraries(simulate_dot simgrid) #target_link_libraries( ) target_link_libraries(dot_test2 simgrid) #target_link_libraries( ) set_directory_properties( @@ -40,6 +43,7 @@ set(xml_files 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 @@ -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}/ptg.dot PARENT_SCOPE ) diff --git a/examples/simdag/dot/ptg.dot b/examples/simdag/dot/ptg.dot new file mode 100644 index 0000000000..4804bdec8d --- /dev/null +++ b/examples/simdag/dot/ptg.dot @@ -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 index 0000000000..f206ffff98 --- /dev/null +++ b/examples/simdag/dot/ptg_test.c @@ -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 +#include +#include "simdag/simdag.h" +#include "xbt/log.h" +#include "xbt/ex.h" +#include +#include + +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; +}