Parallel and Reconfigurable Computing
This course examines current and emerging parallel architectures and programming methods for exploiting large amounts of parallelism. This includes traditional approaches using multiple CPUs as well as newer approaches using reconfigurable computing, where a custom compute engine is built from one or more FPGAs. The course examines the types of parallelism available, the limits of how much parallelism can be exploited, and ways to avoid such limits. Several programming assignments will be used to demonstrate the different techniques of expressing parallelism, and a final research-oriented project will be used to explore the issues in greater detail on a computational problem of your choice. Hardware design experience is not necessary, but it can be used during the research portion to exploit parallelism within your selected problem. The focus of the course is on uncovering advanced forms of parallelism and achieving efficient execution.
Required skills: C programming.