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.
The ubiquity of accelerators in high-performance computing has driven programming complexity beyond the skill-set of the average domain scientist. To maintain performance portability in the future, it is imperative to decouple architecture-specific programming paradigms from the underlying scientific computations. We present the Stateful DataFlow multiGraph (SDFG), a data-centric intermediate representation that enables separating program definition from its optimization. By combining fine-grained data dependencies with high-level control-flow , SDFGs are both expressive and amenable to program transformations, such as tiling and double-buffering . These transformations are applied to the SDFG in an interactive process, using extensible pattern matching , graph rewriting, and a graphical user interface . We demonstrate SDFGs on CPUs, GPUs, and FPGAs over various motifs --- from fundamental computational kernels to graph analytics. We show that SDFGs deliver competitive performance , allowing domain scientists to develop applications naturally and port them to approach peak hardware performance without modifying the original scientific code.
R
With the
The
R
, such as FPGAs and GPUs, the complexity of
in
R
programming is increasing
computing has driven programming complexity
R
scientist in domains outside of computer science. It is thus
domain scientist. To maintain performance portability in the future, it is
R
programming paradigms and architecture-specific implementation
architecture-specific programming paradigms
R
facilitates high performance application development and
enables separating program definition from its
R
control flow
control-flow
D
high-level
R
, vectorization, and double buffering
and double-buffering
D
then
R
and graph rewriting. To facilitate this process, we provide
, graph rewriting, and
D
that enables applying transformations, as well as creating custom optimizations, reusable across applications
R
, using a wide variety of applications and
over various
D
, through polyhedral applications,
R
the representation is both expressive and performant
SDFGs deliver competitive performance
R
that can be tuned
naturally and port them