From: Frederic Suter Date: Thu, 7 Jul 2016 09:03:34 +0000 (+0200) Subject: move from vector to set X-Git-Tag: v3_14~785 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/c62085625aa523c18f1f729633f24e99624b4c82 move from vector to set + these were sets anyway + all the bugs disappear + code is simpler - output order change => revalidate 2 tesh files --- diff --git a/examples/simdag/typed_tasks/sd_typed_tasks.tesh b/examples/simdag/typed_tasks/sd_typed_tasks.tesh index 3246a800e2..cc9657f0f9 100644 --- a/examples/simdag/typed_tasks/sd_typed_tasks.tesh +++ b/examples/simdag/typed_tasks/sd_typed_tasks.tesh @@ -3,9 +3,9 @@ p Usage test of simdag's typed tasks $ $SG_TEST_EXENV ./typed_tasks/sd_typed_tasks ${srcdir:=.}/../platforms/two_clusters.xml > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks. -> [2.080600] [sd_typed_tasks_test/INFO] Task 'Seq. comp. 1' start time: 0.000000, finish time: 1.000000 -> [2.080600] [sd_typed_tasks_test/INFO] Task 'Par. Comp. 1' start time: 0.000000, finish time: 0.400000 > [2.080600] [sd_typed_tasks_test/INFO] Task 'Par. Comp. 3' start time: 0.000000, finish time: 0.400000 +> [2.080600] [sd_typed_tasks_test/INFO] Task 'Par. Comp. 1' start time: 0.000000, finish time: 0.400000 +> [2.080600] [sd_typed_tasks_test/INFO] Task 'Seq. comp. 1' start time: 0.000000, finish time: 1.000000 > [2.080600] [sd_typed_tasks_test/INFO] Task 'MxN redist' start time: 0.400000, finish time: 0.721600 > [2.080600] [sd_typed_tasks_test/INFO] Task 'Par. Comp. 2' start time: 0.721600, finish time: 0.921600 > [2.080600] [sd_typed_tasks_test/INFO] Task 'E2E comm.' start time: 1.000000, finish time: 1.080600 diff --git a/src/simdag/sd_daxloader.cpp b/src/simdag/sd_daxloader.cpp index dc9eb44f66..9d542db6a0 100644 --- a/src/simdag/sd_daxloader.cpp +++ b/src/simdag/sd_daxloader.cpp @@ -340,7 +340,7 @@ void STag_dax__uses(void) SD_task_t file = static_cast(xbt_dict_get_or_null(files, A_dax__uses_file)); if (file == nullptr) { file = SD_task_create_comm_e2e(A_dax__uses_file, nullptr, size); - sd_global->initial_task_set->pop_back(); + sd_global->initial_tasks->erase(file); xbt_dict_set(files, A_dax__uses_file, file, nullptr); } else { if (SD_task_get_amount(file) != size) { diff --git a/src/simdag/sd_global.cpp b/src/simdag/sd_global.cpp index 0a88d5ceea..d6237efc6f 100644 --- a/src/simdag/sd_global.cpp +++ b/src/simdag/sd_global.cpp @@ -40,9 +40,9 @@ void SD_init(int *argc, char **argv) sd_global->task_mallocator=xbt_mallocator_new(65536, SD_task_new_f, SD_task_free_f, SD_task_recycle_f); - sd_global->initial_task_set = new std::vector(); - sd_global->executable_task_set = new std::vector(); - sd_global->completed_task_set = new std::vector(); + sd_global->initial_tasks = new std::set(); + sd_global->executable_tasks = new std::set(); + sd_global->completed_tasks = new std::set(); sd_global->return_set = xbt_dynar_new(sizeof(SD_task_t), nullptr); surf_init(argc, argv); @@ -129,8 +129,9 @@ xbt_dynar_t SD_simulate(double how_long) { xbt_dynar_reset(sd_global->return_set); /* explore the runnable tasks */ - for (unsigned int i =0; i < sd_global->executable_task_set->size(); i++) { - task = sd_global->executable_task_set->at(i); + for (std::set::iterator it=sd_global->executable_tasks->begin(); + it!=sd_global->executable_tasks->end(); ++it){ + task = *it; XBT_VERB("Executing task '%s'", SD_task_get_name(task)); SD_task_run(task); xbt_dynar_push(sd_global->return_set, &task); @@ -229,13 +230,14 @@ xbt_dynar_t SD_simulate(double how_long) { } } - if (!sd_global->watch_point_reached && how_long<0 && !sd_global->initial_task_set->empty()) { + if (!sd_global->watch_point_reached && how_long<0 && !sd_global->initial_tasks->empty()) { XBT_WARN("Simulation is finished but %lu tasks are still not done", - sd_global->initial_task_set->size()); + sd_global->initial_tasks->size()); static const char* state_names[] = { "SD_NOT_SCHEDULED", "SD_SCHEDULABLE", "SD_SCHEDULED", "SD_RUNNABLE", "SD_RUNNING", "SD_DONE","SD_FAILED" }; - for (unsigned int i=0; i< sd_global->initial_task_set->size() ; i++){ - task = sd_global->initial_task_set->at(i); + for (std::set::iterator it=sd_global->initial_tasks->begin(); + it!=sd_global->initial_tasks->end(); ++it){ + task = *it; XBT_WARN("%s is in %s state", SD_task_get_name(task), state_names[SD_task_get_state(task)]); } } @@ -269,9 +271,9 @@ void SD_exit() #endif xbt_mallocator_free(sd_global->task_mallocator); - delete sd_global->initial_task_set; - delete sd_global->executable_task_set; - delete sd_global->completed_task_set; + delete sd_global->initial_tasks; + delete sd_global->executable_tasks; + delete sd_global->completed_tasks; xbt_dynar_free_container(&(sd_global->return_set)); xbt_free(sd_global); sd_global = nullptr; diff --git a/src/simdag/sd_task.cpp b/src/simdag/sd_task.cpp index 28df855ef5..40c8d702b4 100644 --- a/src/simdag/sd_task.cpp +++ b/src/simdag/sd_task.cpp @@ -63,7 +63,7 @@ void SD_task_recycle_f(void *t) /* Reset the content */ task->kind = SD_TASK_NOT_TYPED; task->state= SD_NOT_SCHEDULED; - sd_global->initial_task_set->push_back(task); + sd_global->initial_tasks->insert(task); task->marked = 0; @@ -319,39 +319,33 @@ e_SD_task_state_t SD_task_get_state(SD_task_t task) */ void SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) { - std::vector::iterator idx; + std::set::iterator idx; switch (new_state) { case SD_NOT_SCHEDULED: case SD_SCHEDULABLE: if (SD_task_get_state(task) == SD_FAILED){ - sd_global->initial_task_set->push_back(task); - sd_global->completed_task_set->erase(std::remove(sd_global->completed_task_set->begin(), - sd_global->completed_task_set->end(), task), - sd_global->completed_task_set->end()); + sd_global->completed_tasks->erase(task); + sd_global->initial_tasks->insert(task); } break; case SD_SCHEDULED: if (SD_task_get_state(task) == SD_RUNNABLE){ - sd_global->initial_task_set->push_back(task); - sd_global->executable_task_set->erase(std::remove(sd_global->executable_task_set->begin(), - sd_global->executable_task_set->end(), task), - sd_global->executable_task_set->end()); + sd_global->executable_tasks->erase(task); + sd_global->initial_tasks->insert(task); } break; case SD_RUNNABLE: - idx = std::find(sd_global->initial_task_set->begin(), sd_global->initial_task_set->end(), task); - if (idx != sd_global->initial_task_set->end()) { - sd_global->executable_task_set->push_back(*idx); - sd_global->initial_task_set->erase(idx); + idx = std::find(sd_global->initial_tasks->begin(), sd_global->initial_tasks->end(), task); + if (idx != sd_global->initial_tasks->end()) { + sd_global->initial_tasks->erase(idx); + sd_global->executable_tasks->insert(*idx); } break; case SD_RUNNING: - sd_global->executable_task_set->erase(std::remove(sd_global->executable_task_set->begin(), - sd_global->executable_task_set->end(), task), - sd_global->executable_task_set->end()); + sd_global->executable_tasks->erase(task); break; case SD_DONE: - sd_global->completed_task_set->push_back(task); + sd_global->completed_tasks->insert(task); task->finish_time = task->surf_action->getFinishTime(); task->remains = 0; #if HAVE_JEDULE @@ -359,7 +353,7 @@ void SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) #endif break; case SD_FAILED: - sd_global->completed_task_set->push_back(task); + sd_global->completed_tasks->insert(task); break; default: xbt_die( "Invalid state"); diff --git a/src/simdag/simdag_private.h b/src/simdag/simdag_private.h index af47f34bf7..d2345567e0 100644 --- a/src/simdag/simdag_private.h +++ b/src/simdag/simdag_private.h @@ -6,7 +6,7 @@ #ifndef SIMDAG_PRIVATE_H #define SIMDAG_PRIVATE_H -#include +#include #include "xbt/dynar.h" #include "simgrid/simdag.h" #include "surf/surf.h" @@ -22,9 +22,9 @@ typedef struct SD_global { bool watch_point_reached; /* has a task just reached a watch point? */ - std::vector *initial_task_set; - std::vector *executable_task_set; - std::vector *completed_task_set; + std::set *initial_tasks; + std::set *executable_tasks; + std::set *completed_tasks; xbt_dynar_t return_set; diff --git a/teshsuite/simdag/incomplete/incomplete.tesh b/teshsuite/simdag/incomplete/incomplete.tesh index 4ecdc50307..3f8dddfa5d 100644 --- a/teshsuite/simdag/incomplete/incomplete.tesh +++ b/teshsuite/simdag/incomplete/incomplete.tesh @@ -1,7 +1,7 @@ $ ${bindir:=.}/incomplete ../../../examples/platforms/two_hosts_platform_shared.xml "--log=root.fmt:[%10.6r]%e%m%n" > [ 0.000000] Switching to the L07 model to handle parallel tasks. > [ 8.000100] Simulation is finished but 3 tasks are still not done -> [ 8.000100] Task B is in SD_SCHEDULABLE state -> [ 8.000100] Task C is in SD_NOT_SCHEDULED state > [ 8.000100] Task D is in SD_SCHEDULED state +> [ 8.000100] Task C is in SD_NOT_SCHEDULED state +> [ 8.000100] Task B is in SD_SCHEDULABLE state > [ 8.000100] Simulation time: 8.000100