Spørgsmål:
Indebærer CPU-rørledning altid en datapath med flere cykler?
Henley
2010-05-04 07:48:45 UTC
view on stackexchange narkive permalink

Jeg studerer MIPS CPU og har et meget grundlæggende spørgsmål om datastien. Da MIPS CPU bruger en 5-trins rørledning, betyder det, at rørledningen bruger en multicykel datapath, korrekt? Hvis en CPU har instruktioner, hvor cyklussen pr. Instruktion er større end 1, bruger CPU'en en multicykel datapath. Korrekt?

Jeg gætter på, at jeg prøver at forstå, om der nogensinde er et tilfælde, hvor du kan have en pipelined CPU, der IKKE bruger en multicykel datapath. I mine øjne indebærer rørledning altid en datapath med flere cykler. Er det tilfældet? Eller er der undtagelser?

Hvor jeg bliver forvirret, er her "i modsætning til cpu med flere cykler, kræver den pipelined datapath, at hver instruktion bruger alle fem eksekveringsstadier." (1) Dette indebærer, at multicykel og pipelined datapaths er to forskellige ting. Så hvis nogen siger "MIPS 5-trins rørledningssystem bruger multicyklus datapath", baseret på min oprindelige forståelse, ville svaret være sandt. Men baseret på citatet ville svaret være falsk. Kan nogen afklare? (1) http://cseweb.ucsd.edu/~j2lau/cs141/week6.html
Jeg kan se, hvad du prøver at lære her, men det er anden gang, jeg har set et spørgsmål, der helt klart er til en klasse. Jeg tror bare at stille et klassespørgsmål her får et hurtigt svar, men dette er en bjørnetjeneste for dig og for de mennesker, der besvarer. Du lærer meget meget om enheder og systemer gennem processen med at undersøge et spørgsmål. Folk her bruger tid på at lave dit hjemmearbejde. Du kortsluttes af uddannelse og medlemmer af dette tidsforum.
To svar:
JustJeff
2010-05-04 15:38:53 UTC
view on stackexchange narkive permalink

Mange af de gamle 8 bit mikroprocessorer (før 8086, lad os sige) havde instruktioner, der tog mere end en cyklus at udføre og ingen pipeline-kapacitet. Hver instruktion ville gå gennem hentnings-, dekodnings-, eksekverings- og tilbageførselsfaser, men hver løb til afslutning, inden den næste kunne starte. Lidt som at have en motorvej fra NY til DC og kun lade en bil være ad gangen.

Rørledning udnytter det faktum, at du f.eks. Kunne bruge instruktionen til at hente logik for at få næste instruktion, mens den aktuelle udføres. Dette kaldes parallelinstruktion på instruktionsniveau, da du har mere end en instruktion, der udføres ad gangen. Nu i motorvejsanalogen behøver du ikke vente på, at den første bil ankommer til DC, før du slipper en ny til NY. Denne slags ting begyndte at ske omkring 8086/8088. (og der var uden tvivl andre, men jeg tilbyder 8086 kun som et referencepunkt i tid)

Så nej, at have instruktioner, der kræver mere end en cyklus, betyder ikke rørledning.

På den anden side, hvis alle dine instruktioner kunne udføres i en enkelt cyklus, ville der ikke være nogen fordel ved rørledning, da der faktisk ikke ville være nogen måde at køre forskellige faser af forskellige instruktioner på samme tid. Så rørledning ser ud til at antyde, at instruktioner kan nedbrydes i forskellige faser, der kan paralleliseres.

(Det er faktisk svært at forestille sig, hvilken slags instruktion der kan udføres i en enkelt cyklus, ud over en simpel NOP. Selv almindelig register-til-register-overførsler ville kræve en cyklus for at trække opkoden ind i chippen og en anden cyklus for at opnå effekten.)

de fleste processorer / controllere i dag har stadig instruktioner, der tager mere end en urcyklus, selv i en pipeline.
OK, jeg forstår, at multicyklus ikke indebærer pipelining, men betyder pipelining multicykel? Generelt bruger pipelining flere cyklusser, så der er meget lighed, men fra ovenstående link er den pipelined datapath og multicycle datapath meget forskellige. Dette var hvad jeg prøvede at bekræfte.
@Henley: min opfattelse af det er, at rørledning indebærer instruktioner med flere cyklusser, ellers hvordan kan du pipeline?
@Kortuk: Jeg mente ikke at antyde, at moderne CPU'er ikke har instruktioner med flere cyklusser, det var en hastig skrivning, jeg har redigeret lidt, giver forhåbentlig mere mening nu.
Jeg havde en fornemmelse af, at du vidste det, JustJeff, men andre måske ikke.
FYI, 6502 (midten af ​​1970'erne) henter den anden byte i hver instruktion under afkodning af den første (hvis den anden byte ikke er nødvendig, kasseres den), og overlapper registertilbagebetalingen (om nødvendigt) med hentningen af den første byte i den næste instruktion.
@JustJeff - faktisk er det fuldt ud muligt at opbygge en cpu, hvor programtælleren opdateres på en urkant, dens værdi bliver adresseindgangen til programhukommelsen, hvis adresserede indhold spredes gennem instruktionsafkodningslogikken, bliver registerfil eller (harvard) datahukommelsesadresseindgange, register / hukommelsesoperander spredes gennem CPU'en, og resultater og næste pc-værdi er klar til at blive låst til den næste urkant. En sådan enhed ville være langsom i betragtning af de lange udbredelseskæder, men konceptuelt ganske enkel.
ajs410
2010-05-05 02:35:16 UTC
view on stackexchange narkive permalink

En pipelined CPU indebærer en datapath med flere cykler, netop fordi det tager fem urcyklusser for en instruktion at gå fra Fetch til Writeback.

Hvor jeg bliver forvirret er her "i modsætning til flercyklus-cpu, den pipelined datapath kræver, at hver instruktion bruger alle fem eksekveringsstadier. "

Du skal færdig med at læse det næste afsnit, du citerer. Dette krav er bare at forhindre, at to instruktioner slutter på samme tid.

Antag, at vi bruger latenstiderne fra vores multi-cyklus-CPU, og vi prøver at køre en belastningsinstruktion efterfulgt af en tilføjelsesinstruktion . belastningsinstruktionen kræver fem cyklusser for at udføre, og tilføjelsesinstruktionen kræver fire cyklusser . så hvis vi begynder at køre belastningsinstruktionen på cyklus 1, afslutter den udførelsen på cyklus 5. vi pipelinerer, så vi kan begynde at køre tilføjelsesinstruktionen på cyklus 2, og den afsluttes på cyklus 5. dette er et problem: vi har to instruktioner, der afsluttes på cyklus 5 : de prøver begge at skrive til registerfilen i cyklus 5. Dette er et problem, fordi vores registerfil kun har en skriveport.

Jeg gav mit bedste svar uden at læse hans tekst. Det ser ud til, at jeg lærte noget andet.
Jeg tror, ​​du fik multi-cyklus * instruktioner * forvekslet med en multi-cyklus * datapath *.
Ingen bekymringer, jeg opstemte dig, men det ser ud til, at ingen andre har gjort det.


Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 2.0-licens, den distribueres under.
Loading...