This document discusses hardware and software parallelism in computer architecture. It defines hardware parallelism as the parallelism enabled by the machine architecture and hardware resources, such as the ability to issue multiple instructions per cycle. Software parallelism refers to the parallelism revealed by a program's control and data dependencies. There can be a mismatch between the hardware and software parallelism available. The document provides examples to illustrate this mismatch and the need for compiler support to better utilize the available hardware parallelism.