DescriptionThis paper describes an assignment in the Chapel programming language for creating a 1D heat equation solver. Two methods are used to solve the problem, exposing a variety of parallel programming concepts. The first portion of the assignment uses high-level parallel constructs, namely Chapel's forall loop and Block distribution, to create a simple distributed-memory solver. Here, students are asked to think about what it means for an array to be split across the memory in multiple compute nodes while relying on the language to handle the details of communication and synchronization. The second portion of the assignment uses low-level parallelism, like barriers and explicit communication. Here, the goal is to reduce overhead, while introducing students to the ideas of explicit communication and synchronization. In both parts, students are provided with a non-distributed version of the solver and are asked to create a modified version that runs across multiple compute nodes.