Potokowość
Z Wikipedii
Potokowość (ang. Pipelining) – jest to technika budowy procesorów polegająca na podziale logiki procesora odpowiedzialnej za proces wykonywania programu (instrukcji procesora) na specjalizowane grupy w taki sposób aby każda z grup wykonywała część pracy związanej z wykonaniem rozkazu. Grupy te są połączone sekwencyjnie - ang. pipe, potok - i wykonują pracę równocześnie, pobierając dane od poprzedniego elementu w sekwencji. W każdej z tych grup rozkaz jest na innym stadium wykonania. Można to porównać do taśmy produkcyjnej. Potok wykonania instrukcji procesora może wyglądać następująco:
- Pobranie instrukcji z pamięci - ang. Fetch
- Zdekodowanie instrukcji - ang. Decode
- Pobranie argumentów instrukcji - ang. Load
- Wykonanie instrukcji - ang. Execute
- Zapisanie wyników działania instrukcji - ang. Store
[Fetch]->[Decode]->[Load]->[Execute]->[Store]
W powyższym 5 stopniowym potoku wykonanie jednej instrukcji zabiera co najmniej 5 cykli zegarowych - przejście przez wszystkie stopnie potoku. Jednak ze względu na jednoczesną 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 (nie tej samej) i statystycznie wykonuje rozkaz w jednym cyklu zegara. Każdy ze stopni potoku wykonuje mniej pracy w porównaniu do pojedynczej logiki, dzięki czemu może wykonać ją szybciej - z większą częstotliwością - tak więc dodatkowe zwiększenie liczby stopni umożliwia osiągnięcie coraz wyższych częstotliwości pracy. Podstawowym wrogiem 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. Dodatkowo szacuje się że dla modelu programowego x86 taki skok występuje co kilkanaście rozkazów. Z tego powodu niektóre architektury programowe (np. SPARC) zakładały zawsze wykonanie jednego lub większej ilości rozkazów następujących po rozkazie skoku, tzw. skok opóźniony.
[edytuj] Zobacz też:
- superskalarność
- ISA
- Wykonywanie spekulatywne