Eijkhout, Chow, and van de Geijn's "Introduction to High-Performance Scientific Computing, Chapter 1: Sequential Computer Architecture"

Read section 1.5 of Chapter 1 on pages 30-41. This reading discusses the relationship of pipelining and cache to programming.