SimGrid
3.14.159
Versatile Simulation of Distributed Systems
|
#include "xbt/sysdep.h"
#include "xbt/log.h"
#include "xbt/strbuff.h"
#include "xbt/mallocator.h"
#include "maxmin_private.hpp"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
Classes | |
struct | s_dyn_light |
Macros | |
#define | lmm_variable_mallocator_reset_f ((void_f_pvoid_t)nullptr) |
Typedefs | |
typedef struct s_dyn_light | s_dyn_light_t |
typedef struct s_dyn_light * | dyn_light_t |
Functions | |
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (surf_maxmin, surf, "Logging specific to SURF (maxmin)") | |
static void * | lmm_variable_mallocator_new_f () |
static void | lmm_variable_mallocator_free_f (void *var) |
static void | lmm_update_modified_set (lmm_system_t sys, lmm_constraint_t cnst) |
static void | lmm_remove_all_modified_set (lmm_system_t sys) |
Remove all constraints of the modified_constraint_set. More... | |
static void | lmm_var_free (lmm_system_t sys, lmm_variable_t var) |
static void | lmm_cnst_free (lmm_system_t sys, lmm_constraint_t cnst) |
static void | lmm_on_disabled_var (lmm_system_t sys, lmm_constraint_t cnstr) |
static void | lmm_enable_var (lmm_system_t sys, lmm_variable_t var) |
static int | lmm_can_enable_var (lmm_variable_t var) |
static void | lmm_disable_var (lmm_system_t sys, lmm_variable_t var) |
static int | lmm_concurrency_slack (lmm_constraint_t cnstr) |
static int | lmm_cnstrs_min_concurrency_slack (lmm_variable_t var) |
Measure the minimum concurrency slack across all constraints where the given var is involved. More... | |
static void | lmm_check_concurrency (lmm_system_t sys) |
int | lmm_element_concurrency (lmm_element_t elem) |
void | lmm_decrease_concurrency (lmm_element_t elem) |
void | lmm_increase_concurrency (lmm_element_t elem) |
lmm_system_t | lmm_system_new (bool selective_update) |
Create a new Linear MaxMim system. More... | |
void | lmm_system_free (lmm_system_t sys) |
Free an existing Linear MaxMin system. More... | |
static void | lmm_variable_remove (lmm_system_t sys, lmm_variable_t var) |
lmm_constraint_t | lmm_constraint_new (lmm_system_t sys, void *id, double bound_value) |
Create a new Linear MaxMin constraint. More... | |
int | lmm_constraint_concurrency_limit_get (lmm_constraint_t cnst) |
Gets the concurrency limit for this constraint. More... | |
void | lmm_constraint_concurrency_limit_set (lmm_constraint_t cnst, int concurrency_limit) |
Sets the concurrency limit for this constraint. More... | |
void | lmm_constraint_concurrency_maximum_reset (lmm_constraint_t cnst) |
Reset the concurrency maximum for a given variable (we will update the maximum to reflect constraint evolution). More... | |
int | lmm_constraint_concurrency_maximum_get (lmm_constraint_t cnst) |
Get the concurrency maximum for a given variable (which reflects constraint evolution). More... | |
void | lmm_constraint_shared (lmm_constraint_t cnst) |
Share a constraint. More... | |
int | lmm_constraint_sharing_policy (lmm_constraint_t cnst) |
Return true if the constraint is shared, and false if it's FATPIPE. More... | |
void | lmm_constraint_free (lmm_system_t sys, lmm_constraint_t cnst) |
Free a constraint. More... | |
lmm_variable_t | lmm_variable_new (lmm_system_t sys, void *id, double weight, double bound, int number_of_constraints) |
Create a new Linear MaxMin variable. More... | |
void | lmm_variable_free (lmm_system_t sys, lmm_variable_t var) |
Free a variable. More... | |
double | lmm_variable_getvalue (lmm_variable_t var) |
Get the value of the variable after the last lmm solve. More... | |
void | lmm_variable_concurrency_share_set (lmm_variable_t var, short int concurrency_share) |
Set the concurrent share of the variable. More... | |
double | lmm_variable_getbound (lmm_variable_t var) |
Get the maximum value of the variable (-1.0 if no maximum value) More... | |
void | lmm_shrink (lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var) |
Remove a variable from a constraint. More... | |
void | lmm_expand (lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var, double value) |
Associate a variable to a constraint with a coefficient. More... | |
void | lmm_expand_add (lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var, double value) |
Add value to the coefficient between a constraint and a variable or create one. More... | |
lmm_constraint_t | lmm_get_cnst_from_var (lmm_system_t, lmm_variable_t var, int num) |
Get the numth constraint associated to the variable. More... | |
double | lmm_get_cnst_weight_from_var (lmm_system_t, lmm_variable_t var, int num) |
Get the weigth of the numth constraint associated to the variable. More... | |
int | lmm_get_number_of_cnst_from_var (lmm_system_t, lmm_variable_t var) |
Get the number of constraint associated to a variable. More... | |
lmm_variable_t | lmm_get_var_from_cnst (lmm_system_t, lmm_constraint_t cnst, lmm_element_t *elem) |
Get a var associated to a constraint. More... | |
lmm_variable_t | lmm_get_var_from_cnst_safe (lmm_system_t, lmm_constraint_t cnst, lmm_element_t *elem, lmm_element_t *nextelem, int *numelem) |
Get a var associated to a constraint. More... | |
void * | lmm_constraint_id (lmm_constraint_t cnst) |
Get the data associated to a constraint. More... | |
void * | lmm_variable_id (lmm_variable_t var) |
Get the data associated to a variable. More... | |
static void | saturated_constraint_set_update (double usage, int cnst_light_num, dyn_light_t saturated_constraint_set, double *min_usage) |
static void | saturated_variable_set_update (s_lmm_constraint_light_t *cnst_light_tab, dyn_light_t saturated_constraint_set, lmm_system_t sys) |
void | lmm_print (lmm_system_t sys) |
Print the lmm system. More... | |
void | lmm_solve (lmm_system_t sys) |
Solve the lmm system. More... | |
void | lmm_update_variable_bound (lmm_system_t sys, lmm_variable_t var, double bound) |
Attribute the value bound to var->bound. More... | |
void | lmm_update_variable_weight (lmm_system_t sys, lmm_variable_t var, double weight) |
Update the weight of a variable. More... | |
double | lmm_get_variable_weight (lmm_variable_t var) |
Get the weight of a variable. More... | |
void | lmm_update_constraint_bound (lmm_system_t sys, lmm_constraint_t cnst, double bound) |
Update a constraint bound. More... | |
int | lmm_constraint_used (lmm_system_t sys, lmm_constraint_t cnst) |
[brief description] More... | |
lmm_constraint_t | lmm_get_first_active_constraint (lmm_system_t sys) |
Get the first active constraint of a system. More... | |
lmm_constraint_t | lmm_get_next_active_constraint (lmm_system_t sys, lmm_constraint_t cnst) |
Get the next active constraint of a constraint in a system. More... | |
static void | lmm_update_modified_set_rec (lmm_system_t sys, lmm_constraint_t cnst) |
Update the constraint set propagating recursively to other constraints so the system should not be entirely computed. More... | |
double | lmm_constraint_get_usage (lmm_constraint_t cnst) |
Returns resource load (in flop per second, or byte per second, or similar) More... | |
Variables | |
double | sg_maxmin_precision = 0.00001 |
double | sg_surf_precision = 0.00001 |
int | sg_concurrency_limit = 100 |
static int | Global_debug_id = 1 |
static int | Global_const_debug_id = 1 |
#define lmm_variable_mallocator_reset_f ((void_f_pvoid_t)nullptr) |
typedef struct s_dyn_light s_dyn_light_t |
typedef struct s_dyn_light * dyn_light_t |
XBT_LOG_NEW_DEFAULT_SUBCATEGORY | ( | surf_maxmin | , |
surf | , | ||
"Logging specific to SURF (maxmin)" | |||
) |
|
static |
|
static |
|
static |
Remove all constraints of the modified_constraint_set.
sys | the lmm_system_t |
|
static |
|
inlinestatic |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
Measure the minimum concurrency slack across all constraints where the given var is involved.
|
static |
|
inline |
|
inline |
|
inline |
void lmm_system_free | ( | lmm_system_t | sys | ) |
Free an existing Linear MaxMin system.
sys | The lmm system to free |
|
inlinestatic |
lmm_constraint_t lmm_constraint_new | ( | lmm_system_t | sys, |
void * | id, | ||
double | bound_value | ||
) |
Create a new Linear MaxMin constraint.
sys | The system in which we add a constraint |
id | Data associated to the constraint (e.g.: a network link) |
bound_value | The bound value of the constraint |
int lmm_constraint_concurrency_limit_get | ( | lmm_constraint_t | cnst | ) |
Gets the concurrency limit for this constraint.
cnst | A constraint |
void lmm_constraint_concurrency_limit_set | ( | lmm_constraint_t | cnst, |
int | concurrency_limit | ||
) |
Sets the concurrency limit for this constraint.
cnst | A constraint |
concurrency_limit | The concurrency limit to use for this constraint |
void lmm_constraint_concurrency_maximum_reset | ( | lmm_constraint_t | cnst | ) |
Reset the concurrency maximum for a given variable (we will update the maximum to reflect constraint evolution).
cnst | A constraint |
int lmm_constraint_concurrency_maximum_get | ( | lmm_constraint_t | cnst | ) |
Get the concurrency maximum for a given variable (which reflects constraint evolution).
cnst | A constraint |
void lmm_constraint_shared | ( | lmm_constraint_t | cnst | ) |
Share a constraint.
cnst | The constraint to share |
int lmm_constraint_sharing_policy | ( | lmm_constraint_t | cnst | ) |
Return true if the constraint is shared, and false if it's FATPIPE.
Check if a constraint is shared (shared by default)
|
inline |
Free a constraint.
sys | The system associated to the constraint |
cnst | The constraint to free |
lmm_variable_t lmm_variable_new | ( | lmm_system_t | sys, |
void * | id, | ||
double | weight_value, | ||
double | bound, | ||
int | number_of_constraints | ||
) |
Create a new Linear MaxMin variable.
sys | The system in which we add a constaint |
id | Data associated to the variable (e.g.: a network communication) |
weight_value | The weight of the variable (0.0 if not used) |
bound | The maximum value of the variable (-1.0 if no maximum value) |
number_of_constraints | The maximum number of constraint to associate to the variable |
void lmm_variable_free | ( | lmm_system_t | sys, |
lmm_variable_t | var | ||
) |
Free a variable.
sys | The system associated to the variable |
var | The variable to free |
double lmm_variable_getvalue | ( | lmm_variable_t | var | ) |
Get the value of the variable after the last lmm solve.
var | A variable |
void lmm_variable_concurrency_share_set | ( | lmm_variable_t | var, |
short int | concurrency_share | ||
) |
Set the concurrent share of the variable.
var | A variable |
concurrency_share | The new concurrency share |
double lmm_variable_getbound | ( | lmm_variable_t | var | ) |
Get the maximum value of the variable (-1.0 if no maximum value)
var | A variable |
void lmm_shrink | ( | lmm_system_t | sys, |
lmm_constraint_t | cnst, | ||
lmm_variable_t | var | ||
) |
Remove a variable from a constraint.
sys | A system |
cnst | A constraint |
var | The variable to remove |
void lmm_expand | ( | lmm_system_t | sys, |
lmm_constraint_t | cnst, | ||
lmm_variable_t | var, | ||
double | value | ||
) |
Associate a variable to a constraint with a coefficient.
sys | A system |
cnst | A constraint |
var | A variable |
value | The coefficient associated to the variable in the constraint |
void lmm_expand_add | ( | lmm_system_t | sys, |
lmm_constraint_t | cnst, | ||
lmm_variable_t | var, | ||
double | value | ||
) |
Add value to the coefficient between a constraint and a variable or create one.
sys | A system |
cnst | A constraint |
var | A variable |
value | The value to add to the coefficient associated to the variable in the constraint |
lmm_constraint_t lmm_get_cnst_from_var | ( | lmm_system_t | sys, |
lmm_variable_t | var, | ||
int | num | ||
) |
Get the numth constraint associated to the variable.
sys | The system associated to the variable (not used) |
var | A variable |
num | The rank of constraint we want to get |
double lmm_get_cnst_weight_from_var | ( | lmm_system_t | sys, |
lmm_variable_t | var, | ||
int | num | ||
) |
Get the weigth of the numth constraint associated to the variable.
sys | The system associated to the variable (not used) |
var | A variable |
num | The rank of constraint we want to get |
int lmm_get_number_of_cnst_from_var | ( | lmm_system_t | sys, |
lmm_variable_t | var | ||
) |
Get the number of constraint associated to a variable.
sys | The system associated to the variable (not used) |
var | A variable |
lmm_variable_t lmm_get_var_from_cnst | ( | lmm_system_t | sys, |
lmm_constraint_t | cnst, | ||
lmm_element_t * | elem | ||
) |
Get a var associated to a constraint.
Get the first variable of the next variable of elem if elem is not NULL
sys | The system associated to the variable (not used) |
cnst | A constraint |
elem | A element of constraint of the constraint or NULL |
lmm_variable_t lmm_get_var_from_cnst_safe | ( | lmm_system_t | sys, |
lmm_constraint_t | cnst, | ||
lmm_element_t * | elem, | ||
lmm_element_t * | nextelem, | ||
int * | numelem | ||
) |
Get a var associated to a constraint.
Get the first variable of the next variable of elem if elem is not NULL
cnst | A constraint |
elem | A element of constraint of the constraint or NULL |
nextelem | A element of constraint of the constraint or NULL, the one after elem |
numelem | parameter representing the number of elements to go |
void* lmm_constraint_id | ( | lmm_constraint_t | cnst | ) |
Get the data associated to a constraint.
cnst | A constraint |
void* lmm_variable_id | ( | lmm_variable_t | var | ) |
Get the data associated to a variable.
var | A variable |
|
inlinestatic |
|
inlinestatic |
void lmm_print | ( | lmm_system_t | sys | ) |
Print the lmm system.
sys | The lmm system to print |
void lmm_solve | ( | lmm_system_t | sys | ) |
Solve the lmm system.
sys | The lmm system to solve |
void lmm_update_variable_bound | ( | lmm_system_t | sys, |
lmm_variable_t | var, | ||
double | bound | ||
) |
Attribute the value bound to var->bound.
Update the bound of a variable.
sys | the lmm_system_t |
var | the lmm_variable_t |
bound | the new bound to associate with var |
Makes var->bound equal to bound. Whenever this function is called a change is signed in the system. To avoid false system changing detection it is a good idea to test (bound != 0) before calling it.
void lmm_update_variable_weight | ( | lmm_system_t | sys, |
lmm_variable_t | var, | ||
double | weight | ||
) |
Update the weight of a variable.
sys | A system |
var | A variable |
weight | The new weight of the variable |
double lmm_get_variable_weight | ( | lmm_variable_t | var | ) |
Get the weight of a variable.
var | A variable |
void lmm_update_constraint_bound | ( | lmm_system_t | sys, |
lmm_constraint_t | cnst, | ||
double | bound | ||
) |
Update a constraint bound.
sys | A system |
cnst | A constraint |
bound | The new bound of the consrtaint |
int lmm_constraint_used | ( | lmm_system_t | sys, |
lmm_constraint_t | cnst | ||
) |
[brief description]
sys | A system |
cnst | A constraint |
|
inline |
Get the first active constraint of a system.
sys | A system |
|
inline |
Get the next active constraint of a constraint in a system.
sys | A system |
cnst | An active constraint of the system |
|
static |
Update the constraint set propagating recursively to other constraints so the system should not be entirely computed.
sys | the lmm_system_t |
cnst | the lmm_constraint_t affected by the change |
A recursive algorithm to optimize the system recalculation selecting only constraints that have changed. Each constraint change is propagated to the list of constraints for each variable.
double lmm_constraint_get_usage | ( | lmm_constraint_t | cnst | ) |
Returns resource load (in flop per second, or byte per second, or similar)
Get the usage of the constraint after the last lmm solve.
If the resource is shared (the default case), the load is sum of resource usage made by every variables located on this resource.
If the resource is not shared (ie in FATPIPE mode), then the the load is the max (not the sum) of all resource usages located on this resource.
cnst | the lmm_constraint_t associated to the resource |
double sg_maxmin_precision = 0.00001 |
double sg_surf_precision = 0.00001 |
int sg_concurrency_limit = 100 |
|
static |
|
static |