Dlaczego, na przykład, dwurdzeniowy Core i5 2,66 GHz byłby szybszy niż Core 2 Duo 2,66 GHz, który jest również dwurdzeniowy?
Czy to z powodu nowszych instrukcji, które mogą przetwarzać informacje w mniejszej liczbie cykli zegara? Jakie inne zmiany architektoniczne są związane?
To pytanie pojawia się często, a odpowiedzi są zwykle takie same. Ten post ma na celu dostarczyć ostatecznej, kanonicznej odpowiedzi na to pytanie. Edytuj odpowiedzi, aby dodać dodatkowe szczegóły.
Odpowiedzi:
Zwykle nie dzieje się tak z powodu nowszych instrukcji. Po prostu dlatego, że procesor wymaga mniejszej liczby cykli instrukcji, aby wykonać te same instrukcje. Może to być z wielu powodów:
Duże pamięci podręczne oznaczają mniej czasu traconego na oczekiwanie na pamięć.
Więcej jednostek wykonawczych oznacza mniej czasu oczekiwania na uruchomienie instrukcji.
Lepsze przewidywanie gałęzi oznacza mniej straconego czasu na spekulacyjne wykonywanie instrukcji, które nigdy nie muszą być wykonywane.
Ulepszenia jednostki wykonawczej oznaczają krótszy czas oczekiwania na wykonanie instrukcji.
Krótsze rurociągi oznaczają, że rurociągi zapełniają się szybciej.
I tak dalej.
źródło
Zaprojektowanie procesora w celu zapewnienia wysokiej wydajności to znacznie więcej niż tylko zwiększenie częstotliwości taktowania. Istnieje wiele innych sposobów na zwiększenie wydajności, które są zgodne z prawem Moore'a i mają zasadnicze znaczenie dla projektowania nowoczesnych procesorów.
Częstotliwości zegara nie mogą wzrastać w nieskończoność.
Na pierwszy rzut oka może się wydawać, że procesor po prostu wykonuje strumień instrukcji jeden po drugim, a wzrost wydajności osiągany jest dzięki wyższym częstotliwościom taktowania. Jednak samo zwiększenie częstotliwości taktowania nie wystarczy. Zużycie energii i moc grzewcza rosną wraz ze wzrostem częstotliwości taktowania.
Przy bardzo wysokich częstotliwościach zegara konieczne jest znaczne zwiększenie napięcia rdzenia procesora . Ponieważ TDP rośnie wraz z kwadratem rdzenia V , ostatecznie osiągamy punkt, w którym nadmierne zużycie energii, moc cieplna i wymagania dotyczące chłodzenia zapobiegają dalszemu wzrostowi częstotliwości taktowania. Limit ten został osiągnięty w 2004 r., W czasach Pentium 4 Prescott . Chociaż pomogły ostatnie ulepszenia wydajności energetycznej, znaczny wzrost częstotliwości taktowania nie jest już możliwy. Zobacz: Dlaczego producenci procesorów przestali zwiększać taktowanie swoich procesorów?
Wykres podstawowych prędkości zegara w najnowocześniejszych komputerach dla entuzjastów na przestrzeni lat. Źródło obrazu
Pozornie sekwencyjne strumienie instrukcji mogą być często równoległe.
Rurociąg dzieli instrukcje na mniejsze części, które można wykonywać równolegle.
Każda instrukcja może być podzielona na sekwencję kroków, z których każda jest wykonywana przez oddzielną część procesora. Potokowanie instrukcji pozwala wielu instrukcjom przejść przez te kroki jeden po drugim, bez konieczności oczekiwania na całkowite zakończenie każdej instrukcji. Przetwarzanie potokowe umożliwia wyższe częstotliwości taktowania: dzięki ukończeniu jednego kroku każdej instrukcji w każdym cyklu zegarowym potrzeba mniej czasu na każdy cykl, niż gdyby całe instrukcje musiały być wykonywane pojedynczo.
Klasyczny RISC rurociąg składa się z pięciu etapów: instrukcja FETCH dekodowania instrukcji, wykonanie instrukcji, dostęp do pamięci i zapisu wstecznego. Nowoczesne procesory dzielą wykonanie na wiele kolejnych etapów, tworząc głębszy potok z większą liczbą etapów (i zwiększając osiągalne częstotliwości taktowania, ponieważ każdy etap jest mniejszy i zajmuje mniej czasu do ukończenia), ale ten model powinien zapewnić podstawową wiedzę o tym, jak działa potokowanie.
Źródło obrazu
Rurociąg może jednak powodować zagrożenia, które należy rozwiązać, aby zapewnić prawidłowe wykonanie programu.
Ponieważ różne części każdej instrukcji są wykonywane w tym samym czasie, mogą wystąpić konflikty, które zakłócają prawidłowe wykonanie. Są to tak zwane zagrożenia . Istnieją trzy rodzaje zagrożeń: dane, dane strukturalne i kontrola.
Zagrożenia danych występują, gdy instrukcje odczytują i modyfikują te same dane w tym samym czasie lub w niewłaściwej kolejności, co może prowadzić do nieprawidłowych wyników. Zagrożenia strukturalne występują, gdy wiele instrukcji musi korzystać z określonej części procesora w tym samym czasie. Zagrożenia związane z kontrolą występują, gdy napotkana zostanie warunkowa instrukcja rozgałęzienia.
Zagrożenia te można rozwiązać na różne sposoby. Najprostszym rozwiązaniem jest po prostu przeciągnięcie rurociągu, tymczasowe wstrzymanie wykonania jednej lub instrukcji w rurociągu, aby zapewnić prawidłowe wyniki. W miarę możliwości można tego uniknąć, ponieważ zmniejsza wydajność. W przypadku zagrożeń związanych z danymi stosuje się takie techniki, jak przekazywanie operandów w celu ograniczenia przeciągnięć. Zagrożenia kontrolne są obsługiwane przez prognozowanie gałęzi , które wymaga specjalnego traktowania i jest omówione w następnej sekcji.
Prognozowanie rozgałęzień służy do eliminowania zagrożeń kontroli, które mogą zakłócić cały rurociąg.
Zagrożenia związane z kontrolą, które występują w przypadku napotkania gałęzi warunkowej , są szczególnie poważne. Gałęzie wprowadzają możliwość kontynuowania wykonywania w innym miejscu programu, a nie tylko następnej instrukcji w strumieniu instrukcji, w zależności od tego, czy określony warunek jest prawdziwy, czy fałszywy.
Ponieważ następnej instrukcji do wykonania nie można ustalić, dopóki nie zostanie oceniony warunek rozgałęzienia, nie można wstawić żadnych instrukcji do potoku po rozgałęzieniu pod nieobecność. Dlatego rurociąg jest opróżniany ( przepłukiwany ), co może zmarnować prawie tyle cykli zegara, ile jest etapów w rurociągu. Gałęzie zwykle występują bardzo często w programach, więc zagrożenia związane z kontrolą mogą poważnie wpłynąć na wydajność procesora.
Prognozowanie gałęzi rozwiązuje ten problem, zgadując, czy gałąź zostanie podjęta. Najprostszym sposobem na to jest założenie, że gałęzie są zawsze brane lub nigdy nie są brane. Jednak współczesne procesory stosują znacznie bardziej wyrafinowane techniki w celu uzyskania większej dokładności prognozowania. Zasadniczo procesor śledzi poprzednie gałęzie i wykorzystuje tę informację na jeden z kilku sposobów, aby przewidzieć kolejną instrukcję do wykonania. Rurociąg może być następnie zasilany instrukcjami z właściwej lokalizacji na podstawie prognozy.
Oczywiście, jeśli prognoza jest błędna, wszelkie instrukcje wprowadzone przez rurociąg po upuszczeniu odgałęzienia muszą zostać opróżnione. W rezultacie dokładność predyktora rozgałęzienia staje się coraz bardziej krytyczna, gdy rurociągi stają się coraz dłuższe. Określone techniki przewidywania gałęzi wykraczają poza zakres tej odpowiedzi.
Bufory służą do przyspieszenia dostępu do pamięci.
Nowoczesne procesory mogą wykonywać instrukcje i przetwarzać dane znacznie szybciej, niż są dostępne w pamięci głównej. Gdy procesor musi uzyskać dostęp do pamięci RAM, wykonywanie może zostać wstrzymane na długi czas, aż dane będą dostępne. Aby złagodzić ten efekt, procesor zawiera małe szybkie obszary pamięci zwane pamięciami podręcznymi .
Ze względu na ograniczoną przestrzeń dostępną na matrycy procesora pamięci podręczne mają bardzo ograniczony rozmiar. Aby maksymalnie wykorzystać tę ograniczoną pojemność, pamięci podręczne przechowują tylko najnowsze lub najczęściej używane dane ( lokalizacja czasowa ). W związku z tym, że dostęp do pamięci jest zgrupowany w obrębie określonych obszarów ( lokalizacja przestrzenna ), bloki danych w pobliżu ostatnio uzyskiwanego dostępu są również przechowywane w pamięci podręcznej. Zobacz: Lokalizacja odniesienia
Pamięci podręczne są również zorganizowane na wielu poziomach o różnych rozmiarach, aby zoptymalizować wydajność, ponieważ większe pamięci podręczne są zwykle wolniejsze niż mniejsze pamięci podręczne. Na przykład procesor może mieć pamięć podręczną poziomu 1 (L1), która ma rozmiar tylko 32 KB, a pamięć podręczna poziomu 3 (L3) może mieć kilka megabajtów. Rozmiar pamięci podręcznej, a także asocjatywność pamięci podręcznej, która ma wpływ na sposób, w jaki procesor zarządza wymianą danych w pełnej pamięci podręcznej, znacząco wpływa na wzrost wydajności uzyskany dzięki pamięci podręcznej.
Realizacja zamówienia poza kolejnością zmniejsza liczbę przeciągnięć spowodowanych zagrożeniami, umożliwiając najpierw wykonanie niezależnych instrukcji.
Nie każda instrukcja w strumieniu instrukcji zależy od siebie. Na przykład, chociaż
a + b = c
muszą być wykonywane przedc + d = e
,a + b = c
id + e = f
są niezależne i mogą być wykonywane w tym samym czasie.Wykonanie poza kolejnością wykorzystuje ten fakt, aby umożliwić wykonanie innych, niezależnych instrukcji, gdy jedna instrukcja jest zablokowana. Zamiast wymagać wykonywania instrukcji kolejno po sobie,dodaje się sprzęt do planowania, aby umożliwić wykonywanie niezależnych instrukcji w dowolnej kolejności. Instrukcje są wysyłane do kolejki instrukcji i wydawane do odpowiedniej części procesora, gdy wymagane dane stają się dostępne. W ten sposób instrukcje, które utknęły w oczekiwaniu na dane z wcześniejszej instrukcji, nie wiążą późniejszych instrukcji, które są niezależne.
Źródło obrazu
Architektury superskalarne umożliwiają jednoczesne wykonywanie wielu instrukcji w strumieniu instrukcji.
Techniki omówione powyżej tylko zwiększają wydajność potoku instrukcji. Same te techniki nie pozwalają na wykonanie więcej niż jednej instrukcji na cykl zegara. Często jednak możliwe jest wykonywanie pojedynczych instrukcji w strumieniu instrukcji równolegle, na przykład wtedy, gdy nie zależą one od siebie (jak omówiono powyżej w sekcji dotyczącej wykonywania zadań poza kolejnością).
Architektury superskalarne wykorzystują tę równoległość na poziomie instrukcji, umożliwiając wysyłanie instrukcji do wielu jednostek funkcjonalnych jednocześnie. Procesor może mieć wiele jednostek funkcjonalnych określonego typu (takich jak liczby całkowite ALU) i / lub różne typy jednostek funkcjonalnych (takich jak zmiennoprzecinkowe i liczby całkowite), do których instrukcje mogą być jednocześnie wysyłane.
W procesorze superskalarnym instrukcje są zaplanowane zgodnie z projektem „poza kolejnością”, ale obecnie istnieje wiele portów problemów , umożliwiając jednoczesne wydawanie i wykonywanie różnych instrukcji. Rozszerzony obwód dekodowania instrukcji umożliwia procesorowi odczytywanie kilku instrukcji jednocześnie w każdym cyklu zegara i określanie zależności między nimi. Nowoczesny wysokowydajny procesor może zaplanować do ośmiu instrukcji na cykl zegara, w zależności od tego, co robi każda instrukcja. W ten sposób procesory mogą wykonać wiele instrukcji na cykl zegara. Zobacz: Silnik wykonawczy Haswell na AnandTech
Źródło obrazu
Dodano bardziej zaawansowane instrukcje, które wykonują złożone operacje w krótszym czasie.
Wraz ze wzrostem budżetów tranzystorów staje się możliwe wdrażanie bardziej zaawansowanych instrukcji, które pozwalają wykonywać złożone operacje w ułamku czasu, który zajęłoby inaczej. Przykłady obejmują zestawy instrukcji wektorowych, takich jak SSE i AVX, które wykonują obliczenia na wielu kawałkach danych w tym samym czasie oraz zestaw instrukcji AES, który przyspiesza szyfrowanie i deszyfrowanie danych.
Aby wykonać te złożone operacje, nowoczesne procesory używają mikroprocesorów (μops) . Złożone instrukcje są dekodowane w sekwencje μops, które są przechowywane w dedykowanym buforze i planowane do wykonania indywidualnie (w zakresie dozwolonym przez zależności danych). Zapewnia to więcej miejsca dla procesora na wykorzystanie ILP. Aby jeszcze bardziej zwiększyć wydajność, można użyć specjalnej pamięci podręcznej μop do przechowywania ostatnio zdekodowanych μops, dzięki czemu można szybko sprawdzić μops dla ostatnio wykonanych instrukcji.
Jednak dodanie tych instrukcji nie zwiększa automatycznie wydajności. Nowe instrukcje mogą zwiększyć wydajność tylko wtedy, gdy aplikacja jest napisana do ich używania. Przyjęcie tych instrukcji jest utrudnione przez fakt, że aplikacje je wykorzystujące nie będą działać na starszych procesorach, które ich nie obsługują.
Jak te techniki poprawiają wydajność procesora w miarę upływu czasu?
Rurociągi stały się dłuższe z biegiem lat, skracając czas potrzebny do ukończenia każdego etapu, a tym samym umożliwiając wyższe częstotliwości taktowania. Jednak między innymi dłuższe rurociągi zwiększają karę za niepoprawne przewidywanie gałęzi, więc rurociąg nie może być zbyt długi. Próbując osiągnąć bardzo wysokie częstotliwości taktowania, procesor Pentium 4 użył bardzo długich potoków, do 31 stopni w Prescott . Aby zmniejszyć deficyty wydajności, procesor spróbuje wykonać instrukcje, nawet jeśli mogą się nie powieść, i będzie próbował, aż się powiedzie . Doprowadziło to do bardzo wysokiego zużycia energii i zmniejszenia wydajności uzyskanej dzięki hiperwątkowości . Nowsze procesory nie używają już tak długo rurociągów, zwłaszcza że skalowanie częstotliwości zegara osiągnęło ścianę;Haswell używa potoku o długości od 14 do 19 etapów, a architektury o niższej mocy używają krótszych potoków (Intel Atom Silvermont ma 12 do 14 etapów).
Dokładność przewidywania rozgałęzień poprawiła się dzięki bardziej zaawansowanym architekturom, zmniejszając częstotliwość opróżnień rurociągów spowodowanych błędnymi prognozami i umożliwiając wykonywanie większej liczby instrukcji jednocześnie. Biorąc pod uwagę długość rurociągów w dzisiejszych procesorach, ma to kluczowe znaczenie dla utrzymania wysokiej wydajności.
Wraz ze wzrostem budżetów tranzystorów w procesorze można osadzać większe i bardziej efektywne pamięci podręczne, co zmniejsza przestoje wynikające z dostępu do pamięci. Dostęp do pamięci może wymagać więcej niż 200 cykli w nowoczesnych systemach, dlatego ważne jest, aby maksymalnie ograniczyć potrzebę dostępu do pamięci głównej.
Nowsze procesory są w stanie lepiej wykorzystywać ILP dzięki bardziej zaawansowanej logice wykonywania superskalarnego i „szerszym” projektom, które umożliwiają jednoczesne dekodowanie i wykonywanie większej liczby instrukcji. Haswell architektura może dekodować cztery instrukcje i wysyłką 8 mikro-operacje na cykl zegara. Zwiększenie budżetów tranzystorów pozwala na włączenie do rdzenia procesora większej liczby jednostek funkcjonalnych, takich jak liczby całkowite ALU. Kluczowe struktury danych używane w poza kolejnością i wykonywaniu superskalarnym, takie jak stacja rezerwacji, bufor zmiany kolejności i plik rejestru, są rozszerzane w nowszych wersjach, co pozwala procesorowi na wyszukiwanie szerszego okna instrukcji w celu wykorzystania ich ILP. Jest to główna siła napędowa wzrostu wydajności dzisiejszych procesorów.
Bardziej złożone instrukcje są zawarte w nowszych procesorach, a rosnąca liczba aplikacji korzysta z nich w celu zwiększenia wydajności. Postępy w technologii kompilatora, w tym ulepszenia wyboru instrukcji i automatyczna wektoryzacja , umożliwiają bardziej efektywne wykorzystanie tych instrukcji.
Oprócz powyższego, większa integracja części wcześniej zewnętrznych dla procesora, takich jak mostek północny, kontroler pamięci i linie PCIe, zmniejsza opóźnienie we / wy i pamięć. Zwiększa to przepustowość poprzez zmniejszenie opóźnień spowodowanych opóźnieniami w dostępie do danych z innych urządzeń.
źródło
Absolutnie ostatecznym odniesieniem są instrukcje dla programistów Intel 64 i IA-32 Architectures Software . Szczegółowo opisują zmiany między architekturami i są świetnym zasobem do zrozumienia architektury x86.
Polecam pobranie połączonych tomów od 1 do 3C (pierwszy link do pobrania na tej stronie). Tom 1 Rozdział 2.2 zawiera potrzebne informacje.
Niektóre ogólne różnice, które widzę wymienione w tym rozdziale, przechodząc od mikroarchitektur Neurema / Sandy Bridge do rdzenia:
Pełna lista znajduje się w linku podanym powyżej (Vol. 1, rozdz. 2.2).
źródło
Wszystko, co powiedziano wcześniej, jest prawdą, ale do pewnego stopnia. Moja odpowiedź jest krótka: procesory nowej generacji są „szybsze” przede wszystkim dlatego, że mają większe i lepiej zorganizowane pamięci podręczne . Jest to główny czynnik wpływający na wydajność komputera. Aby uzyskać więcej informacji ilościowych, zobacz „ Linux Magazine: Co wpływa na wydajność w HPC ”
Krótko mówiąc, w przypadku najczęściej używanych aplikacji (jak w kolekcji SPEC) czynnikiem ograniczającym jest pamięć. Gdy trwa rzeczywiste obliczenie, wszystkie pamięci podręczne są ładowane danymi, ale każda brakująca pamięć podręczna powoduje zatrzymanie się rury wykonawczej procesora i czekanie. Problem polega na tym, że bez względu na to, jak skomplikowany jest potok procesora, lub lepsze instrukcje, równoległość na poziomie instrukcji jest nadal dość ograniczona (z wyjątkiem niektórych specjalnych wysoce zoptymalizowanych przypadków preetched). Po znalezieniu krytycznej zależności cała równoległość kończy się pięcioma dziesięcioma zegarami procesora, podczas gdy potrzeba setek zegarów procesora, aby eksmitować linię czasu i załadować nową z pamięci głównej. Procesor czeka więc na nic. Cała ta koncepcja dotyczy również wielu nagrań.
Jeśli więc chcesz mieć „szybszy” komputer, kup go z procesorem, który ma największą pamięć podręczną, na jaką Cię stać.
źródło
Ponieważ poprawiają to, jak strasznie dużo instrukcji na każdy cykl (zegar), procesor może zrobić, włączając w to wyższe jednostki wykonawcze (jednostki obliczeniowe), z tego powodu zwiększając IPC, ponadto zmniejszają pamięć podręczną, ram, dekodują, pobierają opóźnienia, poprawiają operacje poza kolejnością i przewidywanie gałęzi, po czym dodaj więcej pamięci podręcznej, mając mniejsze opóźnienia. Większa pamięć podręczna przepustowości. Dodaj nowe instrukcje od czasu do czasu. Zmniejsz liczbę potrzebnych cykli na instrukcję (CPI)
Prędkości zegara są tylko częścią wydajności procesora, istotnym składnikiem, ale niestety, węzły metod uderzały o ścianę przez ostatnią dekadę, nic nie może przekroczyć 5,0–5,2 Ghz pomimo jakości chłodzenia wodą , bez uciekania się do suchego lodu lub ciekłego azotu.
źródło