New Release v0.18.0
Our new compiler model based in the LLVM infrastructure is released – Beta
Our engineering team have reworked our compiler, Rio, using the LLVM compiler infrastructure, for significant overall performance gains - around 30% lower latency and 30% lower utilization – and improved usability. The new compiler brings our modelling closer to how Go works, allowing users to write more natural Go for their FPGA-side programs, to achieve greater performance.
Activating the new compiler in your projects
For the next few weeks we will be supporting both old and new compiler models to avoid any compatibility issues for our users, and to ensure we sort out any bugs before adopting it as our core tech. So, for now, to use the new compiler version, just add this line to your project’s
Without this, the old compiler model will still be used when running sims and builds.
Note that the new compiler is in beta so if you hit any bugs or issues please let us know on the forum
Our current tooling version is
reco v0.6.0. To check your version and update if required, please run:
Performance, improvements and comparisons
With the current beta version of Rio, we’re seeing around 30% lower latency and 30% lower utilization of FPGA resources for our example designs.
Our new compiler’s modelling of goroutines is closely aligned to how they are defined in Go itself. This was not the case in the old model. Our new goroutine modelling opens up a wider variety of concurrency patterns for user’s custom applications.
Loop unrolling is automatic in our new compiler, where it wasn’t in the previous model. This means loops can be written as normal, rather than unrolled as we previously suggested as best practice for our service.
Our new compiler model has improved inlining, which means users can can code more naturally, factoring out functions in a more granular way with confidence they will be inlined efficiently.
Pipelining was automatic in our old model, but not in our new LLVM-based compiler. Pipelining should now be achieved using goroutines. This method of pipelining is both more reliable, and gives the user more control.
For a full rundown of all our releases, see our release notes.
Over the coming weeks the compiler team will be refining the new LLVM-based model before moving our service over to use it as standard. Following that there are more optimisations and tooling improvements to come.