Co to jest procesor wielordzeniowy?

Od połowy lat dziewięćdziesiątych procesory do komputerów stacjonarnych oferują wiele rdzeni procesorów w jednym pakiecie. To jest procesor wielordzeniowy. Podczas gdy wczesne projekty były ograniczone do dwóch lub czterech rdzeni procesora, nowoczesne procesory oferują do 64 rdzeni fizycznych na jednym procesorze. Tak wysoka liczba rdzeni nie jest standardem w przypadku procesorów do komputerów stacjonarnych i jest zwykle zarezerwowana dla wysokiej klasy stacji roboczych lub serwerów. Typowa liczba rdzeni w nowoczesnych procesorach do komputerów stacjonarnych wynosi od 4 do 16. Ale co takiego jest w wielordzeniowych procesorach, że dominują w nowoczesnych komputerach?

Pojedynczy rdzeń

Historycznie jednordzeniowy procesor ograniczał się do wykonywania tylko jednego zadania naraz. Wiąże się to z całą gamą problemów. Na przykład na nowoczesnym komputerze działa ogromna liczba procesów w tle. Jeśli procesor może przetwarzać tylko jedną rzecz na raz, oznacza to, że te procesy w tle muszą zabierać czas przetwarzania z procesu pierwszego planu. Dodatkowo braki w pamięci podręcznej oznaczają, że dane muszą być pobierane z – względnie – wolnej pamięci RAM. W czasie pobierania danych z pamięci RAM procesor po prostu jest bezczynny, ponieważ nie może nic zrobić, dopóki nie otrzyma danych. Wstrzymuje to działający proces, a także wszelkie inne procesy, które czekają na jego zakończenie.

Podczas gdy nowoczesne procesory jednordzeniowe nie są tak naprawdę rzeczą ze względu na wzrost budżetowych procesorów wielordzeniowych, będą mogły korzystać z innych nowoczesnych sztuczek, aby działać szybciej. Potok umożliwiłby jednoczesne użycie każdej innej części obsługi instrukcji, zapewnienie znacznego wzrostu wydajności w porównaniu z użyciem tylko jednego etapu potoku na cały zegar cykl. Szeroki potok umożliwiłby obsługę wielu instrukcji na każdym etapie potoku na cykl zegara. Przetwarzanie poza kolejnością pozwoliłoby na planowanie instrukcji w sposób bardziej efektywny czasowo. Predyktor rozgałęzień byłby w stanie przewidzieć wynik instrukcji rozgałęzienia i z wyprzedzeniem uruchomić domniemaną odpowiedź.

Wszystkie te czynniki działałyby dobrze i zapewniały pewną wydajność. Jednak dodanie jednego lub więcej rdzeni umożliwia to wszystko, a za jednym pociągnięciem umożliwia przetwarzanie dwukrotnie większej ilości danych naraz.

Wielordzeniowy

Dodanie drugiego rdzenia brzmi tak, jakby miało podwoić surową wydajność. Sprawy są niestety bardziej skomplikowane. Logika programu jest często jednowątkowa, co oznacza, że ​​jest tylko jedna rzecz, którą program próbuje zrobić w danym momencie. Może się jednak zdarzyć, że inne procesy mogą jednocześnie korzystać z drugiego rdzenia. Chociaż w przypadku większości pojedynczych programów nie ma nieodłącznego wzrostu wydajności, zapewnienie dodatkowego zasób przetwarzania, skutecznie ogranicza konkurencję o ograniczony zasób, co zapewnia zwiększenie wydajności. Ten wzrost wydajności, wynikający po prostu ze zmniejszenia konkurencji o czas procesora, jest najbardziej zauważalny podczas przeskakiwania z pojedynczego źródła w przypadku procesora dwurdzeniowego, zwroty z dalszego zwiększania liczby rdzeni maleją, choć generalnie jest ich więcej lepiej.

Aby w odpowiedni sposób wykorzystać systemy wielordzeniowe i faktycznie uzyskać solidny wzrost wydajności, programy muszą być zaprogramowane tak, aby korzystały z wielu wątków przetwarzania. Logika wielowątkowa jest bardzo trudna do wykonania w sposób niezawodny, ponieważ często jest trudna do nauczenia i istnieje wiele potencjalnych pułapek. Jednym z przykładów pułapki jest sytuacja wyścigu. W sytuacji wyścigu jeden proces zakłada, że ​​inny proces, który uruchamia, będzie działał płynnie, a następnie próbuje zrobić coś, co zależy od tego, aby ten inny proces działał płynnie. Na przykład wyobraź sobie, że proces rozpoczyna inny proces, aby zamknąć jeden dokument i otworzyć inny. Jeśli oryginalny proces nie sprawdza prawidłowo, czy drugi proces został ukończony, może to spowodować nieoczekiwane wyniki. Jeśli na przykład wystąpił problem z zamknięciem pierwszego dokumentu, może on nadal być otwarty, gdy oryginalny proces po prostu zapisuje w nim więcej danych.

W tej sytuacji wyścigu wartość zmiennej jest odczytywana po raz drugi przed zapisaniem do niej nowej wartości, co prowadzi do błędnej ogólnej odpowiedzi.

Problemy termiczne

Jednym z największych problemów, z którymi borykają się procesory wielordzeniowe, jest ciepło. Podczas gdy jeden rdzeń procesora nie wytwarza tak dużo ciepła, dwa wydzielają więcej. W procesorach o dużej liczbie rdzeni taka koncentracja ciepła może skutkować niższym taktowaniem doładowania, ponieważ procesor zarządza jego temperaturą. Niższy zegar doładowania spowoduje niższą wydajność w aplikacjach jednowątkowych. Często można to zaobserwować w testach wydajności gier. Gry wideo są często bardzo zależne od jednego wątku. W związku z tym wydajność jednowątkowa jest często kluczowa dla gier. Procesory o dużej liczbie rdzeni, takie jak modele 16-rdzeniowe, często pochodzą z pojemników o wysokiej wydajności. Mimo to, w testach jednowątkowych regularnie przewyższają je „mniejsze” procesory o mniejszej liczbie rdzeni. Ten problem jest jeszcze bardziej widoczny w przypadku procesorów o ultrawysokiej liczbie rdzeni, takich jak 64-rdzeniowy AMD Threadripper, gdzie taktowanie jest zauważalnie niższe niż w przypadku wysokiej klasy procesorów do komputerów stacjonarnych.

Sukcesy

Wiele aplikacji potrafi właściwie wykorzystać wiele rdzeni procesora. Na przykład renderowanie CPU jest stosunkowo łatwym zadaniem do zrównoleglenia. Poprawę wydajności można zauważyć aż do 64 rdzeni i więcej, chociaż żaden pojedynczy procesor nie oferuje obecnie więcej niż 64 rdzeni. Wiele aplikacji po prostu nie może być wielowątkowych, ponieważ są one zależne od logiki sekwencyjnej. Chociaż nie widzą one nigdzie w pobliżu przyspieszenia programu wielowątkowego, fakt, że programy wielowątkowe a inne programy jednowątkowe mogą korzystać z innych rdzeni procesora, zwalnia czas procesora, pozwalając na lepsze wydajność.

Opcje architektoniczne

W procesorach do komputerów stacjonarnych każdy rdzeń procesora w procesorze wielordzeniowym był zasadniczo identyczny. Ta jednorodność sprawia, że ​​planowanie pracy na rdzeniach jest proste. Korzystanie z tego samego powtarzającego się projektu pomaga również obniżyć koszty rozwoju. Jednak procesory mobilne od dawna używają heterogenicznych architektur rdzeni. W tym projekcie istnieją dwa, a nawet trzy poziomy rdzenia procesora. Każda warstwa może uruchamiać te same procesy, jednak niektóre są zaprojektowane pod kątem energooszczędności, a inne są dostosowane do wydajności. Okazało się to receptą na sukces urządzeń zasilanych bateryjnie, ponieważ wiele zadań może wykorzystywać wolniejsze więcej energooszczędne rdzenie, zwiększające żywotność baterii, podczas gdy procesy o wysokim priorytecie mogą nadal działać z dużą prędkością kiedy był potrzebny.

Architektura procesorów do komputerów stacjonarnych również zmierza w kierunku heterogenicznego projektu rdzenia. Jezioro Olchowe firmy Intel 12ten Linia procesorów Core Core jest pierwszym procesorem do komputerów stacjonarnych, który to robi. W tym przypadku głównym czynnikiem napędzającym mniejsze rdzenie niekoniecznie jest sprawność energetyczna, ale sprawność cieplna, chociaż są to dwie strony tego samego medalu. Posiadanie wielu wydajnych rdzeni zapewnia wysoką wydajność, podczas gdy wiele wydajnych rdzeni może obsługiwać zadania w tle bez zbytniego wpływu na główne rdzenie.

Wniosek

Procesor wielordzeniowy to procesor, który zawiera wiele rdzeni przetwarzających w jednym pakiecie, często, choć nie wyłącznie, na tej samej kości. Procesory wielordzeniowe nie oferują bezpośredniego zwiększenia wydajności wielu programom, jednak poprzez zwiększenie liczby rdzeni programy jednowątkowe nie muszą tak bardzo konkurować o czas procesora. Niektóre programy mogą w pełni korzystać z wielu rdzeni, wykorzystując bezpośrednio tyle, ile jest dostępnych. Zapewnia to duży wzrost wydajności, chociaż ze względu na ograniczenia termiczne i mocy ten wzrost niekoniecznie jest prostym podwojeniem wydajności przy podwojeniu rdzeni.