Skip to content
This repository has been archived by the owner on Aug 21, 2024. It is now read-only.

Out of heap memory when generating VCD waveform #441

Open
liuxd17thu opened this issue Aug 1, 2023 · 0 comments
Open

Out of heap memory when generating VCD waveform #441

liuxd17thu opened this issue Aug 1, 2023 · 0 comments

Comments

@liuxd17thu
Copy link

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)
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant