Vraag:
Betekent CPU-pipelining altijd een datapad met meerdere fietsen?
Henley
2010-05-04 07:48:45 UTC
view on stackexchange narkive permalink

Ik bestudeer de MIPS-CPU en ik heb een heel eenvoudige vraag over het datapad. Omdat de MIPS-CPU een pijplijn met vijf fasen gebruikt, betekent dit dat de pijplijn een datapad met meerdere fietsen gebruikt, correct? Als een CPU instructies heeft waarbij het aantal cycli per instructie groter is dan 1, gebruikt de CPU een gegevenspad met meerdere fietsen. Correct?

Ik denk dat ik probeer te begrijpen of er ooit een geval is waarin je een CPU met pijplijn kunt hebben die GEEN datapad met meerdere fietsen gebruikt. Volgens mij impliceert pipelining altijd een datapad met meerdere fietsen. Is dat zo? Of zijn er uitzonderingen?

Waar ik in de war raak, is hier "in tegenstelling tot de cpu met meerdere cycli, vereist het pijplijn datapad dat elke instructie alle vijf uitvoeringsfasen gebruikt. '' (1) Dit impliceert dat de datapaden met meerdere cycli en pijplijnen twee verschillende dingen zijn. Dus als iemand zegt: "Het MIPS 5-traps pijplijnsysteem gebruikt de multi-cycle datapad", gebaseerd op mijn aanvankelijke begrip, zou het antwoord waar zijn. Maar op basis van het citaat zou het antwoord onjuist zijn. Kan iemand dit verduidelijken? (1) http://cseweb.ucsd.edu/~j2lau/cs141/week6.html
Ik zie wat je hier probeert te leren, maar dit is de tweede keer dat ik een vraag heb gezien die duidelijk voor een klas is bedoeld. Ik denk dat het stellen van een klasvraag hier een snel antwoord krijgt, maar dit is een slechte dienst voor jou en de mensen die antwoorden. Je leert heel veel over apparaten en systemen door een vraag te onderzoeken. De mensen hier besteden tijd aan het maken van je huiswerk. Je maakt jezelf een tekort aan onderwijs en aan leden van dit forum van hun tijd.
Twee antwoorden:
JustJeff
2010-05-04 15:38:53 UTC
view on stackexchange narkive permalink

Veel van de oude 8-bits microprocessors (laten we zeggen vóór de 8086) hadden instructies die meer dan één cyclus duurden om uit te voeren en geen pijplijncapaciteit. Elke instructie zou door de fasen van ophalen, decoderen, uitvoeren en terugschrijven gaan, maar elke instructie zou voltooid zijn voordat de volgende kon beginnen. Een beetje alsof je een snelweg hebt van New York naar DC en er maar één auto tegelijk op laat rijden.

Pipelining maakt gebruik van het feit dat je bijvoorbeeld de logica voor het ophalen van instructies zou kunnen gebruiken om de volgende instructie tijdens het uitvoeren van de huidige. Dit staat bekend als parallellisme op instructieniveau, aangezien er meer dan één instructie tegelijk wordt uitgevoerd. In de snelweganalogie hoef je niet te wachten tot de eerste auto in DC aankomt voordat je een andere in NY laat rijden. Dit soort dingen begon te gebeuren rond de tijd van 8086/8088. (en er waren ongetwijfeld anderen, maar ik bied de 8086 alleen aan als een referentiepunt in de tijd)

Dus nee, het hebben van instructies die meer dan één cyclus vereisen, betekent niet dat er een pijplijn moet worden aangelegd.

Aan de andere kant, als al uw instructies in een enkele cyclus zouden kunnen worden uitgevoerd, zou pipelining geen voordeel hebben, aangezien er in feite geen manier zou zijn om verschillende fasen van verschillende instructies tegelijkertijd uit te voeren. Dus pipelining lijkt te impliceren dat instructies kunnen worden opgesplitst in verschillende fasen die kunnen worden parallel geschakeld.

(Het is eigenlijk moeilijk voor te stellen wat voor soort instructie er in een enkele cyclus zou kunnen worden gedaan, afgezien van een eenvoudig NOP. register-naar-register-overdrachten zouden één cyclus vereisen om de opcode in de chip te trekken en een andere cyclus om het effect te bereiken.)

De meeste processors / controllers hebben tegenwoordig nog steeds instructies die meer dan één klokcyclus vergen, zelfs in een pijplijn.
OK, ik begrijp dat meerdere fietsen geen pijplijnen impliceren, maar wel meerdere fietsen? Over het algemeen gebruikt pipelining meerdere cycli, dus er is veel gelijkenis, maar uit de bovenstaande link zijn het datapad met pijplijn en het datapad met meerdere fietsen heel verschillend. Dit is wat ik probeerde te bevestigen.
@Henley: mijn mening is dat pipelining instructies met meerdere cycli impliceert, hoe kun je anders pijplijnen?
@Kortuk: Ik bedoelde niet te suggereren dat moderne CPU's geen instructies met meerdere cycli hebben, het was een overhaast stukje schrijven dat ik een beetje heb bewerkt, hopelijk is het nu logischer.
Ik had het gevoel dat je dat wist, JustJeff, maar anderen misschien niet.
Ter info: de 6502 (midden jaren 70) haalt de tweede byte van elke instructie op tijdens het decoderen van de eerste (als de tweede byte niet nodig is, wordt deze verwijderd), en overlapt het terugschrijven van het register (indien nodig) met het ophalen van de eerste byte van de volgende instructie.
@JustJeff - eigenlijk is het heel goed mogelijk om een ​​cpu te bouwen waarin de programmateller wordt bijgewerkt op een klokflank, waarvan de waarde de adresinvoer wordt naar het programmageheugen, waarvan de geadresseerde inhoud zich voortplant door de instructiedecodeerlogica, registerbestand of (harvard) datageheugenadresinvoer, register / geheugenoperanden planten zich voort door de cpu, en de resultaten en de volgende pc-waarde zijn klaar om te worden vergrendeld naar de volgende klokflank. Een dergelijk apparaat zou traag zijn gezien de lange voortplantingsketens, maar conceptueel vrij eenvoudig.
ajs410
2010-05-05 02:35:16 UTC
view on stackexchange narkive permalink

Een pijplijn CPU impliceert een datapad met meerdere cycli, juist omdat het vijf klokcycli duurt voordat een instructie van Fetch naar terugschrijven gaat.

Waar ik in de war raak, is hier "in tegenstelling tot de cpu met meerdere cycli, het pijplijn datapad vereist dat elke instructie alle vijf uitvoeringsfasen gebruikt. "

Je moet de volgende paragraaf die je citeert afmaken. Die vereiste is alleen om te voorkomen dat twee instructies tegelijkertijd worden voltooid.

stel dat we de latenties van onze multi-cycle cpu gebruiken, en we proberen een laadinstructie uit te voeren gevolgd door een add-instructie . de laadinstructie heeft vijf cycli nodig om uit te voeren, en de instructie voor toevoegen heeft vier cycli nodig . Dus als we beginnen met het uitvoeren van de laadinstructie in cyclus 1, wordt de uitvoering voltooid in cyclus 5. we zijn aan het pijplijnen, dus we kunnen beginnen met het uitvoeren van de add-instructie in cyclus 2, en het zal eindigen in cyclus 5. dit is een probleem: we hebben twee instructies die eindigen op cyclus 5 : ze zullen allebei proberen om naar het registerbestand te schrijven in cyclus 5. dit is een probleem, omdat ons registerbestand maar één schrijfpoort heeft.

Ik gaf mijn beste antwoord zonder zijn tekst te lezen. Het lijkt erop dat ik iets anders heb geleerd.
Ik denk dat je multi-cyclus * instructies * hebt verward met een multi-cyclus * datapad *.
Geen zorgen, ik heb je gestemd, maar het lijkt erop dat niemand anders dat heeft gedaan.


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 2.0-licentie waaronder het wordt gedistribueerd.
Loading...