Jak projektować układy GPU
Chapter 1 Introduction to Gpu Chip Design

Rozdział 1: Wprowadzenie do projektowania układów GPU

Czym są GPU i czym różnią się od CPU

Jednostki przetwarzania grafiki (GPU) to wyspecjalizowane układy elektroniczne zaprojektowane do szybkiego manipulowania i zmieniania pamięci w celu przyspieszenia tworzenia obrazów w buforze ramki przeznaczonym do wyświetlania na urządzeniu wyświetlającym. GPU zostały pierwotnie opracowane w celu odciążenia procesora CPU od renderowania grafiki 2D i 3D, umożliwiając znacznie wyższą wydajność w aplikacjach wymagających dużej mocy graficznej, takich jak gry wideo.

Podczas gdy procesory CPU są zaprojektowane do ogólnego przetwarzania i posiadają złożoną logikę sterującą, aby obsługiwać różnorodne programy, GPU mają wysoce równoległą architekturę składającą się z tysięcy mniejszych, bardziej wydajnych rdzeni zaprojektowanych do obsługi wielu zadań jednocześnie. Czyni je to idealnymi do renderowania grafiki, gdzie duże bloki danych mogą być przetwarzane równolegle.

Kluczowe różnice architektoniczne między procesorami CPU i GPU obejmują:

  • Liczba rdzeni: GPU mają dużą liczbę małych rdzeni (od setek do tysięcy), podczas gdy CPU mają kilka dużych, potężnych rdzeni (2-64).
  • Hierarchia pamięci podręcznej: CPU mają duże pamięci podręczne, aby zmniejszyć opóźnienia, podczas gdy GPU mają mniejsze pamięci podręczne i bardziej polegają na wysokiej przepustowości, aby zrekompensować opóźnienia.
  • Logika sterująca: CPU mają złożone możliwości przewidywania rozgałęzień i wykonywania poza kolejnością. GPU mają znacznie prostszą logikę sterującą.
  • Zestaw instrukcji: CPU obsługują szeroki zakres instrukcji do ogólnego przetwarzania. Zestawy instrukcji GPU są bardziej ograniczone i zoptymalizowane pod kątem grafiki.
  • Przepustowość pamięci: GPU mają bardzo wysoką przepustowość pamięci (do 1 TB/s), aby zasilać swoje liczne rdzenie. CPU mają niższą przepustowość (50-100 GB/s).
  • Wydajność operacji zmiennoprzecinkowych: GPU są w stanie osiągnąć znacznie wyższą wydajność operacji zmiennoprzecinkowych, co czyni je odpowiednimi do obciążeń HPC i AI.

Podsumowując, wysoce równoległa architektura GPU pozwala im wyróżniać się w zadaniach, które wymagają przetwarzania dużych bloków danych w sposób równoległy, podczas gdy bardziej wyrafinowana logika sterująca CPU sprawia, że są one lepiej dostosowane do ogólnego przetwarzania.Oto polski przekład tego pliku Markdown. Dla kodu nie tłumaczono kodu, tylko komentarze:

Kluczowe zastosowania i znaczenie kart graficznych

W ciągu ostatnich dwóch dekad karty graficzne stały się jednym z najważniejszych rodzajów technologii obliczeniowej, ponieważ ich wysoce równoległa struktura sprawia, że są one bardziej wydajne niż uniwersalne procesory CPU w przypadku algorytmów przetwarzających duże bloki danych równolegle. Niektóre z kluczowych obszarów zastosowań, które napędzały szybki rozwój technologii kart graficznych, to:

Grafika komputerowa i gry

Najbardziej powszechnym zastosowaniem kart graficznych jest przyspieszanie tworzenia obrazów w buforze ramki przeznaczonym do wyświetlania na urządzeniu. Karty graficzne doskonale radzą sobie z manipulowaniem grafiką komputerową i przetwarzaniem obrazów, a ich wysoce równoległa struktura sprawia, że są one bardziej efektywne niż uniwersalne procesory CPU w przypadku algorytmów, w których przetwarzane są duże bloki danych w sposób równoległy. Są one standardowym komponentem w nowoczesnych konsolach do gier i komputerach do gier.

Wysokowydajne obliczenia (HPC)

Możliwości przetwarzania równoległego kart graficznych sprawiają, że są one dobrze dostosowane do zastosowań w naukowych obliczeniach, które obejmują przetwarzanie bardzo dużych zbiorów danych za pomocą algorytmów równoległych. Karty graficzne zostały szeroko przyjęte w superkomputerach i klastrach HPC, gdzie współpracują z procesorami CPU, aby przyspieszyć wysoce równoległe obciążenia, takie jak prognozowanie pogody, symulacje dynamiki molekularnej i analiza sejsmiczna.

Sztuczna inteligencja i uczenie maszynowe

Moc przetwarzania równoległego kart graficznych odegrała kluczową rolę w szybkim rozwoju głębokiego uczenia i sztucznej inteligencji w ostatnich latach. Szkolenie złożonych głębokich sieci neuronowych wymaga ogromnej ilości mocy obliczeniowej, a karty graficzne stały się platformą z wyboru do szkolenia dużych modeli AI ze względu na ich zdolność do wydajnego wykonywania operacji mnożenia macierzy, które są kluczowe dla algorytmów głębokiego uczenia. Wszystkie główne chmurowe platformy AI i superkomputery używane do AIBadania w dziedzinie wyszukiwania internetowego w dużej mierze polegają na wykorzystaniu kart graficznych (GPU).

Wydobywanie kryptowalut

Karty graficzne były również szeroko wykorzystywane do wydobywania kryptowalut, ponieważ ich możliwości przetwarzania równoległego sprawiają, że są one dobrze dostosowane do kryptograficznych algorytmów hashujących używanych w kryptowalutach opartych na dowodzie pracy, takich jak Bitcoin. Wysokiej klasy karty graficzne AMD i Nvidia były w bardzo dużym popycie podczas boomu kryptowalutowego w 2017 roku.

Przyspieszone obliczenia i AI na krawędzi

Wraz ze spowolnieniem prawa Moore'a, nastąpił znaczący trend w kierunku przyspieszonego, heterogenicznego przetwarzania, przy czym wyspecjalizowane układy przyspieszające, takie jak karty graficzne, współpracują z procesorami centralnymi (CPU), aby przyspieszyć wymagające obciążenia. Karty graficzne są również wykorzystywane do przynoszenia możliwości AI do urządzeń brzegowych, takich jak smartfony, inteligentne głośniki i systemy samochodowe. Układy SoC w urządzeniach mobilnych mają teraz zintegrowane karty graficzne, które są używane zarówno do grafiki, jak i przyspieszania obciążeń AI.

Masowa równoległość i wysoka przepustowość pamięci kart graficznych sprawiły, że stały się one jedną z najważniejszych platform obliczeniowych dzisiaj, z zastosowaniami wykraczającymi daleko poza grafikę komputerową. Wraz z osiągnięciem granic procesorów ogólnego przeznaczenia, wyspecjalizowane układy, takie jak karty graficzne, układy FPGA i akceleratory AI, stają się coraz ważniejszymi silnikami obliczeniowymi przyszłości.

Krajobraz akceleratorów obliczeniowych

Ponieważ w ostatnich latach poprawy wydajności procesorów centralnych (CPU) ogólnego przeznaczenia uległy spowolnieniu, obserwuje się rosnący trend w kierunku wyspecjalizowanych układów przyspieszających, które mogą przyspieszyć określone obciążenia. Karty graficzne są jednym z najbardziej prominentnych przykładów akceleratorów, ale istnieje kilka innych ważnych kategorii:

Programowalne Układy Bramkowe (FPGA)

FPGA to urządzenia półprzewodnikowe oparte na matrycy konfigurowalneOto tłumaczenie na język polski:

Układy Scalone Dedykowane do Zastosowań (ASIC)

ASIC-i to zintegrowane układy scalone dostosowane do konkretnego zastosowania, a nie przeznaczone do użytku ogólnego jak procesory CPU. Nowoczesne ASIC-i często zawierają całe 32-bitowe lub 64-bitowe procesory, bloki pamięci, w tym ROM, RAM, EEPROM, pamięć flash i inne duże bloki konstrukcyjne. ASIC-i są powszechnie używane w wydobywaniu bitcoinów, akceleratorach AI, komunikacji bezprzewodowej 5G i urządzeniach IoT.

Akceleratory AI

Akceleratory AI to specjalizowane układy zaprojektowane w celu przyspieszenia obciążeń związanych z AI, szczególnie szkoleniem i wnioskowaniem sieci neuronowych. Przykłady obejmują Tensor Processing Units (TPU) firmy Google, Nervana Neural Network Processors (NNP) firmy Intel oraz szereg startupów budujących układy AI od podstaw. Układy te wykorzystują zmniejszoną precyzję matematyczną, wydajne układy mnożenia macierzy oraz ścisłą integrację obliczeń i pamięci, aby osiągnąć znacznie wyższą wydajność na wat niż procesory GPU lub CPU w obciążeniach AI.

Jednostki Przetwarzania Wizyjnego (VPU)

VPU to specjalizowane układy zaprojektowane do przyspieszania obciążeń związanych z komputerowym przetwarzaniem obrazu i wizji. Często zawierają dedykowany sprzęt do zadań takich jak przetwarzanie sygnału obrazu, widzenie stereoskopowe i wykrywanie obiektów oparte na sieciach CNN. VPU są powszechnie używane w aplikacjach takich jak systemy ADAS w samochodach, drony, zestawy AR/VR, inteligentne kamery i inne urządzenia brzegowe wymagające przetwarzania wizyjnego o niskim opóźnieniu.

Układy Neuromorficzne i Kwantowe

Patrząc w przyszłość, układy neuromorficzne próbują naśladować architekturę mózgu, aby dostarczyć szybkie i energooszczędne działanie sieci neuronowych, podczas gdy układy kwantowe wykorzystują efekty mechaniki kwantowej do rozwiązywania niektórych problemów szybciej niż klasyczne komputery. Są to wciąż obszary badań, ale mogą stać się ważnymi akceleratorami w przyszłości.

Ogólny trend w obliczeniach zmierza w kierunku architektur dedykowanych do konkretnych domen i różnorodności akceleratorów integrowanych obok ogólnego przeznaczenia procesorów CPU w celu przyspieszenia określonych obciążeń.Oto tłumaczenie pliku Markdown na język polski. Komentarze w kodzie zostały przetłumaczone, ale sam kod pozostał niezmieniony.

Ważne obciążenia robocze. Akceleratory

Karty graficzne (GPU) zapoczątkowały ten model obliczeniowy z akceleracją i pozostają jednym z najważniejszych typów akceleratorów, ale szeroka gama innych akceleratorów staje się również coraz bardziej kluczowa w wielu domenach aplikacji.

Podstawy sprzętu GPU

Nowoczesne GPU składa się z kilku kluczowych komponentów sprzętowych:

Wieloprocesorowe Strumienie (SM)

SM jest podstawowym blokiem konstrukcyjnym architektury GPU NVIDIA. Każdy SM zawiera zestaw rdzeni CUDA (zazwyczaj od 64 do 128), które dzielą logikę sterującą i pamięć podręczną instrukcji. Każdy rdzeń CUDA ma w pełni zrurowaną jednostkę arytmetyczno-logiczną (ALU) całkowitoliczbową i jednostkę zmiennoprzecinkową (FPU). Zazwyczaj układ GPU ma od 16 do 128 SM, co daje tysiące rdzeni CUDA.

Pamięć podręczna tekstur/L1

Każdy SM ma dedykowaną pamięć podręczną tekstur i pamięć podręczną L1, aby poprawić wydajność i zmniejszyć ruch w pamięci. Pamięć podręczna tekstur jest zaprojektowana w celu optymalizacji lokalności przestrzennej i jest szczególnie skuteczna w przypadku obciążeń graficznych. Pamięć podręczna L1 obsługuje operacje pamięci (ładowanie, przechowywanie) i zapewnia szybki dostęp do danych z niską latencją.

Pamięć współdzielona

Pamięć współdzielona to szybka, wbudowana pamięć, która jest współdzielona między rdzeniami CUDA w ramach SM. Może być używana jako programowalna pamięć podręczna, umożliwiając wyższą przepustowość i niższą latencję dostępu do często używanych danych. Pamięć współdzielona jest podzielona na równe moduły pamięci (banki), które mogą być jednocześnie dostępne dla rdzeni.

Rejestr

Każdy SM ma duży rejestr, który zapewnia niskolatencyjne przechowywanie operandów. Rejestr jest podzielony między rezydentne wątki na SM, zapewniając każdemu wątkowi własny dedykowany zestaw rejestrów. Dostęp do rejestru zazwyczaj nie zajmuje dodatkowych cykli zegara na instrukcję, ale opóźnienia mogą wystąpić z powodu zależności odczytu po zapisie i konfliktów banków pamięci rejestrów.

Planista Warp

Planista warp odpowiada za zarządzanie i planowanie warpów na SM. Warp to grupa 32 wątków, które są wykonywane współbieżnie na rdzeniach CUDA.Poniżej znajduje się tłumaczenie na język polski pliku Markdown. Komentarze w kodzie zostały przetłumaczone, ale sam kod pozostał niezmieniony.

Harmonogram warp wybiera warpy gotowe do wykonania i wysyła je do rdzeni, umożliwiając wysokie wykorzystanie i ukrywanie opóźnień.

Sieć połączeń

Sieć połączeń łączy SM z współdzieloną pamięcią podręczną L2 i kontrolerami pamięci GPU. Zwykle jest ona zaimplementowana jako przełącznik krzyżowy, który umożliwia wielu SM dostęp do pamięci podręcznej L2 i pamięci DRAM jednocześnie.

Kontrolery pamięci

Kontrolery pamięci obsługują wszystkie żądania odczytu i zapisu do pamięci DRAM GPU. Są one odpowiedzialne za optymalizację wzorców dostępu do pamięci DRAM w celu maksymalizacji wykorzystania przepustowości. Nowoczesne GPU mają bardzo szerokie interfejsy pamięci DRAM (od 256-bitowych do 4096-bitowych) i obsługują technologie pamięci o wysokiej przepustowości, takie jak GDDR6 i HBM2.

Rdzenie RT i Tensor

Nowoczesne karty graficzne NVIDIA zawierają również wyspecjalizowane jednostki sprzętowe do przyspieszania śledzenia promieni (rdzenie RT) i sztucznej inteligencji/uczenia głębokiego (rdzenie Tensor). Rdzenie RT przyspieszają przeszukiwanie hierarchii ograniczających objętości (BVH) i testy przecięcia promienia z trójkątem, podczas gdy rdzenie Tensor zapewniają wysoką przepustowość operacji mnożenia macierzy i konwolucji.

Te komponenty sprzętowe współpracują ze sobą, aby umożliwić GPU osiągnięcie bardzo wysokiej przepustowości obliczeniowej i przepustowości pamięci, czyniąc je dobrze nadającymi się do obciążeń równoległych w grafice, HPC i AI. Wysoce równoległa architektura i wyspecjalizowane jednostki sprzętowe nowoczesnych GPU pozwalają im dostarczać wydajność o kilka rzędów wielkości wyższą niż procesory CPU ogólnego przeznaczenia w niektórych obciążeniach.

Krótka historia GPU

Historia GPU sięga wczesnych lat akceleracji grafiki 3D w latach 90.:

  • Lata 90.: Wczesne akceleratory 3D, takie jak 3dfx Voodoo i NVIDIA RIVA TNT, zaczęły pojawiać się w połowie lat 90., aby odciążyć procesor CPU od renderowania grafiki 3D. Były to urządzenia o stałej funkcji, zoptymalizowane pod kątem określonego zestawu interfejsów API grafiki i pozbawione programowalności.

  • 1999: NVIDIA wprowadziła GeForce 256, pierwszy GPU, który zaimplementował sprzętową transformację i oświetlenie (T&L) oprócz standardowego renderowania 3D.Proszę o polskie tłumaczenie tego pliku Markdown. W przypadku kodu, nie tłumacz kodu, tylko komentarze.

Oto plik: peline. Mógł przetwarzać 10 milionów wielokątów na sekundę, co było ważnym kamieniem milowym w wydajności grafiki konsumenckiej.

  • 2001: NVIDIA uruchomiła GeForce 3, który wprowadził programowalne cieniowanie wierzchołków i pikseli, otwierając drzwi dla bardziej realistycznych i dynamicznych efektów wizualnych. Oznaczało to początek przejścia od stałofunkcyjnych do programowalnych potoków graficznych.

  • 2006: Premiera karty NVIDIA GeForce 8800 GTX była ważnym punktem zwrotnym, ponieważ była to pierwsza karta graficzna, która obsługiwała model programowania CUDA, umożliwiając programistom korzystanie z karty graficznej do obliczeń ogólnego przeznaczenia (GPGPU) poza samą grafiką. Posiadała 128 rdzeni CUDA i mogła osiągnąć ponad 500 GFLOPS wydajności.

  • 2008: Apple, AMD, Intel i NVIDIA utworzyły grupę roboczą OpenCL w celu opracowania otwartego standardu dla programowania równoległego na heterogenicznych systemach. OpenCL zapewniał alternatywę niezależną od dostawcy w stosunku do CUDA, chociaż CUDA pozostawał najbardziej popularną platformą GPGPU.

  • 2010: NVIDIA uruchomiła architekturę Fermi, która posiadała do 512 rdzeni CUDA, zunifikowaną hierarchię pamięci podręcznej L1/L2, obsługę pamięci ECC i ulepszoną wydajność w precyzji podwójnej. To sprawiło, że karty graficzne stały się przydatne w szerszym zakresie zastosowań HPC i obliczeń naukowych.

  • 2016: NVIDIA wprowadziła architekturę Pascal z kartą Tesla P100, która posiadała pamięć HBM2 o wysokiej przepustowości, do 3584 rdzeni CUDA i specjalizowane rdzenie FP16 do uczenia głębokiego. P100 mógł dostarczyć ponad 10 TFLOPS wydajności, ugruntowując karty graficzne jako platformę wyboru do trenowania SI.

  • 2018: NVIDIA uruchomiła architekturę Turing, która wprowadziła rdzenie RT do śledzenia promieni w czasie rzeczywistym i rdzenie Tensor do przyspieszonego wnioskowania SI. Turing był znaczącym kamieniem milowym w architekturze kart graficznych, ponieważ rozszerzył możliwości kart graficznych poza samą rasteryzację i GPGPU, obejmując zaawansowane techniki renderowania i przyspieszenie SI.

Wniosek

W ciągu ostatnich dwóch dekad karty graficzne ewoluowały od stałofunkcyjnych akceleratorów graficznych do wysoce programowalnychTutaj jest tłumaczenie na język polski tego pliku Markdown. Dla kodu, nie tłumaczę kodu, tylko tłumaczę komentarze:

Programowalne, energooszczędne silniki obliczeniowe, które odgrywają kluczową rolę w szerokim zakresie zastosowań, od gier i wizualizacji po wysokowydajne obliczenia i sztuczną inteligencję. Kluczowe innowacje architektoniczne, które umożliwiły tę transformację, obejmują:

  • Wprowadzenie programowalnego cieniowania z obsługą rozgałęzień i pętli
  • Zunifikowane architektury cieniujące, które pozwalają na wykorzystanie tych samych jednostek przetwarzających do różnych zadań cieniowania
  • Dodanie obsługi ogólnych modeli programowania, takich jak CUDA i OpenCL
  • Zwiększenie efektywności energetycznej poprzez intensywne wykorzystanie wielowątkowości w celu ukrycia opóźnień pamięci i utrzymania wysokiego wykorzystania jednostek arytmetycznych
  • Ciągłe ulepszenia przepustowości pamięci i wprowadzenie technologii pamięci o wysokiej przepustowości, takich jak GDDR6 i HBM2
  • Włączenie jednostek o stałej funkcji do śledzenia promieni i przetwarzania tensorów w celu przyspieszenia renderowania i obciążeń AI

Patrząc w przyszłość, jasne jest, że specjalizacja i heterogeniczne obliczenia będą nadal kluczowymi czynnikami napędzającymi poprawę wydajności i efektywności. Karty graficzne są dobrze przygotowane, aby pozostać na czele tych trendów, biorąc pod uwagę ich dziedzictwo energooszczędnego przetwarzania równoległego i ich zdolność do włączania funkcjonalności specyficznej dla danej dziedziny, jednocześnie zachowując programowalność ogólnego przeznaczenia. Techniki takie jak projektowanie oparte na chipletach i zaawansowane technologie pakowania pozwolą kartom graficznym skalować się do jeszcze wyższych poziomów wydajności i integrować coraz więcej funkcjonalności z upływem czasu.

Jednocześnie zastosowanie przyspieszenia GPU nadal rośnie, ponieważ coraz więcej obciążeń w dziedzinie obliczeń naukowych, analizy danych i uczenia maszynowego wykazuje rodzaj drobnoziarnistego równoległości, w której karty graficzne się wyróżniają. Dzięki swojej zdolności do przyspieszania tych i innych nowych zastosowań, karty graficzne są gotowe do odgrywania coraz ważniejszej roli w napędzaniu przyszłych postępów w dziedzinie informatyki. Zrozumienie ich architektury jest kluczowe do pełnego wykorzystania ich potencjału.