Szybki postęp w technologii VLSI w ciągu ostatnich kilku dekad umożliwił produkcję miliardów tranzystorów na pojedynczym chipie. Ten postęp technologiczny doprowadził do zaprojektowania i rozwoju znacznie szybszego i energooszczędnego sprzętu. Szybko rosnące częstotliwości taktowania zegara i większa przepustowość pamięci zaowocowały poprawą wydajności. Natomiast poprawa wydajności jednordzeniowych procesorów ogólnego przeznaczenia zmniejszyła się z powodu zmniejszonego tempa wzrostu częstotliwości pracy. Dwie główne przyczyny takiego stanu rzeczy to rosnąca różnica pomiędzy prędkością procesora i pamięci oraz ograniczenia w zasilaniu. Aby rozwiązać te problemy, przemysł mikroprocesorowy przeniósł się na procesory wielordzeniowe. Oprócz procesorów wielordzeniowych pojawiły się też inne realne alternatywy, pozwalające pokonać takie wąskie gardła, w tym projektowane na zamówienie układy scalone i reprogramowalne układy FPGA, a także procesory graficzne. Co więc wolisz dla swoich wymagań obliczeniowych – GPU czy FPGA?

Co to jest GPU?

Procesor graficzny (GPU), bardziej znany jako karta graficzna lub karta wideo, to procesor graficzny służący do przetwarzania informacji graficznych w celu wyświetlenia ich na ekranie. Procesor graficzny to wyspecjalizowany procesor, który początkowo został zaprojektowany w celu zaspokojenia potrzeby przyspieszenia renderowania grafiki, głównie w celu zwiększenia wydajności graficznej gier na komputerze. W rzeczywistości większość konsumenckich procesorów graficznych jest dedykowana osiągnięciu najwyższej wydajności graficznej i wizualnej, aby umożliwić rozgrywkę zbliżoną do rzeczywistości. Jednak dzisiejsze układy GPU to coś więcej niż komputery osobiste, w których pojawiły się po raz pierwszy.





Przed pojawieniem się procesorów graficznych, obliczenia ogólnego przeznaczenia, jakie znamy, były możliwe tylko dzięki procesorom centralnym, które były pierwszymi głównymi jednostkami obliczeniowymi produkowanymi zarówno do zastosowań konsumenckich, jak i do zaawansowanych obliczeń. W ciągu ostatnich kilku dekad obliczenia na GPU przeszły dramatyczną ewolucję i znalazły szerokie zastosowanie w badaniach nad uczeniem maszynowym, sztuczną inteligencją i głębokim uczeniem. Układy GPU podniosły się o poziom wraz z wprowadzeniem API dla GPU, takich jak Compute Unified Device Architecture (CUDA), które utorowały drogę do rozwoju bibliotek dla głębokich sieci neuronowych.

Czym jest FPGA?

Field Programmable Gate Array (FPGA) to zupełnie inna bestia, która wyniosła wydajność obliczeń na GPU na zupełnie nowy poziom, oferując doskonałą wydajność w aplikacjach wykorzystujących głębokie sieci neuronowe (DNN), jednocześnie demonstrując zwiększone zużycie energii. Układy FPGA były początkowo wykorzystywane do łączenia ze sobą komponentów elektronicznych, takich jak kontrolery magistrali lub procesory, ale z czasem krajobraz ich zastosowań uległ dramatycznej transformacji. FPGA to urządzenia półprzewodnikowe, które można elektronicznie zaprogramować, aby stały się dowolnym rodzajem cyfrowego obwodu lub systemu. FPGA oferują lepszą elastyczność i możliwość szybkiego prototypowania w porównaniu z projektami niestandardowymi. Altera Corporation z siedzibą w San Jose w Kalifornii jest jednym z największych producentów układów FPGA, a w 2015 roku firma została przejęta przez Intela. Są one bardzo różne od sprzętu opartego na instrukcjach, takiego jak procesory graficzne, a najlepszą częścią jest to, że można je przekonfigurować, aby dopasować je do wymagań bardziej intensywnych obciążeń związanych z danymi, takich jak aplikacje uczenia maszynowego.

Różnica między GPU a FPGA

Technologia



– GPU jest wyspecjalizowanym układem elektronicznym zaprojektowanym początkowo w celu zaspokojenia potrzeby akceleracji renderingu grafiki w obliczeniach naukowych i inżynieryjnych ogólnego przeznaczenia. Procesory graficzne zostały zaprojektowane do pracy w trybie SIMD (single instruction multiple data). Procesor graficzny odciąża część kodu wymagającego dużej mocy obliczeniowej, przyspieszając działanie aplikacji działających na CPU. Z drugiej strony, układy FPGA to urządzenia półprzewodnikowe, które można elektronicznie zaprogramować tak, by stały się dowolnym układem cyfrowym lub systemem, jaki tylko chcesz.

Latencja

– FPGA oferują niższą latencję niż procesory graficzne, co oznacza, że są zoptymalizowane do przetwarzania aplikacji zaraz po podaniu danych wejściowych z minimalnym opóźnieniem. Architektura FPGA pozwala na osiągnięcie wysokiej mocy obliczeniowej bez skomplikowanego procesu projektowania, co czyni je idealnymi dla aplikacji o najniższych opóźnieniach. Osiągają one znacznie większe możliwości obliczeniowe w krótszym czasie w porównaniu z układami GPU, które relatywnie muszą ewoluować, aby zachować aktualność.



Wydajność energetyczna

– Wydajność energetyczna jest od lat ważną metryką wydajności, a układy FPGA wyróżniają się także w tej dziedzinie, ponieważ są znane ze swojej efektywności energetycznej. Mogą obsługiwać bardzo wysokie wskaźniki przepustowości danych w odniesieniu do przetwarzania równoległego w obwodach zaimplementowanych w rekonfigurowalnej tkaninie. Najlepszą rzeczą w FPGA jest możliwość rekonfiguracji, która oferuje elastyczność dającą im przewagę nad ich odpowiednikami z GPU w niektórych domenach aplikacji. Wiele z powszechnie stosowanych operacji na danych może być efektywnie zaimplementowanych na FPGA dzięki programowalności sprzętu. Układy GPU są również energooszczędne, ale tylko w przypadku strumieni SIMD.

Operacje zmiennoprzecinkowe

– Wiele aplikacji obliczeniowych o wysokiej wydajności, takich jak głębokie uczenie, wymaga silnego uzależnienia od operacji zmiennoprzecinkowych. Chociaż elastyczna architektura układów FPGA wykazuje znakomity potencjał w sieciach rzadkich, które są jednym z najgorętszych tematów w aplikacjach ML, cierpią one z powodu konieczności osiągnięcia większych prędkości w aplikacjach, które szeroko wykorzystują zmiennoprzecinkowe operacje arytmetyczne. Operacje zmiennoprzecinkowe to coś, w czym procesory graficzne są naprawdę dobre. Najszybszy procesor graficzny ma wydajność w operacjach zmiennoprzecinkowych na poziomie maksymalnie 15 TFLOPS.



Podsumowanie

W skrócie, procesory graficzne zapewniają elastyczne środowisko programistyczne i szybsze czasy realizacji, ale układy FPGA oferują znacznie lepszą elastyczność i możliwość szybkiego prototypowania. Podczas gdy procesory graficzne są najlepsze w przypadku aplikacji o wysokiej wydajności obliczeniowej, które zależą od zmiennoprzecinkowych operacji arytmetycznych, układy FPGA są świetne w przypadku aplikacji wymagających dużej mocy obliczeniowej, a ich opóźnienia są znacznie bardziej deterministyczne, ponieważ są to wyspecjalizowane procesory, które mogą być elektronicznie rekonfigurowane, aby stać się dowolnym rodzajem układu lub systemu cyfrowego. W niektórych obszarach zastosowań układy FPGA są bardzo trudne do pokonania, np. w zastosowaniach wojskowych, takich jak systemy naprowadzania rakiet, które wymagają niskich opóźnień.