【发布时间】:2023-03-08 11:14:01
【问题描述】:
我正在尝试对一个 110MB 的 Firrtl 文件运行 verilog 编译器传递,尽管给它一个宽敞的 12G 堆空间可供使用,但我一直在出现内存不足的错误。似乎问题在于解析器,特别是 ANTLR,生成了太多的 ArrayList。对于 Firrtl 电路定义来说,110MB 是否被认为太大了?
该文件是通过带有--compiler=high 的 Firrtl 使用 Chisel 生成的。我的 Firrtl 版本是 1.2-SNAPSHOT(本地构建),Chisel 是 3.2-SNAPSHOT(也是本地构建)。
$ JAVA_OPTS="-Xms8G -Xmx12G" ../firrtl/utils/bin/firrtl -i mnist_cnn_v4.fir -o mnist_cnn_v4.v -X verilog --no-check-comb-loops --no-dce --info-mode=ignore -ll Trace
> Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3688)
at java.base/java.util.ArrayList.grow(ArrayList.java:236)
at java.base/java.util.ArrayList.grow(ArrayList.java:241)
at java.base/java.util.ArrayList.add(ArrayList.java:466)
at java.base/java.util.ArrayList.add(ArrayList.java:479)
at org.antlr.v4.runtime.ParserRuleContext.addAnyChild(ParserRuleContext.java:134)
at org.antlr.v4.runtime.ParserRuleContext.addChild(ParserRuleContext.java:145)
at org.antlr.v4.runtime.Parser.consume(Parser.java:584)
at firrtl.antlr.FIRRTLParser.intLit(FIRRTLParser.java:2870)
at firrtl.antlr.FIRRTLParser.type(FIRRTLParser.java:600)
at firrtl.antlr.FIRRTLParser.field(FIRRTLParser.java:740)
at firrtl.antlr.FIRRTLParser.type(FIRRTLParser.java:647)
at firrtl.antlr.FIRRTLParser.field(FIRRTLParser.java:740)
at firrtl.antlr.FIRRTLParser.type(FIRRTLParser.java:647)
at firrtl.antlr.FIRRTLParser.field(FIRRTLParser.java:740)
at firrtl.antlr.FIRRTLParser.type(FIRRTLParser.java:647)
at firrtl.antlr.FIRRTLParser.port(FIRRTLParser.java:418)
at firrtl.antlr.FIRRTLParser.module(FIRRTLParser.java:287)
at firrtl.antlr.FIRRTLParser.circuit(FIRRTLParser.java:189)
at firrtl.Parser$.$anonfun$parseCharStream$1(Parser.scala:42)
at firrtl.Parser$$$Lambda$94/1642030774.apply(Unknown Source)
at firrtl.Utils$.time(Utils.scala:186)
at firrtl.Parser$.parseCharStream(Parser.scala:33)
at firrtl.Parser$.parseFile(Parser.scala:25)
at firrtl.Driver$.$anonfun$getCircuit$5(Driver.scala:200)
at firrtl.Driver$$$Lambda$93/1571967156.apply(Unknown Source)
at scala.Option.getOrElse(Option.scala:121)
at firrtl.Driver$.$anonfun$getCircuit$3(Driver.scala:183)
at firrtl.Driver$$$Lambda$91/802600647.apply(Unknown Source)
at scala.Option.getOrElse(Option.scala:121)
at firrtl.Driver$.$anonfun$getCircuit$1(Driver.scala:183)
at firrtl.Driver$$$Lambda$88/2041416495.apply(Unknown Source)
【问题讨论】:
-
您可以尝试将此行添加到您的
bashrc文件中:export JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -Xmx8G -XX:MaxPermSize=1G -Xss2M"注意:当您运行Chisel时,这会引发警告说OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=1G; support was removed in 8.0,但它对我来说完美无缺跨度>
标签: jvm out-of-memory chisel