orcc / xronos

Xronos: High Level Synthesis of Streaming Applications
5 stars 3 forks source link

Xronos fails to compile procedure containing sequence of `if` statements #2

Open robstewart57 opened 9 years ago

robstewart57 commented 9 years ago

The following actor contains a procedure that implements a lookup table with a sequence of if statements: https://gist.github.com/robstewart57/436cb0fb0dfd880a4c01

The complete project is here: http://www.macs.hw.ac.uk/~rs46/files/xronos-example.zip

The compiler fails with either a heap exception or GC exception. This is the stack trace:

java.util.HashMap.keySet(HashMap.java:997), java.util.HashSet.iterator(HashSet.java:170),
java.util.AbstractCollection.retainAll(AbstractCollection.java:403),
org.xronos.openforge.schedule.GlobalResourceSequencer.addDependencies(GlobalResourceSequencer.java:544),
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:288),
org.xronos.openforge.lim.Branch.accept(Branch.java:87),
org.xronos.openforge.schedule.GlobalResourceSequencer.processModule(GlobalResourceSequencer.java:247),
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:184),
org.xronos.openforge.lim.Block.accept(Block.java:94),
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:277),
org.xronos.openforge.lim.Branch.accept(Branch.java:87),
org.xronos.openforge.schedule.GlobalResourceSequencer.processModule(GlobalResourceSequencer.java:247),
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:184),
org.xronos.openforge.lim.Block.accept(Block.java:94),
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:277),
org.xronos.openforge.lim.Branch.accept(Branch.java:87),
org.xronos.openforge.schedule.GlobalResourceSequencer.processModule(GlobalResourceSequencer.java:247),
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:184),
org.xronos.openforge.lim.Block.accept(Block.java:94)
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:281),
org.xronos.openforge.lim.Branch.accept(Branch.java:87),
org.xronos.openforge.schedule.GlobalResourceSequencer.processModule(GlobalResourceSequencer.java:247),
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:184),
org.xronos.openforge.lim.Block.accept(Block.java:94),
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:277),
org.xronos.openforge.lim.Branch.accept(Branch.java:87),
org.xronos.openforge.schedule.GlobalResourceSequencer.processModule(GlobalResourceSequencer.java:247),
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:184),
org.xronos.openforge.lim.Block.accept(Block.java:94),
org.xronos.openforge.schedule.GlobalResourceSequencer.visit(GlobalResourceSequencer.java:277),
org.xronos.openforge.lim.Branch.accept(Branch.java:87),
org.xronos.openforge.schedule.GlobalResourceSequencer.processModule(GlobalResourceSequencer.java:247)
robstewart57 commented 9 years ago

I should add, the exceptions are thrown when running eclipse with a 512Mb heap. When running with a 1024Mb heap, compilation runs forever (I waited for 30 minutes) and in that time did not throw an error.

endrix commented 9 years ago

I tested too, Forge does not like so much nested ifs, i would suggest you to implemented as an array, it will be faster and less logic, I think that the problem come from the scheduling of the operators in LIM. I would investigate that after my thesis.