Co to są „instrukcje na cykl”?


23

Dowiedziałem się nieco więcej o tym, jak działają procesory, ale nie byłem w stanie znaleźć prostej odpowiedzi na temat instrukcji na cykl.

Na przykład miałem wrażenie, że czterordzeniowy procesor może wykonać cztery instrukcje na cykl, więc czterordzeniowy procesor działający z częstotliwością 2 Ghz wykonałby 8 miliardów operacji na sekundę. Czy tak jest w przypadku?

Jestem pewien, że to upraszcza rzeczy, ale jeśli jest jakiś przewodnik lub coś innego, czego mogę użyć, aby się wyprostować, zdecydowanie jestem otwarty na pomysły.


Nie, tak nie jest. Nowoczesne procesory x86 mogą utrzymać trzy instrukcje na rdzeń na cykl w idealnych warunkach, podczas gdy niektóre instrukcje mogą wymagać dziesiątek cykli.
David Schwartz,

Odpowiedzi:


22

Słowami kluczowymi, które prawdopodobnie powinieneś sprawdzić, są CISC , RISC i architektura superskalarna .

CISC

W architekturze CISC (x86, 68000, VAX) jedna instrukcja jest wydajna, ale przetworzenie jej wymaga wielu cykli . W starszych architekturach liczba cykli była stała, obecnie liczba cykli na instrukcję zwykle zależy od różnych czynników (trafienie / brak pamięci podręcznej, przewidywanie gałęzi itp.). Są tabele do wyszukiwania tych rzeczy. Często istnieją również ułatwienia, aby faktycznie zmierzyć, ile cykli wykonuje dana instrukcja w określonych okolicznościach (patrz liczniki wydajności ).

Jeśli interesują Cię szczegóły dotyczące Intela, bardzo dobrze zapoznaj się z Instrukcją optymalizacji dla Intel 64 i IA-32 .

RYZYKO

Architektura RISC (ARM, PowerPC, SPARC) oznacza, że ​​zwykle jedna bardzo prosta instrukcja zajmuje tylko kilka (często tylko jeden) cykl.

Superskalar

Ale niezależnie od CISC lub RISC istnieje architektura superskalarna. Procesor nie przetwarza jednej instrukcji po drugiej, ale pracuje nad wieloma instrukcjami jednocześnie, podobnie jak linia montażowa.

Konsekwencja jest taka: jeśli po prostu przejrzysz cykle dla każdej instrukcji twojego programu, a następnie dodasz je wszystkie, skończysz z liczbą do wysokiej. Załóżmy, że masz pojedynczy rdzeń procesora RISC. Czas przetwarzania pojedynczej instrukcji nigdy nie może być krótszy niż czas jednego cyklu, ale ogólna przepustowość może równie dobrze wynosić kilka instrukcji na cykl.


9
Dla mnie analogia „linii montażowej” sugeruje po prostu proste potokowanie, a nie architekturę superskalarną. Superscalar obejmuje replikację części sprzętu CPU (np. Etap potoku będący wąskim gardłem) w celu poprawy przepustowości.
sblair

2
Dla zwięzłości dodaję: RISC = zredukowany zestaw instrukcji; CISC = złożony zestaw instrukcji. Dobre wyjaśnienie, Ludwig za wskazanie współczynnika trafień / braków w pamięci podręcznej i (ostatecznie) wskazanie TLB. Wyjaśnienie architektury mikroprocesora nie jest łatwe, szczególnie, aby wcisnąć wszystko w jeden (dość kompaktowy) post! :)
osij2is

1
Z tego, co słyszę, procesory w dzisiejszych czasach spędzają dużo czasu, czekając na pracę, aby pokazać się z pamięci głównej. Przynajmniej taką odpowiedź otrzymałem, gdy zapytałem, dlaczego w procesorze nie ma więcej rdzeni wykonawczych.
surfasb

32

Lubię myśleć o tym z analogią do prania. Instrukcje procesora są jak duże pranie. Musisz użyć zarówno pralki, jak i suszarki dla każdego ładunku. Powiedzmy, że każda z nich zajmuje 30 minut. To jest cykl zegara. Stare procesory uruchamiały pralkę, a następnie uruchamiały suszarkę, co trwało 60 minut (2 cykle) do zakończenia każdego załadunku prania za każdym razem.

Rurociągi : Rurociąg ma miejsce wtedy, gdy używasz obu jednocześnie - myjesz ładunek, a podczas suszenia myjesz następny ładunek. Pierwsze ładowanie zajmuje 2 cykle, ale drugie ładowanie kończy się po 1 kolejnym cyklu. Tak więc większość obciążeń potrzebuje tylko 1 cyklu, z wyjątkiem pierwszego obciążenia.

Superscalar: Zabierz wszystkie pranie do pralni. Zdobądź 2 podkładki i załaduj je obie. Po zakończeniu znajdź 2 suszarki i użyj ich obu. Teraz możesz umyć i wysuszyć 2 wsady w 60 minut. To jest 2 obciążenia w 2 cyklach. Każde obciążenie nadal trwa 2 cykle, ale możesz teraz zrobić więcej. Średni czas wynosi teraz 1 obciążenie na cykl.

Superscalar z układaniem rur: umyj pierwsze 2 ładunki, a następnie, gdy są one suszone, załaduj podkładki następnymi 2 ładunkami. Teraz pierwsze 2 obciążenia nadal wymagają 2 cykli, a kolejne 2 są zakończone po 1 kolejnym cyklu. Tak więc przez większość czasu kończysz 2 obciążenia w każdym cyklu.

Wiele rdzeni: Daj połowę prania swojej matce, która ma również 2 pralki i 2 suszarki. Oboje pracując razem, możecie zrobić dwa razy więcej. Jest to podobne do superskalarnego, ale nieco inne. Zamiast samemu przenosić wszystkie pranie do iz każdej maszyny, może to zrobić w tym samym czasie, co Ty.

To świetnie, możemy zrobić osiem razy więcej prania niż wcześniej w tym samym czasie, bez konieczności tworzenia szybszych maszyn. (Podwojona prędkość zegara: pralki, których uruchomienie zajmuje tylko 15 minut.)

Porozmawiajmy teraz o tym, jak coś pójdzie nie tak:

Pęcherzyk rurociągu: masz plamę, która nie wyszła z prania, więc postanawiasz ją umyć ponownie. Teraz suszarka po prostu tam siedzi i czeka na coś do zrobienia.

Pamięć podręczna: ciężarówka, która dostarcza brudne pranie, utknęła w korku. Teraz masz 2 pralki i 2 suszarki, ale nie wykonujesz żadnej pracy, ponieważ musisz czekać.

W zależności od tego, jak często coś pójdzie nie tak, nie zawsze będziemy w stanie wykonać 4 obciążenia w każdym cyklu, więc rzeczywista ilość wykonanej pracy może się różnić.

Przewidywanie gałęzi: Cóż, zaczynasz robić pranie na czystych ubraniach, na wypadek, gdyby później je poplamili, aby były czyste ... okej, tutaj analogia się załamuje ...


Niezła analogia. Idę to ukraść.
dmckee,

6
A hiperwątkowość jest tak, jakby kilka osób myło się w tym samym pralni.
Ronald Pottol

1
Prognozy branżowe: zaczniesz prać ubrania, które Twoim zdaniem będą potrzebne w następnym tygodniu
Akash

2
Hyperthreading: zaczynasz akceptować pranie innych osób i reklamujesz liczbę posiadanych pralek (1). Wkrótce zdajesz sobie sprawę, że w Twojej pralce jest miejsce na więcej niż parę spranych przez Ciebie spodni, a nie kolejną parę spodni, ale coś mniejszego. Więc wkładasz też skarpetki. Teraz reklamujesz 2 pralki i masz nadzieję, że ludzie upuszczą pranie na tyle różnorodne, że zawsze będziesz „wypełniał dziury” mniejszymi przedmiotami. Kiedy ten facet, który tylko raz ma 10 brudnych dżinsów i 1 parę skarpet, upuszcza swoje rzeczy, jest tak powolny jak zawsze.
Florenz Kley,

@Akash Na wszelki wypadek myjesz ubrania, które nawet nie mają jeszcze plam?
Kevin Panko

3

Nie dokładnie. Cykl, o którym mówisz, to cykl zegara, a ponieważ większość współczesnych procesorów obsługuje potok, wykonanie jednej instrukcji wymaga kilku cykli zegara. (Jest to dobra rzecz, ponieważ pozwala na rozpoczęcie wykonywania innych instrukcji jeszcze przed zakończeniem 1. instrukcji). Przy założeniu najbardziej idealnej okoliczności prawdopodobnie będzie to około 8 miliardów IPC, ale różne rzeczy dzieją się jak zależności, bąbelki w rurociągu , gałęzie itp., więc nie zawsze działa.

Niestety, jest to zbyt skomplikowane, aby uzyskać prostą odpowiedź. Jon Stokes dobrze wyjaśnia to w tym artykule .


2

Dni, kiedy można było sprawdzić (a nawet zapamiętać) czas cyklu dla każdej instrukcji i wiedzieć, ile zegarów zajmie ukończenie pewnej części kodu, już dawno minęły w przypadku wysokiej klasy układów scalonych (ale wciąż są z nami w niektórych mikrokontrolery). Nowoczesny, uniwersalny rdzeń procesora może mieć wiele kopii kilku różnych jednostek wykonawczych w wielu potokach, uzyskując dostęp do wieloetapowej pamięci podręcznej z własną logiką, a także przewidywania gałęzi i możliwości spekulatywnego wykonywania. Posiadanie wielu rdzeni na jednej matrycy wciąga logikę spójności pamięci podręcznej i inne złożoności.

Krótka odpowiedź brzmi: więcej rdzeni oznacza większą zdolność do wykonywania zadań, ale nie w przyjemny, przewidywalny sposób .


1

Ludwig wyjaśnił różnicę między CISC a RISC, ale zapomniał wspomnieć, że chociaż instrukcje RISC są proste i szybkie, niewiele robią indywidualnie, więc musisz połączyć kilka razem, aby zrobić to samo, jak pojedynczą instrukcję w procesorze CISC. W rezultacie niektóre instrukcje RISC będą szybsze, inne nie.


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.