This document provides a history of graphics processing and the introduction of GPUs. It discusses how CPUs had to handle all graphics computation before dedicated GPUs were common, requiring various tricks to maintain framerates. The introduction of 3D accelerator cards moved much of the graphics processing to dedicated parallel processors. Modern GPUs have massively parallel architectures with many cores and high bandwidth memory, making them well-suited for graphics and other parallel workloads. Programming frameworks like CUDA and OpenCL allow running custom programs on GPUs and expose their parallelism.