1. Minska påföljder för felbedömning av grenar
- Grenprediktorer används för att förutsäga nästa instruktion som ska exekveras. Om korrekt förutsägelse görs är instruktioner redan hämtade i förväg och det finns därför ingen pipelinestopp. Å andra sidan, i händelse av felaktig förutsägelse, går utförandet in i återställningsfaser. Avstängning av pipeline leder till prestandaförlust.
- Tekniker som kan användas för att minska felförutsägelser av grenar är:Öka buffertstorlekar, slingavrullning, slingfusion.
2. Reducera datacache Miss Strax
- Datacache används för att minska belastning och lagringstid medan data hämtas från huvudminnet. Men när den begärda minnesadressen inte hittas i cachen kallas det en Cache Miss och data måste hämtas från huvudminnet vilket tar längre tid.
- Det finns två typer av cachemissar:
a) Kallfröknar - Uppstår när det refererade minnesblocket inte finns i cachen och inte heller fanns där tidigare.
b) Kapacitetsfel - Uppstår när det begärda blocket inte finns i cachen men kunde ha varit närvarande om det fanns tillräckligt med utrymme.
- Tekniker för att minska cachemissar:Ökning av cachestorlek, rumslig lokalitet (gruppering av data med hög sannolikhet för åtkomst tillsammans).
3. Reducera kontrollflödesoverhead
- Kontroll-flödesinstruktioner i ett program ändrar sekvensen för utförande av instruktioner.
- Tekniker som kan användas för att minska kontrollflödet:Minska antalet grenar (t.ex. ta bort kapslade if-else), Användning av Jump-Table, Loops Unrolling.
4. Spekulativ avrättning
- Spekulativ utförande innebär att en instruktion utförs utöver en förgreningsinstruktion med antagandet att förgreningen kommer att tas.
- Spekulationer antingen verifieras eller slås ner beroende på grenens faktiska riktning senare.