Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update SimDag example
authorthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 10 Jul 2006 08:53:49 +0000 (08:53 +0000)
committerthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 10 Jul 2006 08:53:49 +0000 (08:53 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2525 48e7efb5-ca39-0410-a469-dd3cf9ba447f

examples/simdag/Makefile.am
examples/simdag/sd_test.c
examples/simdag/small_platform.xml [new file with mode: 0644]

index b29a672..db872d4 100644 (file)
@@ -1,8 +1,11 @@
 INCLUDES= -I$(top_srcdir)/include
 AM_CFLAGS=-g
 INCLUDES= -I$(top_srcdir)/include
 AM_CFLAGS=-g
+EXTRA_DIST= small_platform.xml
 
 
-#TESTS=run_msg_test
-check_PROGRAMS=sd_test
+CLEANFILES=sd_test.trace
+
+TESTS=test_simdag
+check_PROGRAMS=sd_test small_platform.xml
 
 sd_test_SOURCES= sd_test.c
 sd_test_LDADD= $(top_builddir)/src/libsimgrid.la
 
 sd_test_SOURCES= sd_test.c
 sd_test_LDADD= $(top_builddir)/src/libsimgrid.la
index c104dc3..d0eca65 100644 (file)
@@ -9,24 +9,21 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(sd_test,
 
 int main(int argc, char **argv) {
   int i;
 
 int main(int argc, char **argv) {
   int i;
-  
+
   /* initialisation of SD */
   SD_init(&argc, argv);
 
   /* initialisation of SD */
   SD_init(&argc, argv);
 
-/*   xbt_log_control_set("sd_test.thres=debug"); */
-/*   xbt_log_control_set("sd.thres=debug"); */
-  
   if (argc < 2) {
   if (argc < 2) {
-     INFO1("Usage: %s platform_file", argv[0]);
-     INFO1("example: %s sd_platform.xml", argv[0]);
-     exit(1);
+    INFO1("Usage: %s platform_file", argv[0]);
+    INFO1("example: %s sd_platform.xml", argv[0]);
+    exit(1);
   }
 
   /* creation of the environment */
   }
 
   /* creation of the environment */
-  char * platform_file = argv[1];
+  const char * platform_file = argv[0];
   SD_create_environment(platform_file);
 
   SD_create_environment(platform_file);
 
-  /* test the estimation functions (use small_platform.xml) */
+  /* test the estimation functions */
   const SD_workstation_t *workstations = SD_workstation_get_list();
   SD_workstation_t w1 = workstations[0];
   SD_workstation_t w2 = workstations[1];
   const SD_workstation_t *workstations = SD_workstation_get_list();
   SD_workstation_t w1 = workstations[0];
   SD_workstation_t w2 = workstations[1];
@@ -62,16 +59,57 @@ int main(int argc, char **argv) {
   SD_task_t taskC = SD_task_create("Task C", NULL, 30.0);
   SD_task_t taskD = SD_task_create("Task D", NULL, 60.0);
   
   SD_task_t taskC = SD_task_create("Task C", NULL, 30.0);
   SD_task_t taskD = SD_task_create("Task D", NULL, 60.0);
   
+
   SD_task_dependency_add(NULL, NULL, taskB, taskA);
   SD_task_dependency_add(NULL, NULL, taskC, taskA);
   SD_task_dependency_add(NULL, NULL, taskD, taskB);
   SD_task_dependency_add(NULL, NULL, taskD, taskC);
   SD_task_dependency_add(NULL, NULL, taskB, taskA);
   SD_task_dependency_add(NULL, NULL, taskC, taskA);
   SD_task_dependency_add(NULL, NULL, taskD, taskB);
   SD_task_dependency_add(NULL, NULL, taskD, taskC);
-  /*  SD_task_dependency_add(NULL, NULL, taskA, taskD); /\* deadlock *\/ */
+  /*  SD_task_dependency_add(NULL, NULL, taskA, taskD); /\* deadlock */
+
+  xbt_ex_t ex;
+
+  TRY {
+    SD_task_dependency_add(NULL, NULL, taskA, taskA); /* shouldn't work and must raise an exception */
+    xbt_assert0(0, "Hey, I can add a dependency between Task A and Task A!");
+  }
+  CATCH (ex) {
+  }
+  
+  TRY {
+    SD_task_dependency_add(NULL, NULL, taskA, taskB); /* shouldn't work and must raise an exception */
+    xbt_assert0(0, "Oh oh, I can add an already existing dependency!");
+  }
+  CATCH (ex) {
+  }
+
+  SD_task_dependency_remove(taskA, taskB);
+
+  TRY {
+    SD_task_dependency_remove(taskC, taskA); /* shouldn't work and must raise an exception */
+    xbt_assert0(0, "Dude, I can remove an unknown dependency!");
+  }
+  CATCH (ex) {
+  }
+
+  TRY {
+    SD_task_dependency_remove(taskC, taskC); /* shouldn't work and must raise an exception */
+    xbt_assert0(0, "Wow, I can remove a dependency between Task C and itself!");
+  }
+  CATCH (ex) {
+  }
+
+
+  /* if everything is ok, no exception is forwarded or rethrown by main() */
+
+  /* watch points */
+  SD_task_watch(taskD, SD_DONE);
+  SD_task_watch(taskB, SD_DONE);
+  SD_task_unwatch(taskD, SD_DONE);
+
 
   /* scheduling parameters */
 
   const int workstation_number = 2;
 
   /* scheduling parameters */
 
   const int workstation_number = 2;
-  /*  const SD_workstation_t *workstation_list = SD_workstation_get_list();*/
   const SD_workstation_t workstation_list[] = {w1, w2};
   double computation_amount[] = {computation_amount1, computation_amount2};
   double communication_amount[] =
   const SD_workstation_t workstation_list[] = {w1, w2};
   double computation_amount[] = {computation_amount1, computation_amount2};
   double communication_amount[] =
@@ -98,42 +136,15 @@ int main(int argc, char **argv) {
   SD_task_schedule(taskD, workstation_number, workstation_list,
                   computation_amount, communication_amount, rate);
 
   SD_task_schedule(taskD, workstation_number, workstation_list,
                   computation_amount, communication_amount, rate);
 
-  SD_task_watch(taskC, SD_DONE);
-
   SD_task_t *changed_tasks;
 
   SD_task_t *changed_tasks;
 
-  changed_tasks = SD_simulate(0.001);
+  changed_tasks = SD_simulate(-1.0);
+  xbt_assert0(changed_tasks[0] == taskD &&
+             changed_tasks[1] == taskB &&
+             changed_tasks[2] == taskC &&
+             changed_tasks[3] == NULL,
+             "Unexpected simulation results");
   
   
-  while (changed_tasks[0] != NULL) {
-    INFO0("Tasks whose state has changed:");
-    i = 0;
-    while(changed_tasks[i] != NULL) {
-      switch (SD_task_get_state(changed_tasks[i])) {
-      case SD_SCHEDULED:
-       INFO1("%s is scheduled.", SD_task_get_name(changed_tasks[i]));
-       break;
-      case SD_READY:
-       INFO1("%s is ready.", SD_task_get_name(changed_tasks[i]));
-       break;
-      case SD_RUNNING:
-       INFO1("%s is running.", SD_task_get_name(changed_tasks[i]));
-       break;
-      case SD_DONE:
-       INFO1("%s is done.", SD_task_get_name(changed_tasks[i]));
-       break;
-      case SD_FAILED:
-       INFO1("%s is failed.", SD_task_get_name(changed_tasks[i]));
-       break;
-      default:
-       INFO1("Unknown status for %s", SD_task_get_name(changed_tasks[i]));
-       break;
-      }
-      i++;
-    }
-    xbt_free(changed_tasks);
-    changed_tasks = SD_simulate(100);
-  }
-
   xbt_free(changed_tasks);
 
   DEBUG0("Destroying tasks...");
   xbt_free(changed_tasks);
 
   DEBUG0("Destroying tasks...");
@@ -148,3 +159,4 @@ int main(int argc, char **argv) {
   SD_exit();
   return 0;
 }
   SD_exit();
   return 0;
 }
+
diff --git a/examples/simdag/small_platform.xml b/examples/simdag/small_platform.xml
new file mode 100644 (file)
index 0000000..58b45d9
--- /dev/null
@@ -0,0 +1,90 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform_description SYSTEM "surfxml.dtd">
+<platform_description version="1">
+  <!-- ljlkj -->
+  <cpu name="Tremblay" power="98095000"/>
+  <cpu name="Jupiter" power="76296000"/>
+  <cpu name="Fafard" power="76296000"/>
+  <cpu name="Ginette" power="48492000"/>
+  <cpu name="Bourassa" power="48492000"/>
+  <network_link name="6" bandwidth="41279125" latency="5.9904e-05"/>
+  <network_link name="11" bandwidth="252750" latency="0.00570455"/>
+  <network_link name="3" bandwidth="34285625" latency="0.000514433"/>
+  <network_link name="7" bandwidth="11618875" latency="0.00018998"/>
+  <network_link name="9" bandwidth="7209750" latency="0.001461517"/>
+  <network_link name="12" bandwidth="1792625" latency="0.007877863"/>
+  <network_link name="2" bandwidth="118682500" latency="0.000136931"/>
+  <network_link name="8" bandwidth="8158000" latency="0.000270544"/>
+  <network_link name="1" bandwidth="34285625" latency="0.000514433"/>
+  <network_link name="4" bandwidth="10099625" latency="0.00047978"/>
+  <network_link name="0" bandwidth="41279125" latency="5.9904e-05"/>
+  <network_link name="10" bandwidth="4679750" latency="0.000848712"/>
+  <network_link name="5" bandwidth="27946250" latency="0.000278066"/>
+  <network_link name="loopback_FATPIPE" bandwidth="10000000" latency="0.1" sharing_policy="FATPIPE"/>
+  <network_link name="loopback" bandwidth="498000000" latency="0.000015"/>
+  <route src="Tremblay" dst="Tremblay"><route_element name="loopback"/></route>
+  <route src="Jupiter" dst="Jupiter"><route_element name="loopback"/></route>
+  <route src="Fafard" dst="Fafard"><route_element name="loopback"/></route>
+  <route src="Ginette" dst="Ginette"><route_element name="loopback"/></route>
+  <route src="Bourassa" dst="Bourassa"><route_element name="loopback"/></route>
+  <route src="Tremblay" dst="Jupiter">
+    <route_element name="9"/>
+  </route>
+  <route src="Tremblay" dst="Fafard">
+    <route_element name="4"/><route_element name="3"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="8"/>
+  </route>
+  <route src="Tremblay" dst="Ginette">
+    <route_element name="4"/><route_element name="3"/><route_element name="5"/>
+  </route>
+  <route src="Tremblay" dst="Bourassa">
+    <route_element name="4"/><route_element name="3"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="6"/><route_element name="7"/>
+  </route>
+  <route src="Jupiter" dst="Tremblay">
+    <route_element name="9"/>
+  </route>
+  <route src="Jupiter" dst="Fafard">
+    <route_element name="9"/><route_element name="4"/><route_element name="3"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="8"/>
+  </route>
+  <route src="Jupiter" dst="Ginette">
+    <route_element name="9"/><route_element name="4"/><route_element name="3"/><route_element name="5"/>
+  </route>
+  <route src="Jupiter" dst="Bourassa">
+    <route_element name="9"/><route_element name="4"/><route_element name="3"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="6"/><route_element name="7"/>
+  </route>
+  <route src="Fafard" dst="Tremblay">
+    <route_element name="8"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="3"/><route_element name="4"/>
+  </route>
+  <route src="Fafard" dst="Jupiter">
+    <route_element name="8"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="3"/><route_element name="4"/><route_element name="9"/>
+  </route>
+  <route src="Fafard" dst="Ginette">
+    <route_element name="8"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="5"/>
+  </route>
+  <route src="Fafard" dst="Bourassa">
+    <route_element name="8"/><route_element name="6"/><route_element name="7"/>
+  </route>
+  <route src="Ginette" dst="Tremblay">
+    <route_element name="5"/><route_element name="3"/><route_element name="4"/>
+  </route>
+  <route src="Ginette" dst="Jupiter">
+    <route_element name="5"/><route_element name="3"/><route_element name="4"/><route_element name="9"/>
+  </route>
+  <route src="Ginette" dst="Fafard">
+    <route_element name="5"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="8"/>
+  </route>
+  <route src="Ginette" dst="Bourassa">
+    <route_element name="5"/><route_element name="2"/><route_element name="0"/><route_element name="1"/><route_element name="6"/><route_element name="7"/>
+  </route>
+  <route src="Bourassa" dst="Tremblay">
+    <route_element name="7"/><route_element name="6"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="3"/><route_element name="4"/>
+  </route>
+  <route src="Bourassa" dst="Jupiter">
+    <route_element name="7"/><route_element name="6"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="3"/><route_element name="4"/><route_element name="9"/>
+  </route>
+  <route src="Bourassa" dst="Fafard">
+    <route_element name="7"/><route_element name="6"/><route_element name="8"/>
+  </route>
+  <route src="Bourassa" dst="Ginette">
+    <route_element name="7"/><route_element name="6"/><route_element name="1"/><route_element name="0"/><route_element name="2"/><route_element name="5"/>
+  </route>
+</platform_description>