3.4.2.
A pipelining működés során fellépő problémák
A pipeline szervezésben megoldandó
fontosabb problémák a gyakorlatban a következők:
-
az
utasítások elemi fázisainak végrehajtásához szükséges idő igen
eltérő lehet (például ha az operandus egy
regiszterben
található, akkor innen kb. tízszer gyorsabban lehívható, mint a
főtár
memóriájából),
-
az
utasítás soros végrehajtását a vezérlésátadó utasítások
megzavarhatják, mivel ekkor nem a soron következő utasításokat
kell betölteni a „futószalagra”,
-
a
megszakítások,
kivételek kezelése is megszakíthatja a futószalag
folyamatos feltöltését,
-
az
utasításvégrehajtás során sokszor előfordul, hogy egy utasítás
a megelőző utasítás eredményadatára hivatkozik. Így például
jelöljön R1, R2, R3 három regisztert és végezzék a sorban következő
utasítások a következőt:
R1
+ R2 Þ R1
R1
+ 10 Þ R3
Nyilvánvaló,
hogy ebben az esetben R1 értékét a 2. utasítás csak akkor használhatja
fel, ha azt az 1. utasítás már előállította. Ezt
az esetet adatütközésnek, vagy ún.
„hazard”-nak (veszélyhelyzet)
nevezzük.
-
hardver
erőforrások igénybevétele során is előfordulhatnak ütközések,
például buszkonfliktusok. Erre
példát az előző lap második ábrája alapján fogunk mutatni.
Tegyük fel, hogy az ábrán látható n, n+1, n+2-vel jelölt utasítások
és ezek operandusai a főtárban vannak. Ekkor az n-ik utasítás
operandus kiolvasásához (R) és az n+2-ik, utasítás utasításkiolvasásához
(F) egyaránt szükség van a memóriabuszra. E két buszművelet
azonos időben nyilván nem hajtható végre.
|