X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0f30f0953fccaf152a09af12d3d9091ab5a687af..3d845df082d79ab89649c1a8829eea201ae01085:/examples/simdag/sd_seq_access.c diff --git a/examples/simdag/sd_seq_access.c b/examples/simdag/sd_seq_access.c index a0eb553e62..e5e947d550 100644 --- a/examples/simdag/sd_seq_access.c +++ b/examples/simdag/sd_seq_access.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2006, 2007, 2008, 2009, 2010. The SimGrid Team. +/* Copyright (c) 2006-2015. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -6,7 +6,7 @@ #include #include -#include "simdag/simdag.h" +#include "simgrid/simdag.h" #include "xbt/ex.h" #include "xbt/log.h" @@ -18,23 +18,17 @@ int main(int argc, char **argv) int i; const char *platform_file; const SD_workstation_t *workstations; - int kind; - SD_task_t task, taskA, taskB, taskC; + SD_task_t taskA, taskB, taskC, taskD; xbt_dynar_t changed_tasks; - SD_workstation_t workstation_list[2]; - double computation_amount[2]; - double communication_amount[4] = { 0 }; - double rate = -1.0; - SD_workstation_t w1, w2; - /* initialisation of SD */ + /* initialization of SD */ SD_init(&argc, argv); /* xbt_log_control_set("sd.thres=debug"); */ if (argc < 2) { - INFO1("Usage: %s platform_file", argv[0]); - INFO1("example: %s sd_platform.xml", argv[0]); + XBT_INFO("Usage: %s platform_file", argv[0]); + XBT_INFO("example: %s sd_platform.xml", argv[0]); exit(1); } @@ -44,88 +38,65 @@ int main(int argc, char **argv) /* Change the access mode of the workstations */ workstations = SD_workstation_get_list(); - w1 = workstations[0]; - w2 = workstations[1]; - for(i=0;i<2; i++){ - SD_workstation_set_access_mode(workstations[i], - SD_WORKSTATION_SEQUENTIAL_ACCESS); - INFO2("Access mode of %s is %s", - SD_workstation_get_name(workstations[i]), - (SD_workstation_get_access_mode(workstations[i]) == - SD_WORKSTATION_SEQUENTIAL_ACCESS) ? "sequential" : "shared"); + for (i = 0; i < 2; i++) { + SD_workstation_dump(workstations[i]); + + SD_workstation_set_access_mode(workstations[i], + SD_WORKSTATION_SEQUENTIAL_ACCESS); + XBT_INFO(" Change access mode of %s to %s", + SD_workstation_get_name(workstations[i]), + (SD_workstation_get_access_mode(workstations[i]) == + SD_WORKSTATION_SEQUENTIAL_ACCESS) ? "sequential" : "shared"); } + /* Well I changed my mind, I want the second workstation to be shared */ + + SD_workstation_set_access_mode(workstations[1], + SD_WORKSTATION_SHARED_ACCESS); + XBT_INFO(" Change access mode of %s to %s", + SD_workstation_get_name(workstations[1]), + (SD_workstation_get_access_mode(workstations[1]) == + SD_WORKSTATION_SEQUENTIAL_ACCESS) ? "sequential" : "shared"); /* creation of the tasks and their dependencies */ - taskA = SD_task_create_comp_seq("Task A", NULL, 2e9); - taskB = SD_task_create_comm_e2e("Task B", NULL, 2e9); - taskC = SD_task_create_comp_seq("Task C", NULL, 1e9); + taskA = SD_task_create_comp_seq("Task A", NULL, 2e10); + taskB = SD_task_create_comm_e2e("Task B", NULL, 2e8); + taskC = SD_task_create_comp_seq("Task C", NULL, 1e10); + taskD = SD_task_create_comp_seq("Task D", NULL, 1e11); - /* if everything is ok, no exception is forwarded or rethrown by main() */ + SD_task_dependency_add("B->C", NULL,taskB, taskC); /* watch points */ SD_task_watch(taskA, SD_RUNNING); SD_task_watch(taskB, SD_RUNNING); SD_task_watch(taskC, SD_RUNNING); SD_task_watch(taskC, SD_DONE); + SD_task_watch(taskD, SD_DONE); /* scheduling parameters */ - workstation_list[0] = w1; - workstation_list[1] = w2; - computation_amount[0] = SD_task_get_amount(taskA); - computation_amount[1] = SD_task_get_amount(taskB); - - communication_amount[1] = SD_task_get_amount(taskC); - communication_amount[2] = 0.0; - - SD_task_schedule(taskA, 1, &w1, - &(computation_amount[0]), SD_SCHED_NO_COST, rate); - SD_task_schedule(taskB, 2, workstation_list, - SD_SCHED_NO_COST, communication_amount, rate); - SD_task_schedule(taskC, 1, &w1, - &(computation_amount[1]), SD_SCHED_NO_COST, rate); + SD_task_schedulel(taskA, 1, workstations[0]); + SD_task_schedulel(taskB, 2, workstations[0], workstations[1]); + SD_task_schedulel(taskC, 1, workstations[1]); + SD_task_schedulel(taskD, 1, workstations[1]); /* let's launch the simulation! */ - while(xbt_dynar_length(changed_tasks = SD_simulate(-1.0))>0){ - for(i=0;i<2; i++){ - task = SD_workstation_get_current_task(workstations[i]); - if (task) - kind = SD_task_get_kind(task); - else{ - INFO1("There is no task running on %s", - SD_workstation_get_name(workstations[i])); - continue; - } - - switch (kind){ - case SD_TASK_COMP_SEQ: - INFO2("%s is currently running on %s (SD_TASK_COMP_SEQ)", - SD_task_get_name(task), - SD_workstation_get_name(workstations[i])); - break; - case SD_TASK_COMM_E2E: - INFO2("%s is currently running on %s (SD_TASK_COMM_E2E)", - SD_task_get_name(task), - SD_workstation_get_name(workstations[i])); - break; - case SD_TASK_NOT_TYPED: - INFO1("Task running on %s has no type", - SD_workstation_get_name(workstations[i])); - break; - default: - ERROR0("Shouldn't be here"); - } + while (!xbt_dynar_is_empty(changed_tasks = SD_simulate(-1.0))) { + XBT_INFO(" Simulation was suspended, check workstation states"); + for (i = 0; i < 2; i++) { + SD_workstation_dump(workstations[i]); } - xbt_dynar_free_container(&changed_tasks); + xbt_dynar_free(&changed_tasks); } + xbt_dynar_free(&changed_tasks); - DEBUG0("Destroying tasks..."); + XBT_DEBUG("Destroying tasks..."); SD_task_destroy(taskA); SD_task_destroy(taskB); SD_task_destroy(taskC); + SD_task_destroy(taskD); - DEBUG0("Tasks destroyed. Exiting SimDag..."); + XBT_DEBUG("Tasks destroyed. Exiting SimDag..."); SD_exit(); return 0;