From f22d3bb9c3a010bfe9681cf7b02e0fc39a694e49 Mon Sep 17 00:00:00 2001 From: Andreas Hansson Date: Mon, 7 Jan 2013 13:05:35 -0500 Subject: [PATCH] cpu: Fix the traffic gen read percentage This patch fixes the computation that determines whether to perform a read or a write such that the two corner cases (0 and 100) are both more efficient and handled correctly. --- src/cpu/testers/traffic_gen/traffic_gen.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/cpu/testers/traffic_gen/traffic_gen.cc b/src/cpu/testers/traffic_gen/traffic_gen.cc index e0657822c..59a2ae6d5 100644 --- a/src/cpu/testers/traffic_gen/traffic_gen.cc +++ b/src/cpu/testers/traffic_gen/traffic_gen.cc @@ -370,10 +370,11 @@ void TrafficGen::StateGraph::LinearGen::execute() { // choose if we generate a read or a write here - bool isRead = random_mt.random(0, 100) < readPercent; + bool isRead = readPercent != 0 && + (readPercent == 100 || random_mt.random(0, 100) < readPercent); - if (readPercent == 0) - assert(!isRead); + assert((readPercent == 0 && !isRead) || (readPercent == 100 && isRead) || + readPercent != 100); DPRINTF(TrafficGen, "LinearGen::execute: %c to addr %x, size %d\n", isRead ? 'r' : 'w', nextAddr, blocksize); @@ -442,10 +443,11 @@ void TrafficGen::StateGraph::RandomGen::execute() { // choose if we generate a read or a write here - bool isRead = random_mt.random(0, 100) < readPercent; + bool isRead = readPercent != 0 && + (readPercent == 100 || random_mt.random(0, 100) < readPercent); - if (readPercent == 0) - assert(!isRead); + assert((readPercent == 0 && !isRead) || (readPercent == 100 && isRead) || + readPercent != 100); // address of the request Addr addr = random_mt.random(startAddr, endAddr - 1); -- 2.30.2