Tesla Architektura Fermi
Tesla Tesla jest to General Purpose GPU (GPGPU), GPU ogólnego przeznaczenia Obliczenia dotychczas wykonywane na CPU przenoszone są na GPU Możliwości jakie daje GPU dla grafiki komputerowej: http://www.refractivesoftware.com/videos.html Polecam drugie wideo
Tesla cechy: Procesory równoległe Skalowalne Oparte o architekturę CUDA Pamięć ECC Do 6 GB pamięci GDDR5 na każdy układ GPU Wydajność obliczeń zmiennoprzecinkowych podwójnej precyzji: 515 Gflops
Tesla cechy c.d. Maksymalny pobór mocy: 225 W zestawy narzędzi dla CUDA: C/C++/Fortran OpenCL i DirectCompute NVIDIA Parallel Nsight dla Visual Studio
Tesla dostępna jako: Pojedyncze urządzenia: karta wpinana w port PCI-Express Wolnostojące zestawy kilku kart; wersja Desktop Zestawy kilku urządzeń w formie modułów 1U do montowania w szafach montażowych. Wersja Server
Architektura Fermi Architektura Tesla o nazwie kodowej Fermi jest nową generacją rewolucyjnej architektury zaprezentowanej w Karcie graficznej GeForce 8800, która stworzyła podstawy dla CUDA.
Architektura CUDA wsparcie GPU dla języka programowania C/C++, dzięki czemu programiści nie muszą uczyć się nowych języków uniwersalne potoki przetwarzające wierzchołki, geometrię, piksele oraz programy obliczeniowe - wcześniej istniały tylko potoki dedykowane do przetwarzania wierzchołków lub pikseli
Architektura CUDA Tryb wykonawczy SIMT: Single-Instruction Multiple-Thread; wiele niezależnych wątków wykonuje się równocześnie wykorzystując jedną instrukcję Wprowadzenie współdzielonej pamięci i synchronizacji barierowej dla komunikacji między-wątkowej
Fermi W czerwcu 2008. roku pojawiła się druga generacja tej zunifikowanej architektury. Wraz z nią zaprezentowano układ Tesla. W tej generacji zwiększono ilość procesorów z 128 do 240, podwojono rozmiary rejestrów procesorów. Dodano wsparcie dla liczb zmiennoprzecinkowych podwójnej precyzji.
Fermi NVidia - producent Tesla nazywa technologię Fermi największym skokiem od czasów wprowadzenia technologii CUDA
Termin - Kernel Kernele mogą być pojmowane jako ciało pętli. Na przykład wykonując sekwencyjne obliczenia na CPU, kod może wyglądać następująco: void transform_10k_by_10k_grid(float in[10000][10000], float out[10000][10000]) { for(int x = 0; x < 10000; x++) { for(int y = 0; y < 10000; y++) { // The next line is executed 100 million times out[x][y] = do_some_hard_work( in[x][y] ); } } } Dla GPU kernelem będzie ciało pętli oraz zestaw danych
Architektura Fermi 3 miliardy tranzystorów 512 procesorów CUDA Rdzeń CUDA wykonuje jedną operację na liczbach całkowitych lub zmiennoprzecinkowych w cyklu zegara 512 procesorów CUDA zorganizowane w 16 Streaming Multiprocessor - 32 rdzenie CUDA na SM
Architektura Fermi GPU posiada 6 x 64 bitowe partycje pamięci obsługuje do 6GB GDDR5 interfejs PCI-Express GigaThread globalny zarządca procesów (scheduler) dystrybuuje bloki wątków do zarządcy procesów Streaming Multiprocessor
Architektura Fermi
Termin: Thread block (Blok wątków) Zbiór równocześnie wykonujących się wątków, które mogą ze sobą kooperować dzięki barierze synchronizacyjnej i pamięci współdzielonej. Blok wątków posiada ID bloku wewnątrz sieci.
Termin: Grid (sieć) Sieć jest tablicą bloków wątków, które korzystają z tego samego kernela, czytają dane z pamięci globalnej, zapisują wyniki do pamięci globalnej i synchronizują się z zależnymi kernela
Pamięć prywatna W technologii CUDA każdy wątek ma prywatną przestrzeń pamięciową przeznaczoną na rejestry, wywołania funkcji, oraz automatyczne zmienne tablicowe języka C.
Pamięć współdzielona Każdy blok wątków ma swoją pamięć współdzieloną, służącą do komunikacji między wątkami, wymianę danych oraz wymianę wyników w algorytmach równoległych
Pamięć globalna Sieci bloków współdzielą wyniki w pamięci globalnej po globalnej synchronizacji.
Hierarchia
Wykonanie sprzętowe Hierarchia wątków jest dopasowywana do hierarchii procesorów na GPU. GPU wykonuje jedną lub więcej sieć kerneli. Streaming Multiprocessor (SM) wykonuje jeden blok wątków lub więcej. Procesory CUDA oraz inne jednostki obliczeniowe wykonują wątki. SM wykonują wątki w grupach liczących 32 wątki, które nazwane zostały "warp"
Procesor CUDA posiada Arithmetic Logic Unit (ALU) oraz Floating Point Unit (FPU) FPU obsługuje Fused Multiply Add (FMA): algorytm wykonujący z większą precyzją mnożenie i dodawanie macierzy, niż standardowe sekwencyjne mnożenie i dodawanie tych argumentów
Streaming Multiprocessor 32 procesory CUDA 16 jednostek zapis/odczyt 4 specjalne jednostki funkcyjne: Special Function Units (SFU) wykonują takie funkcje jak sinus, cosinus, obliczanie liczby odwrotnej, pierwiastek kwadratowy jedna operacja na wątek na cykl zegara
Streaming Multiprocessor
Dual Warp Scheduler Warp - grupa 32 równoległych wątków Na każdy Streaming Multiprocessor przypada 2 warp schedulers oraz 2 dispatch units (planista niskopoziomowy, przydziela czas procesora), dzięki czemu dwa warpy mogą być wykonywane równocześnie
Zunifikowana przestrzeń adresowa w architekturze Fermi występują trzy rodzaje pamięci: lokalna pamięć wątku, pamięć współdzielona dla sieci wątków, pamięć globalna przestrzenie te zostały zunifikowane, jest to jedna ciągła przestrzeń adresowa
Zunifikowana przestrzeń adresowa implementacja zunifikowanej przestrzeni adresowej umożliwiło zastosowanie języków C/C++ możliwe jest przekazywanie obiektów z każdej przestrzeni adresowej, ponieważ sprzętowa jednostka dokona mapowania adresu na odpowiednią przestrzeń pamięci
Zunifikowana przestrzeń adresowa
Improved Conditional Performance through Predication Mechanizm wykonujący krótkie segmenty kodu instrukcji warunkowych bez znanego wyniku instrukcji warunkowej
NVIDIA Parallel DataCache 64kB pamięć L1 na Streaming Multiprocessor Jedna pamięć L2-768kB - służąca do wszystkich operacji (load, store, texture) Architektura Fermi umożliwia konfigurowanie pamięci L1 jako cache lub pamięć współdzielona
NVIDIA Parallel DataCache Np. 48kb na cache L1 i pozostałe 16 na pamięć współdzieloną Można dostosować rozmiary pamięci do wykonywanych zadań, dzięki czemu uzyskiwane jest znaczne przyspieszenie obliczeń. Na przykład symulacja zjawisk elektrodynamicznych często korzysta z pamięci wpsółdzielonej
Hierarchia pamięci
Concurrent Kernel Execution możliwe jest wykonywanie różnych kerneli jednej aplikacji w jednym czasie mechanizm ten umożliwia efektywniejsze wykorzystanie czasu procesorów dla aplikacji wykonujących wiele małych kerneli Przykład: symulacja fizyczna obliczająca symulację płynów oraz ciała stałego
Concurrent Kernel Execution