Teaching parallel programming early

In this position paper, we point out the importance of teaching a basic understanding of parallel computations and parallel programming early in computer science education, in order to give students the necessary expertise to cope with future computer architectures that will exhibit an explicitly parallel programming model. We elaborate on a programming model, namely shared- memory bulk-synchronous parallel programming with sup- port for nested parallelism, as it is both flexible (can be mapped to many different parallel architectures) and sim- ple (offers a shared address space, structured parallelism, deterministic computation, and is deadlock-free). We also suggest taking up parallel algorithmic paradigms such as parallel divide-and-conquer together with their sequential counterparts in the standard CS course on data structures and algorithms, in order to anchor thinking in terms of parallel data and control structures early in the students' learning process.