treadle
treadle copied to clipboard
Out of heap memory when generating VCD waveform
I'm working on a large Chisel design (a gpgpu with smallest scale) and running a pretty long testbench (~3800 cycles). Then I find it always throws out a OOM error near the end of simulation. From the stack trace below, I think there's something wrong when generating vcd file.
I have raise the memory limit to -Xmx32G & -Xss192m, but it doesn't help. There is also enough spare system memory on my PC during the whole simulation (max usage of the system in total: 11GB / 16GB).
My project is using chisel3-3.5.0, chiseltest-0.5.0 and default backend (treadle). ~~Verilator backend spends much more memory to start and my PC crashes~~
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3745)
at java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:172)
at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:178)
at scala.collection.mutable.StringBuilder.append(StringBuilder.scala:213)
at treadle.vcd.VCD.$anonfun$serializeChanges$3(VCD.scala:632)
at treadle.vcd.VCD$$Lambda$11723/0x0000000840f7b040.apply(Unknown Source)
at scala.collection.mutable.HashSet.foreach(HashSet.scala:79)
at treadle.vcd.VCD.$anonfun$serializeChanges$2(VCD.scala:631)
at treadle.vcd.VCD.$anonfun$serializeChanges$2$adapted(VCD.scala:629)
at treadle.vcd.VCD$$Lambda$11722/0x0000000840f7f040.apply(Unknown Source)
at scala.Option.foreach(Option.scala:407)
at treadle.vcd.VCD.$anonfun$serializeChanges$1(VCD.scala:629)
at treadle.vcd.VCD$$Lambda$11721/0x0000000840f7e840.apply$mcVJ$sp(Unknown Source)
at scala.runtime.java8.JFunction1$mcVJ$sp.apply(JFunction1$mcVJ$sp.java:23)
at scala.collection.immutable.List.foreach(List.scala:431)
at treadle.vcd.VCD.serializeChanges(VCD.scala:628)
at treadle.vcd.VCD.serialize(VCD.scala:673)
at treadle.vcd.VCD.write(VCD.scala:678)
at treadle.executable.ExecutionEngine.$anonfun$writeVCD$1(ExecutionEngine.scala:157)
at treadle.executable.ExecutionEngine.$anonfun$writeVCD$1$adapted(ExecutionEngine.scala:156)
at treadle.executable.ExecutionEngine$$Lambda$11716/0x00000008403b6840.apply(Unknown Source)
at scala.Option.foreach(Option.scala:407)
at treadle.executable.ExecutionEngine.writeVCD(ExecutionEngine.scala:156)
at treadle.TreadleTester.finish(TreadleTester.scala:472)
at chiseltest.simulator.TreadleContext.finish(TreadleSimulator.scala:91)
at chiseltest.internal.GenericBackend.run(GenericBackend.scala:221)
at chiseltest.internal.Context$.$anonfun$run$1(Testers2.scala:34)
at chiseltest.internal.Context$$$Lambda$11554/0x000000084170c440.apply(Unknown Source)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
at chiseltest.internal.Context$.run(Testers2.scala:34)
at chiseltest.ChiselScalatestTester.chiseltest$ChiselScalatestTester$$runTest(ChiselScalatestTester.scala:103)