This chapter introduces the basic concepts of parallel programming from both the hardware and the software perspectives, which lead up to the introduction to OpenCL in the chapters to follow.