Back To Schedule
Friday, November 13 • 2:30pm - 3:00pm
Programming machine learning algorithms in hardware, sanely, using Haskell and Rust!

Sign up or log in to save this to your schedule, view media, leave feedback and see who's attending!

Feedback form is now closed.
We’re all used to programming software. But what about programming reconfigurable hardware? That’s exactly what we can do with Field Programmable Gate Arrays (FPGAs). Programming hardware opens up a whole new dimension to optimizing performance and resource utilization. However, programming FPGAs is challenging and requires esoteric tooling. We can do better! In this talk, we will show how we can use the Clash language to safely program FPGAs and Rust to correctly use them in a machine learning application. Our first step is converting a functional machine learning program into computer hardware. How do we do that? We use Clash! Clash is a Haskell like language that allows programmers to define hardware structurally. It does this by compiling functional programs into logic gates that are then turned into circuits on the FPGA. Clash includes a dependent type system, which allows Clash to guarantee that the circuits are wired up correctly on the FPGA, leading to fewer errors. We will demonstrate how a simple machine learning algorithm can be sped up by the hardware parallelism afforded to FPGAs, and highlight how Clash’s type system provides compile time guarantees that the hardware circuits are implemented correctly. OK, so we’ve got our FPGA hardware wired up correctly using Clash, but how do we make sure we use it correctly? What if we’re using it to run powerful and dangerous magnets in an imaging scanner? Well, we better do it right. We’ll talk about how we can use Rust to build a safe session interface over our hardware machine learning algorithm that provides important compile-time guarantees on how the hardware is accessed in software. Rust’s borrow checker ensures that we cannot access resources such as FIFO buffers outside of the scope of the hardware they refer to; additionally we also cannot forget to perform important hardware clean up when these resources go out of scope. This application will demonstrate how Rust’s unique type system enables both an ergonomic and compile time-validated interface to the Clash validated FPGA hardware.

avatar for Daniel Hensley

Daniel Hensley

Senior Software Engineer
Daniel Hensley is a Senior Software Engineer working on signal processing, image reconstruction algorithms, and related applied math applications. He also works on embedded and hardware-facing code such as that operating medical imaging scanners. In these areas, where performance... Read More →
avatar for Ryan Orendorff

Ryan Orendorff

Research Scientist, Facebook
Ryan Orendorff is a Research Scientist working on novel algorithms for image and data reconstruction using convex optimization and other techniques. On the side, Ryan works on projects related to theorem proving and programming languages.

Friday November 13, 2020 2:30pm - 3:00pm PST