Jak procesor może wykonać więcej IPS niż jego częstotliwość? [duplikować]

14

To było coś, czego nie wydaje mi się, by zawinąć głowę. Prawie każdy nowoczesny procesor jest w stanie wykonać więcej instrukcji na sekundę niż jego częstotliwość.

Rozumiem, dlaczego procesory niższej klasy mogą wykonywać mniej IPS niż jego częstotliwość. Na przykład ATmega328 wykonuje około 16 MIPS przy 16 MHZ (a przynajmniej tak mi powiedziano), a Z80 wykonuje 0,5 MIPS przy 4 MHz. Ale wtedy Pentium 4 Extreme może wykonać więcej niż 9 GIPS przy zaledwie 3,2 GHz. To około trzech instrukcji na cykl zegara!

Jak to się robi i dlaczego nie jest zaimplementowane w mniejszych procesorach, takich jak mikrokontrolery AVR ?

Znalazłem wszystkie moje informacje, z wyjątkiem ATmega328, stąd .

Jaca
źródło
3
Zajrzyj na Wikipedię, aby znaleźć popularne słowa, takie jak potokowanie, architektura super skalarna, wykonywanie poza kolejnością, jednoczesne wielowątkowość, wielordzeniowy, rozszerzenie wektorowe (SSE, ..., AVX), buforowanie i tak dalej. W sumie wartość CPI może być niższa niż 1,0.
Paebbels
7
Miałeś na myśli 9 GIPS dla Pentium 4, a nie MIPS, prawda?
Calimo,
5
Autopromocja: w jaki sposób procesor może dostarczyć więcej niż jedną instrukcję na cykl? został zapytany podczas wymiany stosów inżynierii elektrycznej (moja odpowiedź została zaakceptowana i być może zbyt wysoko pozytywnie oceniona).
Paul A. Clayton
Zawsze zastanawiałem się, czy nie powinienem głosować na coś, jeśli jest już tak wysoko, jak powinienem? Czy zawsze głosuję pozytywnie, jeśli uważam, że wysiłek i jakość postu zasługują na nagrodę?
Peter Cordes
@PeterCordes Istnieją różne filozofie głosowania. Niektórzy twierdzą, że „przydatne” jest jedynym kryterium, inni uważają względną zasługę (w przypadku odpowiedzi). Zwykle biorę pod uwagę bezwzględną liczbę głosów („ładne”, „dobre”, „świetne” znaczki pocztowe sugerują, że takie powinny być brane pod uwagę), a także względną liczbę głosów (co pomaga w odpowiedzi na ranking). Zaskakujące wydaje się, że Meta.SE nie ma wiele na ten temat, a „ Jak powinienem głosować? ” Nawet nie ma odpowiedzi!
Paul A. Clayton

Odpowiedzi:

23

Wynika to z połączenia cech nowoczesnych procesorów.

Pierwszą rzeczą, która przyczynia się do wysokiego IPS, jest fakt, że nowoczesne procesory mają wiele jednostek wykonawczych, które mogą działać niezależnie. Na poniższym obrazku (pożyczonym z Wikipedii: Intel Core Microarchitecture ) na dole widać, że jest osiem jednostek wykonawczych (pokazanych na żółto), które mogą wykonywać wszystkie instrukcje jednocześnie. Nie wszystkie z tych jednostek mogą zapewnić takie same instrukcje, ale co najmniej 5 z nich może wykonać operację ALU, a istnieją trzy jednostki obsługujące SSE.

wprowadź opis zdjęcia tutaj

Połączenie tego z długim potokiem instrukcji, który może efektywnie układać instrukcje gotowe dla tych jednostek do wykonania instrukcji ( w razie potrzeby poza kolejnością ) oznacza, że ​​nowoczesny procesor może mieć dużą liczbę instrukcji w dowolnym momencie.

Wykonanie każdej instrukcji może zająć kilka cykli zegara, ale jeśli możesz skutecznie zrównoleglić ich wykonanie, możesz znacznie zwiększyć wydajność IPS kosztem złożoności procesora i wydajności cieplnej.

Utrzymywanie tych dużych rurociągów pełnych instrukcji wymaga również dużej pamięci podręcznej, która może być wstępnie wypełniona instrukcjami i danymi. Wpływa to na wielkość matrycy, a także ilość ciepła wytwarzanego przez procesor.

Powodem tego nie jest w przypadku mniejszych procesorów, ponieważ znacznie zwiększa to logikę sterowania wymaganą wokół rdzeni przetwarzających, a także ilość wymaganej przestrzeni, a także wytwarzanego ciepła. Jeśli potrzebujesz małego, niskiego poboru mocy, szybko reagującego procesora, to potrzebujesz krótkiego potoku bez zbyt wielu „dodatkowych” elementów otaczających rzeczywiste rdzenie funkcjonalne. Zazwyczaj minimalizują pamięć podręczną, ograniczają ją do tylko jednego rodzaju każdego rodzaju jednostki wymaganej do przetwarzania instrukcji i zmniejszają złożoność każdej części.

Że może wykonać mały procesor tak złożone, jak i w większym procesorze osiągnąć podobną wydajność, ale wówczas pobór mocy i chłodzenia będzie gwałtownie wzrosła.

Mokubai
źródło
Nigdy nie wiedziałem, że istnieją wyspecjalizowane jednostki wykonawcze i więcej niż jedna z nich. Ale nadal byłoby miło mieć superkalarne Arduino. Nie miałbym nic przeciwko wymaganiom dotyczącym zasilania i chłodzenia, gdyby oznaczało to większą przepustowość. Dziękuję za odpowiedź.
Jaca
1
Jeśli chcesz procesor superskalarny, użyj jednego. Ale Arduinos zajmują niszę dla ludzi, którym zależy na wymaganiach dotyczących zasilania i chłodzenia (oraz kosztów i złożoności) superskalarnych procesorów.
David Schwartz
4

Nietrudno to sobie wyobrazić. Wystarczy jeden cykl, aby przełączyć wiele tysięcy tranzystorów. Dopóki instrukcje są ułożone równolegle, jeden cykl może wystarczyć do wykonania ich wszystkich.

Lepiej niż próbować wyjaśnić to sam, oto dobry punkt wyjścia .

misha256
źródło
3

Aby uzyskać nieco bardziej fundamentalną odpowiedź niż Mokubai:

Procesory Superscalar analizują strumień instrukcji pod kątem zależności danych (i innych) między instrukcjami. Instrukcje, które nie zależą od siebie, mogą działać równolegle.

Typowe procesory do komputerów stacjonarnych x86 pobierają 16 lub 32B instrukcji w każdym cyklu zegara. Projekty Intel od Core2 mogą wydawać do 4 instrukcji na cykl. (Lub 5, jeśli istnieje porównanie i odgałęzienie, które może połączyć się w makro).

Zobacz miłą odpowiedź Mobukai na linki i szczegóły na temat tego, jak procesory w praktyce wykonują zadanie wyodrębnienia tyle równoległości na poziomie instrukcji, ile wykonują z kodu, który wykonują.

Zobacz także http://www.realworldtech.com/sandy-bridge/ i podobne artykuły dla innych architektur CPU, aby uzyskać szczegółowe wyjaśnienie tego, co jest pod maską.

Peter Cordes
źródło
-2

Poprzednie odpowiedzi pokazują, w jaki sposób wykonuje się więcej instrukcji na podstawie definicji „instrukcji” procesora i można sobie wyobrazić, że taka jest intencja pytającego.

Ale innym źródłem może być to, że każda „instrukcja” jest w rzeczywistości pewną ilością danych traktowanych jako instrukcja wprowadzana przez procesor. Jeśli liczenie jego źródła liczy tylko to, co procesor uważa za instrukcje, poniższe nic nie dodaje. Ale jeśli jego źródło zlicza wszystko, co człowiek nazwałby „instrukcją”, to: Dodaj, że nie każda instrukcja jest tak długa fizycznie jak każda inna instrukcja (jedna może mieć 12 bajtów, inna może mieć 56 bajtów itp.). Więc jeśli ładuje 64 bajty materiału w każdym cyklu jako „instrukcję” (lub tyle pełnych instrukcji, ile może, zanim uderzy 64 bajty), a jedna ma sześć instrukcji w tych 64 bajtach, to sześć instrukcji (tak jak ty i ja możemy je uznać za ) zostanie zakończona w tym cyklu.

Ponieważ wiele bardzo podstawowych instrukcji (nasza „rozsądna” definicja) to pozostałości po wczesnych dniach z 8-bajtowymi długościami instrukcji, a bardzo podstawowe instrukcje, z definicji, być może są stosowane nieproporcjonalnie, po prostu dalibyśmy sobie rady, by wykonać więcej „instrukcji” niż wydaje się na to pozwalać częstotliwość.

Roy
źródło
To trochę zbliżone do tego, jak faktycznie działają procesory, ale pobieranie wielu insynów maszynowych na cykl to tylko część działania superskalarnego procesora. (a średnie długości insns są bardziej jak 4 bajty, dla x86.) Głębokie potoki oznaczają, że pobierane teraz instrukcje mogą nie kończyć wykonywania przez 15 cykli (lub o wiele dłużej, jeśli są wstrzymywane przez brak pamięci podręcznej, ale instrukcje niezależne mogą wykonuj dalej.) Twoje wyjaśnienie w ogóle nie opisuje projektu potokowego. Nie jest również jasne, na czym według ciebie polega różnica między 8-bitowym 8086 add al, bla 80386 add eax, ebx.
Peter Cordes,