From e5fb6752d613a6f85e2f93b4c01836ac59a8c90c Mon Sep 17 00:00:00 2001 From: Arthur Perais Date: Wed, 21 Dec 2016 15:04:06 -0600 Subject: cpu: Clarify meaning of cachePorts variable in lsq_unit.hh of O3 cachePorts currently constrains the number of store packets written to the D-Cache each cycle), but loads currently affect this variable. This leads to unexpected congestion (e.g., setting cachePorts to a realistic 1 will in fact allow a store to WB only if no loads have accessed the D-Cache this cycle). In the absence of arbitration, this patch decouples how many loads can be done per cycle from how many stores can be done per cycle. Signed-off-by: Jason Lowe-Power --- src/cpu/o3/lsq_unit_impl.hh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/cpu/o3/lsq_unit_impl.hh') diff --git a/src/cpu/o3/lsq_unit_impl.hh b/src/cpu/o3/lsq_unit_impl.hh index 73be5e56f..56f12cbb4 100644 --- a/src/cpu/o3/lsq_unit_impl.hh +++ b/src/cpu/o3/lsq_unit_impl.hh @@ -176,7 +176,7 @@ LSQUnit::init(O3CPU *cpu_ptr, IEW *iew_ptr, DerivO3CPUParams *params, depCheckShift = params->LSQDepCheckShift; checkLoads = params->LSQCheckLoads; - cachePorts = params->cachePorts; + cacheStorePorts = params->cacheStorePorts; needsTSO = params->needsTSO; resetState(); @@ -193,7 +193,7 @@ LSQUnit::resetState() storeHead = storeWBIdx = storeTail = 0; - usedPorts = 0; + usedStorePorts = 0; retryPkt = NULL; memDepViolator = NULL; @@ -792,7 +792,7 @@ LSQUnit::writebackStores() storeQueue[storeWBIdx].inst && storeQueue[storeWBIdx].canWB && ((!needsTSO) || (!storeInFlight)) && - usedPorts < cachePorts) { + usedStorePorts < cacheStorePorts) { if (isStoreBlocked) { DPRINTF(LSQUnit, "Unable to write back any more stores, cache" @@ -810,7 +810,7 @@ LSQUnit::writebackStores() continue; } - ++usedPorts; + ++usedStorePorts; if (storeQueue[storeWBIdx].inst->isDataPrefetch()) { incrStIdx(storeWBIdx); @@ -950,8 +950,8 @@ LSQUnit::writebackStores() assert(snd_data_pkt); // Ensure there are enough ports to use. - if (usedPorts < cachePorts) { - ++usedPorts; + if (usedStorePorts < cacheStorePorts) { + ++usedStorePorts; if (sendStore(snd_data_pkt)) { storePostSend(snd_data_pkt); } else { @@ -975,7 +975,7 @@ LSQUnit::writebackStores() } // Not sure this should set it to 0. - usedPorts = 0; + usedStorePorts = 0; assert(stores >= 0 && storesToWB >= 0); } -- cgit v1.2.3