The slowdown in performance gain of general-purpose processors has increased interest in using FPGAs as reconfigurable accelerators, particularly for cloud computing. A key challenge in designing these accelerators is partitioning computation between processors and an FPGA. An appropriate division of labor may be difficult to predict and only be revealed by experiments and measurements. When such an experiment requires rewriting part of a system in a new language, or with a new programming model, to run on the other platform, the high cost of exploration may retard studies of different configurations and limit the evaluation. A possible solution is a single-language system with an appropriately portable programming model and a compiler to generate code for both platforms.

Such a model is dataflow programming. A dataflow program is a directed graph (cyclic or acyclic) whose nodes are operators called actors and edges are streams. A dataflow program specifies a partial order of computation,  in which sequencing constraints arise only from data dependencies. As a result, actors can execute concurrently.

StreamBlocks is an open-source compiler suite for heterogeneous dataflow programs. It enables the seamless hardware or software execution of streaming functions written in a single source language called CAL.

With StreamBlocks, a CAL dataflow program can be compiled to run on a processor, FPGA, or a combination of the two. In addition, CAL  semantics do not constrain an FPGA to operate only as a simple call-respond accelerator. It allows the FPGA to operate as a streaming coprocessor that executes concurrently with the processor and possibly invokes operations implemented in software. This generality allows the direct migration of part of a computation from software to hardware without rewriting the CAL program, a essential step in developing, evaluating, or evolving a heterogeneous system.


  • Auto-partitioning Heterogeneous Task-parallel Programs with StreamBlocks
    Mahyar Emami, Endri Bezati, Jörn Janneck, and James Larus.
    Appeared in PACT’22, slides


Explore StremBlocks repository at GitHub