The document discusses techniques for improving instruction level parallelism (ILP) in pipelines, including superpipeling, multiple issue, loop unrolling, and speculation. It describes superscalar processors that can issue multiple instructions per cycle dynamically and VLIW processors that rely more on static multiple issue determined at compile time. Issues with multiple issue like instruction packaging and hazard handling are also covered. Dynamic pipeline scheduling is explained as dividing the pipeline into fetch/decode, reservation stations, functional units, and commit units to enable out-of-order execution.