To pytanie ma już odpowiedź tutaj:
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 .
Odpowiedzi:
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.
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.
źródło
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 .
źródło
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ą.
źródło
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ść.
źródło
add al, bl
a 80386add eax, ebx
.