cpu: Fix state transition bug in the traffic generator

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.
This commit is contained in:
Andreas Sandberg 2013-03-12 18:41:29 +01:00
parent 53a0597805
commit fc6f569d94

View 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