X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/871107618b8c0e08361b84990c5c4a35ae4188e6..da994ba1ded3e6d6fc8381444c0bab18a511a18d:/src/simdag/sd_task.cpp diff --git a/src/simdag/sd_task.cpp b/src/simdag/sd_task.cpp index 386c765ed9..40c8d702b4 100644 --- a/src/simdag/sd_task.cpp +++ b/src/simdag/sd_task.cpp @@ -22,7 +22,7 @@ static void __SD_task_dependency_destroy(void *dependency) /* Remove all dependencies associated with a task. This function is called when the task is destroyed. */ static void __SD_task_remove_dependencies(SD_task_t task) { - /* we must destroy the dependencies carefuly (with SD_dependency_remove) because each one is stored twice */ + /* we must destroy the dependencies carefully (with SD_dependency_remove) because each one is stored twice */ SD_dependency_t dependency; while (xbt_dynar_is_empty(task->tasks_before) == 0) { xbt_dynar_get_cpy(task->tasks_before, 0, &dependency); @@ -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; - xbt_dynar_push(sd_global->initial_task_set,&task); + sd_global->initial_tasks->insert(task); task->marked = 0; @@ -319,36 +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) { - int idx; + std::set::iterator idx; switch (new_state) { case SD_NOT_SCHEDULED: case SD_SCHEDULABLE: if (SD_task_get_state(task) == SD_FAILED){ - xbt_dynar_remove_at(sd_global->completed_task_set, - xbt_dynar_search(sd_global->completed_task_set, &task), nullptr); - xbt_dynar_push(sd_global->initial_task_set,&task); + sd_global->completed_tasks->erase(task); + sd_global->initial_tasks->insert(task); } break; case SD_SCHEDULED: if (SD_task_get_state(task) == SD_RUNNABLE){ - xbt_dynar_remove_at(sd_global->executable_task_set, - xbt_dynar_search(sd_global->executable_task_set, &task), nullptr); - xbt_dynar_push(sd_global->initial_task_set,&task); + sd_global->executable_tasks->erase(task); + sd_global->initial_tasks->insert(task); } break; case SD_RUNNABLE: - idx = xbt_dynar_search_or_negative(sd_global->initial_task_set, &task); - if (idx >= 0) { - xbt_dynar_remove_at(sd_global->initial_task_set, idx, nullptr); - xbt_dynar_push(sd_global->executable_task_set,&task); + 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: - xbt_dynar_remove_at(sd_global->executable_task_set, - xbt_dynar_search(sd_global->executable_task_set, &task), nullptr); + sd_global->executable_tasks->erase(task); break; case SD_DONE: - xbt_dynar_push(sd_global->completed_task_set,&task); + sd_global->completed_tasks->insert(task); task->finish_time = task->surf_action->getFinishTime(); task->remains = 0; #if HAVE_JEDULE @@ -356,7 +353,7 @@ void SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) #endif break; case SD_FAILED: - xbt_dynar_push(sd_global->completed_task_set,&task); + sd_global->completed_tasks->insert(task); break; default: xbt_die( "Invalid state"); @@ -425,7 +422,7 @@ xbt_dynar_t SD_task_get_children(SD_task_t task) } /** - * \brief Returns the amount of workstations involved in a task + * \brief Returns the number of workstations involved in a task * * Only call this on already scheduled tasks! * \param task a task @@ -825,8 +822,9 @@ void SD_task_unwatch(SD_task_t task, e_SD_task_state_t state) * \param task the task to evaluate * \param workstation_nb number of workstations on which the task would be executed * \param workstation_list the workstations on which the task would be executed - * \param flops_amount computation amount for each workstation - * \param bytes_amount communication amount between each pair of workstations + * \param flops_amount computation amount for each workstation (i.e., an array of workstation_nb doubles) + * \param bytes_amount communication amount between each pair of workstations (i.e., a matrix of + * workstation_nb*workstation_nb doubles) * \see SD_schedule() */ double SD_task_get_execution_time(SD_task_t task, int workstation_nb, const sg_host_t *workstation_list, @@ -875,10 +873,10 @@ static inline void SD_task_do_schedule(SD_task_t task) * Once scheduled, a task is executed as soon as possible in \see SD_simulate, i.e. when its dependencies are satisfied. * * \param task the task you want to schedule - * \param host_count number of workstations on which the task will be executed - * \param workstation_list the workstations on which the task will be executed - * \param flops_amount computation amount for each workstation - * \param bytes_amount communication amount between each pair of workstations + * \param host_count number of hosts on which the task will be executed + * \param workstation_list the hosts on which the task will be executed + * \param flops_amount computation amount for each hosts (i.e., an array of host_count doubles) + * \param bytes_amount communication amount between each pair of hosts (i.e., a matrix of host_count*host_count doubles) * \param rate task execution speed rate * \see SD_task_unschedule() */