From 0039674dc4260ce2203ff4b35a012ea3a1c7a22a Mon Sep 17 00:00:00 2001 From: quasar Date: Mon, 5 Nov 2007 10:26:29 +0000 Subject: [PATCH] updatig simdag prop examples git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@4964 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- examples/simdag/Makefile.am | 3 +- examples/simdag/properties/sd_prop.c | 113 ++++++++-------------- examples/simdag/properties/test_prop.tesh | 49 ++++------ 3 files changed, 62 insertions(+), 103 deletions(-) diff --git a/examples/simdag/Makefile.am b/examples/simdag/Makefile.am index 8bb03f0b5a..3b9a7ac571 100644 --- a/examples/simdag/Makefile.am +++ b/examples/simdag/Makefile.am @@ -10,8 +10,7 @@ AM_CFLAGS = -g EXTRA_DIST = 2clusters.xml \ properties/prop.xml -CLEANFILES = sd_test.trace \ - properties/sd_prop +CLEANFILES = sd_test.trace TESTS_ENVIRONMENT = $(top_builddir)/tools/tesh/tesh diff --git a/examples/simdag/properties/sd_prop.c b/examples/simdag/properties/sd_prop.c index f8d80fd9e4..5816cbf9a2 100755 --- a/examples/simdag/properties/sd_prop.c +++ b/examples/simdag/properties/sd_prop.c @@ -1,3 +1,5 @@ +/* $Id$ */ + #include #include #include "simdag/simdag.h" @@ -6,8 +8,8 @@ #include "xbt/dynar.h" #include "xbt/dict.h" -XBT_LOG_NEW_DEFAULT_CATEGORY(sd_test, - "Logging specific to this SimDag example"); +XBT_LOG_NEW_DEFAULT_CATEGORY(test, + "Property test"); int main(int argc, char **argv) { int i; @@ -35,6 +37,7 @@ int main(int argc, char **argv) { const char *name1 = SD_workstation_get_name(w1); const char *name2 = SD_workstation_get_name(w2); + /* The host properties can be retrived from all interfaces */ xbt_dict_t props; INFO1("Property list for workstation %s", name1); /* Get the property list of the workstation 1 */ @@ -42,19 +45,23 @@ int main(int argc, char **argv) { xbt_dict_cursor_t cursor = NULL; char *key,*data; + /* Trying to set a new property */ + xbt_dict_set(props, xbt_strdup("NewProp"), strdup("newValue"), free); + /* Print the properties of the workstation 1 */ xbt_dict_foreach(props,cursor,key,data) { - INFO2("Property: %s has value: %s",key,data); + INFO2("\tProperty: %s has value: %s",key,data); } /* Try to get a property that does not exist */ - char *noexist=xbt_strdup("Memory"); + char *noexist="NoProp"; const char *value = SD_workstation_get_property_value(w1,noexist); if ( value == NULL) - INFO1("Property: %s is undefined", noexist); + INFO1("\tProperty: %s is undefined", noexist); else - INFO2("Property: %s has value: %s", noexist, value); - + INFO2("\tProperty: %s has value: %s", noexist, value); + + INFO1("Property list for workstation %s", name2); /* Get the property list of the workstation 2 */ props = SD_workstation_get_properties(w2); @@ -62,50 +69,57 @@ int main(int argc, char **argv) { /* Print the properties of the workstation 2 */ xbt_dict_foreach(props,cursor,key,data) { - INFO2("Property: %s on host: %s",key,data); + INFO2("\tProperty: %s on host: %s",key,data); } + /* Modify an existing property test. First check it exists */\ + INFO0("Modify an host existing property"); + char *exist="Hdd"; + value = SD_workstation_get_property_value(w2,exist); + if ( value == NULL) + INFO1("\tProperty: %s is undefined", exist); + else { + INFO2("\tProperty: %s old value: %s", exist, value); + xbt_dict_set(props, exist, strdup("250"), free); + } + + /* Test if we have changed the value */ + value = SD_workstation_get_property_value(w2,exist); + if ( value == NULL) + INFO1("\tProperty: %s is undefined", exist); + else + INFO2("\tProperty: %s new value: %s", exist, value); + + + const double computation_amount1 = 2000000; const double computation_amount2 = 1000000; const double communication_amount12 = 2000000; const double communication_amount21 = 3000000; - INFO3("Computation time for %f flops on %s: %f", computation_amount1, name1, - SD_workstation_get_computation_time(w1, computation_amount1)); - INFO3("Computation time for %f flops on %s: %f", computation_amount2, name2, - SD_workstation_get_computation_time(w2, computation_amount2)); - INFO2("Route between %s and %s:", name1, name2); + /* NOTE: The link properties can be retrieved only from the SimDag interface */ const SD_link_t *route = SD_route_get_list(w1, w2); int route_size = SD_route_get_size(w1, w2); for (i = 0; i < route_size; i++) { - INFO3("\tLink %s: latency = %f, bandwidth = %f", SD_link_get_name(route[i]), - SD_link_get_current_latency(route[i]), SD_link_get_current_bandwidth(route[i])); - + props = SD_link_get_properties(route[i]); xbt_dict_cursor_t cursor = NULL; char *key,*data; /* Print the properties of the current link */ xbt_dict_foreach(props,cursor,key,data) { - INFO3("Link %s property: %s has value: %s",SD_link_get_name(route[i]),key,data); + INFO3("\tLink %s property: %s has value: %s",SD_link_get_name(route[i]),key,data); /* Try to get a property that does not exist */ noexist=xbt_strdup("Other"); value = SD_link_get_property_value(route[i], noexist); if ( value == NULL) - INFO2("Property: %s for link %s is undefined", noexist, SD_link_get_name(route[i])); + INFO2("\tProperty: %s for link %s is undefined", noexist, SD_link_get_name(route[i])); else - INFO3("Link %s property: %s has value: %s",SD_link_get_name(route[i]),noexist,value); + INFO3("\tLink %s property: %s has value: %s",SD_link_get_name(route[i]),noexist,value); } } - INFO2("Route latency = %f, route bandwidth = %f", SD_route_get_current_latency(w1, w2), - SD_route_get_current_bandwidth(w1, w2)); - INFO4("Communication time for %f bytes between %s and %s: %f", communication_amount12, name1, name2, - SD_route_get_communication_time(w1, w2, communication_amount12)); - INFO4("Communication time for %f bytes between %s and %s: %f", communication_amount21, name2, name1, - SD_route_get_communication_time(w2, w1, communication_amount21)); - /* creation of the tasks and their dependencies */ SD_task_t taskA = SD_task_create("Task A", NULL, 10.0); SD_task_t taskB = SD_task_create("Task B", NULL, 40.0); @@ -117,53 +131,6 @@ int main(int argc, char **argv) { 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 */ - - xbt_ex_t ex; - - TRY { - SD_task_dependency_add(NULL, NULL, taskA, taskA); /* shouldn't work and must raise an exception */ - xbt_die("Hey, I can add a dependency between Task A and Task A!"); - } - CATCH (ex) { - if (ex.category != arg_error) - - RETHROW; /* this is a serious error */ - xbt_ex_free(ex); - } - - TRY { - SD_task_dependency_add(NULL, NULL, taskB, taskA); /* shouldn't work and must raise an exception */ - xbt_die("Oh oh, I can add an already existing dependency!"); - } - CATCH (ex) { - if (ex.category != arg_error) - RETHROW; - xbt_ex_free(ex); - } - - TRY { - SD_task_dependency_remove(taskA, taskC); /* shouldn't work and must raise an exception */ - xbt_die("Dude, I can remove an unknown dependency!"); - } - CATCH (ex) { - if (ex.category != arg_error) - RETHROW; - xbt_ex_free(ex); - } - - TRY { - SD_task_dependency_remove(taskC, taskC); /* shouldn't work and must raise an exception */ - xbt_die("Wow, I can remove a dependency between Task C and itself!"); - } - CATCH (ex) { - if (ex.category != arg_error) - RETHROW; - xbt_ex_free(ex); - } - - - /* if everything is ok, no exception is forwarded or rethrown by main() */ /* watch points */ SD_task_watch(taskD, SD_DONE); diff --git a/examples/simdag/properties/test_prop.tesh b/examples/simdag/properties/test_prop.tesh index d7d3ed4811..3df13a4b98 100755 --- a/examples/simdag/properties/test_prop.tesh +++ b/examples/simdag/properties/test_prop.tesh @@ -2,34 +2,27 @@ p Simple test of simdag with properties -$ $SG_TEST_EXENV properties/sd_prop ${srcdir:=.}/properties/prop.xml -> [0.000000] [sd_test/INFO] Property list for workstation C1-00 -> [0.000000] [sd_test/INFO] Property: Hdd has value: 120 -> [0.000000] [sd_test/INFO] Property: Memory is undefined -> [0.000000] [sd_test/INFO] Property list for workstation C1-01 -> [0.000000] [sd_test/INFO] Property: mem on host: 4 -> [0.000000] [sd_test/INFO] Property: Hdd on host: 180 -> [0.000000] [sd_test/INFO] Computation time for 2000000.000000 flops on C1-00: 0.002000 -> [0.000000] [sd_test/INFO] Computation time for 1000000.000000 flops on C1-01: 0.001000 -> [0.000000] [sd_test/INFO] Route between C1-00 and C1-01: -> [0.000000] [sd_test/INFO] Link 6: latency = 0.000100, bandwidth = 125000000.000000 -> [0.000000] [sd_test/INFO] Link 6 property: type has value: Ethernet -> [0.000000] [sd_test/INFO] Property: Other for link 6 is undefined -> [0.000000] [sd_test/INFO] Link 0: latency = 0.000100, bandwidth = 125000000.000000 -> [0.000000] [sd_test/INFO] Link 0 property: type has value: ethernet -> [0.000000] [sd_test/INFO] Property: Other for link 0 is undefined -> [0.000000] [sd_test/INFO] Route latency = 0.000200, route bandwidth = 125000000.000000 -> [0.000000] [sd_test/INFO] Communication time for 2000000.000000 bytes between C1-00 and C1-01: 0.016200 -> [0.000000] [sd_test/INFO] Communication time for 3000000.000000 bytes between C1-01 and C1-00: 0.024200 -> [0.000000] [sd_test/INFO] Estimated time for 'Task D': 1.512000 +$ $SG_TEST_EXENV properties/sd_prop ${srcdir:=.}/../platforms/prop.xml +> [0.000000] [test/INFO] Property list for workstation C1-00 +> [0.000000] [test/INFO] Property: Hdd has value: 120 +> [0.000000] [test/INFO] Property: NewProp has value: newValue +> [0.000000] [test/INFO] Property: NoProp is undefined +> [0.000000] [test/INFO] Property list for workstation C1-01 +> [0.000000] [test/INFO] Property: mem on host: 4 +> [0.000000] [test/INFO] Property: Hdd on host: 180 +> [0.000000] [test/INFO] Modify an existing property +> [0.000000] [test/INFO] Property: Hdd old value: 180 +> [0.000000] [test/INFO] Property: Hdd new value: 250 +> [0.000000] [test/INFO] Estimated time for 'Task D': 0.000000 > [0.000000] [sd_kernel/INFO] Starting simulation... > [0.000000] [sd_kernel/INFO] Executing task 'Task D' -> [3.600200] [sd_kernel/INFO] Task 'Task D' done -> [3.600200] [sd_kernel/INFO] Executing task 'Task B' -> [3.600200] [sd_kernel/INFO] Executing task 'Task C' -> [6.000400] [sd_kernel/INFO] Task 'Task B' done -> [6.000400] [sd_task/INFO] Watch point reached with task 'Task B'! -> [6.000400] [sd_kernel/INFO] Simulation finished -> [6.000400] [sd_test/INFO] Task 'Task D' start time: 0.000000, finish time: 3.600200 -> [6.000400] [sd_test/INFO] Task 'Task B' start time: 3.600200, finish time: 6.000400 +> [0.120000] [sd_kernel/INFO] Task 'Task D' done +> [0.120000] [sd_kernel/INFO] Executing task 'Task B' +> [0.120000] [sd_kernel/INFO] Executing task 'Task C' +> [0.200000] [sd_kernel/INFO] Task 'Task B' done +> [0.200000] [sd_task/INFO] Watch point reached with task 'Task B'! +> [0.200000] [sd_kernel/INFO] Simulation finished +> [0.200000] [test/INFO] Task 'Task D' start time: 0.000000, finish time: 0.120000 +> [0.200000] [test/INFO] Task 'Task B' start time: 0.120000, finish time: 0.200000 + -- 2.20.1