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)