Dlaczego mamy procesory ze wszystkimi rdzeniami o tej samej prędkości, a nie kombinacjach różnych prędkości?


79

Ogólnie rzecz biorąc, jeśli kupujesz nowy komputer, możesz określić, który procesor kupić, zgodnie z oczekiwanym obciążeniem. Wydajność w grach zależy zwykle od szybkości pojedynczego rdzenia, podczas gdy aplikacje takie jak edycja wideo zależą od liczby rdzeni.

Pod względem tego, co jest dostępne na rynku - wszystkie procesory wydają się mieć mniej więcej tę samą prędkość, a główne różnice to więcej wątków lub więcej rdzeni.

Na przykład:

  • Intel Core i5-7600K, częstotliwość podstawowa 3,80 GHz, 4 rdzenie, 4 wątki
  • Intel Core i7-7700K, częstotliwość podstawowa 4,20 GHz, 4 rdzenie, 8 wątków
  • AMD Ryzen 5 1600X, częstotliwość podstawowa 3,60 GHz, 6 rdzeni, 12 wątków
  • AMD Ryzen 7 1800X, częstotliwość podstawowa 3,60 GHz, 8 rdzeni, 16 wątków

Dlaczego więc widzimy ten wzór zwiększania liczby rdzeni, gdy wszystkie rdzenie mają tę samą częstotliwość zegara?

Dlaczego nie mamy wariantów o różnych prędkościach zegara? Na przykład dwa „duże” rdzenie i wiele małych rdzeni.

Na przykład, zamiast, powiedzmy, czterech rdzeni na 4,0 GHz (tj. 4x4 GHz ~ 16 GHz maksymalnie), co z procesorem z dwoma rdzeniami działającymi na powiedzmy 4,0 GHz i powiedzmy czterema rdzeniami działającymi na 2 GHz (tj. 2x4,0 GHz + 4x2,0 GHz ~ 16 GHz maksimum). Czy druga opcja nie byłaby równie dobra w przypadku obciążeń jednowątkowych, ale potencjalnie lepsza w przypadku obciążeń wielowątkowych?

Zadaję to pytanie jako ogólną kwestię - nie chodzi konkretnie o te procesory, które wymieniłem powyżej, ani o konkretne obciążenie. Jestem tylko ciekawy, dlaczego wzór jest taki, jaki jest.


15
Istnieje wiele telefonów komórkowych z szybkimi i wolnymi rdzeniami, a na prawie wszystkich współczesnych serwerach wielordzeniowych rdzeń procesora przyspiesza niezależnie od zegara w zależności od obciążenia, niektóre nawet wyłączają rdzenie, gdy nie są używane. Na komputerze ogólnego przeznaczenia, w którym nie projektuje się w celu oszczędzania energii, jednak posiadanie tylko dwóch rodzajów rdzeni (CPU i GPU) sprawia, że ​​platforma jest bardziej elastyczna.
eckes

5
Zanim planista wątków mógłby dokonać inteligentnego wyboru, który rdzeń ma być użyty, musiałby ustalić, czy proces może wykorzystać wiele rdzeni. Robienie tego niezawodnie byłoby wysoce problematyczne i podatne na błędy. Szczególnie, gdy może się to dynamicznie zmieniać w zależności od potrzeb aplikacji. W wielu przypadkach program planujący musiałby dokonać suboptymalnego wyboru, gdy używany był najlepszy rdzeń. Identyczne rdzenie upraszczają sprawę, zapewniają maksymalną elastyczność i ogólnie mają najlepszą wydajność.
LMiller7

33
Prędkości zegara nie można rozsądnie uznać za addytywne w opisany sposób. Posiadanie czterech rdzeni pracujących z częstotliwością 4 Ghz nie oznacza, że ​​masz „łączną” 16 GHz, ani nie oznacza, że ​​ta 16 GHz może być podzielona na 8 procesorów działających na 2 Ghz lub 16 procesorów działających na 1 GHz.
Bob Jarvis

16
Przesłanka pytania jest po prostu błędna. Nowoczesne procesory doskonale nadają się do pracy z rdzeniami przy różnych prędkościach
phuclv

Odpowiedzi:


85

Jest to znane jako heterogeniczne przetwarzanie wieloprocesowe ( HMP ) i jest powszechnie stosowane przez urządzenia mobilne. W urządzeniach opartych na ARM, które implementują big.LITTLE , procesor zawiera rdzenie o różnych profilach wydajności i mocy, np. Niektóre rdzenie pracują szybko, ale pobierają dużo energii (szybsza architektura i / lub wyższe zegary), podczas gdy inne są energooszczędne, ale powolne ( wolniejsza architektura i / lub niższe zegary). Jest to przydatne, ponieważ zużycie energii ma tendencję do zwiększania się nieproporcjonalnie w miarę zwiększania wydajności po przekroczeniu określonego punktu. Chodzi o to, aby uzyskać wydajność, gdy jej potrzebujesz, i żywotność baterii, gdy jej nie potrzebujesz.

Na platformach stacjonarnych zużycie energii jest znacznie mniejszym problemem, więc nie jest to naprawdę konieczne. Większość aplikacji oczekuje, że każdy rdzeń będzie miał podobną charakterystykę wydajności, a procesy planowania dla systemów HMP są znacznie bardziej złożone niż planowanie dla tradycyjnych systemów SMP. (Windows 10 technicznie obsługuje HMP, ale jest przeznaczony głównie dla urządzeń mobilnych, które używają ARM big.LITTLE.)

Ponadto większość procesorów do komputerów stacjonarnych i laptopów nie jest ograniczona termicznie ani elektrycznie do tego stopnia, że ​​niektóre rdzenie muszą działać szybciej niż inne nawet w przypadku krótkich serii. Zasadniczo uderzyliśmy w ścianę o tym, jak szybko możemy tworzyć pojedyncze rdzenie , więc zastąpienie niektórych rdzeni wolniejszymi nie pozwoli na szybsze działanie pozostałych rdzeni.

Chociaż istnieje kilka procesorów do komputerów stacjonarnych, które mają jeden lub dwa rdzenie, które mogą działać szybciej niż inne, ta funkcja jest obecnie ograniczona do niektórych bardzo zaawansowanych procesorów Intel (jak Turbo Boost Max Technology 3.0) i wymaga jedynie niewielkiego wzrostu wydajności dla rdzeni, które mogą działać szybciej.


Chociaż z pewnością możliwe jest zaprojektowanie tradycyjnego procesora x86 zarówno z dużymi, szybkimi rdzeniami, jak i mniejszymi, wolniejszymi rdzeniami w celu zoptymalizowania pod kątem obciążeń wielowątkowych, zwiększyłoby to znacznie złożoność projektu procesora, a aplikacje raczej go nie obsługują.

Weź hipotetyczny procesor z dwoma szybkimi rdzeniami Kaby Lake (rdzeń 7. generacji) i ośmioma wolnymi rdzeniami Goldmont (Atom). Miałbyś w sumie 10 rdzeni, a mocno obciążone obciążenia zoptymalizowane dla tego rodzaju procesorów mogą zyskać na wydajności i wydajności w porównaniu do zwykłego czterordzeniowego procesora Kaby Lake . Jednak różne typy rdzeni mają bardzo różne poziomy wydajności, a wolne rdzenie nie obsługują nawet niektórych instrukcji obsługiwanych przez szybkie rdzenie, takich jak AVX . (ARM unika tego problemu, wymagając, aby zarówno duży, jak i MAŁY rdzeń obsługiwały te same instrukcje.)

Ponownie, większość aplikacji wielowątkowych opartych na systemie Windows zakłada, że ​​każdy rdzeń ma taki sam lub prawie taki sam poziom wydajności i może wykonywać te same instrukcje, więc taka asymetria może skutkować mniejszą niż idealna wydajnością, być może nawet ulega awarii, jeśli wykorzystuje instrukcje nie obsługiwane przez wolne rdzenie. Chociaż Intel mógłby zmodyfikować wolne rdzenie, aby dodać zaawansowaną obsługę instrukcji, tak aby wszystkie rdzenie mogły wykonywać wszystkie instrukcje, nie rozwiązałoby to problemów ze wsparciem oprogramowania dla heterogenicznych procesorów.

Inne podejście do projektowania aplikacji, bliższe temu, o czym prawdopodobnie myślisz w swoim pytaniu, wykorzystałoby procesor graficzny do przyspieszenia wysoce równoległych części aplikacji. Można to zrobić za pomocą interfejsów API, takich jak OpenCL i CUDA . Jeśli chodzi o rozwiązanie jednoukładowe, AMD promuje sprzętową obsługę przyspieszenia GPU w swoich APU, które łączą tradycyjny procesor i wysokowydajny zintegrowany procesor graficzny w tym samym układzie, co heterogeniczna architektura systemu , chociaż nie było to zbyt popularne w branży kilku specjalistycznych aplikacji.


1
System Windows ma już pojęcie „Aplikacje”, „Procesy w tle” i „Procesy systemu Windows”. Więc to nie obejmuje poziomu sprzętowego?
Jamie,

2
@Jamie Proces „w tle” ulega skróceniu i istnieje większe prawdopodobieństwo, że zostanie przerwany. Windows 10 do pewnego stopnia uwzględnia systemy HMP, choć nie ma jeszcze wielu informacji na temat tego, jak to zrobić.
Bob

Myślę więc, że po edycji @bwDraco prawie dla mnie odpowiedział. Gdyby istniał „mieszany” procesor, mógłby z łatwością obsługiwać ten sam zestaw instrukcji, gdyby został zbudowany w ten sposób, więc potrzebowalibyśmy jakiegoś harmonogramu, aby wybrać odpowiedni rdzeń. Myślę, że tak naprawdę aplikacje korzystające z przejścia na wiele małych rdzeni prawdopodobnie skorzystałyby jeszcze bardziej na przejściu do wielu naprawdę małych rdzeni. Mamy więc przyspieszenie GPU.
Jamie

3
Zauważ, że obudowa GPU nie handluje 2 dużymi rdzeniami dla 10 małych i wolnych rdzeni, ale raczej (bardzo szorstki) odpowiednik handlu 2 dużymi rdzeniami dla 1024 małych i wolnych rdzeni. Masywnie równoległy, a nie tylko trochę bardziej równoległy.
Jak

4
Intel może prawdopodobnie uzyskać rdzeń Goldmonta do uruchamiania instrukcji AVX2 bez większego krzemu (powoli, dekodując do par operacji 128b). Knight's Landing (Xeon Phi) ma rdzenie oparte na Silvermont z AVX512, więc modyfikacja Silvermonta nie jest niemożliwa. Ale KNL dodaje wykonanie poza kolejnością instrukcji wektorowych, podczas gdy normalny Silver / Goldmont robi tylko OOO dla liczb całkowitych, więc prawdopodobnie chcieliby zaprojektować go bliżej Goldmonta niż KNL. W każdym razie zestawy insn nie stanowią prawdziwego problemu. Wsparcie systemu operacyjnego i niewielkie korzyści są prawdziwymi przeszkodami w wydatkowaniu obszaru kości na rdzeń o niskiej mocy.
Peter Cordes

68

Pytanie, dlaczego pytasz, dlaczego obecne systemy wykorzystują wieloprocesorowanie symetryczne zamiast asymetrycznego .

Asymetryczne przetwarzanie wieloprocesowe było używane w dawnych czasach, kiedy komputer był ogromny i mieścił się w kilku jednostkach.

Nowoczesne procesory są odlewane jako jedna jednostka, w jednej matrycy, gdzie znacznie łatwiej jest nie łączyć procesorów różnych typów, ponieważ wszystkie mają tę samą magistralę i pamięć RAM.

Istnieje również ograniczenie zegara, który reguluje cykle procesora i dostęp do pamięci RAM. Stanie się to niemożliwe przy mieszaniu procesorów o różnych prędkościach. Bez zegarów eksperymentalne komputery istniały i były nawet dość szybkie, ale złożoność współczesnego sprzętu narzuciła prostszą architekturę.

Na przykład rdzenie Sandy Bridge i Ivy Bridge nie mogą działać jednocześnie z różnymi prędkościami, ponieważ magistrala pamięci podręcznej L3 działa z tą samą prędkością zegara co rdzenie, więc aby uniknąć problemów z synchronizacją, wszystkie muszą działać z tą prędkością lub zostać zaparkowanym / wyłączonym (link: odsłonięta architektura Sandy Bridge firmy Intel ). (Zweryfikowano również w komentarzach poniżej dotyczących Skylake).

[EDYCJA] Niektórzy mylili moją odpowiedź, mówiąc, że miksowanie procesorów jest niemożliwe. Dla ich korzyści stwierdzam: mieszanie różnych procesorów nie wykracza poza dzisiejszą technologię, ale nie jest zrobione - pytanie brzmi „dlaczego nie”. Jak wspomniano powyżej, byłoby to technicznie skomplikowane, a zatem kosztowne i przynoszące zbyt mały zysk finansowy lub jego brak, więc nie interesuje producentów.

Oto odpowiedzi na niektóre komentarze poniżej:

Turbo Boost zmienia prędkości procesora, dzięki czemu można je zmieniać

Turbo Boost odbywa się poprzez przyspieszenie zegara i zmianę niektórych mnożników, co dokładnie robią ludzie podczas podkręcania, tyle że sprzęt robi to za nas. Zegar jest współdzielony między rdzeniami tego samego procesora, więc równomiernie przyspiesza cały procesor i wszystkie jego rdzenie.

Niektóre telefony mają więcej niż jeden procesor o różnych prędkościach

Takie telefony zazwyczaj mają niestandardowe oprogramowanie układowe i stos oprogramowania związane z każdym procesorem, bardziej jak dwa oddzielne procesory (lub podobnie jak CPU i GPU) i nie mają jednego widoku pamięci systemowej. Ta złożoność jest trudna do zaprogramowania, dlatego w sferze mobilnej pozostawiono asymetryczne przetwarzanie wieloprocesowe, ponieważ wymaga ono opracowania oprogramowania na niskim poziomie zbliżonym do sprzętowego, co jest odrzucane przez ogólny system operacyjny dla komputerów stacjonarnych. To jest powód, dla którego takich konfiguracji nie ma w komputerze (z wyjątkiem CPU / GPU, jeśli wystarczająco rozciągniemy definicję).

Mój serwer z 2x Xeon E5-2670 v3 (12 rdzeni z HT) ma obecnie rdzenie 1,3 GHz, 1,5 GHz, 1,6 GHz, 2,2 GHz, 2,5 GHz, 2,7 GHz, 2,8 GHz, 2,9 GHz i wiele innych prędkości.

Rdzeń jest aktywny lub bezczynny. Wszystkie rdzenie, które są aktywne w tym samym czasie, pracują na tej samej częstotliwości. To, co widzisz, jest tylko artefaktem pomiaru czasu lub uśredniania. Zauważyłem również, że Windows nie parkuje rdzenia przez długi czas, ale raczej osobno parkuje / odznacza wszystkie rdzenie znacznie szybciej niż częstotliwość odświeżania Monitora zasobów, ale nie znam przyczyny tego zachowania, które prawdopodobnie jest opóźnione powyższa uwaga.

Procesory Intel Haswell mają zintegrowane regulatory napięcia, które umożliwiają indywidualne napięcia i częstotliwości dla każdego rdzenia

Poszczególne regulatory napięcia różnią się od prędkości zegara. Nie wszystkie rdzenie są identyczne - niektóre są szybsze. Szybsze rdzenie otrzymują nieco mniej mocy, co tworzy nadwyżkę, aby zwiększyć moc przekazywaną słabszym rdzeniom. Regulatory napięcia rdzenia zostaną ustawione tak nisko, jak to możliwe, aby utrzymać aktualną prędkość zegara. Jednostka kontroli mocy na procesorze reguluje napięcia i w razie potrzeby zastępuje żądania systemu operacyjnego dla rdzeni o różnej jakości. Podsumowanie: Poszczególne regulatory służą do ekonomicznego działania wszystkich rdzeni z tą samą prędkością zegara, a nie do ustawiania indywidualnych prędkości rdzenia


3
Ach więcej mshorter i do rzeczy. +1
Hennes

6
@harrymc istnieją bloki synchronizatora, które doskonale nim zarządzają; Pamięć DRAM działa wolniej niż prędkość rdzenia, a rdzenie Intela mogą dynamicznie pracować z różnymi prędkościami na tym samym układzie.
pjc50

10
Procesory z serii Intel Core pracują przez cały czas z różnymi prędkościami na tej samej matrycy.
Nick T

9
Samo istnienie architektury big.LITTLE i niezależne od rdzenia wspomaganie zegara dowodzi, że się mylisz. Heterogeniczne przetwarzanie wieloprocesowe jest głównym nurtem. To może być zrobione, to jest zrobione w telefonach, ale z jakiegoś powodu nie w komputerach.
Agent_L

9
@Agent_L: Powodem jest złożoność. Procesory do komputerów stacjonarnych są już wystarczająco kosztowne. Powtarzam: wszystko jest możliwe, ale faktyczne pytanie brzmi: dlaczego tego nie zrobiono, a nie czy można to zrobić. Nie atakuj mnie tak, jakbym twierdził, że jest to niemożliwe - mówię tylko, że jest to zbyt skomplikowane i kosztowne oraz za mało zysku, aby zainteresować producentów.
harrymc

46

Dlaczego nie mamy wariantów o różnych prędkościach zegara? to znaczy. 2 „duże” rdzenie i wiele małych rdzeni.

Możliwe, że telefon w kieszeni ma dokładnie taką konfigurację - ARM big.LITTLE działa dokładnie tak, jak opisano. Nie ma tu nawet różnicy prędkości zegara, mogą to być całkowicie różne typy rdzeni - zwykle wolniejsze taktowanie są nawet „głupsze” (brak wykonania poza kolejnością i inne optymalizacje procesora).

Zasadniczo fajnie jest oszczędzać baterię, ale ma swoje wady; księgowanie przenoszenia rzeczy między różnymi procesorami jest bardziej skomplikowane, komunikacja z resztą urządzeń peryferyjnych jest bardziej skomplikowana i, co najważniejsze, aby efektywnie korzystać z takich rdzeni, harmonogram zadań musi być wyjątkowo inteligentny (i często „zgadywać dobrze”) .

Idealnym rozwiązaniem jest uruchamianie niekrytycznych czasowo zadań w tle lub stosunkowo małych zadań interaktywnych na „małych” rdzeniach i wybudzanie „dużych” tylko w przypadku dużych, długich obliczeń (gdy kończy się dodatkowy czas spędzony na małych rdzeniach zużywa więcej baterii) lub do średnich zadań interaktywnych, w których użytkownik odczuwa powolność na małych rdzeniach.

Jednak harmonogram ma ograniczone informacje na temat rodzaju pracy wykonywanej przez każde zadanie i musi odwołać się do pewnej heurystyki (lub informacji zewnętrznych, takich jak wymuszenie maski maski koligacji dla danego zadania), aby zdecydować, gdzie je zaplanować. Jeśli to się nie powiedzie, możesz stracić dużo czasu / mocy, aby uruchomić zadanie na wolnym rdzeniu i dać złą obsługę, lub użyć „dużych” rdzeni do zadań o niskim priorytecie, a tym samym marnować moc / kradnąc je od zadań, które ich potrzebują.

Ponadto w asymetrycznym systemie wieloprocesorowym migracja zadań do innego rdzenia jest zwykle bardziej kosztowna niż w systemie SMP, więc program planujący zazwyczaj musi odgadnąć początkowo, zamiast próbować uruchamiać się na losowym wolnym rdzeniu i ruszać się to później.


Zamiast tego Intel wybrał mniejszą liczbę identycznych inteligentnych i szybkich rdzeni, ale z bardzo agresywnym skalowaniem częstotliwości. Gdy procesor jest zajęty, szybko przyspiesza do maksymalnej prędkości zegara, działa najszybciej, jak to możliwe, a następnie przeskalowuje go, aby powrócić do trybu najniższego zużycia energii. Nie powoduje to szczególnego obciążenia harmonogramu i pozwala uniknąć złych scenariuszy opisanych powyżej. Oczywiście nawet w trybie niskiego zegara rdzenie te są „inteligentne”, więc prawdopodobnie zużyją więcej niż rdzenie „głupie” duże.


1
Heurystyka powinna być dość prosta. Każda mimowolna zmiana zadania (użycie pełnej szczeliny czasowej) wskazuje, że wolne procesor nie jest odpowiedni dla zadania. Bardzo niskie wykorzystanie i wszystkie dobrowolne przełączniki zadań wskazują, że zadanie można przenieść do wolnego procesora.
R ..

3
innym problemem jest to, że 4 głupie rdzenie 2GHz mogą zająć większy rozmiar matrycy niż 2 inteligentne rdzenie 4GHz, lub mogą być mniejsze i pobierają znacznie mniej mocy niż rdzenie 4 GHz, ale działają również znacznie wolniej
phuclv

2
@R .: zgodnie z zasadą zgadzam się z tobą, ale nawet włączając w to podstawową obsługę harmonogramu, widziałem, jak absurdalne są rutyny na stosowanej przeze mnie płycie ARM, więc musi być coś jeszcze. Poza tym większość „zwykłych” programów wielowątkowych jest napisana z myślą o SMP, więc nie jest rzadkością, że pule wątków są tak duże jak całkowita liczba rdzeni, a zadania przeciągają się na wolne rdzenie.
Matteo Italia

1
@Ramhound: 10-rdzeniowy element o mocy 120 W ma budżet mocy 12 W na rdzeń (z wyjątkiem trybu Turbo z pojedynczym rdzeniem). Właśnie dlatego najwyższe zegary jednordzeniowe znajdują się w częściach czterordzeniowych, gdzie np. Intel i7-6700k ma budżet mocy 91 W dla 4 rdzeni: 22,75 W na rdzeń podtrzymany przy wszystkich aktywnych rdzeniach (przy 4,0 GHz nawet przy Obciążenie AVX2 + FMA, takie jak Prime95). Z tego też powodu jednordzeniowy nadmiar turbo to tylko dodatkowe 0,2 GHz w porównaniu z 22-rdzeniowym Broadwell E5-2699v4 z bazą 2,2 GHz przy 145 W, 3,6 GHz turbo.
Peter Cordes

@Ramhound: dodano odpowiedź na ten temat. Wydaje się, że wielordzeniowy Xeon jest dokładnie tym , czego poszukuje OP: działa na jak największej liczbie rdzeni o niskiej mocy lub zużywa dużo energii na szybkie uruchomienie jednego wątku, jeśli to możliwe (turbo).
Peter Cordes

14

Wydajność w grach zależy od szybkości pojedynczego rdzenia,

W przeszłości (gry z epoki DOS): poprawnie.
Obecnie nie jest to już prawdą. Wiele współczesnych gier jest wielowątkowych i korzysta z wielu rdzeni. Niektóre gry są już całkiem zadowolone z 4 rdzeni i liczba ta wydaje się z czasem rosnąć.

podczas gdy aplikacje takie jak edycja wideo zależą od liczby rdzeni.

To trochę prawda.

Liczba rdzeni * razy szybkość wydajności rdzenia *.
Jeśli porównasz pojedynczy identyczny rdzeń z zestawem identycznych rdzeni, to w większości masz rację.

Pod względem tego, co jest dostępne na rynku - wszystkie procesory wydają się mieć mniej więcej tę samą prędkość, a główne różnice to więcej wątków lub więcej rdzeni. Na przykład:

Intel Core i5 7600k, podstawowa częstotliwość 3,80 GHz, 4 rdzenie Intel Core i7 7700k, podstawowa częstotliwość 4,20 GHz, 4 rdzenie, 8 wątków AMD Ryzen 1600x, podstawowa częstotliwość 3,60 GHz, 6 rdzeni, 12 wątków AMD Ryzen 1800x, podstawowa częstotliwość 3,60 GHz, 8 rdzeni, 16 wątków

Porównywanie różnych architektur jest niebezpieczne, ale ok ...

Dlaczego więc widzimy ten wzór zwiększania liczby rdzeni, gdy wszystkie rdzenie mają tę samą częstotliwość zegara?

Częściowo dlatego, że wpadliśmy na barierę. Zwiększenie prędkości zegara oznacza ponadto więcej potrzebnej mocy i więcej wytwarzanego ciepła. Więcej ciepła oznacza jeszcze więcej potrzebnej mocy. Próbowaliśmy w ten sposób, czego rezultatem było straszne pentium 4. Gorące i głodne władzy. Trudno się ochłodzić. I nawet nie szybciej niż elegancko zaprojektowany Pentium-M (A P4 przy 3,0 GHz był mniej więcej tak szybki jak P-mob przy 1,7 GHz).

Od tego czasu w większości zrezygnowaliśmy z przyspieszania zegara i zamiast tego budujemy inteligentniejsze rozwiązania. Częścią tego było użycie wielu rdzeni w stosunku do nieprzetworzonej prędkości zegara.

Np. Pojedynczy rdzeń 4GHz może pobierać tyle mocy i generować tyle samo ciepła co trzy rdzenie 2GHz. Jeśli twoje oprogramowanie może używać wielu rdzeni, będzie znacznie szybsze.

Nie każde oprogramowanie może to zrobić, ale nowoczesne oprogramowanie zazwyczaj.

Co częściowo odpowiada, dlaczego mamy układy z wieloma rdzeniami i dlaczego sprzedajemy układy z różną liczbą rdzeni.

Jeśli chodzi o szybkość zegara, myślę, że mogę zidentyfikować trzy punkty:

  • Procesory o niskim poborze mocy mają sens w wielu przypadkach, w których nie jest wymagana prędkość pierwotna. Np. Kontrolery domen, konfiguracje NAS, ... W tym celu mamy procesory o niższej częstotliwości. Czasami nawet przy większej liczbie rdzeni (np. 8-krotnie wolniejszy procesor ma sens dla serwera WWW).
  • Co do reszty, zwykle zbliżamy się do maksymalnej częstotliwości, którą możemy zrobić bez nadmiernego nagrzewania się naszego obecnego projektu. (powiedzmy 3 do 4 GHz przy obecnych projektach).
  • Na dodatek robimy binning. Nie wszystkie procesory są generowane jednakowo. Niektóre procesory źle oceniają lub źle oceniają część swoich układów, wyłączają te części i są sprzedawane jako inny produkt.

Klasycznym tego przykładem był 4-rdzeniowy układ AMD. Jeśli jeden rdzeń został uszkodzony, został wyłączony i sprzedany jako 3-rdzeniowy układ. Gdy popyt na te 3 rdzenie był wysoki, nawet niektóre 4 rdzenie były sprzedawane jako wersja 3-rdzeniowa, a przy odpowiednim włamaniu do oprogramowania można było ponownie włączyć 4-gi rdzeń.

I to nie tylko robi się z liczbą rdzeni, ale także wpływa na szybkość. Niektóre żetony są cieplejsze niż inne. Zbyt gorąco i sprzedaj go jako procesor o niższej prędkości (gdzie niższa częstotliwość oznacza również mniej wytwarzanego ciepła).

A potem jest produkcja i marketing, co jeszcze bardziej ją popsuło.

Dlaczego nie mamy wariantów o różnych prędkościach zegara? to znaczy. 2 „duże” rdzenie i wiele małych rdzeni.

My robimy. W miejscach, gdzie ma to sens (np. Telefony komórkowe), często mamy SoC z wolnym rdzeniem procesora (niska moc) i kilkoma szybszymi rdzeniami. Jednak w typowym komputerze stacjonarnym tak się nie dzieje. Sprawiłoby to, że konfiguracja byłaby znacznie bardziej złożona, droższa i nie trzeba by rozładowywać baterii.


1
Jak zauważyłem - „zadaję to pytanie jako ogólną kwestię - nie konkretnie o wyżej wymienionych przypadkach,” i istniał powód, dla którego podałem dwa przykłady z każdej architektury. Jeśli traktujemy dwa scenariusze jako 1. wszystkie duże rdzenie i 2. dwa duże i dwa małe - to myślę, że wszystkie wymienione przez ciebie punkty dotyczą obu przypadków - tj. teoretyczna maksymalna prędkość pojedynczego rdzenia, grupowanie układów, obniżanie prędkości, gdy nie jest używane.
Jamie

Pojedynczy rdzeń o maksymalnej prędkości nie jest wcale taki interesujący, gdy nie zostanie wybrany. Harmonogramy będą musiały zostać zaktualizowane, aby faktycznie preferowały rdzenie o dużej prędkości.
Hennes

10

Dlaczego nie mamy wariantów o różnych prędkościach zegara? Na przykład dwa „duże” rdzenie i wiele małych rdzeni.

Jeśli nie martwimy się zbytnio zużyciem energii, nie ma sensu akceptować wszystkich kosztów związanych z dodatkowym rdzeniem i nie uzyskiwać jak największej wydajności z tego rdzenia. Maksymalna prędkość zegara zależy w dużej mierze od procesu produkcyjnego, a cały układ jest wytwarzany w tym samym procesie. Jaka byłaby więc zaleta spowolnienia niektórych rdzeni niż obsługiwany proces produkcji?

Mamy już rdzenie, które mogą zwolnić, aby oszczędzać energię. Jaki byłby sens ograniczenia ich szczytowej wydajności?


2
Tak myślałem. Po co celowo używać niektórych gorszych komponentów, skoro wszystkie mogą być elitarne? +1.
MPW

1
@MPW Wybór nie polega na utworzeniu dużego rdzenia, a następnie na jego sterylizacji, jest on między wszystkimi dużymi a kilkoma dużymi i wieloma małymi rdzeniami. Ponieważ masz dwa konkurencyjne scenariusze - wydajność jednego wątku i wydajność wielu wątków - dlaczego nie zmaksymalizować oba? Czy wiemy, że nie można wyprodukować układu z kilkoma dużymi i wieloma małymi rdzeniami?
Jamie

@Jamie Możesz wyprodukować układ z kilkoma dużymi i wieloma małymi rdzeniami. Ale mniejsze rdzenie nie działałyby z niższą częstotliwością zegara.
David Schwartz

Zrobiliby to, gdyby zostały zaprojektowane w ten sposób ... Pytanie brzmi: dlaczego nie zostały zaprojektowane w ten sposób od zera, nie biorąc pod uwagę istniejącego procesu produkcyjnego i nie sterylizując go.
Jamie

@Jamie Nie rozumiem co mówisz. Cały procesor musi być wykonany w tym samym procesie produkcyjnym, a maksymalna prędkość zegara jest w dużej mierze cechą procesów produkcyjnych. Rdzenie wymagające niższej częstotliwości taktowania na tym samym poziomie produkcji byłyby na ogół bardziej złożone i zajmowałyby więcej miejsca, w przeciwnym razie dlaczego miałyby wymagać niższej częstotliwości taktowania?
David Schwartz

9

Dlaczego nie mamy wariantów o różnych prędkościach zegara? Na przykład dwa „duże” rdzenie i wiele małych rdzeni.

Nominalna częstotliwość taktowania tak naprawdę nie oznacza obecnie zbyt wiele dla większości większych procesorów, ponieważ wszystkie one mają możliwość taktowania w górę iw dół. Pytasz, czy mogą niezależnie od siebie taktować różne rdzenie.

Jestem zaskoczony wieloma innymi odpowiedziami. Nowoczesne procesory mogą to zrobić. Możesz to przetestować, na przykład otwierając CPU-Z na smartfonie - mój Google Pixel doskonale obsługuje różne rdzenie przy różnych prędkościach:

Ma nominalnie 2,15 Ghz, ale dwa rdzenie mają 1,593 Ghz, a dwa 1,132 Ghz.

W rzeczywistości od 2009 r. Główne procesory Intel mają logikę, aby zwiększyć poszczególne rdzenie wyżej, jednocześnie podkręcając inne rdzenie, co pozwala na lepszą wydajność pojedynczego rdzenia przy jednoczesnym zachowaniu budżetu TDP: http://www.anandtech.com/show/2832/4

Nowsze procesory Intel z „Favored Core” (termin marketingowy Intel) mają każdy rdzeń scharakteryzowany fabrycznie, przy czym najszybsze rdzenie są w stanie podnieść wyjątkowo wysoko: http://www.anandtech.com/show/11550/the-intel -skylakex-review-core-i9-7900x-i7-7820x-and-i7-7800x-testowany / 7

Chipy AMD Bulldozer miały prymitywną wersję: http://www.anandtech.com/show/4955/the-bulldozer-review-amd-fx8150-tested/4

Nowe układy AMD Ryzen prawdopodobnie również to mają, chociaż nie jest to wyraźnie określone tutaj: http://www.anandtech.com/show/11170/the-amd-zen-and-ryzen-7-review-a-deep-dive -on-1800x-1700x-and-1700/11


Odpowiadasz na inne pytanie. Pytanie dotyczy wielu dużych rdzeni w porównaniu do kilku dużych rdzeni i wielu małych rdzeni - zalet tych dwóch scenariuszy. W obu sytuacjach możesz zwiększać i zmniejszać zegar w zależności od zapotrzebowania lub zwiększać rdzeń.
Jamie

3
Nie tak czytam pytanie. Pytanie nie wspomina o różnych architektonicznie rdzeniach, pomimo użycia słów „duży” i „mały”. Koncentruje się wyłącznie na częstotliwości zegara.
Grant Wu

8

Na nowoczesnym systemie często można zrobić mieć wszystkich rdzeni pracujących z różnymi prędkościami. Zmniejszenie częstotliwości rdzenia, który nie jest intensywnie używany, zmniejsza zużycie energii i moc cieplną, co jest dobre, a funkcje takie jak „turbo boost” pozwalają jeden lub dwa rdzenie pracować znacznie szybciej, dopóki inne rdzenie są bezczynne, a zatem zużycie energii a moc cieplna całego pakietu nie jest zbyt wysoka. W przypadku układu z taką funkcją prędkość widoczna na liście to najwyższa prędkość, jaką można uzyskać ze wszystkimi rdzeniami jednocześnie. I dlaczego wszystkie rdzenie miałyby tę samą maksymalną prędkość? Cóż, wszystkie mają identyczną konstrukcję, na tym samym fizycznym układzie scalonym, ułożonym w tym samym procesie półprzewodnikowym, więc dlaczego mieliby się różnić?

Powodem, dla którego wszystkie rdzenie są identyczne, jest to, że najłatwiej jest, aby wątek działający na jednym rdzeniu w jednym punkcie zaczął działać na innym rdzeniu w innym punkcie. Jak wspomniano gdzie indziej, są powszechnie używane układy, które nie przestrzegają tej samej zasady identycznych rdzeni, a mianowicie procesory ARM „big.LITTLE”. Chociaż moim zdaniem najważniejszą różnicą między „dużymi” i „małymi” rdzeniami nie jest szybkość zegara („duże” rdzenie wydają się być bardziej wyszukane, szersze, bardziej spekulatywne rdzenie, które otrzymują więcej instrukcji na zegar kosztem wyższych zużycie energii, podczas gdy „małe” rdzenie zbliżają się do pojedynczych problemów ARM, w kolejności, o niskiej mocy), ponieważ „

Wchodząc dalej w dziedzinę przetwarzania heterogenicznego, często zdarza się, że rdzenie „CPU” i „GPU” są zintegrowane w tym samym układzie. Mają one zupełnie różne konstrukcje, uruchamiają różne zestawy instrukcji, są adresowane w różny sposób i na ogół również będą taktowane inaczej.


7

Szybka wydajność jednowątkowa i bardzo wysoka przepustowość wielu wątków to dokładnie to, co uzyskujesz dzięki procesorowi takim jak Intel Xeon E5-2699v4 .

To 22-rdzeniowy Broadwell. Długotrwała prędkość zegara wynosi 2,2 GHz przy wszystkich aktywnych rdzeniach (np. Kodowanie wideo), ale jedno-rdzeniowe maks. Turbo wynosi 3,6 GHz.

Dlatego podczas wykonywania zadania równoległego wykorzystuje budżet mocy 145 W jako 22 rdzenie 6,6 W. Ale podczas wykonywania zadania z zaledwie kilkoma wątkami ten sam budżet mocy pozwala kilku rdzeniom na turbo do 3,6 GHz. ( Niższa pamięć jednordzeniowa i przepustowość pamięci podręcznej L3 w dużym Xeon oznacza, że ​​może nie działać tak szybko, jak czterordzeniowy pulpit z częstotliwością 3,6 GHz. Jeden rdzeń w stacjonarnym procesorze Intel może zużywać znacznie więcej całkowita przepustowość pamięci).

Znamionowa prędkość zegara 2,2 GHz jest tak niska z powodu ograniczeń termicznych. Im więcej rdzeni ma procesor, tym wolniej muszą działać, gdy wszystkie są aktywne. Ten efekt nie jest bardzo duży w 4 i 8 rdzeniowych procesorach, o których wspomniałeś w pytaniu, ponieważ 8 nie ma tak wielu rdzeni i mają bardzo wysokie budżety mocy. Nawet entuzjaści komputerów stacjonarnych zauważalnie zauważają ten efekt: Skylake-X i9-7900X Intela to część 10c20t z podstawową częstotliwością 3,3 GHz, maks. Turbo 4,5 GHz . To znacznie więcej pojedynczego turbo headroom niż i7-6700k (4,0 GHz podtrzymane / 4,2 GHz bez podkręcania).

Skalowanie częstotliwości / napięcia (DVFS) pozwala temu samemu rdzeniu działać w szerokim zakresie krzywej wydajności / wydajności. Zobacz także prezentację IDF2015 na temat zarządzania energią Skylake , z mnóstwem interesujących szczegółów na temat tego, co procesory mogą zrobić wydajnie, a także kompromis między wydajnością a wydajnością zarówno statycznie w czasie projektowania, jak i w locie dzięki DVFS.

Na drugim końcu spektrum procesory Intel Core-M mają bardzo niską częstotliwość ciągłą , na przykład 1,2 GHz przy 4,5 W , ale mogą turbo do 2,9 GHz. Gdy aktywnych jest wiele rdzeni, będą one działać z bardziej wydajnym zegarem, tak jak gigantyczne Xeony.

Nie potrzebujesz heterogenicznej architektury w stylu big.LITTLE, aby uzyskać większość korzyści. Małe rdzenie w ARM big.LITTLE to dość kiepskie rdzenie w kolejności, które nie są dobre do pracy z komputerem. Chodzi o to, aby uruchomić interfejs użytkownika o bardzo niskiej mocy. Wiele z nich nie byłoby świetnych do kodowania wideo lub innych poważnych problemów z liczbami. ( @ Lưu Vĩnh Phúc znalazł kilka dyskusji na temat tego, dlaczego x86 nie ma big.LITTLE . Zasadniczo, wydanie dodatkowego krzemu na bardzo powolny rdzeń o bardzo niskim poborze mocy nie byłoby warte typowego użycia na komputerze stacjonarnym / laptopie.)


podczas gdy aplikacje takie jak edycja wideo zależą od liczby rdzeni. [Czy 2x 4,0 GHz + 4x 2,0 2,0 GHz nie byłoby lepsze przy obciążeniach wielowątkowych niż 4x 4 GHz?]

To jest twoje kluczowe nieporozumienie. Wydaje się, że myślisz, że ta sama liczba tyknięć zegara na sekundę jest bardziej użyteczna, jeśli rozłożona jest na więcej rdzeni. Tak nigdy nie jest. To bardziej jak

cores * perf_per_core * (scaling efficiency)^cores

( perf_per_coreto nie to samo, co szybkość zegara, ponieważ Pentium4 3GHz dostanie o wiele mniej pracy na cykl zegara niż Skylake 3GHz.)

Co ważniejsze, bardzo rzadko wydajność wynosi 1,0. Niektóre zawstydzająco równoległe zadania skalują się prawie liniowo (np. Kompilacja wielu plików źródłowych). Ale kodowanie wideo nie jest takie. W przypadku x264 skalowanie jest bardzo dobre do kilku rdzeni, ale pogarsza się z większą liczbą rdzeni. np. przejście z 1 do 2 rdzeni prawie podwoi prędkość, ale przejście z 32 do 64 rdzeni pomoże znacznie mniej w przypadku typowego kodowania 1080p. Punkt, w którym plateau prędkości zależy od ustawień. ( -preset veryslowwykonuje więcej analiz dla każdej ramki i może zajmować więcej rdzeni niż -preset fast).

Przy wielu bardzo wolnych rdzeniach, jednowątkowe części x264 stałyby się wąskimi gardłami. (np. końcowe kodowanie strumienia bitów CABAC. Jest to odpowiednik gzip h.264 i nie działa równolegle.) Posiadanie kilku szybkich rdzeni rozwiązałoby to, gdyby system operacyjny wiedział, jak to zaplanować (lub jeśli x264 przypiął odpowiednie wątki do szybkie rdzenie).

x265 może korzystać z większej liczby rdzeni niż x264, ponieważ ma więcej do zrobienia, a konstrukcja WPP h.265 pozwala na więcej kodowania i dekodowania równoległości. Ale nawet w przypadku 1080p w pewnym momencie zabrakło Ci równoległości.


Jeśli masz wiele filmów do zakodowania, robienie wielu filmów w równoległych skalach dobrze, z wyjątkiem konkurencji o wspólne zasoby, takie jak pojemność pamięci podręcznej L3 i przepustowość oraz przepustowość pamięci. Mniej szybszych rdzeni mogłoby uzyskać większe korzyści z tej samej ilości pamięci podręcznej L3, ponieważ nie musiałyby pracować nad tak wieloma różnymi częściami problemu na raz.


4

Podczas gdy możliwe jest projektowanie komputerów, które mają różne części działające z różnymi niezależnymi prędkościami, arbitraż zasobów często wymaga zdolności szybkiego decydowania, które żądanie obsługi najpierw, co z kolei wymaga wiedzy, czy jakiekolwiek inne żądanie mogło nadejść wystarczająco szybko, aby uzyskać priorytet . W większości przypadków podejmowanie takich decyzji jest dość proste. Coś w rodzaju obwodu „brzęczyka quizu” można zaimplementować za pomocą zaledwie dwóch tranzystorów. Problem polega na tym, że podejmowanie szybkich, rzetelnych decyzjijednoznaczny jest trudny. Jedynym praktycznym sposobem na zrobienie tego w wielu przypadkach jest zastosowanie decyzji zwanej „synchronizatorem”, która pozwala uniknąć dwuznaczności, ale wprowadza opóźnienie dwóch cykli. Można by zaprojektować kontroler buforowania, który niezawodnie arbitrażowałby między dwoma systemami z osobnymi zegarami, gdyby był skłonny tolerować dwustopniowe opóźnienie każdej operacji w celu ustalenia, kto wygrał arbitraż. Takie podejście byłoby jednak mniej niż przydatne, gdyby ktoś chciał, aby pamięć podręczna odpowiadała natychmiast na żądania w przypadku braku sporu, ponieważ nawet żądania bezsporne nadal miałyby dwustopniowe opóźnienie.

Uruchamianie wszystkiego poza wspólnym zegarem pozwala uniknąć konieczności synchronizacji, co z kolei pozwala uniknąć dwusuwowego opóźnienia komunikacji za każdym razem, gdy konieczne jest przekazywanie informacji lub sygnałów sterujących między domenami zegarowymi.


4

Komputery stacjonarne już to robią.

Mają (zestaw) procesorów, z 1-72 wątkami aktywnymi jednocześnie, oraz (zestaw) procesorów graficznych, z 16-7168 jednostkami obliczeniowymi.

Grafika jest przykładem zadania, które według nas jest ogromną wydajnością. Procesor graficzny jest zoptymalizowany do wykonywania operacji, które chcemy wykonywać grafiki (ale nie jest to ograniczone do tego).

To jest komputer z kilkoma dużymi rdzeniami i wieloma małymi rdzeniami.

Ogólnie rzecz biorąc, handel jednym rdzeniem w X FLOPS na trzy rdzenie w X / 2 FLOPS nie jest tego wart; ale warto wymienić jeden rdzeń w X FLOPS na sto rdzeni w X / 5 FLOPS.

Podczas programowania do tego generujesz zupełnie inny kod dla CPU i dla GPU. Dużo pracy wykonuje się w celu podzielenia obciążenia, dzięki czemu GPU otrzymuje zadania, które najlepiej wykonać na GPU, a procesor otrzymuje zadania, które najlepiej wykonać na CPU.

Prawdopodobnie o wiele łatwiej jest napisać kod dla procesora, ponieważ trudniej jest poprawnie uzyskać masowo równoległy kod. Więc tylko wtedy, gdy wypłata jest duża , warto wymienić wydajność jednordzeniową w sytuacjach wielordzeniowych. Procesory graficzne zapewniają duże korzyści, jeśli są właściwie używane.

Teraz urządzenia mobilne robią to z innego powodu. Mają rdzenie małej mocy, które są znacznie wolniejsze, ale zużywają znacznie mniej energii na jednostkę obliczeniową. To pozwala im znacznie wydłużyć żywotność baterii, gdy nie wykonuje zadań intensywnie wykorzystujących procesor. Tutaj mamy inny rodzaj „dużej wypłaty”; nie wydajność, ale wydajność energetyczna. Nadal wymaga to dużo pracy ze strony systemu operacyjnego i programu do pisania aplikacji; tylko duża wypłata sprawiła, że ​​było warto.


-1

Powodem, dla którego popularne systemy mają rdzenie z tą samą prędkością, jest prosty problem matematyczny. Czas wejścia i wyjścia (z optymalizacjami) oparty na jednym zestawie stałych (które są skalowalne = mnożone przez liczbę jednostek).

I ktoś tu powiedział, że urządzenia mobilne mają wiele procesorów o różnych prędkościach. To po prostu nieprawda. Nie jest to centralna jednostka przetwarzająca, jeśli nie jest jednostką centralnego przetwarzania; bez względu na to, co mówi producent, jest lub nie. w takim przypadku [nie jest to procesor] ​​to tylko „pakiet wsparcia”.


-10

Nie sądzę, że OP rozumie podstawową elektronikę. Wszystkie komputery wymagają jednej rzeczy do działania - zegara. Cykle zegara generowane przez zegar wewnętrzny są metronomem dla przenoszenia wszystkich danych. Aby osiągnąć synchroniczność, wszystkie operacje muszą być powiązane ze wspólnym zegarem. Dotyczy to zarówno wewnętrznego wykonywania danych na izolowanym komputerze, jak i całych sieci.

Jeśli chcesz izolować rdzenie na procesorze, uruchamiając je na różnych częstotliwościach, z pewnością możesz zaprojektować taką platformę. Chociaż wymagałoby to zaprojektowania rozwiązania płyty głównej, które łączy każdy rdzeń z własnym wydzielonym podzbiorem funkcji płyty głównej. Zostałyby ci 4 pojedyncze komputery zamiast komputera czterordzeniowego.

Alternatywnie, jak zauważyła inna osoba, możesz dodać kod do jądra, który indywidualnie dostosowuje częstotliwość rdzenia. Spowoduje to jednak uderzenia w wydajność. Możesz mieć szybkość lub wydajność energetyczną - ale nie możesz mieć obu.


1
Nie mam, stąd moje pytanie. Porównując procesor Intel i5 7600 do i5 7600k, widzimy, że zegar bazowy wynosi 100 MHz dla obu, a różnica jest współczynnikiem rdzenia. Możesz więc mieć dwa rdzenie z tym samym zegarem bazowym 100 MHz, ale z różnymi współczynnikami rdzenia - czy ten scenariusz narusza wymóg synchroniczności?
Jamie

4
Tak, to zbytnio upraszcza; nie jest tak naprawdę prawdą, że wszystkie operacje muszą być powiązane z tym samym zegarem, istnieje wiele domen zegarowych i możliwe jest uruchomienie różnych rdzeni z tą samą prędkością. Zegar magistrali to nie to samo co zegar wewnętrzny itp.
pjc50

11
Nowoczesne układy mają już wiele domen zegarowych (nawet RTC taniego i głupiego mikrokontrolera zwykle działa na osobnej domenie 32,7 kHz). Musisz tylko zsynchronizować między domenami zegarowymi. Nawet ze wspólnym zegarem można go podzielić przez 2, 4, 8 i tak dalej.
Michael

1
Wszystko prawda. Ale nadal zmniejsza efektywność działania. I to zawsze jest celem w odniesieniu do wydajności. To był mój cel. Jasne, możesz to zrobić. Ale spodoba ci się wydajność.
RyRoUK

„Zmniejsza wydajność” - w porównaniu do czego? Zakładasz stan podstawowy, w którym masz n procesorów działających z tym samym zegarem. Tak nie musi być. Procesor X + procesor Y jest bardziej wydajnym / elastycznym rozwiązaniem niż sam procesor X, bez względu na to, jaki dokładnie jest procesor Y.
hmijail
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.