This document outlines a course on parallel and distributed computing. The course objectives are to teach students concepts and techniques in parallel programming using multithreaded and multi-core processors. Students will learn basic concepts, models, programming, and software engineering for parallel and distributed applications. The course will involve tools like Pthreads, OpenMP, MPI, and CUDA. Grading will be based on homework, labs, projects, and a final exam. The course will cover topics like parallel algorithms, message passing, distributed systems, clusters, and formal models of computation.