Czym różni się koprocesor od akceleratora i dlaczego oba nadal istnieją?

Po tym, jak przybliżyliśmy Wam to, czym dokładnie są akceleratory i dlaczego są tak ważne w dzisiejszym świecie, nadszedł czas na małe porównanie. Dziś chcemy rozwiać wszelkie wątpliwości, które mogą pojawić się w Waszych głowach po spotkaniu się z określeniem akceleratora i koprocesora. Z pozoru bowiem te układy wydają się bardzo podobne, ale w praktyce ich działanie znacząco się różni. Czym więc różni się koprocesor od akceleratora, choć obie jednostki, to “wyspecjalizowane układy pomocnicze”?
Czym różni się koprocesor od akceleratora,koprocesor od akceleratora, koprocesor, akcelerator
Czym różni się koprocesor od akceleratora,koprocesor od akceleratora, koprocesor, akcelerator

Obecnie układy logiczne wchodzą na zupełnie nowy poziom złożoności, bo niegdyś pomijane często w marketingowych ogłoszeniach akceleratory i koprocesory, są czymś, czym firmy chwalą się teraz przy każdej okazji. Nic nie ma jednak w tym dziwnego, bo często odpowiadają one za np. odtwarzanie dźwięku czy wideo z wykorzystaniem najnowszego kodeku, radzenie sobie z obliczeniami angażującymi sztuczną inteligencję, czy poprawianie jakości renderowanej grafiki. Stają się więc czymś nie tylko ważnym, ale też częścią marketingowego “asa w rękawie”, dlatego warto wiedzieć, czym dokładnie są.

Czytaj też: Tamron 11-20 mm F/2.8 Di III-A RXD – ultraszerokokątna bestia (recenzja)

Czym są akceleratory w układach logicznych, akceleratory, opis akceleratory, czym są akceleratory

Dzięki temu artykułowi dowiecie się m.in. tego, dlaczego rdzenie Tensor w kartach graficznych GeForce RTX nie są tym samym, co obecny np. w procesorze graficznym Volta specjalny NVIDIA Deep Learning Accelerator. O tym wspominaliśmy już zresztą w poprzednim wpisie na temat akceleratorów, a jest to zresztą świetny przykład sam w sobie, który podkreśla powód powstawania akceleratorów i koprocesorów. 

NVIDIA opracowała te specjalne jednostki do mnożenia macierzy. m.in. po to, aby umożliwić kartom graficznym GeForce RTX wykorzystywanie sztucznej inteligencji w supersamplingu, czyli skalowaniu rozdzielczości w czasie rzeczywistym (technologia DLSS) w celu zwiększenia płynności gry. Powstały więc z potrzeby i przymusu, ale koprocesory i akceleratory mogą też powstawać z dążenia do zmniejszenia zużycia energii czy zwiększenia ogólnej wydajności.

Te trzy filary sprawdzają się najczęściej, kiedy firma za wszelką cenę chce wprowadzić unikalną funkcję do produktu. Może się też zdarzyć, że zauważy znaczące zużycie energii w konkretnych obciążeniach, lub uzna je za zbyt wymagające i odpowiednio często powtarzające się, aby oddelegować je do specjalnego układu w następnej generacji CPU, GPU lub SoC. To bezpośrednio wpłynie w pozytywnym stopniu na wydajność, zużycie energii i tym samym generowane ciepło, a tym specjalnym układem jest właśnie koprocesor albo akcelerator. 

Czym są akceleratory w układach logicznych, akceleratory, opis akceleratory, czym są akceleratory

Ich przeznaczenie, zaawansowanie, fizyczne miejsce na rdzeniu oraz strukturę definiuje się właśnie na poziomie projektowania nowego procesora centralnego, graficznego lub SoC (System-on-Chip). Jednak w te szczegóły nie będę wchodził, bo znajdziecie je w poprzednim wpisie. Najważniejsze jest to, aby wiedzieć, że zarówno koprocesor, jak i akcelerator, odpowiada za przejęcie części odpowiedzialności z barków głównego procesora w myśl stawianych mu zadań. Odpowiadają jednak za realizowanie nie dowolnych obliczeń, a konkretnych i z góry określonych, bo ich fizyczna struktura oraz instrukcje zostały zaprojektowane właśnie z myślą o nich. 

Czym różni się koprocesor od akceleratora?

Do tej pory w tekście często pojawiał się szyk “koprocesor albo/i akcelerator”, co może sugerować, że można postawić znak równości między nimi. Czas więc przejść do tego, czym dokładnie są i jakie różnice oraz podobieństwa można wyróżnić między nimi, choć sama nazwa tego pierwszego zapewne nasunęła Wam już odpowiedź.

Najprościej wytłumaczyć to tak, że koprocesor wchodzi z głównym procesorem w kooperację. Nie może działać bez niego i na własną rękę, bo jest od niego uzależniony i działa z nim w sposób synchroniczny. Nie posiada m.in. możliwości zaczerpnięcia danych z pamięci przez co, zanim rozpocznie prace nad danym zadaniem, musi otrzymać od swojego “zwierzchnika” (CPU, GPU, SoC) zarówno instrukcje, jak i dane do przetworzenia. Jego zadaniem jest więc możliwie najszybsze rozwiązanie danego problemu obliczeniowego i zwrócenie wyniku “zwierzchnikowi”. Dzięki temu główny procesor może skupić się na własnej, zwykle ważniejszej pracy, ale kiedy nadejdzie moment na zaczerpnięcie wyników od koprocesorów, są szanse, że będzie zmuszony na nie poczekać.

Arytmetyczny koprocesor AM9511

Dlatego właśnie niegdyś wydzielono z procesora FPU, czyli jednostki zmiennoprzecinkowe, które z czasem doczekały się swojego “własnego domu” w postaci całkowicie niezależnych procesorów graficznych, będących dla tych centralnych akceleratorami. Właśnie… akceleratorami. 

Czytaj też: Sony E PZ 10-20 mm F4 G – mały, ale wariat (recenzja)

W dużym skrócie i uproszczeniu? Akceleratory, to koprocesory. Spokojnie jednak — nie okłamywaliśmy Was do tej pory. Znak równości między nimi można postawić tylko wtedy, kiedy komuś naprawdę, ale to naprawdę nie chce się drążyć, choć drążyć jest w czym. Akcelerator (więcej o nim tutaj) odróżnia się od koprocesora przede wszystkim znacznie wyższym stopniem niezależności i wyższą odpowiedzialnością za procesy, bo przekierowuje się do nich nie ich części, a całości (patrz — karta graficzna i sygnał wideo). Otrzymują więc tylko “prośbę” od nadrzędnego dla nich procesora, ale działają względem niego asynchronicznie, bo ten trzyma się od ich pracy z daleka, wymagając tylko potwierdzenia wykonania zadania lub końcowego wyniku. 

Ma też najczęściej dostęp do własnego pokładu pamięci wewnętrznej oraz instrukcji, przez co jest względem koprocesorów znacznie wydajniejszy. Rozwiązuje też problem zapewniania wyników “na czas”, bo w koprocesorach może się zdarzyć, że system będzie czekać na wynik jednego z nich, aby popchnąć dane obliczenia dalej. 

Akceleratory są więc znacznie, ale to znacznie lepsze w porównaniu do koprocesorów w swoich z góry obranych, konkretnych obliczeniach. Problem w tym, że są droższe i bardziej skomplikowane, a na dodatek wymagają większych zmian w strukturze oraz działaniu głównego procesora, aby sprawdzać się w praktyce. Nie są więc najlepsze w każdych scenariuszach i warunkach — dlatego koprocesory nadal istnieją i na dodatek mają się nawet dobrze, bo nie każde zastosowanie wymaga bardziej zaawansowanych akceleratorów. 

Czytaj też: Test Huawei nova Y70 – budżetowiec z pojemną baterią za 899 zł

Praktyczny przykład? Rdzenie Tensor obecne w procesorach graficznych NVIDIA i jednostki NVDLA, które mogą zostać uznane za bliźniacze sobie jednostki obliczeniowe, bo służą temu samemu celowi — uzupełniają jednostki cieniowe. Sęk w tym, że rdzenie Tensor są jedynie w nich koprocesorami, współdzieląc z nimi rejestry i jednostkę sterującą, a NVDLA realizują swoje obowiązki całkowicie niezależnie. Stąd obecność obu m.in. w GPU Volta, gdzie NVIDIA zapewne sprawdzała przed erą GeForce RTX, co sprawdza się lepiej.