-/* Copyright (c) 2013-2014. The SimGrid Team.
+/* Copyright (c) 2013-2015. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include <cstddef>
+
+#include <algorithm>
+
+#include <xbt/log.h>
+
#include "network_smpi.hpp"
#include "simgrid/sg_config.h"
xbt_dynar_t smpi_lat_factor = NULL;
typedef struct s_smpi_factor *smpi_factor_t;
-typedef struct s_smpi_factor {
+typedef struct s_smpi_factor { // FIXME: s_smpi_factor_multival (defined in smpi_base) should be used instead to dedupplicate this code
long factor;
double value;
} s_smpi_factor_t;
radical_elements2 = xbt_str_split(value, ":");
if (xbt_dynar_length(radical_elements2) != 2)
- xbt_die("Malformed radical for smpi factor!");
- fact.factor = atol(xbt_dynar_get_as(radical_elements2, 0, char *));
- fact.value = atof(xbt_dynar_get_as(radical_elements2, 1, char *));
+ surf_parse_error("Malformed radical for smpi factor!");
+
+ fact.factor = xbt_str_parse_int(xbt_dynar_get_as(radical_elements2, 0, char *),
+ bprintf("Invalid factor in chunk #%d: %%s", iter+1));
+ fact.value = xbt_str_parse_double(xbt_dynar_get_as(radical_elements2, 1, char *),
+ bprintf("Invalid factor value in chunk #%d: %%s", iter+1));
+
xbt_dynar_push_as(smpi_factor, s_smpi_factor_t, fact);
XBT_DEBUG("smpi_factor:\t%ld : %f", fact.factor, fact.value);
xbt_dynar_free(&radical_elements2);
if (surf_network_model)
return;
- surf_network_model = new NetworkSmpiModel();
+ surf_network_model = new simgrid::surf::NetworkSmpiModel();
net_define_callbacks();
- xbt_dynar_push(model_list, &surf_network_model);
- //network_solve = lmm_solve;
+ xbt_dynar_push(all_existing_models, &surf_network_model);
xbt_cfg_setdefault_double(_sg_cfg_set, "network/sender_gap", 10e-6);
xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775);
}
+namespace simgrid {
+namespace surf {
+
NetworkSmpiModel::NetworkSmpiModel()
: NetworkCm02Model() {
- m_haveGap=true;
+ 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;
- }
+ xbt_dict_free(&gap_lookup);
+ xbt_dynar_free(&smpi_bw_factor);
+ xbt_dynar_free(&smpi_lat_factor);
}
-void NetworkSmpiModel::gapAppend(double size, const NetworkLinkPtr link, NetworkActionPtr action)
+void NetworkSmpiModel::gapAppend(double size, Link* link, NetworkAction *act)
{
const char *src = link->getName();
xbt_fifo_t fifo;
- //surf_action_network_CM02_t last_action;
- //double bw;
+ NetworkCm02Action *action= static_cast<NetworkCm02Action*>(act);
if (sg_sender_gap > 0.0) {
if (!gap_lookup) {
}
}
-void NetworkSmpiModel::gapRemove(ActionPtr lmm_action)
+void NetworkSmpiModel::gapRemove(Action *lmm_action)
{
xbt_fifo_t fifo;
size_t size;
- NetworkCm02ActionPtr action = static_cast<NetworkCm02ActionPtr>(lmm_action);
+ NetworkCm02Action *action = static_cast<NetworkCm02Action*>(lmm_action);
if (sg_sender_gap > 0.0 && action->p_senderLinkName
&& action->p_senderFifoItem) {
double NetworkSmpiModel::bandwidthConstraint(double rate, double bound, double size)
{
- return rate < 0 ? bound : min(bound, rate * bandwidthFactor(size));
+ return rate < 0 ? bound : std::min(bound, rate * bandwidthFactor(size));
}
/************
/**********
* Action *
**********/
+
+}
+}