Stateful Dataflow Multigraphs: A Data-Centric Model for High-Performance Parallel Programs
With the ubiquity of accelerators, such as FPGAs and GPUs, the complexity of high-performance programming is increasing beyond the skill-set of the average scientist in domains outside of computer science. It is thus imperative to decouple programming paradigms and architecture-specific implementation from the underlying scientific computations. We present the Stateful DataFlow multiGraph (SDFG), a data-centric intermediate representation that facilitates high performance application development and optimization. By combining fine-grained data dependencies with high-level control flow, SDFGs are both expressive and amenable to high-level program transformations, such as tiling, vectorization, and double buffering. These transformations are then applied to the SDFG in an interactive process, using extensible pattern matching and graph rewriting. To facilitate this process, we provide a graphical user interface that enables applying transformations, as well as creating custom optimizations, reusable across applications. We demonstrate SDFGs on CPUs, GPUs, and FPGAs, using a wide variety of applications and motifs --- from fundamental computational kernels, through polyhedral applications, to graph analytics. We show that the representation is both expressive and performant, allowing domain scientists to develop applications that can be tuned to approach peak hardware performance without modifying the original scientific code.
READ FULL TEXT