Podsumowanie
Ekonomia. Tańsze i łatwiejsze jest zaprojektowanie procesora o większej liczbie rdzeni niż wyższej częstotliwości taktowania, ponieważ:
Znaczący wzrost zużycia energii. Zużycie energii procesora gwałtownie wzrasta wraz ze wzrostem częstotliwości taktowania - możesz podwoić liczbę rdzeni pracujących z mniejszą prędkością w przestrzeni termicznej potrzebnej do zwiększenia szybkości taktowania o 25%. Czteroosobowy za 50%.
Są inne sposoby na zwiększenie prędkości przetwarzania sekwencyjnego, a producenci procesorów dobrze z nich korzystają.
Będę mocno czerpać z doskonałych odpowiedzi na to pytanie na jednej z naszych siostrzanych witryn SE. Głosujcie więc!
Ograniczenia prędkości zegara
Istnieje kilka znanych fizycznych ograniczeń szybkości zegara:
Czas transmisji
Czas potrzebny na przejście sygnału elektrycznego przez obwód jest ograniczony przez prędkość światła. Jest to twardy limit i nie ma znanego sposobu na jego obejście 1 . W zegarach gigahercowych zbliżamy się do tego limitu.
Jednak jeszcze nas tam nie ma. 1 GHz oznacza jedną nanosekundę na takt zegara. W tym czasie światło może pokonać 30 cm. Przy 10 GHz światło może przenosić 3 cm. Pojedynczy rdzeń procesora ma szerokość około 5 mm, więc napotkamy te problemy gdzieś powyżej 10 GHz. 2)
Opóźnienie przełączania
Nie wystarczy jedynie wziąć pod uwagę czas potrzebny na przemieszczenie sygnału z jednego końca na drugi. Musimy również wziąć pod uwagę czas, jaki zajmuje bramka logiczna w CPU do przejścia z jednego stanu do drugiego! Wraz ze wzrostem częstotliwości zegara może to stanowić problem.
Niestety nie jestem pewien szczegółów i nie mogę podać żadnych liczb.
Najwyraźniej wpompowanie do niego większej mocy może przyspieszyć przełączanie, ale prowadzi to zarówno do zużycia energii, jak i do problemów związanych z rozpraszaniem ciepła. Ponadto większa moc oznacza, że potrzebujesz obszerniejszych kanałów, które poradzą sobie z nią bez uszkodzeń.
Rozpraszanie ciepła / zużycie energii
Ten jest duży. Cytując odpowiedź fuzzyhair2 :
Najnowsze procesory są produkowane przy użyciu technologii CMOS. Za każdym razem, gdy występuje cykl zegara, energia jest rozpraszana. Dlatego wyższe prędkości procesora oznaczają większe rozpraszanie ciepła.
W tym wątku na forum AnandTech są piękne pomiary , a nawet wyprowadzili wzór na zużycie energii (które idzie w parze z wytwarzanym ciepłem):
Kredyt dla Idontcare
Możemy to sobie wyobrazić na poniższym wykresie:
Kredyt dla Idontcare
Jak widać, zużycie energii (i wytwarzane ciepło) rośnie niezwykle szybko, gdy prędkość zegara wzrasta powyżej określonego punktu. To sprawia, że nieskończone zwiększenie prędkości zegara jest niepraktyczne.
Przyczyna szybkiego wzrostu zużycia energii jest prawdopodobnie związana z opóźnieniem przełączania - nie wystarczy po prostu zwiększyć moc proporcjonalną do częstotliwości taktowania; napięcie należy również zwiększyć, aby zachować stabilność przy wyższych zegarkach. To może nie być całkowicie poprawne; możesz wskazać poprawki w komentarzu lub dokonać edycji tej odpowiedzi.
Więcej rdzeni?
Dlaczego więc więcej rdzeni? Nie mogę definitywnie odpowiedzieć na to pytanie. Będziesz musiał zapytać ludzi z Intel i AMD. Ale widać powyżej, że przy nowoczesnych procesorach w pewnym momencie zwiększenie częstotliwości zegara staje się niepraktyczne.
Tak, wielordzeniowy zwiększa również wymaganą moc i rozpraszanie ciepła. Ale starannie unika problemów z czasem transmisji i opóźnieniami przełączania. Jak widać z wykresu, możesz z łatwością podwoić liczbę rdzeni w nowoczesnym procesorze z tym samym obciążeniem termicznym, co 25% wzrost prędkości zegara.
Niektóre osoby to zrobiły - obecny rekord świata w przetaktowywaniu jest tylko 9 GHz. Jest to jednak poważne wyzwanie inżynierskie, przy jednoczesnym utrzymaniu zużycia energii w dopuszczalnych granicach. W pewnym momencie projektanci zdecydowali, że dodanie większej liczby rdzeni w celu wykonania większej liczby prac równolegle zapewni bardziej efektywny wzrost wydajności w większości przypadków.
Właśnie tam pojawia się ekonomia - prawdopodobnie przejście na wielordzeniową trasę było prawdopodobnie tańsze (krótszy czas projektowania, mniej skomplikowana produkcja). I łatwo jest sprzedać - kto nie lubi nowego ośmiordzeniowego układu? (Oczywiście wiemy, że wielordzeniowy jest dość bezużyteczny, gdy oprogramowanie go nie wykorzystuje ...)
Tam jest minusem dla wielordzeniowych: trzeba więcej przestrzeni fizycznej umieścić dodatkowy rdzeń. Jednak rozmiary procesorów stale się kurczą, więc jest dużo miejsca na umieszczenie dwóch kopii poprzedniego projektu - prawdziwym kompromisem nie jest możliwość stworzenia większych, bardziej złożonych, pojedynczych rdzeni. Z drugiej strony, zwiększenie złożoności rdzenia jest złym aspektem z punktu widzenia projektu - większa złożoność = więcej błędów / błędów i błędów produkcyjnych. Wydaje się, że znaleźliśmy szczęśliwy środek z wydajnymi rdzeniami, które są na tyle proste, że nie zajmują zbyt wiele miejsca.
Osiągnęliśmy już limit liczby rdzeni, które możemy zmieścić na jednej matrycy przy obecnych rozmiarach procesu. Możemy przekroczyć granicę tego, jak daleko możemy się zmniejszyć. Więc, co dalej? Czy potrzebujemy więcej? Niestety trudno na nie odpowiedzieć. Czy ktoś tu jest jasnowidzem?
Inne sposoby poprawy wydajności
Nie możemy więc zwiększyć szybkości zegara. Więcej rdzeni ma dodatkową wadę - pomagają tylko wtedy, gdy oprogramowanie na nich działające może z nich skorzystać.
Co jeszcze możemy zrobić? W jaki sposób współczesne procesory są znacznie szybsze niż starsze przy tej samej częstotliwości zegara?
Szybkość zegara jest tak naprawdę tylko bardzo przybliżonym przybliżeniem wewnętrznego działania procesora. Nie wszystkie elementy procesora działają z tą prędkością - niektóre mogą działać raz na dwa tyknięcia itp.
Bardziej znacząca jest liczba instrukcji, które można wykonać w jednostce czasu. Jest to znacznie lepsza miara tego, ile pojedynczy rdzeń procesora może osiągnąć. Niektóre instrukcje; niektóre zajmą jeden cykl zegara, inne trzy. Na przykład podział jest znacznie wolniejszy niż dodawanie.
Możemy więc poprawić wydajność procesora, zwiększając liczbę instrukcji, które może on wykonać na sekundę. W jaki sposób? Cóż, możesz uczynić instrukcję bardziej wydajną - może podział zajmuje teraz tylko dwa cykle. Potem jest potokowanie instrukcji . Dzieląc każdą instrukcję na wiele etapów, możliwe jest wykonywanie instrukcji „równolegle” - ale każda instrukcja wciąż ma dobrze zdefiniowaną, sekwencyjną kolejność odpowiadającą instrukcjom przed i po niej, więc nie wymaga obsługi oprogramowania, takiego jak wielordzeniowy robi.
Jest inny sposób: bardziej wyspecjalizowane instrukcje. Widzieliśmy takie rzeczy jak SSE, które zawierają instrukcje przetwarzania dużych ilości danych jednocześnie. Ciągle wprowadzane są nowe zestawy instrukcji o podobnych celach. Te znowu wymagają wsparcia oprogramowania i zwiększają złożoność sprzętu, ale zapewniają przyjemny wzrost wydajności. Ostatnio pojawiła się AES-NI, która zapewnia przyspieszane sprzętowo szyfrowanie i deszyfrowanie AES, znacznie szybciej niż kilka arytmetyki zaimplementowanych w oprogramowaniu.
1 W każdym razie nie bez zagłębiania się w teoretyczną fizykę kwantową.
2 Może być w rzeczywistości niższy, ponieważ propagacja pola elektrycznego nie jest tak szybka jak prędkość światła w próżni. Dotyczy to również odległości w linii prostej - prawdopodobnie istnieje co najmniej jedna ścieżka, która jest znacznie dłuższa niż linia prosta.