Różnica między superskalarnym a wielordzeniowym?


11

Nie mogę tego pojąć, jaka jest różnica między superskalarem a procesorem wielordzeniowym?

Ciągle je mieszam, więc kilka prostych wskazówek na temat tego, co robią, byłoby świetnych.


To też mnie dezorientuje ... Jak na wikipedię, procesory superskalarowe mogą być jedno-rdzeniowe lub mieć wiele rdzeni. en.wikipedia.org/wiki/Superscalar_processor 2nd phara
Avi Mehenwal

Odpowiedzi:


15

Procesory super-skalarne oznaczają, że wysyłasz wiele instrukcji w jednym cyklu zegara. Powodem, dla którego różni się to od wielordzeniowego jest to, że otrzymujesz tylko jeden licznik instrukcji. Dzięki temu śledzisz wiele instrukcji w locie, ale wszystkie instrukcje pochodzą z jednego programu. To wciąż tylko jeden proces. Teraz powiedziałem „masz jeden licznik instrukcji” i technicznie jest to prawdą, ponieważ nie ma punktu, w którym twój kod doświadczy rozbieżności, z wyjątkiem użycia niektórych schematów przewidywania rozgałęzień (Wykonanie spekulacyjne: jednocześnie wykonujesz oba rozgałęzienia i wyrzucasz „zły” „wynik prognozy).

Po wejściu do wielordzeniowego masz wiele strumieni instrukcji wykonujących się jednocześnie. Ważną częścią jest to, że każdy rdzeń (działający z własnym licznikiem instrukcji) może być również super-skalarny, aby szybciej wykonać każdy proces!

Można mieć super-skalar bez wykonywania potoków lub wykonywania poza kolejnością, mając tak zwane bardzo długie słowo instrukcji lub „VLIW”. Jest to również nazywane super-skalarnym „statycznym” (tzn. Znajduje się w samym kodzie). W tym miejscu masz w zasadzie wystarczającą liczbę komponentów do wykonania wielu instrukcji jednocześnie, a jednocześnie pobierasz wiele instrukcji, a następnie je uruchamiasz. W najprostszej formie wyobraź sobie, że powiedziałeś „ten procesor zawsze pobiera i wykonuje dwie instrukcje jednocześnie”. Tak długo, jak programista może znaleźć pracę do wykonania jednocześnie w tym samym procesie, podwoisz swoją przepustowość! Jeśli nie możesz znaleźć dwóch instrukcji do złożenia, po prostu sparujesz jedną instrukcję i NOP. Ten pomysł nie jest zbyt dobry, ponieważ jeśli stworzysz lepszą wersję procesora, która może wykonywać 3, 4 lub więcej instrukcji jednocześnie, wszystkie stare kody się psują! Ale rozwiązali to w dość genialny sposób, jeśli chcesz dowiedzieć się więcej, powinieneś dokładnie sprawdzić obliczenia instrukcji równoległych lub „EPIC”.

Dynamiczny super-skalar z potokowaniem może korzystać zarówno z instrukcji niezależnych od danych, jak i równoległości na poziomie instrukcji, co sprawia, że ​​jest to tak potężna kombinacja. Zasadniczo pozwala ci, przy wystarczającym sprzęcie, na wykonanie jak największej liczby niezależnych instrukcji jednocześnie.

Dynamiczny super-skalar z potokowaniem i wykonywaniem poza kolejnością był zasadniczo granicą równoległości na poziomie instrukcji: próbowałbyś wykonać wiele instrukcji na tym samym etapie jednocześnie, próbując znaleźć operacje, które działałyby bez zależności danych. Możesz skończyć z porządku, zaczniesz z porządku, jest wiele rzeczy, które musisz zrobić, aby zachować równowagę podczas robienia super-skalarnych rzeczy. Wielordzeniowy mówi „hej programista! Daj mi wiele problemów, które mogę rozwiązać w tym samym czasie!” a następnie, ponieważ programista jest w stanie dostrzec niezależnie rozwiązywalne problemy poza kilkoma liniami od siebie w skompilowanym zestawie, może bardziej efektywnie zaprogramować te rozwiązania dla wielordzeniowych.

Super-skalar nie jest nawet w stanie rozwiązać problemów takich jak „jak szybciej uruchomić te dwa programy”. Mógł tylko szybciej wykonać każdy niezależny program.

Mam nadzieję, że to pomoże, przepraszam, jeśli jest trochę rozłączone.

--Edytować--

Zmodyfikowany w celu uwzględnienia punktu ajs410, że pomyliłem wiele pomysłów.


Tak, dzięki temu było o wiele jaśniej, dziękuję! Nawiasem mówiąc, myślę, że słowo, którego szukasz, to „Spekulacyjne wykonanie”. W każdym razie dzięki jeszcze raz.
marsrover,

1
Aby jeszcze bardziej skomplikować wyjaśnienia @KitScuzz, przeczytaj także HyperThreading
ppeterka

Myślę, że to zaciera super-skalarne, niesprawne i potokowe. W szczególności super-skalar mówi: „Mam cztery ALU, więc mogę pobrać te cztery instrukcje dodawania (z jednego wątku!) I wydać je podczas tego samego cyklu zegara”. Wykonywanie poza kolejnością przestawia strumień instrukcji wokół zależności danych, aby zmaksymalizować równoległość na poziomie instrukcji. Rurociągi będą wydawać nowe instrukcje, podczas gdy stare instrukcje będą w locie. Wykonywanie poza kolejnością i potokowanie mają silną synergię z wykonywaniem superskalarnym, ale nie są ściśle wymagane do spełnienia definicji.
ajs410,

Naprawiony! Przepraszam za opóźnienie.
Kit Scuzz

1

Jeśli spojrzysz wstecz na wcześniejsze procesory, takie jak 80486 lub Pentium, procesor był pojedynczą logiczną jednostką przetwarzania. Wykonuje pojedynczy strumień instrukcji na raz. Pojedynczy procesor był również pojedynczym układem krzemowym. Jeśli chcesz uzyskać większą moc obliczeniową, możesz kupić drogą płytę główną serwera, która ma gniazda pasujące do dwóch oddzielnych procesorów. Potem miałeś dwa procesory, a więc dwa rdzenie.

W pewnym momencie prawo Moore'a oznaczało, że mieliśmy tak wiele dostępnych tranzystorów w krzemie, że można było umieścić wszystkie obwody dla dwóch procesorów w jednym układzie. Teraz możesz wprowadzić zamieszanie w nazewnictwie. Mówienie, że masz dwa procesory, może oznaczać, że masz starsze dwa zestawy krzemowe lub nowszy pojedynczy pakiet krzemowy, ale z konfiguracją przetwarzania dwóch procesorów. Aby rozwiązać ten problem, mamy teraz na myśli procesor jako pojedynczy pakiet krzemowy, a rdzeń jest pojedynczą logiczną jednostką przetwarzającą.

Super-skalar odnosi się do techniki stosowanej w rdzeniu w celu poprawy wydajności i umożliwienia jej przetworzenia średnio większej liczby instrukcji na cykl. Procesor skalarny wykonuje co najwyżej jedną instrukcję na cykl, super-skalar oznacza, że ​​może potencjalnie wykonać więcej niż jedną instrukcję na cykl. Na przykład, jeśli procesor ma jednostkę funkcjonalną dla arytmetyki liczb całkowitych i drugą dla liczb zmiennoprzecinkowych, to dlaczego nie użyć obu w tym samym czasie do wykonania dwóch instrukcji jednocześnie. Co jeśli masz trzy jednostki całkowite i dwie jednostki zmiennoprzecinkowe? Teraz masz jeszcze większy potencjał do równoległego wykonywania. Ale potrzebujesz także więcej tranzystorów do implementacji i znacznie bardziej skomplikowanej logiki, aby działała niezawodnie. W prawdziwym świecie często używasz super-skalaru w połączeniu z projektami nieczynnymi, ponieważ wzajemnie się uzupełniają.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.