4. Procesor – informacje ogólne

4.6. Potokowość

Potokowość (ang. pipelining) jest techniką budowy procesorów, w której instrukcja wykonywana jest w pewnych etapach. Za wykonanie każdego etapu odpowiada wydzielona logika procesora. Każdy etap może być wykonywany niezależnie. W danej chwili może być wykonywanych wiele rozkazów. Załóżmy, że rozkaz jest wykonywany w pięciu etapach (Rys. 13):

  1. Pobranie rozkazu (IF – Prefetch),
  2. Zdekodowanie rozkazu (ID – Instruction Decode),
  3. Generacja adresów operandów (MEM – Address Generate),
  4. Faza wykonania rozkazu (EX – Execute),
  5. Zapis do pamięci (WB – Write Back).

 

potok.jpg

Rys.13. Budowa potoku [źródło: https://pl.wikipedia.org/wiki/Potokowo%C5%9B%C4%87]

 

Działanie potoku można porównać do taśmy produkcyjnej. W powyższym 5-stopniowym potoku, przejście przez wszystkie stopnie potoku (wykonanie jednej instrukcji) zabiera co najmniej 5 cykli zegarowych. Jednak ze względu na równoległą pracę wszystkich stopni potoku, jednocześnie wykonywanych jest 5 rozkazów procesora, każdy w innym stadium wykonania. Oznacza to, że taki procesor w każdym cyklu zegara rozpoczyna i kończy wykonanie jednej instrukcji i statystycznie wykonuje rozkaz w jednym cyklu zegara. Każdy ze stopni potoku wykonuje mniej pracy w porównaniu do wykonania całej instrukcji, dzięki czemu może wykonać ją szybciej.

Podstawowym mankamentem techniki potoku są rozkazy skoku, powodujące w najgorszym wypadku potrzebę przeczyszczenia całego potoku i wycofania rozkazów, które następowały zaraz po instrukcji skoku i rozpoczęcie zapełniania potoku od początku od adresu, do którego następował skok. Taki rozkaz skoku może powodować ogromne opóźnienia w wykonywaniu programu – tym większe, im większa jest długość potoku.

Szacuje się, że dla modelu programowego x86 skok występuje co kilkanaście rozkazów.