Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Bug fix, corrected jitter works for each linkk separately.
authorvelho <velho@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 14 Oct 2009 18:34:16 +0000 (18:34 +0000)
committervelho <velho@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Wed, 14 Oct 2009 18:34:16 +0000 (18:34 +0000)
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
src/surf/gtnets/gtnets_simulator.h

index bc66408..d0f1967 100644 (file)
@@ -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<int, Uniform*>::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<int, Node*>::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;
 }
 
index 8765b96..bcf9036 100644 (file)
@@ -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_;