Using Chapel to teach parallel concepts

Presented by David Bunde.
Tutorial at CCSC-CP 2014.


Resources related to this tutorial:


Abstract:

One of the current big challenges in CS education is how to incorporate parallel programming to prepare our graduates for a world in which essentially all computers have multiple cores. This tutorial presents a parallel programming language and some ways that it can be used to teach parallel concepts in a variety of courses without a wholesale redesign of those courses. Attendees will be given access to an account on a test machine so they can experiment with the language during and after the tutorial.

The language is Chapel, a parallel programming language designed for high-performance computing (HPC). One of Chapel's original design goals was programmer productivity. Both students and faculty at previous workshops have found that this translates into ease of use, finding themselves able to quickly pick it up after minimal instruction. Chapel is a language that supports short script-style programs (e.g. Hello World in a single line) as well as full OO applications. Because it was designed with parallelism in mind, Chapel easily supports common features of parallel programs. Examples include the following:

In the tutorial, I will present basic syntax, the parallel features of Chapel, and talk about how it can be used in courses such as Algorithms, Programming Languages, and Parallel Computing. I will particularly demonstrate Chapel's parallel features and concise syntax by working a series of example problems. The unit for Algorithms focuses on the use of reduction as a standard parallel algorithmic technique and the relationship between defining parallel reductions and dynamic programming. The unit for Programming Languages focuses on the design choices made in Chapel. The Parallel Computing unit focuses on some features relatively unique to Chapel for managing locality and controlling the amount of communication in parallel programs.