Dlaczego nie zrobić jednego dużego rdzenia procesora? [Zamknięte]


25

Nie rozumiem, dlaczego producenci procesorów produkują układy wielordzeniowe. Skalowanie wielu rdzeni jest okropne, jest bardzo specyficzne dla aplikacji i jestem pewien, że możesz wskazać pewien program lub kod, który działa świetnie na wielu rdzeniach, ale w większości przypadków skalowanie jest śmieciowe. To marnowanie przestrzeni matrycy krzemowej i strata energii.

Na przykład gry prawie nigdy nie używają więcej niż czterech rdzeni. Symulacje naukowe i inżynieryjne, takie jak Ansys lub Fluent, są wyceniane według liczby rdzeni, na których działa komputer, więc płacisz więcej, ponieważ masz więcej rdzeni, ale korzyści z większej liczby rdzeni stają się naprawdę słabe po 16 rdzeniach, ale masz te 64 rdzenie stacje robocze ... to strata pieniędzy i energii. Lepiej jest kupić grzejnik o mocy 1500 W na zimę, znacznie taniej.

Dlaczego nie robią procesora z jednym wielkim rdzeniem?

Myślę, że gdyby stworzyli jedno-rdzeniowy odpowiednik ośmiordzeniowego procesora, ten jeden rdzeń miałby 800% wzrost IPC, więc uzyskałbyś pełną wydajność we wszystkich programach, nie tylko tych zoptymalizowanych dla wielu rdzeni. Więcej IPC zwiększa wydajność wszędzie, jest to niezawodny i prosty sposób na zwiększenie wydajności. Wiele rdzeni zwiększa wydajność tylko w ograniczonej liczbie programów, a skalowanie jest straszne i zawodne.


Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu . Wszelkie wyciągnięte wnioski powinny być ponownie edytowane w pytaniu i / lub każdej odpowiedzi.
Dave Tweed

Możesz być zainteresowany tym artykułem: gotw.ca/publications/concurrency-ddj.htm
lvella

„ale korzyść z większej liczby rdzeni staje się naprawdę słaba po 16 rdzeniach” Najwyraźniej nie wiesz, o czym mówisz. Zaufaj mi, pracowałem nad procesami, które działają na kilkudziesięciu tysiącach procesorów. Istnieje cała klasa problemu o nazwie „Zawstydzająco równoległe”, w którym rzucanie większej liczby rdzeni na problem działa bardzo dobrze.
Aron

Odpowiedzi:


93

Problem polega na założeniu, że producenci procesorów mogą po prostu dodać więcej tranzystorów, aby pojedynczy rdzeń procesora był mocniejszy bez konsekwencji.

Aby procesor mógł zrobić więcej, musisz zaplanować, co oznacza więcej. Istnieją naprawdę trzy opcje:

  1. Spraw, aby rdzeń działał z większą częstotliwością zegara - Problem z tym polega na tym, że już przekraczamy ograniczenia tego, co możemy zrobić.

    Zużycie energii, a tym samym rozpraszanie ciepła, rośnie wraz z częstotliwością - jeśli podwoisz częstotliwość, nominalnie podwajasz rozpraszanie mocy. Jeśli zwiększysz napięcie, rozproszenie mocy wzrośnie do kwadratu napięcia.

    Interkonekty i tranzystory mają również opóźnienia propagacyjne z powodu nie idealnego charakteru świata. Nie można po prostu zwiększyć liczby tranzystorów i oczekiwać, że będą mogły działać z tą samą częstotliwością zegara.

    Ogranicza nas także zewnętrzny sprzęt - głównie RAM. Aby procesor był szybszy, musisz zwiększyć przepustowość pamięci, albo uruchamiając go szybciej, albo zwiększając szerokość magistrali danych.


  1. Dodaj bardziej złożone instrukcje - zamiast działać szybciej, możemy dodać bogatszy zestaw instrukcji - typowe zadania, takie jak szyfrowanie itp., Mogą zostać zahartowane w krzemie. Zamiast brać wiele cykli zegara do obliczenia w oprogramowaniu, zamiast tego mamy akcelerację sprzętową.

    Odbywa się to już na procesorach CISC (Complex Instruction Set). Zobacz rzeczy takie jak SSE2, SSE3. Pojedynczy rdzeń procesora jest dziś znacznie mocniejszy niż rdzeń procesora sprzed 10 lat, nawet jeśli pracuje na tej samej częstotliwości taktowania.

    Problem polega na tym, że dodając bardziej skomplikowane instrukcje, dodajesz więcej złożoności i sprawia, że ​​układ staje się większy. W wyniku tego procesor staje się wolniejszy - osiągalne częstotliwości zegara spadają wraz ze wzrostem opóźnień propagacji.

    Te złożone instrukcje również nie pomagają w prostych zadaniach. Nie możesz zahartować każdego możliwego przypadku użycia, więc nieuchronnie duże części uruchomionego oprogramowania nie skorzystają z nowych instrukcji i w rzeczywistości zostaną zaszkodzone przez wynikające z tego zmniejszenie częstotliwości taktowania.

    Możesz również zwiększyć szerokość magistrali danych, aby przetwarzać więcej danych naraz, jednak ponownie zwiększa to procesor i odczuwasz kompromis między przepustowością uzyskaną przez większe magistrale danych a spadkiem częstotliwości taktowania. Jeśli masz tylko małe dane (np. 32-bitowe liczby całkowite), 256-bitowy procesor tak naprawdę nie pomaga.


  1. Uczyń procesor bardziej równoległym - Zamiast próbować zrobić jedną rzecz szybciej, zamiast tego rób wiele rzeczy jednocześnie. Jeśli zadanie, które wykonujesz, może działać na kilku rzeczach jednocześnie, potrzebujesz albo jednego procesora, który może wykonywać wiele obliczeń na instrukcję (jedna instrukcja, wiele danych (SIMD)), lub posiadania wielu procesorów, z których każdy może wykonać jeden obliczenie.

    Jest to jeden z kluczowych sterowników wielordzeniowych procesorów. Jeśli masz uruchomionych wiele programów lub możesz podzielić jeden program na wiele zadań, posiadanie wielu rdzeni procesora pozwala robić więcej rzeczy naraz.

    Ponieważ poszczególne rdzenie procesora są skutecznie oddzielnymi blokami (z wyjątkiem pamięci podręcznych i interfejsów pamięci), każdy pojedynczy rdzeń jest mniejszy niż równoważny pojedynczy rdzeń monolityczny. Ponieważ rdzeń jest bardziej zwarty, opóźnienia propagacji zmniejszają się, a każdy rdzeń można uruchomić szybciej.

    To, czy pojedynczy program może skorzystać z posiadania wielu rdzeni, zależy całkowicie od tego, co robi ten program i jak został napisany.


Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu . Wszelkie wyciągnięte wnioski powinny być ponownie edytowane w pytaniu i / lub każdej odpowiedzi.
Dave Tweed

Jednym z punktów podniesionych w komentarzach, które wciąż nie zostały poruszone, jest to, że procesory mogą być równoległe, uruchamiając wiele instrukcji na zegar (Superscalar). To jest prostopadłe do SIMD i częstotliwości; instrukcje na zegar (IPC) to trzeci czynnik rzeczywistej przepustowości na czas. Wszystkie nowoczesne procesory do zadań interaktywnych mają co najmniej 2 szerokości.
Peter Cordes

1
Aby uzyskać dokładniejszą odpowiedź, przeczytaj sciencedirect.com/topics/computer-science/…
Tony Stewart Sunnyskyguy EE75

37

Oprócz innych odpowiedzi istnieje jeszcze jeden element: wydajność chipa . Nowoczesny procesor ma kilka miliardów tranzystorów, każdy z nich musi działać idealnie, aby cały układ działał poprawnie.

Wykonując procesory wielordzeniowe, możesz w czysty sposób partycjonować grupy tranzystorów. Jeśli w jednym z rdzeni istnieje defekt, możesz wyłączyć ten rdzeń i sprzedać chip po obniżonej cenie zgodnie z liczbą działających rdzeni. Podobnie można również montować systemy ze sprawdzonych komponentów, jak w systemie SMP.

Dla praktycznie każdego zakupionego procesora zaczęło się życie, aby być najwyższej klasy modelem premium dla tej linii procesorów. To, z czym się skończysz, zależy od tego, które części tego układu działają nieprawidłowo i są wyłączone. Intel nie produkuje żadnych procesorów i3: wszystkie są wadliwe i7, a wszystkie funkcje oddzielające linie produktów są wyłączone, ponieważ nie powiodły się testy. Jednak nadal działające porcje są nadal przydatne i można je sprzedawać o wiele taniej. Cokolwiek gorszego staje się bibelotami do kluczy.

A wady nie są rzadkie. Stworzenie tych miliardów tranzystorów nie jest łatwym zadaniem. Jeśli nie masz możliwości selektywnego wykorzystania części danego chipa, cena wyniku wzrośnie naprawdę szybko.

Dzięki tylko jednemu procesorowi über produkcja jest prawie wszystko lub nic, co prowadzi do znacznie bardziej marnotrawstwa. W przypadku niektórych urządzeń, takich jak czujniki obrazu do celów naukowych lub wojskowych, gdzie potrzebujesz ogromnego czujnika i wszystko musi działać, koszty tych urządzeń są tak ogromne, że tylko budżety na poziomie stanu mogą sobie na nie pozwolić.


4
Jeśli / kiedy wydajność się poprawi i wytwarzają więcej w pełni działających układów niż wymagania rynku, dostawcy zwykle zaczynają łączyć niektóre rdzenie / pamięć podręczną i / lub grupować je przy SKU o niższej częstotliwości, zamiast dostosowywać strukturę cen, aby uzyskać wysoką żetony końcowe relatywnie tańsze. Dzięki kartom graficznym / kartom graficznym można było odblokowywać wyłączone moduły cieniujące na niektórych kartach z włamaniem oprogramowania układowego, aby sprawdzić, czy masz szczęście i masz kartę, w której wyłączono ją tylko w celu segmentacji rynku, a nie faktycznych defektów.
Peter Cordes

4
Intel wyprodukował matryce dwurdzeniowe dla niektórych swoich układów. Ponieważ wszystkie ich mobilne jednostki SKU ULV (ultra niskie napięcie) są dwurdzeniowe, nie było wystarczającej liczby wadliwych czterordzeniowych rdzeni, a mniejszy obszar matrycy (szczególnie z odciętym iGPU) daje więcej pracujących dwurdzeniowych układów na wafel niż stopienie matryc czterordzeniowych. en.wikichip.org/wiki/intel/microarchitectures/... ma zdjęcia Sandybridge o wielkości matrycy 131 mm² dwurdzeniowy + grafika GT1, w porównaniu do 149 mm² dwurdzeniowy + grafika GT2 + 216 mm² quad + GT2. Nadal jest miejsce na wady w pamięci podręcznej itp.
Peter Cordes

I (niektóre) defekty części jednostki FMA można prawdopodobnie rozwiązać przez stopienie jej i sprzedaż jako chip Celeron lub Pentium (bez AVX, więc tylko 128-bitowe wektory). Nawet współczesne chipy Skylake lub Coffee Lake Pentium nie mają AVX . Jednostki SIMD FMA stanowią przyzwoitą część rdzenia (i obsługują wiele operacji SIMD innych niż matematyka FP, w tym liczby całkowite i przesunięcie liczb całkowitych), więc nie zdziwiłbym się, gdyby 2x 256-bitowe jednostki FMA można zmapować na 2x 128-bit przy użyciu którejkolwiek z 2 części nadal działa. Dzięki Skylake Xeon istnieją nawet jednostki SKU o zmniejszonej przepustowości FMA AVX512 (tylko 1 działający 512-bitowy FMA)
Peter Cordes

@PeterCordes Jeśli zyski osiągają tak dobre wyniki, wówczas dostawcy będą oferować projekty o wyższej gęstości i / lub szybszym taktowaniu (a tym samym wyższej częstotliwości defektów), dopóki częstotliwości defektów nie powrócą do miejsca, w którym mogą wyłączyć rdzenie i / lub podkręcić chipy sprzedawać ze zniżką ..
Monty Harder

@MontyHarder: To prawda, ale walidacja kosztuje i czas, a istniejące linie produkcyjne będą przez pewien czas tworzyć istniejące projekty. Ale tak, niektóre przykłady Intela, o których mówisz, to Haswell Refresh i różne udoskonalenia Skylake w zasadzie bez zmian architektonicznych i drobnych ulepszeń w procesie 14 nm. (Czasami z nowym iGPU). np. Kaby Lake, a następnie Coffee Lake itp. jako kroki „optymalizacji” w normalnej kadencji Intel-Ticka.
Peter Cordes

26

Zależność danych

Dodanie większej liczby instrukcji na zegar jest dość łatwe, ponieważ układ „poszerza się” - takie podejście jest „SIMD”. Problem polega na tym, że nie pomaga to w większości przypadków użycia.

Istnieją w przybliżeniu dwa rodzaje obciążenia pracą, niezależne i zależne. Przykładem niezależnego obciążenia pracą może być „podane dwie sekwencje liczb A1, A2, A3 ... i B1, B2, ... itd., Oblicz (A1 + B1) i (A2 + B2) itd.” Tego rodzaju obciążenie widać w grafice komputerowej, przetwarzaniu dźwięku, uczeniu maszynowym i tak dalej. Sporo tego zostało poświęconych procesorom graficznym, które zostały zaprojektowane specjalnie do tego.

Zależne obciążenie może wyglądać następująco: „Biorąc pod uwagę A, dodaj do niego 5 i sprawdź to w tabeli. Weź wynik i dodaj 16 do niego. Spójrz na to w innej tabeli”.

Zaletą niezależnego obciążenia jest to, że można go podzielić na wiele różnych części, więc pomaga w tym więcej tranzystorów. W przypadku obciążeń zależnych wcale to nie pomaga - więcej tranzystorów może tylko spowolnić . Jeśli musisz uzyskać wartość z pamięci, to katastrofa dla szybkości. Sygnał musi zostać wysłany przez płytę główną, podróżując pod małą prędkością, DRAM musi naładować rząd i poczekać na wynik, a następnie wysłać go z powrotem. Zajmuje to dziesiątki nanosekund. Następnie, po wykonaniu prostych obliczeń, musisz wysłać do następnego.

Zarządzanie energią

Zapasowe rdzenie są przez większość czasu wyłączone. W rzeczywistości na dość wielu procesorach nie można cały czas uruchamiać wszystkich rdzeni bez rzeczy, która się zapali, więc system je dla ciebie wyłączy lub obniży.

Przepisanie oprogramowania to jedyny sposób, aby przejść dalej

Sprzęt nie może automatycznie konwertować zależnych obciążeń na niezależne obciążenia. Oprogramowanie nie może. Ale programista, który przygotował się do przeprojektowania swojego systemu, aby wykorzystać wiele rdzeni, może po prostu.


2
Cytat potrzebny do „nie można uruchomić wszystkich rdzeni jednocześnie”. Chyba że uważasz, że maksymalna częstotliwość taktowania jednego rdzenia turbo to „rzeczywista” częstotliwość taktowania procesora. W klasycznym sensie (zanim uderzymy w ścianę mocy, a szybkość zegara została ograniczona przez krytyczne opóźnienia propagacji ścieżki), tak, to prawda, ale we współczesnym świecie sensowniej jest spojrzeć na bazową szybkość zegara, jako na to, co można utrzymać przy pomocy wszystkich rdzenie aktywne przy dużych obciążeniach. Wszystko, co jest wyższe niż to sos, można oportunistycznie wykorzystać, jeśli pozwalają na to ograniczenia mocy / temperatury. (np. Turbo Intela).
Peter Cordes

1
Ale jeśli chodzi o moc, nawet maksymalny zegar jednego rdzenia jest ograniczony termicznie bardziej niż opóźnienia propagacji (chociaż prawdopodobnie granice etapów rurociągu są wybrane, więc jesteś bliski tej granicy przy docelowym maks. Turbosprężarce). Napięcie jest również zmienne: gorsza moc, ale krótsze opóźnienia bramki. Tak czy inaczej, nie ma sensu rozważać maksymalnego turbo z jednym rdzeniem jako czegoś, co „powinno” być w stanie uruchomić wszystkie rdzenie, ponieważ ten limit już pochodzi z mocy.
Peter Cordes,

Kontekst pierwotnego pytania zdecydowanie dotyczył maksymalnej prędkości pojedynczego rdzenia i dla wielu praktycznych celów, które (i ich brak w pamięci podręcznej) są rzeczywistym czynnikiem ograniczającym postrzeganą prędkość dla użytkownika.
pjc50

Tak, wszyscy moglibyśmy wziąć 8-krotną wydajność jednego wątku zamiast 8-rdzeniowego procesora, gdybyśmy mogli. (Dzięki SMT pozwala on na uruchamianie naturalnie oddzielnych obciążeń bez obciążenia przełączaniem kontekstu. Zobacz moją odpowiedź. :) Hipotetyczny super-szeroki rdzeń prawdopodobnie byłby w stanie sam taktować się szybciej, gdy obciążenie spowodowało wiele przeciągnięć, zamiast utrzymywać wszystkie tranzystory w urządzeniach SIMD FMA włączały się i przełączały co godzinę. (Bramkowanie mocy w jednym rdzeniu jest również kluczem do tego, aby nie topić się przy wysokich zegarkach; en.wikipedia.org/wiki/Dark_silicon ). Zatem posiadanie jednego szerokiego rdzenia nie uczyniłoby tego inaczej.
Peter Cordes

Chociaż masz rację, wydajność jednowątkowa, którą widzimy na obecnych procesorach, jest lepsza niż gdyby były one ograniczone do taktowania zegara, które mogłyby utrzymać na wszystkich rdzeniach jednocześnie, nawet przy najgorszym obciążeniu. tj. Turbo ma kluczowe znaczenie, szczególnie w przypadku części o niskiej TDP, takich jak układy laptopów ( dlaczego mój procesor nie może utrzymać szczytowej wydajności w HPC ): zwykle duży stosunek między poziomem podstawowym i maksymalnym turbo, w przeciwieństwie do układów o dużej mocy, ale o niskiej liczbie rdzeni , np. i7-6700k Skylake jest bazą 4GHz, jedno-rdzeniową turbosprężarką 4,2 GHz (bez podkręcania; wyższa jest możliwa przy 95 W TDP).
Peter Cordes

20

Cofając się w czasie, procesory nie były w stanie działać tak szybko. W rezultacie, jeśli chcesz wykonać więcej przetwarzania, potrzebujesz więcej procesorów. Może to być koprocesor matematyczny lub po prostu więcej tego samego procesora. Najlepszym tego przykładem jest Inmos Transputer z lat 80., który został specjalnie zaprojektowany do masowo równoległego przetwarzania z kilkoma połączonymi ze sobą procesorami. Cała koncepcja opierała się na założeniu, że nie ma lepszego sposobu na zwiększenie mocy obliczeniowej niż dodanie procesorów.

Problem w tym, że założenie było (tymczasowo) niepoprawne. Możesz również uzyskać większą moc obliczeniową, zmuszając jeden procesor do wykonywania większej liczby obliczeń. Intel i AMD znaleźli sposoby na zwiększenie prędkości zegara i, jak mówisz, o wiele łatwiej jest trzymać wszystko na jednym procesorze. W rezultacie do połowy XXI wieku na rynku działał szybki procesor jednordzeniowy. Inmos zmarł śmiercią na początku lat 90. i całe ich doświadczenie umarło wraz z nimi.

Dobre czasy musiały się jednak skończyć. Gdy częstotliwości zegara wzrosły do ​​GHz, nie było już możliwości pójścia dalej. Wróciliśmy znowu do wielu rdzeni. Jeśli naprawdę nie możesz przyspieszyć, odpowiedzią jest więcej rdzeni. Jak jednak mówisz, efektywne wykorzystanie tych rdzeni nie zawsze jest łatwe. W dzisiejszych czasach jesteśmy znacznie lepsi, ale wciąż nie jesteśmy w stanie uczynić tego tak łatwym, jak Transputer.

Oczywiście istnieją również inne opcje ulepszeń - zamiast tego możesz być bardziej wydajny. SIMD i podobne zestawy instrukcji wykonują więcej przetwarzania dla tej samej liczby taktów zegara. DDR szybciej przenosi twoje dane z procesora. Wszystko pomaga. Ale jeśli chodzi o przetwarzanie, wróciliśmy do lat 80. i wielu rdzeni ponownie.


Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu . Wszelkie wyciągnięte wnioski powinny być ponownie edytowane w pytaniu i / lub każdej odpowiedzi.
Dave Tweed

20

Dobre pytanie lub przynajmniej jedno z ciekawą odpowiedzią. Część tej odpowiedzi przedstawia świat, w którym procesory mogłyby efektywnie skalować się na szerokość zamiast z wieloma oddzielnymi rdzeniami. Modele licencjonowania / ceny byłyby inne!

Reszta wyjaśnia, dlaczego nie mogą. Podsumowanie:

  • Koszt wielu rdzeni jest zbliżony do liniowego
  • Koszt rozszerzenia superskalarnego rurociągu 1 rdzenia skaluje się ~ kwadratowo Jest to wykonalne przy użyciu wystarczającej siły brutalnej, do pewnego stopnia. Wydajność jednowątkowa jest bardzo ważna dla zastosowań interaktywnych (opóźnienie od końca do końca ma znaczenie, nie tylko przepustowość), więc obecne wysokowydajne procesory klasy wyższej płacą tę cenę. np. Skylake (4-szeroki), Ryzen (5 lub 6-szeroki) i Apple A12 (7-szeroki dla dużych rdzeni, 3-szeroki dla małych energooszczędnych rdzeni)
  • Poważne zmniejszanie się zwrotów IPC z samego poszerzenia potoku poza 3 lub 4 szerokości, nawet przy wykonywaniu poza kolejnością w celu znalezienia ILP . Nieudane rozgałęzienia i bufory pamięci podręcznej są trudne i wciąż blokują cały rurociąg.
  • Nie wspominałeś o częstotliwości, tylko IPC, ale częstotliwość skalowania jest również trudna. Wyższa częstotliwość wymaga wyższego napięcia, więc skala mocy z częstotliwością sześcianową : ^1od częstotliwości bezpośrednio i ^2od napięcia. (Skala energii zmagazynowanej w kondensatorze z V ^ 2, a większość mocy dynamicznej poza prądem upływowym pochodzi z pompowania ładunku do obciążeń pojemnościowych bramek i przewodów FET).

    Wydajność = częstotliwość razy IPC. (W ramach tej samej architektury. Szerszy SIMD pozwala wykonać tę samą pracę przy mniejszej liczbie instrukcji, a niektóre ISA są gęstsze niż inne, np. MIPS często wykonuje więcej instrukcji, aby wykonać tę samą pracę niż x86 lub AArch64.)

Koszty dotyczą obszaru matrycy (koszt produkcji) i / lub mocy (co pośrednio ogranicza częstotliwość, ponieważ chłodzenie jest trudne). Również niższa moc i wydajność na wat jest celem samym w sobie, szczególnie w przypadku urządzeń mobilnych (akumulator) i serwerów (gęstość energii / koszty chłodzenia / koszty energii elektrycznej).

Zanim wielordzeniowy procesor na gniazdo był czymś, istniały systemy z wieloma gniazdami do zastosowań wysokiej klasy, w których potrzebna była większa przepustowość niż możliwa do uzyskania z pojedynczym procesorem, który można wyprodukować, więc były to jedyne systemy SMP. (Serwery, stacje robocze wysokiej klasy).

Gdyby pojedynczy rdzeń mógł skalować się tak skutecznie, jak sobie tego życzysz, mielibyśmy systemy z 1 rdzeniem fizycznym na gniazdo i SMT (np. HyperThreading), aby mogły działać jak wiele rdzeni logicznych. Typowe komputery stacjonarne / laptopy miałyby tylko 1 rdzeń fizyczny, i nie mielibyśmy trudności z równoległością rzeczy, które nie skalują się liniowo z większą liczbą rdzeni. np. make -j4aby skorzystać z serwerów z wieloma gniazdami i / lub ukryć opóźnienia we / wy na pulpicie. (A może nadal próbowalibyśmy dużo zrównoleglać, gdyby szerokość rurociągu była skalowana łatwo, ale IPC nie, więc musieliśmy użyć większej liczby wątków SMT). Jądro systemu operacyjnego nadal musiałoby działać na wszystkich rdzeniach logicznych, chyba że w sposób przedstawia, że ​​SMT dla systemu operacyjnego było bardzo różne, więc algorytmy szeregowania równoległego i blokowania byłyby nadal potrzebne.


Donald Knuth powiedział w wywiadzie z 2008 roku

Równie dobrze mogę powiedzieć o moim osobistym niezadowoleniu z obecnego trendu w kierunku architektury wielordzeniowej. Dla mnie wygląda to mniej więcej tak, jakby projektantom sprzętu zabrakło pomysłów i że próbują zrzucić winę za przyszłą śmierć Prawa Moore'a na twórców oprogramowania, dając nam maszyny, które działają szybciej tylko na kilku kluczowe punkty odniesienia!

Tak, gdybyśmy mogli mieć cudowne jednordzeniowe procesory z 8-krotnie większą przepustowością w prawdziwych programach , prawdopodobnie nadal byśmy ich używali. W przypadku systemów z dwoma gniazdami tylko wtedy, gdy warto było zapłacić znacznie więcej za większą przepustowość (a nie wydajność jednowątkowa).

Wiele procesorów zmniejsza koszty przełączania kontekstu, gdy uruchomionych jest wiele programów (umożliwiając ich rzeczywiste działanie równoległe zamiast szybkiego przełączania między nimi); zapobiegawcza wielozadaniowość, przerywająca ogromną maszynę zepsutą, jakiej wymagałby procesor, prawdopodobnie bolałaby jeszcze bardziej niż teraz.

Fizycznie byłby to pojedynczy rdzeń (dla prostej hierarchii pamięci podręcznej bez połączeń między rdzeniami), ale obsługuje SMT (np. Intel HyperThreading), więc oprogramowanie może używać go jako 8 rdzeni logicznych, które dynamicznie konkurują o zasoby przepustowości. Lub gdy tylko 1 wątek jest uruchomiony / nie utknął, uzyska pełną korzyść.

Używałbyś więc wielu wątków, gdy było to w rzeczywistości łatwiejsze / naturalne (np. Oddzielne procesy działające jednocześnie) lub w przypadku problemów z równoległymi łańcuchami zależności, które uniemożliwiałyby maksymalne zwiększenie IPC tej bestii.

Niestety, Knuth uważa, że ​​procesory wielordzeniowe przestaną być w tym momencie rzeczą.


Skalowanie wydajności w jednym wątku

Myślę, że gdyby stworzyli 1-rdzeniowy odpowiednik 8-rdzeniowego procesora, ten jeden rdzeń miałby 800% wzrost IPC, dzięki czemu uzyskasz pełną wydajność we wszystkich programach, nie tylko tych zoptymalizowanych dla wielu rdzeni.

Tak to prawda. Gdyby w ogóle możliwe było zbudowanie takiego procesora , byłoby to bardzo niesamowite. Myślę jednak, że jest to dosłownie niemożliwe w tym samym procesie produkcji półprzewodników (tj. Takiej samej jakości / wydajności tranzystorów). Z pewnością nie jest to możliwe przy takim samym budżecie mocy i obszarze matrycy, jak w przypadku 8-rdzeniowego procesora, nawet gdybyś zaoszczędził na logice, aby skleić ze sobą rdzenie i nie potrzebowałby tyle miejsca na prywatne pamięci podręczne na rdzeń.

Nawet jeśli zezwolisz na zwiększenie częstotliwości (ponieważ prawdziwym kryterium jest praca na sekundę, a nie praca na zegar), nawet 2x szybszy procesor byłby ogromnym wyzwaniem.

Gdyby możliwe było zbudowanie takiego procesora w dowolnym miejscu w pobliżu tego samego budżetu mocy i budżetu (a więc kosztów produkcji), tak, producenci procesorów już by go budowali w ten sposób.

Zobacz współczesne mikroprocesory 90-minutowy przewodnik!

W szczególności więcej rdzeni lub szerszych rdzeni? sekcja, aby uzyskać niezbędne informacje niezbędne do zrozumienia tej odpowiedzi; zaczyna się od tego, jak działają procesory potokowe w kolejności, a następnie superskalar (wiele instrukcji na zegar). Następnie wyjaśnia, w jaki sposób uderzyliśmy w ścianę mocy w erze P4, co doprowadziło do końca łatwego skalowania częstotliwości, pozostawiając głównie tylko IPC i wykonując więcej pracy na instrukcji (np. SIMD) jako ścieżkę do przodu, nawet przy mniejszych tranzystorach.

Zwiększenie szerokości rurociągu (maksymalna liczba instrukcji na zegar) zwykle skaluje się pod względem kosztów do kwadratu szerokości . Koszt ten jest mierzony w obszarze matrycy i / lub mocy, w celu szerszego równoległego sprawdzania zależności (wykrywanie zagrożeń) i szerszego harmonogramu poza kolejnością, aby znaleźć gotowe instrukcje do uruchomienia. I więcej portów odczytu / zapisu w pliku rejestru i pamięci podręcznej, jeśli chcesz uruchomić instrukcje inne niż nop. Zwłaszcza jeśli masz 3-wejściowe instrukcje, takie jak FMA lub add-with-carry (2 rejestry + flagi).

Zmniejszają się również zwroty IPC z powodu poszerzenia procesorów ; większość obciążeń ma ograniczoną ILP na małą skalę / bliskiego zasięgu (równoległość na poziomie instrukcji) dla procesorów do wykorzystania, więc poszerzenie rdzenia nie zwiększa IPC (instrukcji na zegar), jeśli IPC jest już ograniczony do mniejszej niż szerokość rdzeń według łańcuchów zależności, błędów gałęzi, błędów pamięci podręcznej lub innych przeciągnięć. Na pewno uzyskasz przyspieszenie w niektórych rozwiniętych pętlach z niezależnymi iteracjami, ale nie to robi większość kodu. Instrukcje porównania / rozgałęzienia stanowią 20% miksu instrukcji w „typowym” kodzie IIRC. (Myślę, że przeczytałem liczby od 15 do 25% dla różnych zestawów danych.)

Ponadto brak pamięci podręcznej, który zatrzymuje wszystkie instrukcje zależne (a następnie wszystko po osiągnięciu pojemności ROB) kosztuje więcej dla szerszego procesora. (Koszt alternatywny pozostawienia większej liczby jednostek wykonawczych w stanie bezczynności; więcej potencjalnych prac niewykonanych.) Lub brak gałęzi podobnie powoduje bańkę.

Aby uzyskać 8-krotność IPC, potrzebowalibyśmy co najmniej 8-krotnej poprawy dokładności prognozowania gałęzi i szybkości trafień w pamięci podręcznej . Ale wskaźniki trafień w pamięci podręcznej nie skalują się dobrze, a pojemność pamięci podręcznej przekracza pewien punkt w przypadku większości obciążeń. Pobieranie wstępne sprzętu jest inteligentne, ale nie może być tak inteligentne. Przy 8-krotności IPC predyktory gałęzi muszą generować 8-krotnie więcej prognoz na cykl, a także mieć je dokładniejszymi.


Obecne techniki budowania wykonania poza kolejnością Procesory mogą wykrywać ILP tylko na krótkie odległości . Na przykład rozmiar ROB Skylake wynosi 224 uops domeny z fuzją, harmonogram dla niewykonanych uops to 97 domen z domeną fused. Zobacz Zrozumienie wpływu lfence na pętlę z dwoma długimi łańcuchami zależności, w celu zwiększenia długości w przypadku, gdy rozmiar harmonogramu jest czynnikiem ograniczającym w wydobywaniu ILP z 2 długich łańcuchów instrukcji, jeśli stają się one zbyt długie. I / lub zobacz tę bardziej ogólną i wstępną odpowiedź ).

Tak więc znalezienie ILP między dwoma oddzielnymi długimi pętlami nie jest czymś, co możemy zrobić ze sprzętem. W niektórych przypadkach może być możliwa dynamiczna rekompilacja binarna dla fuzji pętli, ale procesory trudne i nic nie mogą tak naprawdę zrobić, chyba że pójdą drogą Transmeta Crusoe. (warstwa emulacji x86 na wierzchu innego wewnętrznego ISA; w tym przypadku VLIW). Ale standardowe nowoczesne konstrukcje x86 z buforami UOP i potężnymi dekoderami nie są łatwe do pobicia dla większości kodów.

Poza wersją x86 wszystkie nadal używane ISA są stosunkowo łatwe do odkodowania, więc nie ma motywacji do dynamicznej rekompilacji innej niż optymalizacje na duże odległości. TL: DR: nadzieje na magiczne kompilatory, które mogą wystawiać więcej ILP na sprzęt, nie zadziałały dla Itanium IA-64 i jest mało prawdopodobne, aby działała na super-szeroki procesor dla jakiegokolwiek istniejącego ISA z seryjnym modelem wykonania.


Jeśli miałeś super szeroki procesor, zdecydowanie chciałbyś, aby wspierał SMT, abyś mógł go zasilać pracą, uruchamiając wiele wątków o niskiej ILP.

Ponieważ Skylake ma obecnie szerokość 4 jednostek (i osiąga rzeczywisty IPC od 2 do 3 jednostek na zegar, lub nawet bliżej liczby 4 w kodzie o wysokiej przepustowości), hipotetyczny 8-krotnie szerszy procesor miałby 32 jednostki!

Będąc w stanie wyrzeźbić to z powrotem na 8 lub 16 logicznych procesorów Fantastyczna byłaby dynamicznie współużytkują te zasoby wykonawcze: niestabilne wątki uzyskują całą przepustowość frontonu i przepustowość zaplecza.

Ale z 8 oddzielnymi rdzeniami, gdy nić utknie w martwym punkcie, nie ma nic innego, co utrzymywałoby jednostki wykonawcze w gotowości; inne wątki nie przynoszą korzyści.

Wykonanie jest często szybkie: zatrzymuje się w oczekiwaniu na ładowanie brakujące w pamięci podręcznej, a gdy nadejdzie wiele równoległych instrukcji, może skorzystać z tego wyniku. Dzięki superszerokiemu procesorowi ta seria może przyspieszyć i może pomóc w SMT.


Ale nie możemy mieć magicznych super szerokich procesorów

Aby uzyskać przepustowość, musimy zamiast tego ujawnić równoległość sprzętu w postaci równoległości na poziomie wątku . Generalnie kompilatory nie są świetne w wiedzy, kiedy / jak używać wątków, poza prostymi przypadkami, takimi jak bardzo duże pętle. (OpenMP lub gcc's -ftree-parallelize-loops). Nadal potrzeba ludzkiej sprytności, aby przerobić kod, aby skutecznie wykonywać użyteczne prace równolegle, ponieważ komunikacja między wątkami jest droga, podobnie jak uruchamianie wątków.

TLP jest równoległobokiem gruboziarnistym, w przeciwieństwie do drobnoziarnistego ILP w ramach jednego wątku wykonania, który HW może wykorzystać.


Procesory ukierunkowane na interaktywne obciążenia (takie jak Intel / AMD x86 i rdzenie Apple / ARM AArch64 high-end) zdecydowanie wpływają na malejące zwroty skalowania IPC, ponieważ wydajność jednowątkowa jest nadal bardzo cenna gdy opóźnienie, a nie tylko przepustowość masowo równoległe problemy.

Możliwość równoległego uruchamiania 8 kopii gry przy 15 klatkach na sekundę jest o wiele mniej cenna niż możliwość uruchamiania jednej kopii przy 45 klatkach na sekundę. Dostawcy procesorów wiedzą o tym i dlatego współczesne procesory używają wykonywania poza kolejnością, mimo że kosztuje to znaczną moc i obszar umierający. (Ale procesory graficzne nie, ponieważ ich obciążenie jest już masowo równoległe).

Wielordzeniowy sprzęt Intel Xeon Phi (Knight's Landing / Knight's Mill) jest interesującym punktem zwrotnym: bardzo ograniczona realizacja zamówień poza kolejnością i SMT do utrzymywania 2-szerokich rdzeni zasilanych instrukcjami SIMX AVX512 w celu zmniejszenia liczby. Rdzenie oparte są na architekturze Silvermont o niskiej mocy Intela. (Wykonanie poza zamówieniem, ale z małym oknem zmiany kolejności, znacznie mniejszym niż rodzina rdzeni Sandybridge z dużym rdzeniem. I węższy rurociąg.)


BTW, wszystko to jest prostopadłe do SIMD. Wykonanie większej ilości pracy zgodnie z instrukcją zawsze pomaga, jeśli jest to możliwe dla twojego problemu.


Modele cenowe

Modele wyceny oprogramowania są oparte na obecnym krajobrazie sprzętu.

Modele licencjonowania na rdzeń stały się bardziej rozpowszechnione (i dotyczyły nawet komputerów stacjonarnych z jednym gniazdem) wraz z pojawieniem się procesorów wielordzeniowych. Wcześniej dotyczyło to tylko serwerów i dużych stacji roboczych.

Gdyby oprogramowanie nie potrzebowało wielu rdzeni do działania z najwyższą prędkością, tak naprawdę nie byłoby sposobu, aby sprzedawać go taniej osobom, które nie czerpią z tego tak dużych korzyści, ponieważ pracują na słabszym procesorze. Chyba że ekosystem oprogramowania / sprzętu ewoluował w „kanałach SMT”, które pozwalają skonfigurować maksymalną szerokość wykonywania dla kodu działającego na tym logicznym rdzeniu. (Znów wyobrażam sobie świat, w którym procesory skalują się pod względem szerokości potoku zamiast wielu oddzielnych rdzeni).


2
„uruchomienie wątku jest drogie” - to nie jest trudny fakt; to artefakt typowych współczesnych systemów operacyjnych.
MSalters

1
@MSalters I rzeczywiście, niektóre projekty badawcze badały, jak wspaniale byłoby porzucić to podejście. To samo dotyczy „ludzkiej sprytności w przerabianiu kodu” - istnieją sposoby pisania kodu, które są naturalnie łatwiejsze do zrównoleglenia, po prostu nie były bardzo popularne w ciągu ostatnich kilku dekad. Tam, gdzie używane, ogólnie można zobaczyć ogromne skalowanie w poziomie przy bardzo niskich kosztach; w rzeczywistości do tego stopnia, że ​​w wielu zastosowaniach skalowanie w poziomie zaczyna być znacznie tańsze niż wertykalne. Oznacza to po prostu, że nie możesz dać programistom wyboru - jeśli okoliczności tego wymuszą, działa dobrze: D
Luaan

11

Pozwól mi narysować analogię:

Jeśli masz małpkę, która pisze na maszynie do pisania, i chcesz więcej pisać, możesz dać małpiej kawie, lekcje pisania i być może zagrozić, aby działała szybciej, ale przychodzi moment, w którym małpa będzie pisz z maksymalną wydajnością.

Więc jeśli chcesz więcej pisać, musisz zdobyć więcej małp.


Aby rozszerzyć analogię, potrzebujesz osobnej maszyny do pisania dla każdej małpy (reprezentującej magistralę danych, której potrzebuje każdy rdzeń), potrzebujesz sposobu, aby dostać banany do każdej małpy i czegoś, aby podnieść ich odchody (analogicznie do dystrybucji mocy i ciepła rozproszenie) i potrzebujesz sposobu, aby upewnić się, że małpy nie próbują wpisać tego samego przejścia w Dwunastej nocy (analogicznie do właściwego podziału obciążenia między procesory). Ale to wszystko wymaga mniej pracy dla większego zysku niż próba uzyskania więcej pisania z jednej małpy.


7

Wskazujesz, że wiele programów nie używa więcej niż (x) rdzeni. Ale to całkowicie ograniczenie nakładane przez projektantów tego oprogramowania. Komputery domowe z wieloma rdzeniami są wciąż nowe (ish), a projektowanie wielowątkowego oprogramowania jest również trudniejsze w przypadku tradycyjnych interfejsów API i języków.

Twój komputer nie tylko uruchamia ten 1 program. Robi całą masę innych rzeczy, które można umieścić na mniej aktywnych rdzeniach, aby Twoje podstawowe oprogramowanie nie było przez nie tak bardzo zakłócane.

Obecnie nie jest możliwe zwiększenie prędkości pojedynczego rdzenia w celu dopasowania przepustowości 8 rdzeni. Większa prędkość prawdopodobnie będzie musiała pochodzić z nowej architektury.

Ponieważ coraz więcej rdzeni jest powszechnie dostępnych, a interfejsy API są zaprojektowane z takim założeniem, programiści zaczną często używać więcej rdzeni. Trwają starania, aby projekty wielowątkowe były łatwiejsze. Gdybyś zadał to pytanie za kilka lat, prawdopodobnie powiedziałbyś: „Moje gry zwykle używają tylko 32 rdzeni, więc dlaczego mój procesor ma 256?”.


3
Różnica między 1 a wieloma rdzeniami jest ogromna, jeśli chodzi o wykorzystanie oprogramowania. Większość algorytmów i programów jest szeregowa. np. Donald Knuth powiedział, że procesory wielordzeniowe wyglądają tak, jakby projektanci HW „ próbowali zrzucić winę za przyszły upadek Prawa Moore'a na twórców oprogramowania, dając nam maszyny, które działają szybciej tylko na kilku kluczowych testach!
Peter Cordes

Niestety nikt jeszcze nie wymyślił sposobu, aby jeden szeroki / szybki rdzeń uruchamiał program jednowątkowy w dowolnym miejscu tak szybko, jak to możliwe, aby uzyskać efektywnie równoległy kod do uruchamiania na wielu rdzeniach. Ale na szczęście projektanci procesorów zdają sobie sprawę, że wydajność jednowątkowa jest nadal krytyczna i sprawiają, że każdy rdzeń jest znacznie większy i potężniejszy, niż gdyby dążyli do czystej przepustowości w przypadku równoległych problemów. (Porównaj Skylake (4-szeroki) lub Ryzen (5-szeroki) w porównaniu do rdzenia Xeon Phi (Landing Knight / Knight's Mill oparty na Silvermont + AVX512) (2-szeroki i ograniczony OoO)
Peter Cordes

2
W każdym razie tak, posiadanie co najmniej 2 rdzeni jest często pomocne dla wielozadaniowego systemu operacyjnego, ale uprzedzające wielozadaniowość na jednym rdzeniu, który był 4x lub 8x tak szybki, jak obecny procesor, byłby całkiem dobry. Dla wielu interaktywnych przypadków użycia byłoby to znacznie lepsze, gdyby można było zbudować w ogóle / przy tym samym budżecie mocy. (Dwurdzeniowy pomaga zmniejszyć koszty zmiany kontekstu, gdy wiele zadań potrzebuje czasu procesora.)
Peter Cordes

1
Wszystko prawda, ale historycznie wielordzeniowy był droższy. Nie było zbyt wielu powodów, by projektować równoległe algorytmy poza aplikacjami naukowymi. Jest dużo miejsca na równoległość, nawet w algorytmach wymagających głównie wykonania szeregowego. Ale IPC obecnej generacji nie jest świetny i łatwo go zepsuć. Co generalnie powoduje błędy, które naprawdę trudno znaleźć i naprawić. Oczywiście 4x szybszy procesor byłby niesamowity (ale nadal chciałbyś mieć wiele rdzeni).
hekete

2
@PeterCordes Cóż, większość algorytmów i programów nie jest szeregowa, ponieważ muszą , ale głównie dlatego, że zawsze tak było (z odrobiną „to był dobry kompromis”). Najbardziej rażące przypadki to takie, w których można po prostu uruchomić ten sam program cztery razy na czterech osobnych obciążeniach i uruchomić je równolegle bez problemu. Ale to wiąże się z innym problemem - procesor nie jest tak często wąskim gardłem, i zwykle jest to sposób na zastosowanie lepszych algorytmów, a nie więcej procesorów. Czasami te pomagają również w przypadku innych wąskich gardeł (pamięć, dysk, sieć ...).
Luaan

3

Najbardziej przekonującym powodem z historycznego punktu widzenia jest rozproszenie władzy .

Po Pentium IV Intel próbował realizować procesor nowej generacji o nazwie kodowej Tejas, który miał działać w zakresie od 4 GHz do 12 GHz. Problem polegał na tym, że praca z tą prędkością generowała zbyt dużo ciepła, aby była opłacalna.

Po anulowaniu Tejas Intel potrzebował kolejnych 10-15 lat, zanim w końcu mieli rdzenie działające na 4 GHz z akceptowalnym poziomem ciepła.

Zobacz Tejas i Jayhawk .

Intel miał inny projekt równoległy z Tejas, który obejmował użycie wielu rdzeni. Ten projekt miał akceptowalny poziom ciepła, więc tak poszli. Pozwoliło im to zwiększyć wydajność teraz, zamiast czekać kolejne 10 lat na procesy produkcyjne 10 nm.

Zakładając, że rdzenie nie są pozbawione zasobów, to aby uzyskać tę samą liczbę instrukcji na sekundę z jednego rdzenia zamiast z N rdzeni, potrzebujesz szybkości instrukcji tego pojedynczego rdzenia, aby być N razy szybszym. Dynamiczne rozpraszanie mocy rdzenia procesora jest liniowo proporcjonalne do częstotliwości roboczej. Jest również proporcjonalny do kwadratu napięcia roboczego. Praca na niższych częstotliwościach pozwala na stosowanie niższych napięć roboczych. Zastosowanie niższych napięć przy niższych częstotliwościach oznacza, że ​​praktycznie generowane ciepło spada wraz z sześcianem częstotliwości roboczej.

Skrajnym przykładem tego jest ludzki mózg, który może wykonać równowartość 2 ^ 18 operacji na sekundę przy użyciu tylko 20 W mocy. Osiąga to dzięki zastosowaniu miliardów neuronów pracujących równolegle przy zaledwie kilkuset Hz.

Pamiętaj także, że na komputerze zwykle działają jednocześnie setki lub tysiące wątków. System operacyjny obsługuje przydzielanie czasu na rdzeniu do każdego wątku. Więc nawet jeśli pojedynczy program nie wykorzystuje wszystkich rdzeni, nadal przynosi korzyści, ponieważ inne programy zajmują mniej czasu procesora, jeśli działają na innym rdzeniu.

Jeśli już, rynek o wysokiej wydajności przechodzi na bardziej równoległe przetwarzanie w postaci układów FPGA. Intel niedawno kupił Altera (drugi co do wielkości producent FPGA) i teraz sprzedaje płyty z akceleratorem sprzętowym FPGA. Oprogramowanie może załadować FPGA z obrazem w czasie wykonywania za pomocą wywołania API. CPU następnie podaje dane do FPGA i pozwala mu wykonać większość pracy. Rodzaje aplikacji to zwykle kodowanie wideo, AI, renderowanie, wyszukiwanie w bazie danych itp.


Pamiętaj także, że na komputerze zwykle działają jednocześnie setki lub tysiące wątków. Nie, nie działa . Na współczesnych komputerach istnieje wiele wątków, ale prawie wszystkie z nich śpią i czekają na wejście / wyjście lub licznik czasu w danym momencie. np. średnie obciążenie (w ciągu ostatniej minuty) na moim komputerze z systemem Linux wynosi obecnie 0,19 zadań aktywnie gotowych do użycia czasu procesora w danym momencie. Gdybym uruchomił kodowanie wideo, x264 uruchomiłby wiele wątków, aby system operacyjny zaplanował na wielu rdzeniach, ale tylko tyle, ile mam rdzeni logicznych.
Peter Cordes

A BTW, OP (z jakiegoś powodu) całkowicie pominął częstotliwość i zapytał o skalowanie IPC (instrukcje na cykl zegara), a nie na sekundę. To, co mówisz, jest prawdą, ale proponowali poszerzenie procesorów , a nie zwiększenie taktowania. W mojej odpowiedzi już to rozwiązałem, więc twoja odpowiedź wyjaśniająca skalowanie mocy z częstotliwością jest miłym dodatkiem +1.
Peter Cordes

@PeterCordes Zgadza się, nie chciałem sugerować, że wszystkie wątki wykonują się od razu, oczywiście oczywiście na zmianę. Dzięki za wytłumaczenie.
user4574

Cóż, nie tyle „na zmianę”, że przez większość czasu nie są gotowi na bieganie. Przeważnie śpią, zwykle budzą się tylko na krótki czas obliczeń, np. Po tym, jak system operacyjny dostarczy nawet naciśnięcie klawisza lub odczyt sieci, albo obudzi je, ponieważ upłynął czas. Rzadko zdarza się, aby więcej niż 2 osób obudziło się jednocześnie, chyba że robisz coś intensywnego obliczeniowo. A jeśli tak, to nie zaczynasz setek wątków, zaczynasz liczbę wątków ~ = liczbę dostępnych rdzeni.
Peter Cordes

2

Wystarczy zaokrąglić obraz tego, dokąd to wszystko zmierza ...

Sieci neuronowe i sztuczna inteligencja to obecnie bardzo popularne tematy. Jednym z powodów jest to, że można efektywnie wykorzystywać ogromną liczbę prostych rdzeni równolegle, dzięki czemu można uzyskać maksymalną wydajność obliczeniową. Wymóg jest z natury masywnie równoległy i dość łatwo mapuje się na szereg procesorów, bez potrzeby dużej komunikacji między rdzeniami. Właśnie dlatego GPU były pierwszą technologią goto do przyspieszenia AI. Obecnie widzimy, że chipy są zoptymalizowane jeszcze lepiej niż karty graficzne dla NN wchodzących na rynek. Następnym, a może ostatnim krokiem jest stworzenie NN przy użyciu technologii analogowych, takich jak pamięci.

Nawiasem mówiąc, w czymś takim jak komputer do gier wydajność karty graficznej jest znacznie wyższa niż w przypadku wielordzeniowego procesora Intel lub AMD


2
Re „... z natury masowo równoległy” : nawet zawstydzająco równoległy ?
Peter Mortensen

1

Zasadniczo straty CMOS są wykładniczo (^ 1,5) proporcjonalne do częstotliwości, a wydajność procesora równoległego jest nieco mniejsza niż liniowa proporcjonalna do liczby procesorów.

Tak więc stosunek mocy obliczeniowej do rozpraszania mocy jest poprawiony dla aplikacji wieloprocesorowych przy różnych częstotliwościach zegara przy porównywaniu prędkości w stosunku do ilości procesorów dla stałego rozpraszania mocy.

Jest to bardziej skomplikowane, ale to są podstawy, dla których równoległe procesory są lepsze w przeliczeniu na wat w dynamicznych aplikacjach. Zawsze będą wyjątki, gdy zostaną zoptymalizowane dla jednego scenariusza.

To nie rozmiar większego procesora sprawia, że ​​jest on szybszy w typowych aplikacjach na komputery PC z procesorami Intel / AMD, a raczej zmniejszony rozmiar z rozdzielczości litograficznej i niższa pojemność bramki, która zmniejsza moc wraz ze zmniejszonym poziomem podprogowym i napięciem rdzenia.

Ulepszenie nie jest liniowe i nie oznacza, że ​​8 rdzeni jest czterokrotnie lepsze niż 2, ale celem, jeśli zostanie osiągnięty, jest większy zakres dynamiki przetwarzania z dławieniem rozpraszania mocy, prędkości i napięcia w celu poprawy zarówno wydajności, jak i wydajności oraz szczytowej mocy na żądanie bez nadmierny wzrost temperatury.

Aby uzyskać bardziej naukową odpowiedź, przeczytaj https://www.sciencedirect.com/topics/computer-science/dynamic-power-consumption


-2

Multicores zwykle nie są wielopłatowe. Rdzenie wielopłatowe nie są wielopunktowe.

Byłoby to coś w rodzaju idealnego znalezienia architektury wielopłatowej działającej przy kilku megahercach, ale ogólnie jej mosty nie byłyby obsługiwane przez konsumenta, ale kosztowne, więc tendencja polega na programowaniu wielordzeniowym na niższych częstotliwościach, a nie na krótkich instrukcjach przy dużych częstotliwościach zegara.

Wiele rdzeni instruktażowych jest tańszych i łatwiejszych w obsłudze, i dlatego złym pomysłem jest posiadanie architektur wielopłatowych w kilku gigahercach.


1
Masz na myśli „superskalar”, wiele instrukcji na zegar? Większość procesorów wielordzeniowych jest superskalarna. np. Ryzen ma szerokość 5. Wysokiej klasy układy AArch64 firmy Apple mają szerokość 6 lub 8. Istnieje wiele nisko wiszących owoców do wykorzystania w 2-procesorowym procesorze w większości kodów, więc warto zrobić każdy rdzeń co najmniej 2-szeroki, zanim skaluje się do wielu rdzeni, z których każdy potrzebuje własnej prywatnej pamięci podręcznej, i połączenia między rdzeniami ( np. wielordzeniowe karty obliczeniowe Intel Xeon Phi mają wiele podwójnych rdzeni). To samo dotyczy rdzeni smartfonów: małe rdzenie mają co najmniej 2 szerokości. Wydajność jednowątkowa ma znaczenie!
Peter Cordes

1
A może miałeś na myśli dl.acm.org/citation.cfm?id=224451 - artykuł badawczy na temat tak zwanych rdzeni „Multiscalar”, które szukają ILP w większych zakresach na wykresie przepływu kontroli programu wysokiego poziomu, używając połączenie HW i SW. Procesory głównego nurtu, których używamy w komputerach stacjonarnych i smartfonach, nie są takie, są zwykłymi superskalarami z wykonywaniem poza kolejnością, implementując szeregowy ISA, który udaje, że uruchamia instrukcje pojedynczo.
Peter Cordes

Dzięki. afaik, ideą łuku skalarnego jest mierzalność ciepła za znanymi lub predefiniowanymi zestawami instrukcji (przypadek AVX). <br/> Bieżące obliczenia architektury w porównaniu z ciepłem są rozważane, nie do przewidzenia. zwiększa to nieprawdopodobieństwo, że mikroprocesory mogą działać przy dużych częstotliwościach, ponieważ ich zdolność do działania w ideale czasu / ciepła nie jest obliczalna. to wszystko, co do tej pory wiem. Kopię maszyny wektorowe w tym celu, aby zrozumieć fizykę „multiskary”. przypadek jest taki, że xeon / phy podąża za idealną krzywą termiczną, tak jak robił to starożytny Cpus. poprawa jakości obsługi klienta
machtur

Zestawy instrukcji SIMD, takie jak AVX, są sposobem na uzyskanie większej ilości pracy w potoku bez konieczności poszerzania całego potoku, tylko jednostek wykonawczych. Na przykład Skylake może uruchamiać 3 vpaddd ymm0, ymm1, ymm2instrukcje na zegar, z których każda wykonuje 8 spakowanych 32-bitowych dodatków całkowitych. Tak więc 24 liczby całkowite są dodawane na zegar, ale maszyna do wykonywania zadań poza kolejnością „tylko” musi śledzić 3 instrukcje w locie. Jest to o wiele tańsze w budowie niż procesor, który może uruchamiać 24 add eax, edxinstrukcje na zegar. SIMD jest zasadniczo prostopadła do szerokości rurociągu.
Peter Cordes

Skylake to dobry przypadek optymalizacji na cykl zegara. warianty są liczne, nie jestem nimi, co jest interesującym przypadkiem optymalizacji wewnętrznej magistrali, ponieważ skylake integrują oryginalne odciążenie Xeon w rurociągu SIMD. Zakładam, że jeden duży rdzeń zintegrowałby odciążenie i obliczenia w kilku cyklach, jak ma to miejsce (na przykład) w przypadku AVX. jest to sposób, w jaki obliczenia zintegrowały się do przodu w porównaniu do mocy wymaganej do operacji na blokach wewnętrznych. w przeciwieństwie do wielu krótkich instrukcji, takich jak w GPU, z wieloma „wirtualnymi” rdzeniami podobnymi do dodatków do Nehalem
machtur
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.