git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2459
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
SimDag provides some functionnalities to simulate parallel task scheduling
with DAGs models (Direct Acyclic Graphs).
The old versions of SimGrid were based on DAGs. But the DAG part (named SG)
SimDag provides some functionnalities to simulate parallel task scheduling
with DAGs models (Direct Acyclic Graphs).
The old versions of SimGrid were based on DAGs. But the DAG part (named SG)
- was removed in SimGrid 3 because the new kernel (\ref SURF) was implemented. \ref SURF
+ was removed in SimGrid 3 because the new kernel (\ref SURF_API) was implemented. \ref SURF_API
was much faster and more flexible than SG and did not use DAGs.
was much faster and more flexible than SG and did not use DAGs.
- SimDag is a new implementation of DAGs handling and it is built on top of \ref SURF.
+ SimDag is a new implementation of DAGs handling and it is built on top of \ref SURF_API.
\section SD_who Who should use this (and who shouldn't)
\section SD_who Who should use this (and who shouldn't)
free(changed_tasks);
SD_task_destroy(taskA);
free(changed_tasks);
SD_task_destroy(taskA);
/************************** Workstation handling ****************************/
/************************** Workstation handling ****************************/
-/* private (called by SD_environment_create)
-SD_workstation_t SD_workstation_create(void *data, const char *name, double power,
- double available_power);*/
+/** @defgroup SD_workstation_management Workstations
+ * @brief Functions for managing the workstations
+ *
+ * This section describes the functions for managing the workstations.
+ *
+ * A workstation is a place where a task can be executed.
+ * A workstation is represented as a <em>physical
+ * resource with computing capabilities</em> and has a <em>name</em>.
+ *
+ * @see SD_workstation_t
+ *
+ * @{
+ */
SD_workstation_t SD_workstation_get_by_name(const char *name);
SD_workstation_t* SD_workstation_get_list(void);
int SD_workstation_get_number(void);
SD_workstation_t SD_workstation_get_by_name(const char *name);
SD_workstation_t* SD_workstation_get_list(void);
int SD_workstation_get_number(void);
int SD_workstation_route_get_size(SD_workstation_t src, SD_workstation_t dst);
double SD_workstation_get_power(SD_workstation_t workstation);
double SD_workstation_get_available_power(SD_workstation_t workstation);
int SD_workstation_route_get_size(SD_workstation_t src, SD_workstation_t dst);
double SD_workstation_get_power(SD_workstation_t workstation);
double SD_workstation_get_available_power(SD_workstation_t workstation);
-/* private (called by SD_clean)
-void SD_workstation_destroy(SD_workstation_t workstation);
-*/
/************************** Task handling ************************************/
/************************** Task handling ************************************/
SD_CHECK_INIT_DONE();
xbt_assert0(task != NULL, "Invalid parameter");
SD_CHECK_INIT_DONE();
xbt_assert0(task != NULL, "Invalid parameter");
- if (task->state_set == sd_global->not_scheduled_task_set)
- return SD_NOT_SCHEDULED;
if (task->state_set == sd_global->scheduled_task_set)
return SD_SCHEDULED;
if (task->state_set == sd_global->scheduled_task_set)
return SD_SCHEDULED;
- if (task->state_set == sd_global->ready_task_set)
- return SD_READY;
- if (task->state_set == sd_global->running_task_set)
- return SD_RUNNING;
if (task->state_set == sd_global->done_task_set)
return SD_DONE;
if (task->state_set == sd_global->done_task_set)
return SD_DONE;
+ if (task->state_set == sd_global->running_task_set)
+ return SD_RUNNING;
+ if (task->state_set == sd_global->ready_task_set)
+ return SD_READY;
+ if (task->state_set == sd_global->not_scheduled_task_set)
+ return SD_NOT_SCHEDULED;
case SD_DONE:
task->state_set = sd_global->done_task_set;
break;
case SD_DONE:
task->state_set = sd_global->done_task_set;
break;
- default: /* SD_FAILED */
task->state_set = sd_global->failed_task_set;
task->state_set = sd_global->failed_task_set;
+ break;
+ default:
+ xbt_assert0(0, "Invalid state");
}
xbt_swag_insert(task,task->state_set);
}
xbt_swag_insert(task,task->state_set);
-/* Returns a workstation given its name, or NULL if there is no such workstation.
+/** @ingroup SD_workstation_management
+ * @brief Returns a workstation given its name
+ *
+ * If there is no such workstation, the function returns NULL.
+ *
+ * @param name workstation name
+ * @return the workstation, or NULL if there is no such workstation
*/
SD_workstation_t SD_workstation_get_by_name(const char *name) {
SD_CHECK_INIT_DONE();
*/
SD_workstation_t SD_workstation_get_by_name(const char *name) {
SD_CHECK_INIT_DONE();
return xbt_dict_get_or_null(sd_global->workstations, name);
}
return xbt_dict_get_or_null(sd_global->workstations, name);
}
-/* Returns a NULL-terminated array of existing workstations.
+/** @ingroup SD_workstation_management
+ * @brief Returns the workstations list
+ *
+ * Use SD_workstation_get_number to known the array size.
+ *
+ * @return an array of SD_workstation_t containing all workstations
+ * @see SD_workstation_get_number
*/
SD_workstation_t* SD_workstation_get_list(void) {
SD_CHECK_INIT_DONE();
*/
SD_workstation_t* SD_workstation_get_list(void) {
SD_CHECK_INIT_DONE();
+ xbt_assert0(SD_workstation_get_number() > 0, "There is no workstation!");
- SD_workstation_t* array = xbt_new0(SD_workstation_t, sd_global->workstation_count + 1);
+ SD_workstation_t* array = xbt_new0(SD_workstation_t, sd_global->workstation_count);
xbt_dict_cursor_t cursor;
char *key;
xbt_dict_cursor_t cursor;
char *key;
xbt_dict_foreach(sd_global->workstations, cursor, key, data) {
array[i++] = (SD_workstation_t) data;
}
xbt_dict_foreach(sd_global->workstations, cursor, key, data) {
array[i++] = (SD_workstation_t) data;
}
-/* Returns the number or workstations.
+/** @ingroup SD_workstation_management
+ * @brief Returns the number of workstations
+ *
+ * @return the number of existing workstations
+ * @see SD_workstation_get_list
*/
int SD_workstation_get_number(void) {
SD_CHECK_INIT_DONE();
return sd_global->workstation_count;
}
*/
int SD_workstation_get_number(void) {
SD_CHECK_INIT_DONE();
return sd_global->workstation_count;
}
-/* Sets the data of a workstation. The new data can be NULL. The old data should have been freed first if it was not NULL.
+/** @ingroup SD_workstation_management
+ * @brief Sets the user data of a workstation
+ *
+ * The new data can be NULL. The old data should have been freed first
+ * if it was not NULL.
+ *
+ * @param workstation a workstation
+ * @param data the new data you want to associate with this workstation
+ * @see SD_workstation_get_data
*/
void SD_workstation_set_data(SD_workstation_t workstation, void *data) {
SD_CHECK_INIT_DONE();
*/
void SD_workstation_set_data(SD_workstation_t workstation, void *data) {
SD_CHECK_INIT_DONE();
workstation->data = data;
}
workstation->data = data;
}
-/* Returns the data of a workstation. The user data can be NULL.
+/** @ingroup SD_workstation_management
+ * @brief Returns the user data of a workstation
+ *
+ * @param workstation a workstation
+ * @return the user data associated with this workstation (can be NULL)
+ * @see SD_workstation_set_data
*/
void* SD_workstation_get_data(SD_workstation_t workstation) {
SD_CHECK_INIT_DONE();
*/
void* SD_workstation_get_data(SD_workstation_t workstation) {
SD_CHECK_INIT_DONE();
return workstation->data;
}
return workstation->data;
}
-/* Returns the name of a workstation.
+/** @ingroup SD_workstation_management
+ * @brief Returns the name of a workstation
+ *
+ * @param workstation a workstation
+ * @return the name of this workstation (cannot be NULL)
*/
const char* SD_workstation_get_name(SD_workstation_t workstation) {
SD_CHECK_INIT_DONE();
*/
const char* SD_workstation_get_name(SD_workstation_t workstation) {
SD_CHECK_INIT_DONE();
return surf_workstation_resource->common_public->get_resource_name(workstation->surf_workstation);
}
return surf_workstation_resource->common_public->get_resource_name(workstation->surf_workstation);
}
-/* Returns an new array of links representating the route between two workstations.
+/** @ingroup SD_workstation_management
+ * @brief Returns the route between two workstations
+ *
+ * Use SD_workstation_route_get_size to known the array size.
+ *
+ * @param src a workstation
+ * @param dst another workstation
+ * @return a new array of SD_link_t representating the route between these two workstations
+ * @see SD_workstation_route_get_size
*/
SD_link_t* SD_workstation_route_get_list(SD_workstation_t src, SD_workstation_t dst) {
SD_CHECK_INIT_DONE();
*/
SD_link_t* SD_workstation_route_get_list(SD_workstation_t src, SD_workstation_t dst) {
SD_CHECK_INIT_DONE();
-/* Returns the number of links on the route between two workstations.
+/** @ingroup SD_workstation_management
+ * @brief Returns the number of links on the route between two workstations
+ *
+ * @param src a workstation
+ * @param dst another workstation
+ * @return the number of links on the route between these two workstations
+ * @see SD_workstation_route_get_list
*/
int SD_workstation_route_get_size(SD_workstation_t src, SD_workstation_t dst) {
SD_CHECK_INIT_DONE();
*/
int SD_workstation_route_get_size(SD_workstation_t src, SD_workstation_t dst) {
SD_CHECK_INIT_DONE();
get_route_size(src->surf_workstation, dst->surf_workstation);
}
get_route_size(src->surf_workstation, dst->surf_workstation);
}
-/* Returns the total power of a workstation.
+/** @ingroup SD_workstation_management
+ * @brief Returns the total power of a workstation
+ *
+ * @param workstation a workstation
+ * @return the total power of this workstation
+ * @see SD_workstation_get_available_power
*/
double SD_workstation_get_power(SD_workstation_t workstation) {
SD_CHECK_INIT_DONE();
*/
double SD_workstation_get_power(SD_workstation_t workstation) {
SD_CHECK_INIT_DONE();
return surf_workstation_resource->extension_public->get_speed(workstation->surf_workstation, 1.0);
}
return surf_workstation_resource->extension_public->get_speed(workstation->surf_workstation, 1.0);
}
-/* Returns the proportion of available power in a workstation (normally a number between 0 and 1).
+/** @ingroup SD_workstation_management
+ * @brief Returns the proportion of available power in a workstation
+ *
+ * @param workstation a workstation
+ * @return the proportion of power currently available in this workstation (normally a number between 0 and 1)
+ * @see SD_workstation_get_power
*/
double SD_workstation_get_available_power(SD_workstation_t workstation) {
SD_CHECK_INIT_DONE();
*/
double SD_workstation_get_available_power(SD_workstation_t workstation) {
SD_CHECK_INIT_DONE();
return surf_workstation_resource->extension_public->get_available_speed(workstation->surf_workstation);
}
return surf_workstation_resource->extension_public->get_available_speed(workstation->surf_workstation);
}
-/* Destroys a workstation. The user data (if any) should have been destroyed first.
+/* Destroys a workstation.
*/
void __SD_workstation_destroy(void *workstation) {
SD_CHECK_INIT_DONE();
*/
void __SD_workstation_destroy(void *workstation) {
SD_CHECK_INIT_DONE();