Przetwarzanie potokowe

Zauważmy, że niektóre czynności składające się na wykonanie pojedynczego rozkazu są wykonywane przez niezależne obwody w procesorze. Oczywiście, najprościej byłoby każdy rozkaz wykonać po kolei, ale wtedy tracimy mnóstwo czasu (na prezentacji obok podpisane jako Serialism - zauważ, jak długo to trwa!). Można przecież wcześniej zerknąć na to, co będziemy robić później, i się do tego przygotować. Zróbmy tak, żeby każdy element procesora pracował nieustannie. Poukładajmy te wszystkie konieczne czynności obok siebie, a znacznie skrócimy czas! Nazywa się to pipelining, i jest przedstawione na slajdzie obok.

Oczywiście, to wszystko nie jest takie proste. Zauważmy, że każda z faz wykonywania rozkazu może działać w różnym czasie.

  • Dłużej - zauważmy, że zachodzi potrzeba sięgania poza procesor:
    • IF - Pobieranie rozkazu
    • OF - Pobieranie argumentów
    • S - Zapisywanie wyniku
  • Krócej - tutaj robimy wszystko wewnątrz procesora:
    • ID - dekodowanie rozkazu
    • E - wykonanie rozkazu

Więcej o fazach przetwarzania rozkazu.

Pojawiają się również problemy. Co, jeśli rozkazy są od siebie zależne? Co, jeśli wystąpi skok? Wtedy pojawia się problem, bo praca, którą przed chwilą wykonał procesor nagle staje się bezużyteczna.

Nadal nie do końca czaisz, o co chodzi?

Może ten wycinek z IRCa Ci pomoże.

<tV2> ze 5 etapow insturkcji jest wykonywanych jednoczesnie?
<flegmatyk> nie do końca
<flegmatyk> jest 5 etapów instrukcji
<flegmatyk> ale one są robione osobnymi układami w procku
<flegmatyk> niezależnymi układami
<flegmatyk> więc robisz etap 1 na elemencie 1
<flegmatyk> potem przechodzisz do etapu 2 na elemencie 2
<flegmatyk> to w tym czasiue możesz już robić etap 1 na elemencie 1 z następnej instrukcji

Źródła

 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki