+/* Copyright (c) 2013-2014. 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 "network_smpi.hpp"
#include "simgrid/sg_config.h"
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 NetworkLinkPtr link, NetworkActionPtr action)
{
- const char *src = link->m_name;
+ const char *src = link->getName();
xbt_fifo_t fifo;
//surf_action_network_CM02_t last_action;
//double bw;
}
}
-void NetworkSmpiModel::gapRemove(ActionLmmPtr lmm_action)
+void NetworkSmpiModel::gapRemove(ActionPtr lmm_action)
{
xbt_fifo_t fifo;
size_t size;
- NetworkCm02ActionLmmPtr action = (NetworkCm02ActionLmmPtr)(lmm_action);
+ NetworkCm02ActionPtr action = static_cast<NetworkCm02ActionPtr>(lmm_action);
if (sg_sender_gap > 0.0 && action->p_senderLinkName
&& action->p_senderFifoItem) {
return current;
}
+
double NetworkSmpiModel::latencyFactor(double size)
{
if (!smpi_lat_factor)