ECE 6340 - Parallel and Heterogeneous Computing

Office Appointments
W324 Engineering Building 1 Online and In-Person appointments via Calendly
Syllabus
Course Outline and Lectures
| Topic | Lectures and Coursework |
|---|---|
| Intro to Parallel Computing | Course Introduction Discussion of course expectations and resources Processor-Level Parallelism Limitations on automated parallelism (PDF) HW 1: Instruction-level dependencies and speedup Software Development Platforms Useful platforms for building heterogeneous software (C++) PA 1: Validate your build platform with a parallel Mie simulation |
| Profiling and Memory | B.1 Memory Discussion of basic memory architecture, specifically as it relates to speed and parallelism. This includes memory instructions, caches and caching strategies, as well as how processors address memory latency with hyperthreading. (PDF) HW 2: Paradigms and memory (vocabulary) (PDF) HW 3: Cache planning B.2 CPU Profiling Describes basic CPU timing, including high-resolution timers available in C++. This lecture also covers different debugging and optimization methods, with a focus on debugging via tracing and profiling using sampling. (C++) Profiling Demo: Debugging symbols, tracing, and sampling |
| Parallel Problems | C.1 Ray Tracing This lecture provides an overview of ray tracing, including its history and challenges with parallelization. C.1a Path Tracing Implementation We cover the basic mathematics behind path tracing - a method for solving the ray tracing problem using Monte-Carlo integration. I’ll discuss algorithms for implementing a path tracer as a class module. (C++) Ray Tracing Template: Starting code for PA2 - PA4 Fluid Dynamics N-Body Simulations |
| Multithreading | D.1 C++ Multithreading Using C++ std::thread with callback functions (PDF) HW 4 Multithreading Strategies Strategies for basic parallelization in ray tracing, fluid dynamics, and n-body simulations D.2 Heat Equation Case study in parallelizing partial differential equations (PDF) HW 5 Thread Optimization Discussion of how to optimize parallel applications D.4 OpenMP *OpenMP programming in C/C++** |
| Graphics Processing Units | Graphics Processors Evolution and architecture of GPUs CUDA Application Programming Interface API calls for querying devices and accessing global memory CUDA API Libraries NVIDIA GPU implementations of common numerical libraries CUDA Threads and Kernels CUDA language and how kernels are implemented and run on GPUs CUDA Thrust Standard CUDA template library structures and functions CUDA Thread Scaling Designing scalable programs and kernels |