Parallel Computer Architecture and Programming Course ID 15618 Description The fundamental principles and engineering tradeoffs involved in designing modern parallel computers, as well as the programming techniques to effectively utilize these machines. Topics include naming shared data, synchronizing threads, and the latency and bandwidth associated with communication. Case studies on shared-memory, message-passing, data-parallel and dataflow machines will be used to illustrate these techniques and tradeoffs. Programming assignments will be performed on one or more commercial multiprocessors, and there will be a significant course project. Key Topics Parallel programming models / frameworks; Characteristics of parallel hardware; Ubiquitous computing workloads Required Background Knowledge 15-213 is required. Other experience with systems and C programming is valuable. Course Relevance From smart phones, to multi-core CPUs and GPUs, to the world's largest supercomputers and web sites, parallel processing is ubiquitous in modern computing. This class covers how these systems operate and are programmed. This course 15-618 is for graduate students. Undergraduates should enroll in 15-418. Course Goals Provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems as well as to teach parallel programming techniques necessary to effectively utilize these machines. Learning Resources Piazza; Course website Assessment Structure Programming Assignments: 40 percent; Exams: 30 percent; Final Project: 25 percent; Participation: 5 percent Course Link https://www.cs.cmu.edu/~15418/