Chisel编译时间优化实例——将香山的双核RTL生成时间从36分钟压缩到7分钟

背景 自从香山新后端合并后,Chisel编译时间大幅增加,特别是在双核的DefaultConfig下,在我的13900K机器+OpenJDK 11的条件下,FIR的生成时间已经达到的34分钟,具体可以见该issue,而在之前,FIR生成时间仅为2分钟不到。这样的编译时间大幅增加导致开发流程不再敏捷,大幅时间浪费在等待编译上。 观察 我首先怀疑是电路规模也存在大幅增加,因此我首先观测了FIR的大小。通过git checkout或git reset –hard使用新后端合并前的commit进行观察可发现,在使用DefaultConfig双核的情况下,旧后端的FIR大小为1.4GB,新后端为2.4GB。尽管FIR大小不能完全反映电路大小,但时间并不应该是小于2分钟至34分钟的区别。 因此,我怀疑问题出在以下两点: Scala的写法不同导致了CPU微架构层面出现了巨大的IPC差异 存在大量重复的代码执行,而RTL的生成过程中存在非常多可以复用的部分 Profiling 鉴于Scala最终也会在JVM里执行,我首先调研了一些Java的Profiling工具,最后发现我们常用的IDEA idea自带该功能。使用方法非常简单: 在打开的Profile窗口后,去终端执行编译(例如 make verilog NUM_CORES=2…

Back to Top