For a while, the most interesting one from the whole EPFL series. It formulates some intuitively seen (and adds more) the common statements and principles that problems should satisfy to be effectively parallelizable, and gives some universal patterns to solve them (hint: associativity, combiners, append tree). And it also contains rather interesting assignments (e.g. images blurring, and Barnes-Hut simulation). I'd say that after classical course from Robert Sedgewick, it's the most interesting course about algorithms from what I've taken on this resource. Highly recommended!
With every smartphone and computer now boasting multiple processors, the use of functional ideas to facilitate parallel programming is becoming increasingly widespread. In this course, you'll learn the fundamentals of parallel programming, from task parallelism to data parallelism. In particular, you'll see how many familiar ideas from functional programming map perfectly to to the data parallel paradigm. We'll start the nuts and bolts how to effectively parallelize familiar collections operations, and we'll build up to parallel collections, a production-ready data parallel collections library available in the Scala standard library. Throughout, we'll apply these concepts through several hands-on examples that analyze real-world data, such as popular algorithms like k-means clustering.