Megahertz Myth stał się taktyką promocyjną ze względu na różnice między procesorem INTEL 8086 na PC a procesorem Rockwell 6502 firmy Apple. 8086 działał z częstotliwością 4,77 MHz, podczas gdy 6502 działał z częstotliwością 1 MHz. Jednak instrukcje dotyczące 6502 wymagały mniejszej liczby cykli; tak wiele mniej, że działał szybciej niż 8086. Dlaczego niektóre instrukcje wymagają mniejszej liczby cykli? I dlaczego instrukcje 6502, wymagające mniejszej liczby cykli, nie mogą być łączone z szybkim procesorem cyklicznym 8086?
Artykuł Wikipedii z instrukcjami na cykl (IPC) mówi
Czynniki rządzące IPC
Dany poziom instrukcji na sekundę można osiągnąć przy wysokim IPC i niskiej częstotliwości zegara ... lub przy niskim IPC i wysokiej częstotliwości zegara.
Dlaczego nie możesz mieć zarówno wysokich instrukcji na cykl, jak i wysokiej częstotliwości zegara?
Może ma to związek z tym, czym jest cykl zegara? Wikipedia wspomina o synchronizacji obwodów? Nie jestem pewna co to oznacza.
A może ma to związek z tym, jak działa rurociąg? Nie jestem pewien, dlaczego instrukcje w krótkim potoku różnią się od instrukcji w długim potoku.
Każdy wgląd byłby świetny! Próbuję zrozumieć architekturę mitu. Dzięki!
Referencje:
Instrukcja na cykl w porównaniu ze zwiększoną liczbą cykli
Odpowiedzi:
tl; dr
Krótsze rurociągi oznaczają wyższe częstotliwości taktowania, ale mogą zmniejszyć przepustowość. Zobacz także odpowiedzi nr 2 i 3 na dole (obiecuję, że są krótkie).
Dłuższa wersja:
Jest tu kilka rzeczy do rozważenia:
Bardzo uproszczony potok (to, co dzieje się w nowoczesnych układach Intela, jest bardziej skomplikowane) ma kilka etapów:
Pobierz -> Dekoduj -> Dostęp do pamięci -> Wykonaj -> Zapis zwrotny -> Aktualizacja licznika programu
Przy każdym -> ponoszony jest koszt czasu. Dodatkowo, każdy tik (cykl zegara), wszystko przesuwa się z jednego etapu do następnego, więc twój najwolniejszy etap staje się prędkością WSZYSTKICH etapów (naprawdę opłaca się, aby miały możliwie podobną długość).
Załóżmy, że masz 5 instrukcji i chcesz je wykonać (zdjęcie pochodzi z wikipedii, tutaj aktualizacja komputera nie jest wykonywana). Wyglądałoby to tak:
Mimo że każda instrukcja wymaga 5 cykli zegara, ukończona instrukcja wychodzi z potoku w każdym cyklu. Jeśli czas potrzebny dla każdego etapu wynosi 40 ns, a 15 ns dla bitów pośrednich (używając mojego sześciostopniowego potoku powyżej), zajmie 40 * 6 + 5 * 15 = 315 ns, aby uzyskać pierwszą instrukcję.
W przeciwieństwie do tego, gdybym całkowicie wyeliminował potok (ale utrzymywał wszystko inne bez zmian), wykonanie pierwszej instrukcji zajęłoby zaledwie 240 ns. (Ta różnica prędkości, by uzyskać „pierwszą” instrukcję, nazywa się opóźnieniem. Jest ona na ogół mniej ważna niż przepustowość, czyli liczba instrukcji na sekundę).
Zupełnie inaczej jest w tym, że w przykładzie potokowym otrzymuję nowe instrukcje (po pierwszym) co 60 ns. W przypadku niepotokowym, za każdym razem trwa 240. To pokazuje, że rurociągi dobrze poprawiają przepustowość.
Idąc o krok dalej, wydaje się, że na etapie dostępu do pamięci będę potrzebował jednostki dodatkowej (do obliczeń adresu). Oznacza to, że jeśli istnieje instrukcja, która nie korzysta z etapu mem w tym cyklu, mogę zrobić kolejny dodatek. W ten sposób mogę wykonać dwa etapy wykonania (jeden jest na etapie dostępu do pamięci) na jednym procesorze jednym tikiem (harmonogram jest koszmarem, ale nie idźmy tam. Dodatkowo, etap aktualizacji komputera będzie również wymagał dodatkowej jednostki w przypadek skoku, dzięki czemu mogę wykonać trzy dodatkowe stany wykonania jednym tikiem). Dysponując potokiem, można go zaprojektować tak, aby dwie (lub więcej) instrukcji mogły wykorzystywać różne etapy (lub stopnie skokowe itp.), Oszczędzając cenny czas.
Zauważ, że aby to zrobić, procesory wykonują wiele „magii” (wykonywanie poza kolejnością , przewidywanie rozgałęzień i wiele więcej), ale pozwala to na wiele instrukcji wychodzących szybciej niż bez potoku (zauważ, że potoki są zbyt długie są bardzo trudne w zarządzaniu i wiążą się z wyższymi kosztami tylko przez czekanie między etapami). Drugą stroną jest to, że jeśli zrobisz zbyt długi rurociąg, możesz uzyskać niesamowitą szybkość zegara, ale stracić wiele pierwotnych korzyści (posiadania tego samego rodzaju logiki, który może istnieć w wielu miejscach i być używany w tym samym czasie) ).
Odpowiedź nr 2:
Procesory SIMD (wiele danych z pojedynczą instrukcją) (jak większość procesorów graficznych) wykonują wiele pracy na wielu bitach informacji, ale zajmuje to więcej czasu. Odczyt wszystkich wartości zajmuje więcej czasu (oznacza wolniejszy zegar, choć jest to do pewnego stopnia przesunięcie przez znacznie szerszą magistralę), ale można uzyskać o wiele więcej instrukcji naraz (bardziej efektywne instrukcje na cykl).
Odpowiedź nr 3:
Ponieważ można „oszukiwać” sztucznie wydłużać liczbę cykli, dzięki czemu można wykonać dwie instrukcje w każdym cyklu (wystarczy zmniejszyć o połowę prędkość zegara). Możliwe jest również zrobienie czegoś co dwa tiki w przeciwieństwie do jednego (co daje 2x szybkość zegara, ale nie zmienia instrukcji w sekundę).
źródło
[EBX+ECX*4+100]
adresowanie stylu).Upraszczam to bardzo, ale ważne jest, aby pamiętać, że te terminy porównują jabłka do pomarańczy. „Cykl” nie jest pojedynczą zunifikowaną jednostką miary, która jest taka sama dla wszystkich procesorów, tak jak „sekunda” jest zunifikowanym pomiarem czasu. Zamiast tego cykl reprezentuje pewną jednostkę pracy, która jest definiowana nieco arbitralnie, ale ograniczona złożonością projektu rurociągu i oczywiście fizyką.
W wielu przypadkach wykonanie dużej ilości pracy w jednym cyklu może umożliwić wyczyszczenie całego rurociągu. Jeśli się powiedzie, oznacza to, że następny cykl nie zostanie zoptymalizowany, ponieważ musisz ponownie wypełnić rurociąg, co może zająć trochę czasu.
Mógłbym zaprojektować bardzo uproszczony procesor, który przetwarza jeden etap jednej instrukcji RISC w każdym cyklu, a gdyby to była podstawa mojego procesora, prawdopodobnie mógłbym osiągnąć bardzo, bardzo wysokie cykle na sekundę ze względu na zmniejszoną złożoność tego, co stanowi „ cykl".
Szczegóły dotyczą wielu zagadnień z fizyki i elektrotechniki, których tak naprawdę nie rozumiem, ale pamiętaj, że taktowania nie osiąga się po prostu naiwnie dodając napięcie wejściowe do procesora i mając nadzieję na najlepsze. Przynajmniej profil termiczny jest kolejnym niezbędnym problemem.
źródło
Oto bardzo proste (być może rażąco uproszczone) wyjaśnienie: powiedzmy, że masz szczególne zadanie do wykonania, na przykład dodaj dwie liczby 32-bitowe. Możesz zastosować dwa podejścia. Możesz podzielić go na bardzo dużą liczbę bardzo małych kroków lub możesz podzielić go na niewielką liczbę bardzo dużych kroków.
Na przykład możesz po prostu powiedzieć „dodaj dwie liczby”. Teraz masz tylko jeden krok. Ale ten krok składa się z wielu części i potrwa dłużej. Masz więc wysoką liczbę instrukcji na cykl - w tym przypadku jedną. Ale twoja prędkość zegara nie może być wysoka, ponieważ masz wiele do zrobienia w tym cyklu.
Możesz też powiedzieć: „Pobierz pierwszą liczbę do rejestru. Następnie pobierz drugą liczbę. Następnie dodaj najmniej znaczące bity. Następnie dodaj drugi najmniej znaczący bit z przeniesieniem z wcześniej. Następnie dodaj trzeci najmniej ... Następnie dodaj najbardziej znaczące bity. Jeśli było przeniesienie, ustaw flagę przepełnienia. Następnie zapisz wynik w pamięci. " Teraz masz ogromną liczbę kroków. Ale każdy krok może być absurdalnie szybki. Masz więc małą liczbę instrukcji na cykl (w tym przypadku około 1/36). Ale twoja prędkość zegara może być bardzo wysoka, ponieważ każdy cykl ma tylko bardzo mały do zrobienia.
Aby mieć zarówno wysoką liczbę instrukcji na cykl, jak i wysoką częstotliwość zegara, należy podzielić złożoną instrukcję na bardzo małą liczbę bardzo prostych kroków. Ale nie można tego zrobić, ponieważ instrukcja jest złożona.
Rzeczywiste konkretne kompromisy i liczby cykli są bardzo różne, ponieważ nowoczesne procesory są przetwarzane potokowo i nakładają się na siebie instrukcje. Ale podstawowa idea jest poprawna.
źródło
Państwo może mieć zarówno wysokie instrukcji na cykl i wysoką prędkość zegara. Tam, gdzie napotykasz limity, opóźnienie propagacji obwodu cyfrowego przekracza szerokość impulsu pojedynczego cyklu zegara. Można temu zaradzić, zwiększając napięcie procesora, ale należy zauważyć, że zwiększy to zużycie energii (a tym samym rozproszenie ciepła).
Jeśli więc chcesz uzyskać wyższą prędkość zegara, musisz zwiększyć napięcie (zwiększenie prędkości dryfu elektronu ), aby zmniejszyć opóźnienie propagacji. Jeśli to opóźnienie przekroczy cykl zegara, procesor najprawdopodobniej nie będzie zachowywał się zgodnie z oczekiwaniami, a uruchomione na nim oprogramowanie ulegnie awarii lub zgłosi wyjątek. Oczywiście istnieje ograniczenie napięcia, które można przepuszczać przez procesor, a jest to podyktowane samą konstrukcją procesora - głównie zdolnością przenoszenia prądu wewnętrznych ścieżek elektrycznych.
Potokowanie pozwala w niektórych przypadkach na wyższe częstotliwości taktowania, ponieważ każda instrukcja jest podzielona na kilka mniejszych „mikrooperacji”. Te mikrooperacje są bardzo prostymi operacjami, wykorzystującymi znacznie mniejsze obwody połączone w łańcuch (w sensie fizycznym, ponieważ im mniejsza odległość elektrony muszą przebyć, tym krótsze opóźnienie propagacji przez określoną podjednostkę).
Dodatkową zaletą procesora potokowego jest to, że można znacznie zwiększyć liczbę instrukcji wykonywanych w jednostce czasu, kosztem bardziej złożonego projektu.
To, dlaczego niektóre instrukcje wymagają mniej lub więcej cykli, zależy od tego, jakie instrukcje wykonujesz. Na przykład w zestawie instrukcji x86 znajduje się
MOVS
instrukcja, która może przenosić cały łańcuch w pamięci z jednego miejsca do drugiego. Oczywiście nie można natychmiast skopiować długiego łańcucha, ale można to zrobić, kopiując słowo po słowie, biorąc wiele cykli zegara. DlategoMOVS
instrukcja zajmuje zmienną ilość czasu (w zależności od ilości znaków do skopiowania).Wpływ operacji wielocyklowych jest mniej zauważalny na projekt RISC (tj. ARM) w przeciwieństwie do projektu CISC (tj. X86). Wynika to z faktu, że projekty oparte na RISC będą miały tylko najczęściej używane operacje elementarne i są znacznie łatwiejsze do potokowania w taki sposób, aby uzyskać przepustowość jednej instrukcji na cykl.
źródło
Czas, jaki zajmuje komputer do ukończenia określonego zadania, nie zależy od szybkości zegara komputera ... zależy od tego, w jaki sposób jednostki obliczeniowe są projektowane i konstruowane.
Szybkość zegara jest w rzeczywistości (mniej lub bardziej) arbitralną decyzją projektanta procesora, czasem z dobrych powodów (wydajność), a czasem dla słabych (reklama).
Powiedzmy, że dany procesor ma mieszankę instrukcji, których ukończenie zajmuje od 1 do 100 nanosekund (ns). Możesz ustawić częstotliwość tak, aby 1 „tik” wynosił 100 ns (10 MHz), co oznacza, że każda instrukcja kończy się dokładnie 1 tikiem. Jeśli jednak czas wykonania instrukcji jest równomiernie rozłożony, oznacza to, że twoje jednostki obliczeniowe byłyby bezczynne w 50% czasu (średnia prędkość wykonania wynosiłaby 50ns, pozostawiając pozostałe 50ns z tykania bezczynności). Z drugiej strony, jeśli ustawisz tik na 10ns, instrukcje będą w zakresie od 1 do 10 tików, ale jednostka nigdy nie będzie bezczynna dłużej niż 9ns przed rozpoczęciem kolejnej instrukcji, a średnia bezczynność wyniesie 5ns.
Podczas projektowania procesor zostanie zaprojektowany tak, aby działał z określoną prędkością w zależności od tego, ile pracy procesor jest w stanie faktycznie wykonać. Jeśli zwiększysz lub zmniejszysz częstotliwość taktowania, tak naprawdę nie zmienisz ilości pracy, jaką procesor może wykonać, po prostu zadzierasz ze współczynnikiem wydajności.
(I zanim zaczniesz płakać z powodu podkręcania procesorów: daje to dwie korzyści, które powodują rzeczywiste zwiększenie prędkości: szybkie wykonywanie instrukcji (które zajmują mniej niż 1 cykl) skutkuje szybszymi czasami wykonania, a wszystkie instrukcje mają mniej czasu bezczynności. Oba z nich może w rzeczywistości zwiększyć ilość pracy, jaką może wykonać komputer, ale przekonasz się, że podkręcenie procesora o X% nie zawsze równa się X% wzrostu pracy wykonanej podczas jego testowania).
TL; DR
Procesor może wykonać pracę X w ciągu sekundy. Jeśli używasz częstotliwości zegara H i I IPC, mamy I = X / H. Zmiana H nie zmienia X, ale odwrotnie wpływa na I.
źródło
Nie można mieć zarówno wysokich instrukcji na cykl, jak i dużej częstotliwości taktowania, ponieważ wymagania są sprzeczne.
Można pokazać, że w pierwszym przybliżeniu IPC zależy od złożoności (A) projektu jako
IPC = sqrt (A)
mając na uwadze, że maksymalna częstotliwość (F) osiągalna przez skale projektowe to [1]
F = 1 / {b + c sqrt (A)}
z parametrami a, b i c.
Tak więc zwiększenie złożoności muarcha zwiększa IPC kosztem zmniejszenia częstotliwości roboczej, podczas gdy zmniejszenie złożoności zwiększa częstotliwość kosztem IPC. Odpowiada to dwóm skrajnym przypadkom wspomnianym w artykule na Wikipedii, ale wikipedia nie wymienia nazw: Brainiac i Speed-Demon.
[1] Niektórzy autorzy twierdzą, że zamiast tego wyrażeniem częstotliwości jest „1 / {b + c A}”, ale w obu przypadkach zwiększenie złożoności zmniejsza maksymalną osiągalną częstotliwość.
źródło