X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4fd322d14d700ea751c30758ab86ec5e7251f6fa..627857967e297ea0191d97addc4519efbf2d5dc2:/src/surf/network_ib.cpp diff --git a/src/surf/network_ib.cpp b/src/surf/network_ib.cpp index fa94194f0c..70782d1115 100644 --- a/src/surf/network_ib.cpp +++ b/src/surf/network_ib.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2014-2020. 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. */ @@ -20,10 +20,9 @@ static void IB_create_host_callback(simgrid::s4u::Host const& host) using simgrid::kernel::resource::NetworkIBModel; static int id=0; - IBNode* act = new IBNode(id); + ((NetworkIBModel*)surf_network_model)->active_nodes.emplace(host.get_name(), IBNode(id)); id++; - ((NetworkIBModel*)surf_network_model)->active_nodes.insert({host.get_name(), act}); } static void IB_action_state_changed_callback(simgrid::kernel::resource::NetworkAction& action, @@ -42,29 +41,14 @@ static void IB_action_state_changed_callback(simgrid::kernel::resource::NetworkA ((NetworkIBModel*)surf_network_model)->active_comms.erase(&action); } -static void IB_action_init_callback(simgrid::kernel::resource::NetworkAction& action, simgrid::s4u::Host* src, - simgrid::s4u::Host* dst) +static void IB_action_init_callback(simgrid::kernel::resource::NetworkAction& action, const simgrid::s4u::Host* src, + const simgrid::s4u::Host* dst) { simgrid::kernel::resource::NetworkIBModel* ibModel = (simgrid::kernel::resource::NetworkIBModel*)surf_network_model; - simgrid::kernel::resource::IBNode* act_src; - simgrid::kernel::resource::IBNode* act_dst; - - auto asrc = ibModel->active_nodes.find(src->get_name()); - if (asrc != ibModel->active_nodes.end()) { - act_src = asrc->second; - } else { - throw std::out_of_range(std::string("Could not find '") + src->get_cname() + "' active comms !"); - } - - auto adst = ibModel->active_nodes.find(dst->get_name()); - if (adst != ibModel->active_nodes.end()) { - act_dst = adst->second; - } else { - throw std::out_of_range(std::string("Could not find '") + dst->get_cname() + "' active comms !"); - } + simgrid::kernel::resource::IBNode* act_src = &ibModel->active_nodes.at(src->get_name()); + simgrid::kernel::resource::IBNode* act_dst = &ibModel->active_nodes.at(dst->get_name()); ibModel->active_comms[&action] = std::make_pair(act_src, act_dst); - ibModel->updateIBfactors(&action, act_src, act_dst, 0); } @@ -110,32 +94,26 @@ NetworkIBModel::NetworkIBModel() : NetworkSmpiModel() try { Be = std::stod(radical_elements.front()); - } catch (std::invalid_argument& ia) { + } catch (const std::invalid_argument& ia) { throw std::invalid_argument(std::string("First part of smpi/IB-penalty-factors is not numerical:") + ia.what()); } try { Bs = std::stod(radical_elements.at(1)); - } catch (std::invalid_argument& ia) { + } catch (const std::invalid_argument& ia) { throw std::invalid_argument(std::string("Second part of smpi/IB-penalty-factors is not numerical:") + ia.what()); } try { ys = std::stod(radical_elements.back()); - } catch (std::invalid_argument& ia) { + } catch (const std::invalid_argument& ia) { throw std::invalid_argument(std::string("Third part of smpi/IB-penalty-factors is not numerical:") + ia.what()); } } -NetworkIBModel::~NetworkIBModel() -{ - for (auto const& instance : active_nodes) - delete instance.second; -} - void NetworkIBModel::computeIBfactors(IBNode* root) { - double num_comm_out = static_cast(root->ActiveCommsUp.size()); + double num_comm_out = root->ActiveCommsUp.size(); double max_penalty_out = 0.0; // first, compute all outbound penalties to get their max for (std::vector::iterator it = root->ActiveCommsUp.begin(); it != root->ActiveCommsUp.end(); ++it) {