aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSchuyler Eldridge2020-06-25 16:10:25 -0400
committerGitHub2020-06-25 20:10:25 +0000
commit87c5d034f2d32132eed01a6f43b567af9b34cbcd (patch)
treee348b349e5da62fc76c3eb7dcbdfd256136e0262
parent672e2a9a4e8876580d97269d0e3d218a7c5ce491 (diff)
Batch renames in LowerTypes (#1718)
* Batch renames in LowerTypes Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com> * Add benchmarking for LowerTypes Add infrastructure of benchmarking Transforms (in addition to existing infra for Passes). Also run System.gc between each timed benchmark to improve stability. Co-authored-by: Jack Koenig <koenig@sifive.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
-rw-r--r--benchmark/src/main/scala/firrtl/benchmark/hot/TransformBenchmark.scala27
-rw-r--r--benchmark/src/main/scala/firrtl/benchmark/hot/util/package.scala1
-rw-r--r--src/main/scala/firrtl/passes/LowerTypes.scala17
3 files changed, 37 insertions, 8 deletions
diff --git a/benchmark/src/main/scala/firrtl/benchmark/hot/TransformBenchmark.scala b/benchmark/src/main/scala/firrtl/benchmark/hot/TransformBenchmark.scala
new file mode 100644
index 00000000..05b759c6
--- /dev/null
+++ b/benchmark/src/main/scala/firrtl/benchmark/hot/TransformBenchmark.scala
@@ -0,0 +1,27 @@
+// See LICENSE for license details.
+
+package firrtl
+package benchmark
+package hot
+
+import firrtl._
+import firrtl.passes.LowerTypes
+import firrtl.stage.TransformManager
+
+import firrtl.benchmark.util._
+
+abstract class TransformBenchmark(factory: () => Transform) extends App {
+ val inputFile = args(0)
+ val warmup = args(1).toInt
+ val runs = args(2).toInt
+
+ val input = filenameToCircuit(inputFile)
+ val inputState = CircuitState(input, ChirrtlForm)
+
+ val manager = new TransformManager(factory().prerequisites)
+ val preState = manager.execute(inputState)
+
+ hot.util.benchmark(warmup, runs)(factory().transform(preState))
+}
+
+object LowerTypesBenchmark extends TransformBenchmark(() => LowerTypes)
diff --git a/benchmark/src/main/scala/firrtl/benchmark/hot/util/package.scala b/benchmark/src/main/scala/firrtl/benchmark/hot/util/package.scala
index c05b8359..911bd03a 100644
--- a/benchmark/src/main/scala/firrtl/benchmark/hot/util/package.scala
+++ b/benchmark/src/main/scala/firrtl/benchmark/hot/util/package.scala
@@ -15,6 +15,7 @@ package object util {
// Benchmark
val times: Array[Double] = Array.fill(nRun)(0.0)
for (i <- 0 until nRun) {
+ System.gc
val (t, res) = time(f)
times(i) = t
println(f"Benchmark run $i took $t%.1f ms")
diff --git a/src/main/scala/firrtl/passes/LowerTypes.scala b/src/main/scala/firrtl/passes/LowerTypes.scala
index ccfe5828..29792d17 100644
--- a/src/main/scala/firrtl/passes/LowerTypes.scala
+++ b/src/main/scala/firrtl/passes/LowerTypes.scala
@@ -55,16 +55,16 @@ object LowerTypes extends Transform with DependencyAPIMigration {
val name = root + loweredName(e)
renames.rename(root + e.serialize, name)
Seq(name)
- case (t: BundleType) => t.fields.flatMap { f =>
- val subNames = renameExps(renames, WSubField(e, f.name, f.tpe, times(flow(e), f.flip)), root)
+ case (t: BundleType) =>
+ val subNames = t.fields.flatMap { f =>
+ renameExps(renames, WSubField(e, f.name, f.tpe, times(flow(e), f.flip)), root)
+ }
renames.rename(root + e.serialize, subNames)
subNames
- }
- case (t: VectorType) => (0 until t.size).flatMap { i =>
- val subNames = renameExps(renames, WSubIndex(e, i, t.tpe,flow(e)), root)
+ case (t: VectorType) =>
+ val subNames = (0 until t.size).flatMap { i => renameExps(renames, WSubIndex(e, i, t.tpe,flow(e)), root) }
renames.rename(root + e.serialize, subNames)
subNames
- }
}
private def renameMemExps(renames: RenameMap, e: Expression, portAndField: Expression): Seq[String] = e.tpe match {
@@ -224,9 +224,10 @@ object LowerTypes extends Transform with DependencyAPIMigration {
val d = WRef(mem.name, sx.dataType)
tail match {
case None =>
- create_exps(mem.name, sx.dataType) foreach { x =>
- renames.rename(e.serialize, s"${loweredName(x)}.${port.serialize}.${field.serialize}")
+ val names = create_exps(mem.name, sx.dataType).map { x =>
+ s"${loweredName(x)}.${port.serialize}.${field.serialize}"
}
+ renames.rename(e.serialize, names)
case Some(_) =>
renameMemExps(renames, d, mergeRef(port, field))
}