Prerequisites: Proficiency in (non-parallel) programming in a high level procedural language. This course will teach students how to design, analyze, and implement, parallel programs for high performance computational science and engineering applications. The course focuses on advanced computer architectures, parallel algorithms, parallel languages, and performance-oriented computing. Students will develop knowledge and skills to efficiently solve challenging problems in science and engineering, where very fast computers are required either to perform complex simulations or to analyze enormous datasets.