Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Jul 2010

Vad är Pipelines?

Hejsan sitter och pluggar till ett prov i skolan och blir inte klok på vad och hur jag ska förklara hur eller vad Piplines i en processor är?
Är det samma sak som trådar eller hyperthreading för det är jag ju med på att man jobbar med flera beräkningar parallellt.

Men får inte riktigt ihop det, snabb hjälp tas emot väldigt tacksamt!!

Trädvy Permalänk
Medlem
Registrerad
Okt 2011
Trädvy Permalänk
Medlem
Registrerad
Maj 2003

En pipeline är för en kärna vad löpande bandet är i en fabrik. Det är inte ett sätt att parallellt exekvera flera trådar samtidigt, utan ett sätt att seriellt exekvera flera instruktioner samtidigt på en kärna.

Av en rad olika anledningar så vill man inte utföra exekveringen av en instruktion på en klockcykel för processorn. Dels skulle en sån processor bli väldigt långsam, men skulle också bli svår att designa och felsöka.
Så vad man gör är att man delar upp exekveringen av en instruktion i flera mindre delar, och tar de en i taget. Detta har inget med CISCs uppdelning av stora instruktioner till flera mindre instruktioner att göra, där dagens moderna CISC-processorer (x86) i princip "emuleras" på RISC-processorer. Utan även extremt enkla RISC-instruktioner delas upp i flera mindre steg.
(Du kan här läsa mer om exempel på hur stegen kan delas upp för en instruktion, med hämtning, avkodning, beräkning, och att skriva tillbaka resultatet till något minne)

Hur många steg instruktionerna delas upp i motsvarar längden på pipelinen.

Och för att få upp prestandan så kan man seriellt exekvera flera instruktioner samtidigt i en och samma kärna, där för varje klockcykel så utförs varje steg i pipelinen för alla instruktioner i den.
Ungefär som en fabrik som monterar ihop säg bilar, så för varje klockcykel så hoppar varje halvfärdig bil över till nästa station där nästa steg av monteringen utförs.

I extremt simpla processorer där man inte bryr sig om prestanda så kan man välja att inte exekvera mer än en instruktion i taget, men man delar fortfarande upp den i flera steg. Så att processorn tar en instruktion i taget över flera klockcykler. Det är väldigt simpelt, och man förlorar inte någon riktig prestanda på uppdelningen, då man kan höja frekvensen tack vare mindre jobb per cykel.

Så processorn (om det inte är en väldigt simpel sådan) klarar av att exekvera en full instruktion per klockcykel, men gör det inte för en hel instruktion i taget, utan för små delar av många instruktioner samtidigt. Så en full exekvering av en instruktion tar många klockcykler.
Precis som att en fabrik bygger många bilar per dag, men de bygger flera bilar samtidigt seriellt i olika steg, och det tar mer än en dag att bygga en bil från grunden till helt färdigt (gissar jag).

Att seriellt exekvera flera instruktioner samtidigt får ju dock ett antal nackdelar till följd om exekveringen av nästa instruktion bygger på resultatet från den tidigare instruktionen. Det går till viss del att kompensera för det med fler transistorer, där man tillåter resultat hoppa bakåt i löpande bandet en bit, utan att först skrivas till registret och sedan läsas av nästa instruktion.
Men i slutändan hamnar man ändå i att en lång pipeline blir dålig på att hantera relaterade instruktioner.
Men en lång pipeline klarar av högre frekvenser (dock fortfarande med högre strömförbrukning till följd). Så det är lite av en balansgång vad som är bäst, mellan en kort eller en lång pipeline.

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Jul 2010

@Genesis Tack för svaret, blev lite klarar nu

Trädvy Permalänk
Entusiast
Plats
Chalmers
Registrerad
Aug 2011

Till @Genesis utmärkta förklaring kan man tillägga att det som gör att man kan köra högre klock på en pipeline:ad CPU är att det mellan varje steg (till exempel Fetch, Decode, Execute …) finns register som bitarna från föregående steg klockas in och sparas i vid varje klockpuls. Hade det inte funnits en sådan indelning hade man vid höjning av frekvensen kunnat få problem med att signaler helt enkelt inte hinner fram inom tidsramen för en klockpuls (till exempel 1 ns vid 1 GHz), ty man hade då haft en flera gånger längre så kallad critical path – kretsens längsta "väg" utan register – vilken är en faktor som är avgörande för den maximala klockfrekvensen man kan uppnå.

5930K • Corsair DP 32 GiB 2666 MHz • EVGA GTX 980
6600K • Corsair Vengeance 8 GiB 2666 MHz • EVGA GTX 960
Asus ROG Swift • Yamakasi Catleap Q270 2B
Better SweClockers

Trädvy Permalänk
Medlem
Registrerad
Okt 2001

Det är väl flip-flops som används mellan stegen, inputet kommer ut på outputet nästa cykel.
Varje transistor har ju en latens så ju fler i en serie ju lägre frekvens. Genom att dela upp instruktionera i delar i piplinsen via flip-flops blir latencerna lägre för varje steg i piplinen så lägre piplien ger högre frekvens och vise versa.

Netburst var ju ett exempel på extrem piplininc på x86 med 31st steg vill jag minnas men det finns problem med låna piplines. Skulle processorn välja fel branch så får den tömma piplinen så en pipline med 30 steg som får börja om tappar då 30 cyklar medans en med 15stegs pipline bara tappar 15st.
Sedan är det ju inte guld och gröna skogar med hög frekvens för strömförbruknigen heller vilket netburst också visade på.

Gallerier: Modern Midi