From 02519cb2c391d94f3b8d6042f6119ffc71ebab97 Mon Sep 17 00:00:00 2001 From: velho Date: Wed, 14 Oct 2009 18:34:16 +0000 Subject: [PATCH] Bug fix, corrected jitter works for each linkk separately. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6770 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/surf/gtnets/gtnets_simulator.cc | 18 +++++++++++++----- src/surf/gtnets/gtnets_simulator.h | 3 +-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/surf/gtnets/gtnets_simulator.cc b/src/surf/gtnets/gtnets_simulator.cc index bc66408814..d0f1967718 100644 --- a/src/surf/gtnets/gtnets_simulator.cc +++ b/src/surf/gtnets/gtnets_simulator.cc @@ -35,7 +35,6 @@ GTSim::GTSim(){ nflow_ = 0; sim_ = new Simulator(); topo_ = new GTNETS_Topology(); - uniform_jitter_ = NULL; jitter_ = 0; jitter_seed_ = 10; @@ -60,6 +59,13 @@ GTSim::~GTSim(){ while (!gtnets_links_.empty()) gtnets_links_.erase(gtnets_links_.begin()); + map::iterator it2; + for (it2 = uniform_jitter_generator_.begin(); it2 != uniform_jitter_generator_.end(); it2++){ + delete it2->second; + } + while (!uniform_jitter_generator_.empty()) + uniform_jitter_generator_.erase(uniform_jitter_generator_.begin()); + map::iterator it3; for (it3 = gtnets_nodes_.begin(); it3 != gtnets_nodes_.end(); it3++){ delete it3->second; @@ -105,12 +111,13 @@ int GTSim::add_link(int id, double bandwidth, double latency){ DEBUG2("Using jitter %f, and seed %u", jitter_, jitter_seed_); double min = -1*jitter_*latency; double max = jitter_*latency; - if(uniform_jitter_ == NULL){ + //initialize the random seed only once, when adding the first link + if(uniform_jitter_generator_.empty()){ Random::GlobalSeed(jitter_seed_ , jitter_seed_+1, jitter_seed_+2, - jitter_seed_+3, jitter_seed_+4, jitter_seed_+5); - uniform_jitter_ = new Uniform(min,max); + jitter_seed_+3, jitter_seed_+4, jitter_seed_+5); } - gtnets_links_[id]->Jitter((const Random &) *uniform_jitter_); + uniform_jitter_generator_[id] = new Uniform(min,max); + gtnets_links_[id]->Jitter((const Random &) *(uniform_jitter_generator_[id])); } return 0; } @@ -312,6 +319,7 @@ int GTSim::run(double delta){ } void GTSim::set_jitter(double d){ + xbt_assert1(((0 <= d)&&(d <= 1)), "The jitter value must be within interval [0.0;1.0], got %f", d); jitter_ = d; } diff --git a/src/surf/gtnets/gtnets_simulator.h b/src/surf/gtnets/gtnets_simulator.h index 8765b96bcd..bcf9036068 100644 --- a/src/surf/gtnets/gtnets_simulator.h +++ b/src/surf/gtnets/gtnets_simulator.h @@ -64,13 +64,12 @@ private: int nflow_; double jitter_; int jitter_seed_; - Uniform *uniform_jitter_; + map< int, Uniform * > uniform_jitter_generator_; map < int, TCPServer * >gtnets_servers_; map < int, TCPSend * >gtnets_clients_; map < int, Linkp2p * >gtnets_links_; map < int, Node * >gtnets_nodes_; - //added by pedro in order to get statistics map < void *, int >gtnets_action_to_flow_; map < int, void *>gtnets_metadata_; -- 2.20.1