This document discusses parallel computing fundamentals including parallel architectures, problem decomposition methods, data parallel and message passing models, and key parallel programming issues. It covers the basics of distributed and shared memory architectures. It describes domain and functional decomposition, and how each approach distributes work. It contrasts data parallel directives-based languages with message passing approaches. Finally, it discusses important issues for parallel programs like load balancing, minimizing communication, and overlapping communication and computation.