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.
cpu
computer-architecture
Matt Simmons
źródło
źródło
Odpowiedzi:
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.
źródło
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 ...
źródło
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 .
źródło
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 .
źródło
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.
źródło
Cykle to raczej koncepcja na rdzeń. Każdy rdzeń ma tam własne cykle równolegle.
źródło