Superskalarność
| Ten artykuł należy dopracować zgodnie z zaleceniami edycyjnymi: zweryfikować treść i dodać źródła. Po wyeliminowaniu niedoskonałości prosimy usunąć szablon {{Dopracować}} z kodu tego artykułu. |
Superskalarność (ang. Superscalar) – cecha mikroprocesorów oznaczająca możliwość jednoczesnego ukończenia kilku instrukcji w pojedynczym cyklu zegara. Jest to możliwe dzięki zwielokrotnieniu jednostek wykonawczych, co umożliwia obliczenia równoległe.
Pierwszym procesorem Intela z rodziny x86 wykorzystującym fragmentaryczną superskalarność był procesor Pentium, który posiadał dwie jednostki wykonawcze, z czego jedną zubożoną, mogącą wykonywać tylko proste instrukcje; Pentium Pro posiadał już 3 jednostki wykonawcze. Większość procesorów superskalarnych nie ma w pełni zduplikowanej jednostki wykonywania kodu - mogą mieć wiele ALU, jednostek zmiennopozycyjnych i tak dalej, wobec czego pewne instrukcje będą wykonywane bardzo szybko, a inne nie.
Pełne wykorzystanie wszystkich jednostek wykonawczych zależy od tego, czy w programie nie występują zależności między kolejnymi instrukcjami - tj. czy kolejna instrukcja jako argumentu nie potrzebuje wyników poprzedniego rozkazu. Np. instrukcje
a = b + 5 c = a + 10
nie będą mogły zostać wykonane równolegle, ponieważ wartość c zależy od wyliczanego wcześniej a. Jeśliby jednak usunąć zależność i napisać równoważnie
a = b + 5 c = b + 15
wykonywanie superskalarne będzie możliwe.
Minimalizacja zależności jest kluczowa, aby możliwe było pełne użycie dostępnych zasobów mikroprocesora - o właściwe rozmieszczenie instrukcji dba programista lub kompilator. Ponadto współczesne procesory, np. Pentium Pro i nowsze, mogą zmieniać kolejność wykonywanych instrukcji (zachowując zależności między instrukcjami) - aby w pełni wykorzystać jednostki wykonawcze wyszukują instrukcje niezależne od siebie i wykonują je równolegle.