#include "xbt/module.h"
#include <math.h>
-XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test,
- "Messages specific for surf example");
+XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test, "Messages specific for surf example");
#define PRINT_VAR(var) XBT_DEBUG(#var " = %g",lmm_variable_getvalue(var));
#define SHOW_EXPR(expr) XBT_DEBUG(#expr " = %g",expr);
-/* */
/* ______ */
/* ==l1== L2 ==L3== */
/* ------ */
-/* */
typedef enum {
MAXMIN,
LAGRANGE_VEGAS
} method_t;
-static double dichotomy(double func(double), double min, double max,
- double min_error)
+static double dichotomy(double func(double), double min, double max, double min_error)
{
- double middle;
- double min_func, max_func, middle_func;
-
double overall_error = 2 * min_error;
- min_func = func(min);
- max_func = func(max);
+ double min_func = func(min);
+ double max_func = func(max);
if ((min_func > 0 && max_func > 0))
return min - 1.0;
while (overall_error > min_error) {
SHOW_EXPR(overall_error);
- if ((min_func > 0 && max_func > 0) ||
- (min_func < 0 && max_func < 0) || (min_func > 0 && max_func < 0)) {
+ if ((min_func > 0 && max_func > 0) || (min_func < 0 && max_func < 0) || (min_func > 0 && max_func < 0)) {
abort();
- }
+ } //TODO replace by xbt_assert
SHOW_EXPR(min);
SHOW_EXPR(min_func);
SHOW_EXPR(max);
SHOW_EXPR(max_func);
- middle = (max + min) / 2.0;
+ double middle = (max + min) / 2.0;
if ((min == middle) || (max == middle)) {
break;
}
- middle_func = func(middle);
+ double middle_func = func(middle);
SHOW_EXPR(middle);
SHOW_EXPR(middle_func);
double b_test_1 = 0;
static double diff_lagrange_test_1(double x)
{
- return -(3 / (1 + 3 * x * x / 2) -
- 3 / (2 * (3 * (a_test_1 - x) * (a_test_1 - x) / 2 + 1)) +
- 3 / (2 *
- (3 * (b_test_1 - a_test_1 + x) *
- (b_test_1 - a_test_1 + x) / 2 + 1)));
+ return -(3 / (1 + 3 * x * x / 2) - 3 / (2 * (3 * (a_test_1 - x) * (a_test_1 - x) / 2 + 1)) +
+ 3 / (2 * (3 * (b_test_1 - a_test_1 + x) * (b_test_1 - a_test_1 + x) / 2 + 1)));
}
void test1(method_t method);
double a = 1.0, b = 10.0;
if (method == LAGRANGE_VEGAS)
- lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
- func_vegas_fpi);
+ lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi);
else if (method == LAGRANGE_RENO)
- lmm_set_default_protocol_function(func_reno_f, func_reno_fpi,
- func_reno_fpi);
+ lmm_set_default_protocol_function(func_reno_f, func_reno_fpi, func_reno_fpi);
Sys = lmm_system_new(1);
L1 = lmm_constraint_new(Sys, (void *) "L1", a);
lmm_expand(Sys, L3, R_1_2_3, 1.0);
lmm_expand(Sys, L1, R_1, 1.0);
-
lmm_expand(Sys, L2, R_2, 1.0);
-
lmm_expand(Sys, L3, R_3, 1.0);
-
if (method == MAXMIN) {
lmm_solve(Sys);
} else if (method == LAGRANGE_VEGAS) {
- double x = 3 * a / 4 - 3 * b / 8 +
- sqrt(9 * b * b + 4 * a * a - 4 * a * b) / 8;
+ double x = 3 * a / 4 - 3 * b / 8 + sqrt(9 * b * b + 4 * a * a - 4 * a * b) / 8;
/* Computed with mupad and D_f=1.0 */
double max_deviation = 0.0;
if (x > a) {
lagrange_solve(Sys);
- max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
- max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
- max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
- max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
+ max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
+ max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
+ max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
+ max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
if (max_deviation > 0.00001) { // Legacy value used in lagrange.c
XBT_WARN("Max Deviation from optimal solution : %g", max_deviation);
XBT_WARN("Found x = %1.20f", x);
- XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x,
- lmm_variable_getvalue(R_1) - x);
- XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f",
- b - a + x, lmm_variable_getvalue(R_2) - (b - a + x));
- XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x,
- lmm_variable_getvalue(R_3) - x);
- XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f",
- a - x, lmm_variable_getvalue(R_1_2_3) - (a - x));
+ XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x, lmm_variable_getvalue(R_1) - x);
+ XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f", b - a + x,
+ lmm_variable_getvalue(R_2) - (b - a + x));
+ XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x, lmm_variable_getvalue(R_3) - x);
+ XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f", a - x,
+ lmm_variable_getvalue(R_1_2_3) - (a - x));
}
} else if (method == LAGRANGE_RENO) {
double x;
x = a;
lagrange_solve(Sys);
- max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
- max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
- max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
- max_deviation =
- MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
+ max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
+ max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
+ max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
+ max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
if (max_deviation > 0.00001) { // Legacy value used in lagrange.c
XBT_WARN("Max Deviation from optimal solution : %g", max_deviation);
XBT_WARN("Found x = %1.20f", x);
- XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x,
- lmm_variable_getvalue(R_1) - x);
- XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f",
- b - a + x, lmm_variable_getvalue(R_2) - (b - a + x));
- XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x,
- lmm_variable_getvalue(R_3) - x);
- XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f",
- a - x, lmm_variable_getvalue(R_1_2_3) - (a - x));
+ XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x, lmm_variable_getvalue(R_1) - x);
+ XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f", b - a + x,
+ lmm_variable_getvalue(R_2) - (b - a + x));
+ XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x, lmm_variable_getvalue(R_3) - x);
+ XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f", a - x,
+ lmm_variable_getvalue(R_1_2_3) - (a - x));
}
} else {
xbt_die( "Invalid method");
lmm_variable_t T1 = NULL;
lmm_variable_t T2 = NULL;
-
if (method == LAGRANGE_VEGAS)
- lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
- func_vegas_fpi);
+ lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi);
else if (method == LAGRANGE_RENO)
- lmm_set_default_protocol_function(func_reno_f, func_reno_fp,
- func_reno_fpi);
+ lmm_set_default_protocol_function(func_reno_f, func_reno_fp, func_reno_fpi);
Sys = lmm_system_new(1);
CPU1 = lmm_constraint_new(Sys, (void *) "CPU1", 200.0);
lmm_update_variable_weight(Sys, T1, 1.0);
lmm_update_variable_weight(Sys, T2, 1.0);
-
lmm_expand(Sys, CPU1, T1, 1.0);
lmm_expand(Sys, CPU2, T2, 1.0);
-
-
if (method == MAXMIN) {
lmm_solve(Sys);
} else if (method == LAGRANGE_VEGAS) {
lmm_system_free(Sys);
}
-
-
void test3(method_t method);
void test3(method_t method)
{
char **tmp_name;
- /*array to add the the constraints of fictiv variables */
- double B[15] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-
- 1, 1, 1, 1, 1
- };
+ /*array to add the the constraints of fictitious variables */
+ double B[15] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1 };
A = xbt_new0(double *, links + 5);
}
}
- /*matrix that store the constraints/topollogy */
- /*double A[15][16]=
- {{0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
- {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- {1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- {1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0},
- {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
-
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}
- }; */
-
- A[0][1] = 1.0;
- A[0][7] = 1.0;
-
- A[1][1] = 1.0;
- A[1][7] = 1.0;
- A[1][8] = 1.0;
-
- A[2][1] = 1.0;
- A[2][8] = 1.0;
-
- A[2][1] = 1.0;
- A[2][8] = 1.0;
-
- A[3][8] = 1.0;
-
- A[4][0] = 1.0;
- A[4][3] = 1.0;
- A[4][9] = 1.0;
-
- A[5][0] = 1.0;
- A[5][3] = 1.0;
- A[5][4] = 1.0;
- A[5][9] = 1.0;
-
- A[6][0] = 1.0;
- A[6][4] = 1.0;
- A[6][9] = 1.0;
- A[6][10] = 1.0;
-
- A[7][2] = 1.0;
- A[7][4] = 1.0;
- A[7][6] = 1.0;
- A[7][9] = 1.0;
- A[7][10] = 1.0;
-
- A[8][2] = 1.0;
- A[8][10] = 1.0;
-
- A[9][5] = 1.0;
- A[9][6] = 1.0;
- A[9][9] = 1.0;
-
-
- A[10][11] = 1.0;
- A[11][12] = 1.0;
- A[12][13] = 1.0;
- A[13][14] = 1.0;
- A[14][15] = 1.0;
-
+ /*matrix that store the constraints/topology */
+ A[0][1] = A[0][7] = 1.0;
+ A[1][1] = A[1][7] = A[1][8] = 1.0;
+ A[2][1] = A[2][8] = 1.0;
+ A[3][8] = 1.0;
+ A[4][0] = A[4][3] = A[4][9] = 1.0;
+ A[5][0] = A[5][3] = A[5][4] = A[5][9] = 1.0;
+ A[6][0] = A[6][4] = A[6][9] = A[6][10] = 1.0;
+ A[7][2] = A[7][4] = A[7][6] = A[7][9] = A[7][10] = 1.0;
+ A[8][2] = A[8][10] = 1.0;
+ A[9][5] = A[9][6] = A[9][9] = 1.0;
+ A[10][11] = 1.0;
+ A[11][12] = 1.0;
+ A[12][13] = 1.0;
+ A[13][14] = 1.0;
+ A[14][15] = 1.0;
if (method == LAGRANGE_VEGAS)
- lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
- func_vegas_fpi);
+ lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi);
else if (method == LAGRANGE_RENO)
- lmm_set_default_protocol_function(func_reno_f, func_reno_fp,
- func_reno_fpi);
+ lmm_set_default_protocol_function(func_reno_f, func_reno_fp, func_reno_fpi);
Sys = lmm_system_new(1);
-
-
tmp_name = xbt_new0(char *, 31);
- /*
- * Creates the constraints
- */
+ /* Creates the constraints */
tmp_cnst = xbt_new0(lmm_constraint_t, 15);
for (i = 0; i < 15; i++) {
tmp_name[i] = bprintf("C_%03d", i);
tmp_cnst[i] = lmm_constraint_new(Sys, (void *) tmp_name[i], B[i]);
}
-
- /*
- * Creates the variables
- */
+ /* Creates the variables */
tmp_var = xbt_new0(lmm_variable_t, 16);
for (j = 0; j < 16; j++) {
tmp_name[i + j] = bprintf("X_%03d", j);
- tmp_var[j] =
- lmm_variable_new(Sys, (void *) tmp_name[i + j], 1.0, -1.0, 15);
+ tmp_var[j] = lmm_variable_new(Sys, (void *) tmp_name[i + j], 1.0, -1.0, 15);
lmm_update_variable_weight(Sys, tmp_var[j], 1.0);
}
- /*
- * Link constraints and variables
- */
+ /* Link constraints and variables */
for (i = 0; i < 15; i++) {
for (j = 0; j < 16; j++) {
if (A[i][j]) {
}
}
-
-
if (method == MAXMIN) {
lmm_solve(Sys);
} else if (method == LAGRANGE_VEGAS) {
XBT_INFO("***** Test 1 (Lagrange - Reno)");
test1(LAGRANGE_RENO);
-
-
XBT_INFO("***** Test 2 (Max-Min)");
test2(MAXMIN);
XBT_INFO("***** Test 2 (Lagrange - Vegas)");
XBT_INFO("***** Test 2 (Lagrange - Reno)");
test2(LAGRANGE_RENO);
-
XBT_INFO("***** Test 3 (Max-Min)");
test3(MAXMIN);
XBT_INFO("***** Test 3 (Lagrange - Vegas)");
}
}
-void test(char *platform);
-void test(char *platform)
+int main(int argc, char **argv)
{
- sg_host_t hostA = NULL;
- sg_host_t hostB = NULL;
- surf_action_t actionA = NULL;
- surf_action_t actionB = NULL;
- surf_action_t actionC = NULL;
- e_surf_action_state_t stateActionA;
- e_surf_action_state_t stateActionB;
- e_surf_action_state_t stateActionC;
double now = -1.0;
+ surf_init(&argc, argv); /* Initialize some common structures */
xbt_cfg_set_parse(_sg_cfg_set, "cpu/model:Cas01");
xbt_cfg_set_parse(_sg_cfg_set, "network/model:CM02");
- parse_platform_file(platform);
- /*********************** CPU ***********************************/
- XBT_DEBUG("%p", surf_cpu_model_pm);
- hostA = sg_host_by_name("Cpu A");
- hostB = sg_host_by_name("Cpu B");
+ xbt_assert(argc >1, "Usage : %s platform.txt\n", argv[0]);
+ parse_platform_file(argv[1]);
+
+ XBT_DEBUG("CPU model: %p", surf_cpu_model_pm);
+ XBT_DEBUG("Network model: %p", surf_network_model);
+ sg_host_t hostA = sg_host_by_name("Cpu A");
+ sg_host_t hostB = sg_host_by_name("Cpu B");
/* Let's check that those two processors exist */
XBT_DEBUG("%s : %p", sg_host_get_name(hostA), hostA);
XBT_DEBUG("%s : %p", sg_host_get_name(hostB), hostB);
/* Let's do something on it */
- actionA = hostA->pimpl_cpu->execution_start(1000.0);
- actionB = hostB->pimpl_cpu->execution_start(1000.0);
- actionC = surf_host_sleep(hostB, 7.32);
+ surf_action_t actionA = hostA->pimpl_cpu->execution_start(1000.0);
+ surf_action_t actionB = hostB->pimpl_cpu->execution_start(1000.0);
+ surf_action_t actionC = surf_host_sleep(hostB, 7.32);
/* Use whatever calling style you want... */
- stateActionA = actionA->getState(); /* When you know actionA model type */
- stateActionB = actionB->getState(); /* If you're unsure about it's model type */
- stateActionC = actionC->getState(); /* When you know actionA model type */
+ e_surf_action_state_t stateActionA = actionA->getState(); /* When you know actionA model type */
+ e_surf_action_state_t stateActionB = actionB->getState(); /* If you're unsure about it's model type */
+ e_surf_action_state_t stateActionC = actionC->getState(); /* When you know actionA model type */
/* And just look at the state of these tasks */
- XBT_DEBUG("actionA : %p (%s)", actionA, string_action(stateActionA));
- XBT_DEBUG("actionB : %p (%s)", actionB, string_action(stateActionB));
- XBT_DEBUG("actionC : %p (%s)", actionB, string_action(stateActionC));
+ XBT_INFO("actionA state: %s", string_action(stateActionA));
+ XBT_INFO("actionB state: %s", string_action(stateActionB));
+ XBT_INFO("actionC state: %s", string_action(stateActionC));
- /*********************** Network *******************************/
- XBT_DEBUG("%p", surf_network_model);
/* Let's do something on it */
surf_network_model_communicate(surf_network_model, hostA, hostB, 150.0, -1.0);
- surf_solve(-1.0); /* Takes traces into account. Returns 0.0 */
+ surf_solve(-1.0);
do {
surf_action_t action = NULL;
now = surf_get_clock();
- XBT_DEBUG("Next Event : %g", now);
+ XBT_INFO("Next Event : %g", now);
XBT_DEBUG("\t CPU actions");
- while ((action =
- surf_model_extract_failed_action_set((surf_model_t)surf_cpu_model_pm))) {
- XBT_DEBUG("\t * Failed : %p", action);
- action->unref();
+ while ((action = surf_model_extract_failed_action_set((surf_model_t)surf_cpu_model_pm))) {
+ XBT_INFO(" CPU Failed action");
+ XBT_DEBUG("\t * Failed : %p", action);
+ action->unref();
}
- while ((action =
- surf_model_extract_done_action_set((surf_model_t)surf_cpu_model_pm))) {
+ while ((action = surf_model_extract_done_action_set((surf_model_t)surf_cpu_model_pm))) {
+ XBT_INFO(" CPU Done action");
XBT_DEBUG("\t * Done : %p", action);
action->unref();
}
XBT_DEBUG("\t Network actions");
- while ((action =
- surf_model_extract_failed_action_set((surf_model_t)surf_network_model))) {
+ while ((action = surf_model_extract_failed_action_set((surf_model_t)surf_network_model))) {
+ XBT_INFO(" Network Failed action");
XBT_DEBUG("\t * Failed : %p", action);
action->unref();
}
- while ((action =
- surf_model_extract_done_action_set((surf_model_t)surf_network_model))) {
+ while ((action = surf_model_extract_done_action_set((surf_model_t)surf_network_model))) {
+ XBT_INFO(" Network Failed action");
XBT_DEBUG("\t * Done : %p", action);
action->unref();
}
} while ((surf_model_running_action_set_size((surf_model_t)surf_network_model) ||
- surf_model_running_action_set_size((surf_model_t)surf_cpu_model_pm)) &&
- surf_solve(-1.0) >= 0.0);
+ surf_model_running_action_set_size((surf_model_t)surf_cpu_model_pm)) && surf_solve(-1.0) >= 0.0);
XBT_DEBUG("Simulation Terminated");
-}
-
-int main(int argc, char **argv)
-{
- surf_init(&argc, argv); /* Initialize some common structures */
- if (argc == 1) {
- fprintf(stderr, "Usage : %s platform.xml\n", argv[0]);
- return 1;
- }
- test(argv[1]);
surf_exit();
return 0;