Minden processzor utasításnak több szakasza van a működéséhez. Ezen szakaszok mindegyike egyetlen CPU ciklust vesz igénybe. Ezek a szakaszok az utasítás lekérése, az utasítás dekódolása, a végrehajtás, a memória hozzáférés és a visszaírás. Illetve ezek megkapják a kitöltendő utasítást, elválasztják a műveletet a működtetett értékektől on, hajtsa végre a folyamatot, nyissa meg a regisztert, amelyre az eredményt írja, és írja be az eredményt a megnyitottba Regisztráció.
Történelmi In Order feldolgozók
A korai számítógépeken a CPU nem használt utasítási folyamatot. Ezekben a CPU-kban minden egyciklusos műveletnek minden utasításhoz meg kellett történnie. Ez azt jelentette, hogy öt óraciklusba telt az átlagos utasítás teljes feldolgozása, mielőtt a következő elindítható lett volna. Előfordulhat, hogy egyes műveleteknél nem kell eredményt kiírni a regiszterbe, ami azt jelenti, hogy a memóriaelérési és -visszaírási szakaszok kihagyhatók.
Van azonban egy probléma, amikor egy teljes utasítást lefuttat, mielőtt továbblépne a következő utasításra. A probléma a gyorsítótár hiánya. A CPU az általa aktívan feldolgozott adatokat a regiszterben tárolja. Ez egyciklusos késleltetéssel érhető el. A probléma az, hogy a regiszter kicsi, mert a processzormagba van beépítve. A CPU-nak a nagyobb, de lassabb L1 gyorsítótárba kell lépnie, ha az adatok még nem lettek betöltve. Ha nincs ott, akkor újra a nagyobb és lassabb L2 gyorsítótárba kell mennie. A következő lépés az L3 gyorsítótár; az utolsó lehetőség a rendszer RAM. Ezen opciók mindegyikének ellenőrzése egyre több CPU-ciklust igényel.
Nos, ez az extra késleltetés nagy problémát jelenthet egy olyan rendszerben, amelynek minden utasítást teljes sorrendben kell végrehajtania a következő utasítás elindítása előtt. Az 5-ciklusú, utasításonkénti processzor hirtelen lefagyhat egy utasításra több tucat vagy több száz órajel ciklusra. Mindeközben semmi más nem történhet a számítógépen. Technikailag ez némileg enyhíthető két független maggal. Azonban semmi sem akadályozza meg mindkettőjüket abban, hogy ugyanazt, potenciálisan egyidejűleg tegyék. Tehát a többmagos úton haladva ez nem oldódik meg.
A klasszikus RISC Pipeline
A RISC a Reduced Instruction Set Computer rövidítése. Ez egy olyan processzortervezési stílus, amely optimalizálja a teljesítményt azáltal, hogy megkönnyíti az egyes utasítások dekódolását. Ez összehasonlítható a CISC-vel vagy a Complex Instruction Set Computerrel, amely bonyolultabb utasításkészleteket tervez, amelyek lehetővé teszik, hogy ugyanazon feladatok végrehajtásához kevesebb utasításra legyen szükség.
A klasszikus RISC dizájn tartalmaz egy utasítási csővezetéket. Ahelyett, hogy egy adott ciklusban az öt utasításszakasz bármelyikét futtatná, a folyamat lehetővé teszi mind az öt szakasz végrehajtását. Természetesen egy ciklusban nem futtathatja le egy utasítás mind az öt szakaszát. De sorba állíthat öt egymást követő utasítást egy-egy szakasz eltolással. Így minden óraciklusban egy új utasítás teljesíthető. Potenciális 5-szörös teljesítménynövekedést kínál a mag összetettségének viszonylag alacsony növekedéséhez.
Azok a processzorok, amelyek nem rendelkeznek csővezetékkel, mindig csak szubskalárisak lehetnek, mivel nem tudnak ciklusonként egy teljes utasítást végrehajtani. Ezzel az elsődleges ötlépcsős folyamattal olyan skaláris CPU-t készíthet, amely minden folyamathoz képes végrehajtani egy utasítást. Még nagyobb horderejű csővezetékek létrehozásával szuperskaláris CPU-kat készíthet, amelyek egynél több utasítást tudnak végrehajtani órajelenként. Természetesen továbbra is vannak potenciális problémák.
Még mindig szekvenciális
Ezek egyike sem oldja meg azt a problémát, hogy több cikluson át kell várni a válaszra, amikor a gyorsítótár és a RAM különböző szintjeit kell lekérdezni. Ez egy új problémát is bevezet. Mi van akkor, ha az egyik utasítás az előző utasítás kimenetére támaszkodik? Ezeket a problémákat egy fejlett diszpécser önállóan oldja meg. Gondosan megtervezi a végrehajtás sorrendjét, hogy ne legyenek túl közel egymáshoz a másik kimenetére támaszkodó utasítások. A gyorsítótár kihagyásait is kezeli úgy, hogy leparkol egy utasítást, és a folyamatban lévő másikkal helyettesíti olyan utasításokat, amelyek készen állnak a futtatásra, és nem követelik meg az eredményt, folytatva az utasítást, amikor az van kész.
Ezek a megoldások működhetnek unpipelin processzorokon is, de szükség van rájuk egy szuperskaláris processzorhoz, amely órajelenként egynél több utasítást futtat. Az elágazás-előrejelző szintén nagyon hasznos, mivel megkísérelheti megjósolni egynél több lehetséges kimenetelű utasítás kimenetelét, és továbbra is feltételezi, hogy helyes, hacsak az ellenkezőjét nem bizonyítják.
Következtetés
Egy folyamat lehetővé teszi a processzor összes különálló képességének használatát minden ciklusban. Ezt a különböző utasítások különböző szakaszainak egyidejű futtatásával teszi. Ez még csak nem is bonyolítja a CPU tervezését. Azt is megnyitja, hogy ciklusonként egynél több utasítás hajtson végre egyetlen szakaszt.