przetwarzanie potokowe - jak procesor wykonuje jednocześnie kilka zadań

0

Dzień dobry, mam takie pytanie:

Przetwarzanie potokowe dzieli instrukcję na mniejsze kroki i taśmowo wykonuje fragmenty o podobnych "właściwościach", na końcu łącząc pracę w jedną instrukcję. (Jeżeli dobrze zrozumiałem, jeżeli nie, proszę o poprawienie mnie). Mam jednak pytanie: W jaki sposób jeden procesor (zakładam, że procesor ma 1 rdzeń i nie ma żadnych ulepszaczy typu HT itp.) może wykonać kilka podinstrukcji jednocześnie?

Pozdrawiam
Michał

4

Sama potokowość tego nie załatwia, ale i tak przyspiesza przetwarzanie bo zauważe każdy element potoku jest wykonywany niezależnie. I nie chodzi tutaj o framgnety "o podobnych właściwościach" tylko identyczny typ operacji.
Najbardziej podstawowa wersja wykonania kodu to 3 elementy: fetch (pobranie rozkazu z pamięci), decode (wyliczenie co to będzie za operacja), execute (faktyczne wykonanie operacji).
Początkowo było tak że wszystkie te operacje były wykonywane jako jeden blok, w efekcie Jeśli każda z tych operacji zabiera 1ns to wykonanie jednej instrukcji kosztuje 3ns, dwóch instrukcji 6ns itd. A teraz wyobraź sobie że każdy z tych 3 elementów podzielimy na osobne kawałki obsługiwane przez osobne elementy CPU. Wtedy Najpierw wykonujemy fetch 1 rozkazu, następnie wykonujemy decode 1 rozkazu ale możemy jednocześnie wykonać fetch 2 rozkazu (bo układ realizujacy fetch jest "wolny"). W efekcie wykonanie 1 instrukcji to nadal 3ns ale wykonanie 2 instrukcji kosztuje już tylko 4ns, bo te "niezależne bloki" są wykonywane jednocześnie!

Dodatkowo wprowadzono później także tzw superskalarność -> CPU posiada więcej niż 1 układ pozwalający na wykonywanie "execute". Wynika to między innymi z faktu, że "execute" nie zabiera stałego czasu, są operacje cieższe obliczeniowo i te łatwiejsze. Proste instrukcje mogłyby być blokowane w strumieniu przez jakąś długą operacje. W procesorze superskalarnym CPU może zrobić execute kilku instrukcji na raz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1