Discuss the role of instruction-level parallelism (ILP) in CPU design. What techniques are used to exploit ILP, and what are their limitations?

Instruction-Level Parallelism (ILP) is a crucial concept in CPU design aimed at improving performance by executing multiple instructions simultaneously or overlapping their execution. ILP allows CPUs to exploit available instruction-level parallelism within a program to increase throughput and reduce execution time.