static int factor_cmp(const void *pa, const void *pb)
{
- return (((s_smpi_factor_t*)pa)->factor > ((s_smpi_factor_t*)pb)->factor);
+ return (((s_smpi_factor_t*)pa)->factor > ((s_smpi_factor_t*)pb)->factor) ? 1 :
+ (((s_smpi_factor_t*)pa)->factor < ((s_smpi_factor_t*)pb)->factor) ? -1 : 0;
}
xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775);
}
-void NetworkSmpiModel::gapAppend(double size, const NetworkCm02LinkLmmPtr link, NetworkCm02ActionLmmPtr action)
+NetworkSmpiModel::NetworkSmpiModel()
+ : NetworkCm02Model() {
+ m_haveGap=true;
+}
+
+NetworkSmpiModel::~NetworkSmpiModel(){
+ if (gap_lookup) {
+ xbt_dict_free(&gap_lookup);
+ }
+ if (smpi_bw_factor) {
+ xbt_dynar_free(&smpi_bw_factor);
+ smpi_bw_factor = NULL;
+ }
+ if (smpi_lat_factor) {
+ xbt_dynar_free(&smpi_lat_factor);
+ smpi_lat_factor = NULL;
+ }
+}
+
+void NetworkSmpiModel::gapAppend(double size, const NetworkLinkLmmPtr link, NetworkActionLmmPtr action)
{
const char *src = link->m_name;
xbt_fifo_t fifo;
if (sg_sender_gap > 0.0) {
if (!gap_lookup) {
- gap_lookup = xbt_dict_new();
+ gap_lookup = xbt_dict_new_homogeneous(NULL);
}
fifo = (xbt_fifo_t) xbt_dict_get_or_null(gap_lookup, src);
action->m_senderGap = 0.0;
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, current);
+ XBT_DEBUG("%f <= %ld return %f", size, fact.factor, current);
return current;
}else
current=fact.value;
}
- XBT_DEBUG("%lf > %ld return %f", size, fact.factor, current);
+ XBT_DEBUG("%f > %ld return %f", size, fact.factor, current);
return current;
}
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, current);
+ XBT_DEBUG("%f <= %ld return %f", size, fact.factor, current);
return current;
}else
current=fact.value;
}
- XBT_DEBUG("%lf > %ld return %f", size, fact.factor, current);
+ XBT_DEBUG("%f > %ld return %f", size, fact.factor, current);
return current;
}