/**********************/
/* SMPI callbacks */
/**********************/
+
+static int factor_cmp(const void *pa, const void *pb)
+{
+ return (((s_smpi_factor_t*)pa)->factor > ((s_smpi_factor_t*)pb)->factor);
+}
+
+
static xbt_dynar_t parse_factor(const char *smpi_coef_string)
{
char *value = NULL;
xbt_dynar_free(&radical_elements2);
}
xbt_dynar_free(&radical_elements);
+ iter=0;
+ xbt_dynar_sort(smpi_factor, &factor_cmp);
+ xbt_dynar_foreach(smpi_factor, iter, fact) {
+ XBT_DEBUG("ordered smpi_factor:\t%ld : %f", fact.factor, fact.value);
+
+ }
return smpi_factor;
}
{
if (!smpi_bw_factor)
smpi_bw_factor =
- parse_factor(xbt_cfg_get_string(_surf_cfg_set, "smpi/bw_factor"));
+ parse_factor(surf_cfg_get_string("smpi/bw_factor"));
unsigned int iter = 0;
s_smpi_factor_t fact;
+ double current=1.0;
xbt_dynar_foreach(smpi_bw_factor, iter, fact) {
- if (size >= fact.factor) {
- XBT_DEBUG("%lf >= %ld return %f", size, fact.factor, fact.value);
- return fact.value;
- }
+ if (size <= fact.factor) {
+ XBT_DEBUG("%lf <= %ld return %f", size, fact.factor, current);
+ return current;
+ }else
+ current=fact.value;
}
+ XBT_DEBUG("%lf > %ld return %f", size, fact.factor, current);
- return 1.0;
+ return current;
}
static double smpi_latency_factor(double size)
{
if (!smpi_lat_factor)
smpi_lat_factor =
- parse_factor(xbt_cfg_get_string(_surf_cfg_set, "smpi/lat_factor"));
+ parse_factor(surf_cfg_get_string("smpi/lat_factor"));
unsigned int iter = 0;
s_smpi_factor_t fact;
+ double current=1.0;
xbt_dynar_foreach(smpi_lat_factor, iter, fact) {
- if (size >= fact.factor) {
- XBT_DEBUG("%lf >= %ld return %f", size, fact.factor, fact.value);
- return fact.value;
- }
+ if (size <= fact.factor) {
+ XBT_DEBUG("%lf <= %ld return %f", size, fact.factor, current);
+ return current;
+ }else
+ current=fact.value;
}
+ XBT_DEBUG("%lf > %ld return %f", size, fact.factor, current);
- return 1.0;
+ return current;
}
/**--------- <copy/paste C code snippet in surf/network.c> -----------*/
{
const char *src = link->lmm_resource.generic_resource.name;
xbt_fifo_t fifo;
- surf_action_network_CM02_t last_action;
- double bw;
+ //surf_action_network_CM02_t last_action;
+ //double bw;
if (sg_sender_gap > 0.0) {
if (!gap_lookup) {
action->sender.gap = 0.0;
if (fifo && xbt_fifo_size(fifo) > 0) {
/* Compute gap from last send */
- last_action =
+ /*last_action =
(surf_action_network_CM02_t)
- xbt_fifo_get_item_content(xbt_fifo_get_last_item(fifo));
- bw = net_get_link_bandwidth(link);
- action->sender.gap =
- last_action->sender.gap + max(sg_sender_gap,
- last_action->sender.size / bw);
+ xbt_fifo_get_item_content(xbt_fifo_get_last_item(fifo));*/
+ // bw = net_get_link_bandwidth(link);
+ action->sender.gap = sg_sender_gap;
+ /* max(sg_sender_gap,last_action->sender.size / bw);*/
action->latency += action->sender.gap;
}
/* Append action as last send */
- action->sender.link_name = link->lmm_resource.generic_resource.name;
+ /*action->sender.link_name = link->lmm_resource.generic_resource.name;
fifo =
(xbt_fifo_t) xbt_dict_get_or_null(gap_lookup,
action->sender.link_name);
fifo = xbt_fifo_new();
xbt_dict_set(gap_lookup, action->sender.link_name, fifo, NULL);
}
- action->sender.fifo_item = xbt_fifo_push(fifo, action);
+ action->sender.fifo_item = xbt_fifo_push(fifo, action);*/
action->sender.size = size;
}
}