Tutorial: Building parallel programming language constructs in the AbleC extensible C compiler framework
Aim of the tutorial
In this tutorial participants will learn how to build their own parallel programming language features by developing them as language extensions in the ableC extensible C compiler framework. By implementing new parallel programming abstractions as language extensions one can build on an existing host language and thus avoid re-implementing many common language features. Using ableC, one can build expressive language features that fit seamlessly into the C99 host language.
To demonstrate the expressiveness of language extensions we have implemented several language features from the parallel programming literature as ableC language extensions. These include
- the Cilk-5 features for spawning and synchronizing tasks,
- the representations and transformations in TACO for efficient sparse tensor computations,
- and the explicit loop-transformation schedules from Halide
An important feature of ableC is that independently-developed language extensions are easily composed with other extensions allowing programmers to use different styles of parallelism, from different extensions, in the same ableC program. This tutorial will provide hands-on instruction using ableC in which participants implement parallel programming language features of their choosing.
The target audience for this tutorial includes researchers and language designers developing programming language features for writing performant parallel programs with less effort on the part of the programmer. By developing or prototyping new language abstractions as language extensions researchers can focus on the new language features while providing these new features as part of a rich programming language (in this case C).
Overview of the context free grammar and attribute grammar formalisms used for specifying the concrete syntax, abstract syntax, static semantics, and code generation of language extensions and of the ableC language development pipeline.
Designing concrete syntax of language extensions. Participants will experiment with a sample language extension to understand how to design modular concrete syntax specifications for language features of their choosing.
Specifying abstract syntax and static semantics. We will continue working with a sample extension to see how type checking and other static analyses can be specified for existing and new language constructs. This allows language extensions to report useful error messages and also detect opportunities for optimization.
Code generation. Language extensions specify their translation to the C host language for execution. Participants will explore different code generation techniques for extension constructs.
We anticipate that most participants will have just a little bit of experience with compiler-generation tools such as Yacc and Lex or other scanner and parser generators. We do not anticipate them to have any experience with attribute grammars, the formalism underlying ableC. Thus we will give an introduction to these topics in the context of ableC. We expect many participants to bring a language processing problem that ableC may be able to them with. We will give them an opportunity in this tutorial to experiment with ableC and implement a partial solution to their problem. This will draw out questions and concerns that we can then discuss individually or as a larger group.
Eric Van Wyk, Associate Professor in the Computer Science and Engineering department at the University of Minnesota.
Travis Carlson, Ph.D. student in the Computer Science and Engineering department at the University of Minnesota.