calyx: Verilog backend overflows on large programs
As in the title,
fud e --to interpreter-out -s verilog.data DRB1-3123.data DRB1-3123.futil
produces the expected output, while
fud e --to dat --through verilog -s verilog.data DRB1-3123.data DRB1-3123.futil
and
fud e --to dat --through icarus-verilog -s verilog.data DRB1-3123.data DRB1-3123.futil
produce nearly identical error messages:
[fud] ERROR: `/scratch/susan/calyx/target/debug/futil -l /scratch/susan/calyx -b verilog' failed:
---
> [fud] ERROR: `/scratch/susan/calyx/target/debug/futil -l /scratch/susan/calyx -b verilog --disable-init --disable-verify' failed:
The details of verilator’s error message is in error.txt. I also uploaded the input files, in case anyone is interested in duplicating the error.
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 15 (15 by maintainers)
@susan-garry are you building and running the compiler in release mode. You need to build the compiler using release mode:
And then change fud to use the release binary:
It should not get a overflow error anymore. If it does, open a new issue please
To get the overflow quicker, we can run the compiler with optimizations disabled using
-p no-opt
:Running the compiler to just print out the Calyx program after compilation doesn’t overflow:
Okay, according to @susan-garry, y’all previously had programs with the same number of PEs and memories and the only change is generating
invoke
statements which is curious. Some things to note:cargo build --release
and changingfud
to use the release compiler (fud c futil.exec "$pwd/target/release/futil"
in the Calyx repo)Now onto sources of overflow:
--log info
(fud e -s futil.flags ' -p all --log info ...
), you get the above log which shows none of the compiler passes overflow which is goodAlso, @calebmkim, got a new stress test for sharing pass for you (using
DRB1-3123.futil.txt
):