The Shape of Things to Run - Compiling Complex Stream Graphs to Reconfigurable Hardware in Lime

Reconfigurable hardware can deliver impressive performance for some applications, when a highly static hardware design closely matches application logic. Obliged to express efficient static hardware structures, hardware designers cannot currently employ abstractions using dynamic features of modern programming languages. We present the design and implementation of new features in the Lime programming language that admit construction of stream graphs of arbitrary shape using the expressive power of an imperative, object-oriented language. The Lime programmer marks computations destined for hardware, and the compiler statically checks these computations for repeatable structure. If the check succeeds, the system guarantees it can extract the static structure needed for hardware synthesis. We describe the language design in detail and present case studies of 10 Lime benchmarks, each successfully synthesized to a Xilinx Virtex 5 FPGA.

[1]  Maya Gokhale,et al.  Stream-oriented FPGA computing in the Streams-C high level language , 2000, Proceedings 2000 IEEE Symposium on Field-Programmable Custom Computing Machines (Cat. No.PR00871).

[2]  Craig Chambers,et al.  FlumeJava: easy, efficient data-parallel pipelines , 2010, PLDI '10.

[3]  Pat Hanrahan,et al.  Brook for GPUs: stream computing on graphics hardware , 2004, ACM Trans. Graph..

[4]  Ken Arnold,et al.  The Java programming language (2nd ed.) , 1998 .

[5]  Andrew C. Myers,et al.  Language-based information-flow security , 2003, IEEE J. Sel. Areas Commun..

[6]  Joshua S. Auerbach,et al.  Lime: a Java-compatible and synthesizable language for heterogeneous architectures , 2010, OOPSLA.

[7]  William Thies,et al.  StreamIt: A Language for Streaming Applications , 2002, CC.

[8]  Markus Mock,et al.  DyC: an expressive annotation-directed dynamic compiler for C , 2000, Theor. Comput. Sci..

[9]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[10]  Ken Arnold,et al.  The Java Programming Language , 1996 .

[11]  Dawson R. Engler,et al.  tcc: a system for fast, flexible, and high-level dynamic code generation , 1997, PLDI '97.

[12]  Peter Lee,et al.  Dynamic specialization in the Fabius system , 1998, CSUR.

[13]  Martin Hirzel,et al.  Streams that compose using macros that oblige , 2012, PEPM '12.

[14]  Michael I. Gordon,et al.  Exploiting coarse-grained task, data, and pipeline parallelism in stream programs , 2006, ASPLOS XII.

[15]  Walid Taha,et al.  Multi-Stage Programming: Its Theory and Applications , 1999 .

[16]  Ulrik Pagh Schultz,et al.  Automatic program specialization for Java , 2000, TOPL.

[17]  Peter Sestoft,et al.  Partial evaluation and automatic program generation , 1993, Prentice Hall international series in computer science.

[18]  Charles Consel,et al.  A general approach for run-time specialization and its application to C , 1996, POPL '96.

[19]  Oskar Mencer,et al.  ASC: a stream compiler for computing with FPGAs , 2006, IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems.

[20]  Matt Welsh,et al.  Flask: staged functional programming for sensor networks , 2008, ICFP.

[21]  Stephen Dean Brown,et al.  Towards compilation of streaming programs into FPGA hardware , 2008, 2008 Forum on Specification, Verification and Design Languages.

[22]  Scott A. Mahlke,et al.  Optimus: efficient realization of streaming applications on FPGAs , 2008, CASES '08.

[23]  William Thies,et al.  Language and compiler support for stream programs , 2009 .

[24]  C. A. R. Hoare,et al.  Communicating sequential processes , 1978, CACM.