PARALLEL & THROUGHPUT- OPTIMIZED PROGRAMMING
A comprehensive yet accessible introduction to high-performance computing practices, emphasizing shared-memory systems and using numerical algorithms as case studies. A focus on shared-memory, single-node multiprocessor systems, with some attention to GPUs. Emphasis is given on multithreaded programming, vectorization, memory hierarchy and its implications, and analysis of performance-limiting factors.
Prerequisites & course information
Requisites: E C E/COMP SCI 354 and ( MATH 320 , 340 , 341 , 345 , or 375 ), or graduate/professional standing Course Designation: Level - Intermediate L&S Credit - L&S Liberal Arts and Science Repeatable for Credit: No Last Taught: Spring 2026 Learning Outcomes: 1. Evaluate the efficiency and parallelism potential of algorithms, relative to bounds imposed by architectural limitations such as compute and memory bandwidth. Audience: Undergraduate 2. Understand the implications of the memory system on parallel scaling, including considerations of memory throughput, latency and prefetching efficiency. Audience: Undergraduate 3. Recognize instruction-level parallelism and evaluate how amenable different codes are to compiler-automated (or user-guided, via intrinsics) vectorization. Audience: Undergraduate 4. Compare data layouts (dense vs. sparse data, structures-of-arrays vs. arrays-of-structures) to throughput-sensitive codes. Audience: Undergraduate 5. Explore computational and memory-related performance implications of fundamental numerical codes such as convolutions, streaming vector operations, and matrix manipulations Audience: Undergraduate Learning Outcomes: 1. Evaluate the efficiency and parallelism potential of algorithms, relative to bounds imposed by architectural limitations such as compute and memory bandwidth. Audience: Undergraduate 2. Understand the implications of the memory system on parallel scaling, including considerations of memory throughput, latency and prefetching efficiency. Audience: Undergraduate 3. Recognize instruction-level parallelism and evaluate how amenable different codes are to compiler-automated (or user-guided, via intrinsics) vectorization. Audience: Undergraduate 4. Compare data layouts (dense vs. sparse data, structures-of-arrays vs. arrays-of-structures) to throughput-sensitive codes. Audience: Undergraduate 5. Explore computational and memory-related performance implications of fundamental numerical codes such as convolutions, streaming vector operations, and matrix manipulations Audience: Undergraduate
Sources
- Course catalogue ↗2026-2027