From ddea19825db5430a69dc8943b5882d897c57c88c Mon Sep 17 00:00:00 2001 From: Jerry Zhao Date: Mon, 22 Feb 2021 01:30:47 -0800 Subject: [PATCH] Macrocompiler should prioritize memories with no masks with DefaultCostMetric --- macros/src/main/scala/CostMetric.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/macros/src/main/scala/CostMetric.scala b/macros/src/main/scala/CostMetric.scala index b80324aa..9283143a 100644 --- a/macros/src/main/scala/CostMetric.scala +++ b/macros/src/main/scala/CostMetric.scala @@ -124,6 +124,10 @@ object DefaultMetric extends CostMetric with CostMetricCompanion { else (mem.src.width/p)*m //Waste the extra maskbits } } + val maskPenalty = (memMask, libMask) match { + case (None, Some(m)) => 0.001 + case (_, _) => 0 + } val depthCost = math.ceil(mem.src.depth.toDouble / lib.src.depth.toDouble) val widthCost = math.ceil(memWidth.toDouble / lib.src.width.toDouble) val bitsCost = (lib.src.depth * lib.src.width).toDouble @@ -132,7 +136,7 @@ object DefaultMetric extends CostMetric with CostMetricCompanion { val bitsWasted = depthCost*widthCost*bitsCost - requestedBits val wastedConst = 0.05 // 0 means waste as few bits with no regard for instance count val costPerInst = wastedConst*depthCost*widthCost - Some(1.0*bitsWasted/requestedBits+costPerInst) + Some(1.0*bitsWasted/requestedBits+costPerInst + maskPenalty) } override def commandLineParams = Map()