000201033 001__ 201033
000201033 005__ 20181203023555.0
000201033 0247_ $$2doi$$a10.1145/2517208.2517220
000201033 022__ $$a0362-1340
000201033 02470 $$2ISI$$a000338625500017
000201033 037__ $$aARTICLE
000201033 245__ $$aForge: Generating a High Performance DSL Implementation from a Declarative Specification
000201033 260__ $$bAssoc Computing Machinery$$c2014$$aNew York
000201033 269__ $$a2014
000201033 300__ $$a10
000201033 336__ $$aJournal Articles
000201033 520__ $$aDomain-specific languages provide a promising path to automatically compile high-level code to parallel, heterogeneous, and distributed hardware. However, in practice high performance DSLs still require considerable software expertise to develop and force users into tool-chains that hinder prototyping and debugging. To address these problems, we present Forge, a new meta DSL for declaratively specifying high performance embedded DSLs. Forge provides DSL authors with high-level abstractions (e.g., data structures, parallel patterns, effects) for specifying their DSL in a way that permits high performance. From this high-level specification, Forge automatically generates both a naive Scala library implementation of the DSL and a high performance version using the Delite DSL framework. Users of a Forge-generated DSL can prototype their application using the library version, and then switch to the Delite version to run on multicore CPUs, GPUs, and clusters without changing the application code. Forge-generated Delite DSLs perform within 2x of hand-optimized C++ and up to 40x better than Spark, an alternative high-level distributed programming environment. Compared to a manually implemented Delite DSL, Forge provides a factor of 3-6x reduction in lines of code and does not sacrifice any performance. Furthermore, Forge specifications can be generated from existing Scala libraries, are easy to maintain, shield DSL developers from changes in the Delite framework, and enable DSLs to be retargeted to other frameworks transparently.
000201033 6531_ $$aCode Generation
000201033 6531_ $$aMulti-Stage Programming
000201033 6531_ $$aDomain-Specific Languages
000201033 6531_ $$aParallel Programming
000201033 700__ $$uStanford Univ, Stanford, CA 94305 USA$$aSujeeth, Arvind K.
000201033 700__ $$uStanford Univ, Stanford, CA 94305 USA$$aGibbons, Austin
000201033 700__ $$uStanford Univ, Stanford, CA 94305 USA$$aBrown, Kevin J.
000201033 700__ $$aLee, Hyoukjoong
000201033 700__ $$0243345$$g185682$$uOracle Labs, Columbus, OH USA$$aRompf, Tiark
000201033 700__ $$0241835$$g126003$$aOdersky, Martin
000201033 700__ $$uStanford Univ, Stanford, CA 94305 USA$$aOlukotun, Kunle
000201033 773__ $$j49$$tAcm Sigplan Notices$$k3$$q145-154
000201033 909C0 $$xU10409$$0252187$$pLAMP
000201033 909CO $$pIC$$particle$$ooai:infoscience.tind.io:201033
000201033 917Z8 $$x166927
000201033 937__ $$aEPFL-ARTICLE-201033
000201033 973__ $$rREVIEWED$$sPUBLISHED$$aEPFL
000201033 980__ $$aARTICLE