cpu: Fix state transition bug in the traffic generator
authorAndreas Sandberg <andreas@sandberg.pp.se>
Tue, 12 Mar 2013 17:41:29 +0000 (18:41 +0100)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Tue, 12 Mar 2013 17:41:29 +0000 (18:41 +0100)
The traffic generator used to incorrectly determine the next state in
when state 0 had a non-zero probability. Due to the way the next
transition was determined, state 0 could never be entered other than
as an initial state. This changeset updates the transitition() method
to correctly handle such cases and cases where the transition matrix
is a 1x1 matrix.

src/cpu/testers/traffic_gen/traffic_gen.cc

index d9d04085847b9eb081a8283cfa760683777779a4..292fe54e06b733cfd3aa9ea0f793efad17a6e2a0 100644 (file)
@@ -324,13 +324,14 @@ TrafficGen::StateGraph::transition()
     // determine next state
     double p = random_mt.gen_real1();
     assert(currState < transitionMatrix.size());
-    double cumulative = transitionMatrix[currState][0];
-    size_t i = 1;
-    while (p < cumulative && i != transitionMatrix[currState].size()) {
+    double cumulative = 0.0;
+    size_t i = 0;
+    do {
         cumulative += transitionMatrix[currState][i];
         ++i;
-    }
-    enterState(i);
+    } while (cumulative < p && i < transitionMatrix[currState].size());
+
+    enterState(i - 1);
 }
 
 void