This document provides an overview of NVIDIA's CUDA (Compute Unified Device Architecture) programming model. It begins with introductions to GPU and GPGPU programming concepts. It then describes CUDA's architecture and programming model, including key concepts like kernels, threads, memory hierarchies, and heterogeneous programming between CPU and GPU. The document outlines CUDA C programming examples like vector addition. It also provides examples of CUDA C code for image erosion and discusses interfacing CUDA with OpenGL. In general, the document serves as an introduction and guide to programming with NVIDIA's CUDA platform for massively parallel GPU computing.