Podręcznik
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):
- Pobranie rozkazu (IF – Prefetch),
- Zdekodowanie rozkazu (ID – Instruction Decode),
- Generacja adresów operandów (MEM – Address Generate),
- Faza wykonania rozkazu (EX – Execute),
- Zapis do pamięci (WB – Write Back).
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.