Jag känner att jag mâste förklara begreppen "instruktioner per klockcykel" och "pipeline" lite mer ingâende.
Genom att fÖrlänga antalet steg i en pipeline, minskar man det arbete (av en instruktion) som utförs per klockcykel. En instruktion delas alltsâ upp i flera delsteg där det tar exakt en klockcykel att utföra varje delsteg.
Varför minska arbetet i ett delsteg? Tänk flera steg av seriekopplade transistorer, s.k. transistordjup, där högsta möjliga klockfrekvens bestäms av tiden det tar för utgângen att ställa in sig efter en ny signal pâ ingângen. Varje transistor inför en fördröjning och genom att minska djupet minskar man ocksâ propageringstiden eller tiden det tar att erhâlla en korrekt utsignal vid en förändring pâ insignalen och man kan därför höja klockfrekvensen.
Ju längre pipeline desto fler klockcykler tar det innan en instruktion har passerat pipelinen och blivit utförd. Men genom att hâlla pipelinen fylld kan man teoretiskt fâ antalet instruktioner per klockcykel att gâ mot värdet 1. Har man dâ lyckats höja klockfrekvensen sâ har man vunnit prestanda.
Tänk er att vi har en instruktion som heter "ta hand om smuttstvätten" (vilket normalt innebär Tvätta, Torktumla, Stryka och Vika. Säg att ni har en maskin som gör allt detta pâ en gâng och det tar 4 timmar (en klockcykel). Säg nu genom att infÖra mindre arbete per klockcykel (vi lâter Tvätta bli ett delsteg i instruktionen "ta hand om smutttvätten" osv.) sâ kan vi höja klockfrekvensen sâ att 1 timme motsvarar tiden per delsteg (nya klockfrekvensen).
Dâ utförs en instruktion pâ fyra klockcykler Tvätta-Torktumla-Stryka-Vika = 4 timmar (ingen prestandavinst ännu)
Men säg att vi har tre smuttstvättar att ta hand om och vi lâter varje delsteg fungera enligt pipeline-principen.
Efter antal klockcykler:
1) Tvätta_1
2) Tvätta_2 - Torktumla_1
3) Tvätta_3 - Torktumla_2 - Stryka_1
4) Torktumla_3 - Stryka_2 - Vika_1
5) Stryka_3 - Vika_2
6) Vika_3
Sâ vi har alltsâ gjort fyra smuttstvättar pâ sex timmar eller 0.66 instruktioner per klockcykel. Om vi nu i stället har tusentals smuttstvättar att utföra sâ närmar sig antalet instr. per klockcykel värdet 1 och vi har alltsâ fyrdubblat prestandan genom att minska antalet arbete per klockcykel och infÖra en pipeline.
Notera_1 att genom att införa parallellitet (exekvera flera instruktioner samtidigt) sâ kan man fâ ett värde av instruktioner per klockcykel som är större än 1.
Notera_2 att i praktiken sâ kan man fâ avbrott i pipelinen och bli tvungen att kasta alla steg i pipelinen och fylla den igen pâ nytt. S.K. "branches" som skapas t.ex genom av if-satser i programmeringskoden.