Multiple issue
Le alternative per aumentare il parallelismo della pipeline (e quindi diminuire il CPI) sono:
- Aumentare la profondità della pipeline aumentando il numero di unità fondamentali
- Replicare i componenti per poter processare più istruzioni alla volta
L'ultima alternativa è detta multiple issue e può essere static o dynamic.
Static multiple issue
Il compilatore raggruppa le istruzioni in issue packet da inserire contemporaneamente nella pipeline.
Anche se evita alla CPU di effettuare branch prediction e affida l'ottimizzazione del codice al compilatore (dandogli molto più tempo di quanto se ne possa permettere la pipeline) ha comunque più svantaggi:
- Il compilatore non può speculare i branch senza eseguire il codice
- Il bytecode diventerà dipendente dalla profondità della pipeline oltre che dall'ISA
Dynamic multiple issue
Le CPU che adottano questo metodo, chiamate superscalari, scelgono dinamicamente quante e quali istruzioni immettere nella pipeline ad ogni ciclo di clock.
Ogni gruppo di istruzioni può essere inserito in due modi:
- In-order: viene solamente scelto il numero di istruzioni consecutive da inviare
- Out-of-order: vengono scelte quante e quali istruzioni inviare (facendo attenzione alle dipendenze)