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.
Odpowiedzi:
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:
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.
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.
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.
źródło
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ć.
źródło
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.
źródło
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.
źródło
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:
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ą :
^1
od częstotliwości bezpośrednio i^2
od 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 -j4
aby 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
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
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).
źródło
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.
źródło
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?”.
źródło
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.
źródło
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
źródło
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
źródło
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.
źródło
vpaddd ymm0, ymm1, ymm2
instrukcje 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ć 24add eax, edx
instrukcje na zegar. SIMD jest zasadniczo prostopadła do szerokości rurociągu.