Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add an example to test availability traces. Weird behavior and runs
authorsuter <frederic.suter@cc.in2p3.fr>
Mon, 17 Dec 2012 22:40:23 +0000 (23:40 +0100)
committersuter <frederic.suter@cc.in2p3.fr>
Mon, 17 Dec 2012 22:40:23 +0000 (23:40 +0100)
forever (thus no tesh yet)

examples/simdag/CMakeLists.txt
examples/simdag/jupiter_power.trace [new file with mode: 0644]
examples/simdag/link1_avail.trace [new file with mode: 0644]
examples/simdag/sd_avail.c [new file with mode: 0644]
examples/simdag/two_hosts.xml [new file with mode: 0644]

index a3525c5..e814baa 100644 (file)
@@ -5,6 +5,7 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
 add_executable(ex_sd_test sd_test.c)
 add_executable(sd_test2 sd_test2.c)
 add_executable(sd_fail sd_fail.c)
+add_executable(sd_avail sd_avail.c)
 add_executable(sd_typed_tasks_test sd_typed_tasks_test.c)
 add_executable(sd_comm_throttling sd_comm_throttling.c)
 add_executable(sd_seq_access sd_seq_access.c)
@@ -16,6 +17,7 @@ if(NOT WIN32)
   target_link_libraries(ex_sd_test simgrid pthread m )
   target_link_libraries(sd_test2 simgrid pthread m )
   target_link_libraries(sd_fail simgrid pthread m )
+  target_link_libraries(sd_avail simgrid pthread m )
   target_link_libraries(sd_typed_tasks_test simgrid pthread m )
   target_link_libraries(sd_comm_throttling simgrid pthread m )
   target_link_libraries(sd_seq_access simgrid pthread m )
@@ -36,6 +38,7 @@ else()
   target_link_libraries(ex_sd_test simgrid)
   target_link_libraries(sd_test2 simgrid)
   target_link_libraries(sd_fail simgrid)
+  target_link_libraries(sd_avail simgrid)
   target_link_libraries(sd_typed_tasks_test simgrid)
   target_link_libraries(sd_comm_throttling simgrid)
   target_link_libraries(sd_seq_access simgrid)
@@ -68,11 +71,13 @@ set(tesh_files
 set(xml_files
   ${xml_files}
   ${CMAKE_CURRENT_SOURCE_DIR}/2clusters.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/two_hosts.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/faulty_host.xml
   PARENT_SCOPE
   )
 set(examples_src
   ${examples_src}
+  ${CMAKE_CURRENT_SOURCE_DIR}/sd_avail.c
   ${CMAKE_CURRENT_SOURCE_DIR}/sd_comm_throttling.c
   ${CMAKE_CURRENT_SOURCE_DIR}/sd_fail.c
   ${CMAKE_CURRENT_SOURCE_DIR}/sd_seq_access.c
@@ -92,5 +97,7 @@ set(bin_files
 set(txt_files
   ${txt_files}
   ${CMAKE_CURRENT_SOURCE_DIR}/faulty_host.trace
+  ${CMAKE_CURRENT_SOURCE_DIR}/jupiter_power.trace
+  ${CMAKE_CURRENT_SOURCE_DIR}/link1_avail.trace
   PARENT_SCOPE
   )
diff --git a/examples/simdag/jupiter_power.trace b/examples/simdag/jupiter_power.trace
new file mode 100644 (file)
index 0000000..8550f51
--- /dev/null
@@ -0,0 +1,2 @@
+0.0 0.5
+2.0 1.0
\ No newline at end of file
diff --git a/examples/simdag/link1_avail.trace b/examples/simdag/link1_avail.trace
new file mode 100644 (file)
index 0000000..0514220
--- /dev/null
@@ -0,0 +1,3 @@
+PERIODICITY 6.0
+2.0 62500000
+4.0 31250000
diff --git a/examples/simdag/sd_avail.c b/examples/simdag/sd_avail.c
new file mode 100644 (file)
index 0000000..bef36e9
--- /dev/null
@@ -0,0 +1,109 @@
+/* Copyright (c) 2012. 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 <stdio.h>
+#include <stdlib.h>
+#include "simdag/simdag.h"
+#include "xbt/ex.h"
+#include "xbt/log.h"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(sd_avail,
+                             "Logging specific to this SimDag example");
+
+/* Test of dynamic availability traces
+ * Scenario:
+ *  - A chain of tasks: t1 -> c1 -> t2 -> c2 -> t3 -> c3 -> t4 alternatively
+ *    scheduled across two workstations (Tremblay and Jupiter) connected by a
+ *    single link (link1)
+ *  - Make the characteristics of the resources change across time
+ *      Jupiter
+ *         [0.000000 -> 2.000000[ runs at half speed: 12500000
+ *         [2.000000 -> end[      runs at full speed: 25000000
+ *      Tremblay
+ *         [0.000000 -> 1.000000[ runs at half speed: 15000000
+ *         [1.000000 -> 4.000000[ runs at full speed: 25000000
+ *         [4.000000 -> 6.000000[ runs at half speed: 12500000
+ *         then loop back.
+ *      link1
+ *         [0.000000 -> 2.000000[ bandwidth = 125000000
+ *         [2.000000 -> 4.000000[ bandwidth = 62500000
+ *         [4.000000 -> 6.000000[ bandwidth = 31250000
+ *         then loop back.
+ *  - Adjust tasks' amounts to have comprehensive execution times
+ *      t1: 25000000 flops, should last 2 seconds
+ *      c1: 125000000 bytes, should last 1.0001 seconds
+ *      t2: 25000000 flops, should last 1 second
+ *      c2: 62500000 bytes, should last 1.0001 seconds
+ *      t3: 25000000 flops, should last 1 second
+ *      c3: 31250000 bytes, should last 1.0001 seconds
+ *      t4:
+ */
+
+int main(int argc, char **argv)
+{
+  unsigned int ctr;
+  const SD_workstation_t *workstations;
+  SD_task_t t1, c1, t2, c2, t3, c3, t4, task;
+  xbt_dynar_t changed_tasks;
+
+  SD_init(&argc, argv);
+  SD_create_environment(argv[1]);
+  workstations = SD_workstation_get_list();
+
+  t1 = SD_task_create_comp_seq("t1", NULL, 25000000);
+  c1 = SD_task_create_comm_e2e("c1", NULL, 125000000);
+  t2 = SD_task_create_comp_seq("t2", NULL, 25000000);
+  c2 = SD_task_create_comm_e2e("c2", NULL, 62500000);
+  t3 = SD_task_create_comp_seq("t3", NULL, 25000000);
+  c3 = SD_task_create_comm_e2e("c3", NULL, 31250000);
+  /* Should last 0.5 second */
+  t4 = SD_task_create_comp_seq("t4", NULL, 25000000);
+
+  /* Add dependencies: t1->c1->t2->c2->t3 */
+  SD_task_dependency_add(NULL, NULL, t1, c1);
+  SD_task_dependency_add(NULL, NULL, c1, t2);
+  SD_task_dependency_add(NULL, NULL, t2, c2);
+  SD_task_dependency_add(NULL, NULL, c2, t3);
+  SD_task_dependency_add(NULL, NULL, t3, c3);
+  SD_task_dependency_add(NULL, NULL, c3, t4);
+
+  /* Schedule tasks t1 and w3 on first host, t2 on second host */
+  /* Transfers are auto-scheduled */
+  SD_task_schedulel(t1, 1, workstations[0]);
+  SD_task_schedulel(t2, 1, workstations[1]);
+  SD_task_schedulel(t3, 1, workstations[0]);
+  SD_task_schedulel(t4, 1, workstations[1]);
+
+  /* Add some watchpoint upon task completion */
+  SD_task_watch(t1, SD_DONE);
+  SD_task_watch(c1, SD_DONE);
+  SD_task_watch(t2, SD_DONE);
+  SD_task_watch(c2, SD_DONE);
+  SD_task_watch(t3, SD_DONE);
+  SD_task_watch(c3, SD_DONE);
+  SD_task_watch(t4, SD_DONE);
+
+  while (!xbt_dynar_is_empty((changed_tasks = SD_simulate(-1.0)))) {    
+    XBT_INFO("link1: bw=%.0f, lat=%f",
+             SD_route_get_current_bandwidth(workstations[0], workstations[1]),
+             SD_route_get_current_latency(workstations[0], workstations[1]));
+    XBT_INFO("Jupiter: power=%.0f",
+             SD_workstation_get_power(workstations[0])*
+             SD_workstation_get_available_power(workstations[0]));
+    XBT_INFO("Tremblay: power=%.0f",
+             SD_workstation_get_power(workstations[1])*
+             SD_workstation_get_available_power(workstations[1]));
+    xbt_dynar_foreach(changed_tasks, ctr, task) {
+      XBT_INFO("Task '%s' start time: %f, finish time: %f",
+           SD_task_get_name(task),
+           SD_task_get_start_time(task), SD_task_get_finish_time(task));
+      if (SD_task_get_state(task)==SD_DONE)
+        SD_task_destroy(task);
+    }
+  }
+  SD_exit();
+  return 0;
+}
diff --git a/examples/simdag/two_hosts.xml b/examples/simdag/two_hosts.xml
new file mode 100644 (file)
index 0000000..408737f
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version='1.0'?>
+ <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
+ <platform version="3">
+   <AS  id="AS0"  routing="Full">
+     <host id="Tremblay" power="25000000"/>
+     <host id="Jupiter" power="25000000" 
+           availability_file="jupiter_power.trace"/>
+
+     <link id="1" bandwidth="1.25E8" latency="1.0E-4" 
+           bandwidth_file="link1_avail.trace"/>
+     
+     <route src="Tremblay" dst="Jupiter">
+       <link_ctn id="1"/>
+     </route>
+   </AS>
+
+   <trace id="Tremblay_power" periodicity="6.0">
+     1.0 0.5
+     4.0 1.0
+   </trace>
+
+   <trace_connect trace="Tremblay_power" element="Tremblay" kind="POWER"/>
+</platform>