stanford-ppl / spatial

Spatial: "Specify Parameterized Accelerators Through Inordinately Abstract Language"
https://spatial.stanford.edu
MIT License
271 stars 33 forks source link

Unable to compile HelloSpatial when run "bin/spatial HelloSpatial --synth --fpga=ZCU" #311

Closed yrq0208 closed 4 years ago

yrq0208 commented 4 years ago

Hi all,

I have encountered this "java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded" error when I tried to compile HelloSpatial using Spatial. This seems to be a known issue? I have tried using "export _JAVA_OPTIONS="-Xmx10g -Xss8912k -Xms4g" " but it doesn't seem to solve the problem. Some more details are as follows,

[info] Loading settings from plugins.sbt ... [info] Loading project definition from /home/ruiqi/spatial/project [info] Loading settings from build.sbt ... [info] Set current project to spatial (in build file:/home/ruiqi/spatial/) [info] Set current project to apps (in build file:/home/ruiqi/spatial/) [success] Total time: 11 s, completed 11-Jul-2020 12:06:35 [info] Loading settings from plugins.sbt ... [info] Loading project definition from /home/ruiqi/spatial/project [info] Loading settings from build.sbt ... [info] Set current project to spatial (in build file:/home/ruiqi/spatial/) [info] Set current project to test (in build file:/home/ruiqi/spatial/) [info] Compiling 272 Scala sources to /home/ruiqi/spatial/test/target/scala-2.12/test-classes ... [info] /home/ruiqi/spatial/test/spatial/tests/feature/math/FixBasics2.scala:69:9: Type annotation recommended for var declaration. [info] var allgood = true [info] ^ [info] /home/ruiqi/spatial/test/spatial/tests/feature/math/FloatBasics2.scala:70:9: Type annotation recommended for var declaration. [info] var allgood = true [info] ^ [warn] /home/ruiqi/spatial/test/spatial/tests/feature/streaming/FilterStream1D.scala:49:97: postfix operator !! should be enabled [warn] by making the implicit value scala.language.postfixOps visible. [warn] This can be achieved by adding the import clause 'import scala.language.postfixOps' [warn] or by setting the compiler option -language:postfixOps. [warn] See the Scaladoc for value scala.language.postfixOps for a discussion [warn] why the feature should be explicitly enabled. [warn] val filename = "cat ../src/findedges.py | grep \"calibfile =\" | sed \"s/calibfile = //g\"" !! [warn] ^ [warn] /home/ruiqi/spatial/test/spatial/tests/feature/streaming/FilterStream1D.scala:52:35: postfix operator ! should be enabled [warn] by making the implicit value scala.language.postfixOps visible. [warn] "python3 ../src/findedges.py" ! [warn] ^ [warn] /home/ruiqi/spatial/test/spatial/tests/feature/streaming/FilterStream1D.scala:57:43: postfix operator ! should be enabled [warn] by making the implicit value scala.language.postfixOps visible. [warn] s"echo EXAMPLE SCALA METAPROGRAMMING" ! [warn] ^ [error] ## Exception when compiling 272 sources to /home/ruiqi/spatial/test/target/scala-2.12/test-classes [error] GC overhead limit exceeded [error] scala.reflect.internal.Symbols$Symbol.info$eq(Symbols.scala:1550) [error] scala.reflect.internal.Symbols$Symbol.setInfo(Symbols.scala:1556) [error] scala.reflect.internal.Symbols$Symbol.cloneSymbol(Symbols.scala:2007) [error] scala.reflect.internal.Symbols$Symbol.cloneSymbol(Symbols.scala:2002) [error] scala.reflect.internal.Symbols$Symbol.cloneSymbol(Symbols.scala:2000) [error] scala.reflect.internal.Symbols$Symbol.cloneSymbol(Symbols.scala:1996) [error] scala.reflect.internal.Symbols.$anonfun$cloneSymbols$1(Symbols.scala:3684) [error] scala.reflect.internal.Symbols$$Lambda$3678/171087126.apply(Unknown Source) [error] scala.reflect.internal.Symbols.deriveSymbols(Symbols.scala:3623) [error] scala.reflect.internal.Symbols.deriveSymbols$(Symbols.scala:3622) [error] scala.reflect.internal.SymbolTable.deriveSymbols(SymbolTable.scala:18) [error] scala.reflect.internal.Symbols.cloneSymbols(Symbols.scala:3684) [error] scala.reflect.internal.Symbols.cloneSymbols$(Symbols.scala:3683) [error] scala.reflect.internal.SymbolTable.cloneSymbols(SymbolTable.scala:18) [error] scala.reflect.internal.tpe.TypeMaps$TypeMap.mapOver(TypeMaps.scala:247) [error] scala.reflect.internal.tpe.TypeMaps$TypeMap.$anonfun$mapOver$1(TypeMaps.scala:125) [error] scala.reflect.internal.tpe.TypeMaps$TypeMap.mapOver(TypeMaps.scala:199) [error] scala.reflect.internal.transform.UnCurry$$anon$1.apply(UnCurry.scala:53) [error] scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:525) [error] scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:111) [error] scala.tools.nsc.transform.UnCurry$UnCurryTransformer.$anonfun$mainTransform$12(UnCurry.scala:476) [error] scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:394) [error] scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:111) [error] scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:71) [error] scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2589) [error] scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587) [error] scala.reflect.internal.Trees.itransform(Trees.scala:1392) [error] scala.reflect.internal.Trees.itransform$(Trees.scala:1362) [error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:18) [error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:18) [error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555) [error] scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44) [error]
[error] java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded [error] at java.util.concurrent.FutureTask.report(FutureTask.java:122) [error] at java.util.concurrent.FutureTask.get(FutureTask.java:192) [error] at sbt.ConcurrentRestrictions$$anon$4.take(ConcurrentRestrictions.scala:207) [error] at sbt.Execute.next$1(Execute.scala:104) [error] at sbt.Execute.processAll(Execute.scala:107) [error] at sbt.Execute.runKeep(Execute.scala:84) [error] at sbt.EvaluateTask$.liftedTree1$1(EvaluateTask.scala:387) [error] at sbt.EvaluateTask$.run$1(EvaluateTask.scala:386) [error] at sbt.EvaluateTask$.runTask(EvaluateTask.scala:405) [error] at sbt.internal.Aggregation$.$anonfun$timedRun$4(Aggregation.scala:100) [error] at sbt.EvaluateTask$.withStreams(EvaluateTask.scala:331) [error] at sbt.internal.Aggregation$.timedRun(Aggregation.scala:98) [error] at sbt.internal.Aggregation$.runTasks(Aggregation.scala:111) [error] at sbt.internal.Aggregation$.$anonfun$applyTasks$1(Aggregation.scala:68) [error] at sbt.Command$.$anonfun$applyEffect$2(Command.scala:130) [error] at sbt.internal.Aggregation$.$anonfun$evaluatingParser$11(Aggregation.scala:220) [error] at sbt.internal.Act$.$anonfun$actParser0$3(Act.scala:387) [error] at sbt.MainLoop$.processCommand(MainLoop.scala:153) [error] at sbt.MainLoop$.$anonfun$next$2(MainLoop.scala:136) [error] at sbt.State$$anon$1.runCmd$1(State.scala:242) [error] at sbt.State$$anon$1.process(State.scala:248) [error] at sbt.MainLoop$.$anonfun$next$1(MainLoop.scala:136) [error] at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16) [error] at sbt.MainLoop$.next(MainLoop.scala:136) [error] at sbt.MainLoop$.run(MainLoop.scala:129) [error] at sbt.MainLoop$.$anonfun$runWithNewLog$1(MainLoop.scala:107) [error] at sbt.io.Using.apply(Using.scala:22) [error] at sbt.MainLoop$.runWithNewLog(MainLoop.scala:101) [error] at sbt.MainLoop$.runAndClearLast(MainLoop.scala:57) [error] at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:42) [error] at sbt.MainLoop$.runLogged(MainLoop.scala:34) [error] at sbt.StandardMain$.runManaged(Main.scala:113) [error] at sbt.xMain.run(Main.scala:76) [error] at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:111) [error] at xsbt.boot.Launch$.withContextLoader(Launch.scala:130) [error] at xsbt.boot.Launch$.run(Launch.scala:111) [error] at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:37) [error] at xsbt.boot.Launch$.launch(Launch.scala:119) [error] at xsbt.boot.Launch$.apply(Launch.scala:20) [error] at xsbt.boot.Boot$.runImpl(Boot.scala:56) [error] at xsbt.boot.Boot$.main(Boot.scala:18) [error] at xsbt.boot.Boot.main(Boot.scala) [error] Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded [error] at scala.reflect.internal.Symbols$Symbol.info
$eq(Symbols.scala:1550) [error] at scala.reflect.internal.Symbols$Symbol.setInfo(Symbols.scala:1556) [error] at scala.reflect.internal.Symbols$Symbol.cloneSymbol(Symbols.scala:2007) [error] at scala.reflect.internal.Symbols$Symbol.cloneSymbol(Symbols.scala:2002) [error] at scala.reflect.internal.Symbols$Symbol.cloneSymbol(Symbols.scala:2000) [error] at scala.reflect.internal.Symbols$Symbol.cloneSymbol(Symbols.scala:1996) [error] at scala.reflect.internal.Symbols.$anonfun$cloneSymbols$1(Symbols.scala:3684) [error] at scala.reflect.internal.Symbols$$Lambda$3678/171087126.apply(Unknown Source) [error] at scala.reflect.internal.Symbols.deriveSymbols(Symbols.scala:3623) [error] at scala.reflect.internal.Symbols.deriveSymbols$(Symbols.scala:3622) [error] at scala.reflect.internal.SymbolTable.deriveSymbols(SymbolTable.scala:18) [error] at scala.reflect.internal.Symbols.cloneSymbols(Symbols.scala:3684) [error] at scala.reflect.internal.Symbols.cloneSymbols$(Symbols.scala:3683) [error] at scala.reflect.internal.SymbolTable.cloneSymbols(SymbolTable.scala:18) [error] at scala.reflect.internal.tpe.TypeMaps$TypeMap.mapOver(TypeMaps.scala:247) [error] at scala.reflect.internal.tpe.TypeMaps$TypeMap.$anonfun$mapOver$1(TypeMaps.scala:125) [error] at scala.reflect.internal.tpe.TypeMaps$TypeMap.mapOver(TypeMaps.scala:199) [error] at scala.reflect.internal.transform.UnCurry$$anon$1.apply(UnCurry.scala:53) [error] at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:525) [error] at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:111) [error] at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.$anonfun$mainTransform$12(UnCurry.scala:476) [error] at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.mainTransform(UnCurry.scala:394) [error] at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:111) [error] at scala.tools.nsc.transform.UnCurry$UnCurryTransformer.transform(UnCurry.scala:71) [error] at scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2589) [error] at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587) [error] at scala.reflect.internal.Trees.itransform(Trees.scala:1392) [error] at scala.reflect.internal.Trees.itransform$(Trees.scala:1362) [error] at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:18) [error] at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:18) [error] at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555) [error] at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44) [error] java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded [error] Use 'last' for the full log.

I wonder has anyone has encountered this problem before?

Thanks in advance.

mattfel1 commented 4 years ago

There are two things you can try:

1) Bump up the _JAVA_OPTIONS parameters even further and confirm that they are getting picked up when you call the compilation. 2) Just remove everything in test/spatial/tests/*. This crash is happening when it tries to compile all of our hundreds of unit tests at once. You probably don't need all of them so deleting them should have a much lower memory footprint when compiling for the first time.

yrq0208 commented 4 years ago

Hi @mattfel1, thanks for the reply. The problem is solved by using larger parameters of _JAVA_OPTIONS.