Search papers, labs, and topics across Lattice.
This paper extends a CPU-less approach to executing functional programs in parallel digital logic by incorporating lists and arithmetic primitives into a lambda calculus-based system. By adding these primitives, the authors address the inefficiencies of pure lambda calculus, moving the approach closer to practical implementation. The results demonstrate significant reductions in execution time and node usage compared to the previous pure lambda calculus implementation.
Compiling lambda calculus directly to digital logic gets a whole lot closer to practical by adding native support for lists and arithmetic, yielding substantial performance gains.
Computer architecture is searching for new ways to make use of increasingly available digital logic without the serial bottlenecks of CPU-based design. Recent work has demonstrated a fully CPU-less approach to executing functional programs, by exploiting their inherent parallelisability to compile them directly into parallel digital logic. This work uses lambda-calculus as a hyper simple functional language to prove the concept, but is impractical for real-world programming due to the well-known inefficiencies of pure lambda$-calculus. It is common in language design to extend basic lambda-calculus with additional primitives to short-cut common tasks such as arithmetic and lists. In this work, we build upon our previous research to examine how such extensions may be applied to CPU-less functional execution in digital logic, with the objective of advancing the approach toward practical implementation. We present a set of structures and algorithms for representing new primitives, describe a systematic process for selecting, implementing, and evaluating them, and demonstrate substantial reductions in execution time and node usage. These improvements are implemented in an open-source system, which is shown to correctly evaluate a range of representative lambda expressions.