Co to jest superskalarność?

Procesor superskalarny może niezależnie wykonywać wiele instrukcji jednocześnie podczas jednego cyklu zegara. Zawiera nadmiarowe zasoby wykonawcze, takie jak wiele jednostek zmiennoprzecinkowych, jednostki arytmetyczno-logiczne i przesuwniki liczb całkowitych. Ten typ procesora jest przeznaczony do obliczeń równoległych i wykonywania spekulacyjnego bez konieczności stosowania specjalnego oprogramowania. Może poprawić szybkość wykonywania wielu aplikacji intensywnie korzystających z procesora, manipulując kodem i zmieniając jego kolejność. Jest często używany w kilku klasach komputerów, w tym serwerach, komputerach stacjonarnych, a nawet laptopach.

Chociaż niektóre aspekty architektury były używane w procesorach od lat 1960., prawdziwe procesory superskalarne pojawiły się znacznie później. Niektóre procesory z obniżonym zestawem instrukcji (RISC) sprzedawane pod koniec lat 1980. i na początku lat 1990. były procesorami superskalarnymi. Ich proste rdzenie i instrukcje o stałej długości sprawiały, że wysyłanie i planowanie równoległych instrukcji było stosunkowo łatwe. Wiele procesorów innych niż RISC wyprodukowanych od końca lat 1990. ma również architekturę superskalarną. Procesory wbudowane, energooszczędne i inne procesory specjalne są często wyjątkami, optymalizującymi inne aspekty ich projektów zamiast wykonywania równoległego.

Niektóre procesory mogą współdzielić pojedynczy potok z instrukcjami z wielu wątków wykonania, co jest znane jako super-wątkowość. Gdy jednostka funkcjonalna jest bezczynna, ponieważ czeka na aktualnie wykonywany wątek, może w międzyczasie wykonać instrukcję z innego wątku. Ta technika pomaga w pełni wykorzystać procesor, ale nie jest tak wydajna jak symultaniczna wielowątkowość (SMT). Pojedynczy procesor superskalarny może wykonywać wiele instrukcji z wielu wątków jednocześnie przy użyciu SMT. Jednocześnie wykonywane wątki mogą konkurować o zasoby systemu i procesora, co może spowolnić działanie systemu.

Procesory z wielostopniowymi potokami mogą wykonywać wiele instrukcji jednocześnie, o ile znajdują się one na różnych etapach wykonywania. W przeciwieństwie do tego, kilka instrukcji może być wykonywanych na tym samym etapie w tym samym czasie w procesorze superskalarnym. Chociaż istnieje wiele podobieństw między tym typem procesora a procesorem wielordzeniowym, nie są one takie same. Procesor wielordzeniowy zawiera kilka kompletnych procesorów, zwanych rdzeniami, w jednym urządzeniu. Każdy rdzeń procesora wielordzeniowego jest zwykle superskalarny i może zawierać kilka równoległych potoków.

Kluczową cechą procesora superskalarnego jest jego zdolność do wykonywania kodu programu w złym porządku ze względu na wydajność. Aby to zrobić, musi być świadomy zależności każdej instrukcji od innej. Jeśli instrukcja wpływa na wyniki innej osoby lub wykorzystuje jej zasoby, jest wysoce prawdopodobne, że nie można ich wykonać równolegle. Istnieją techniki eliminujące niektóre typy zależności, ale inne muszą opóźniać przetwarzanie, dopóki zasoby nie będą dostępne.

Wykonywanie poza kolejnością musi być również w stanie zagwarantować odpowiednią zawartość rejestrów, flag i innych zasobów w przypadku wystąpienia przerwania systemowego. W tym przypadku stan systemu musi wyglądać tak samo, jakby kod został wykonany sekwencyjnie zgodnie z projektem. Inną kwestią do rozważenia jest to, ile instrukcji powinien zbadać procesor, aby znaleźć możliwości wykonania równoległego. Im większa liczba, tym wydajniejsza może być realizacja. Obejmuje to również spekulacyjne wykonywanie instrukcji po drugiej stronie każdej gałęzi w badanym kodzie.