Prerequisites: "C-" or better in (CS 3505 AND 3810).
This course is a comprehensive exploration of parallel programming paradigms, examining core concepts, focusing on subset of widely available contemporary parallel programming models, and providing context with a small set of parallel algorithms. In the last few years, this area has been the subject of significant interest due to a number of factors. The advent of multi-core microprocessors has made parallel computing available to the masses. At the high end, major vendors of large-scale parallel systems, including IBM, Cray, and Sun, have recently introduced new parallel programming languages designed for applications that exploit tens of thousands of processors. Embedded devices can also be through of a small multiprocessors. The convergence of these distinct markets offers an opportunity to finally provide application programmers with a productive way to express parallel computation. The course is structured a lectures, homework, programming assignments and a final project. Students will perform four programming projects to express algorithms using selected parallel programming models and measure their performance. The final project will consist of teams of 2-3 students who will implement codes by combining multiple programming models. Recommended experience in C programming or equivalent.