18-01-2010
Technologie: Architektura Fermi
Technologie: Architektura Fermi
Wejście ukrytego smoka
Układ graficzny NVIDII, GF100, znany też pod nazwą Fermi i oznaczany (w
wersji przeznaczonej dla kart obliczeniowych Tesla) również symbolem GT300, to
chyba jeden z najbardziej oczekiwanych przez użytkowników, a jednocześnie
najbardziej opóźnionych procesorów graficznych w historii tej firmy. Na
szczęście rynkowa premiera tego układu powoli się zbliża. Otóż, przy okazji
odbywających się Las Vegas targów CES 2010 przedstawiciele NVIDII zaprezentowali
po raz pierwszy publicznie pierwsze działające, zbudowane na bazie Fermiego,
akceleratory 3D.
Pierwsze, nieco szerzej przedstawione informacje na temat architektury układów
Fermi pojawiły się w połowie zeszłego roku. Zaprezentowane one zostały przy
okazji konferencji GPU Technology Conference (patrz:
http://www.frazpc.pl/artykuly/760/GT300/i/Fermi/Relacja/z/konferencji/Nvidia/GPU/Technology/Conference).
Później, co jakiś czas, pojawiały się w Sieci kolejne, mniej lub bardziej
wiarygodne dane, dotyczące tej nowej rodziny najbardziej zaawansowanych układów
graficznych NVIDII – niestety internetowe doniesienia dotyczyły w głównej mierze
kolejnych przesunięć premiery tego GPU. Obecnie przedstawiciele firmy twierdzą,
że karty graficzne pojawią się w na początku marca. Oznaczałoby to, że
oficjalnej premiery kości GF100 spodziewać się można na hanowerskich targach
CeBIT, które odbywać się będą w dniach 2–6 marca 2010. Czy tak będzie? – wkrótce
się przekonamy. Wróćmy jednak do tego, co NVIDIA zaprezentowała na targach CES
2010 i na specjalnie zorganizowanych dla prasy przy okazji CES-u warsztatach
GF100 Architecture Deep Dive.
Targowa premiera
Goście odwiedzający targi CES 2010 na targowym stoisku NVIDII mogli zobaczyć,
pierwszy publicznie zaprezentowany szerokiemu gronu komputer wyposażony w karty
graficzne z układami GF100. Piszę w karty, ponieważ był to system wyposażony w
trzy akceleratory 3D pracujące w konfiguracji Tri-SLI.

Fot.01 – Stoisko targowe NVIDII z komputerem wyposażonym w trzy karty
GF100
© Marcin Bieńkowski



Fot.02, 03, 04 - Karty GF100 w prezentacyjnym komputerze. Niestety, nie można
było zrobić zdjęć przy otwartej obudowie.
© Marcin Bieńkowski
Na stoisku targowym zobaczyć można było technologiczne demo Supersonic Sled.
Jest to demo zgodne z bibliotekami graficznymi DirectX 11, w którym wykorzystano
teselację, displacement mapping czyli mapowanie przemieszczeń, geometry shading
oraz efekty cząsteczkowe. Nie zapomniano o efektach fizycznych wykorzystujących
technologię PhysX. Dzięki efektom fizycznym ciało pilota zachowuje się w sposób
naturalnie bezwładny, Budynek stacji i most w sposób realistyczny są burzone, a
pył i dym są w realistyczny sposób symulowane. Jak można się domyślić, płynne
działanie tego demonstracyjnego programu wymaga sporej mocy obliczeniowej (stad
prawdopodobnie konfiguracja Tri-SLI), zwłaszcza przy ustawieniu na scenie sporej
liczby obiektów fizycznych. Most, po którym przejeżdżają odrzutowe sanie może
np. rozpaść się na milion kawałków.


Fot.05, 06 - Demonstracja Supersonic Sled – siatka obiektów
© Marcin Bieńkowski

Fot.07 - Supersonic Sled – teselacja krajobrazu i postaci. Automatycznie
realizowana przez kartę teselacja obiektów jest właściwością wprowadzoną do
bibliotek graficznych DX 11. Jednym z wymaganych elementów w sprzętowym potoku
graficznym DX11 jest teselator
© Marcin Bieńkowski
GF100 Architecture Deep Dive
Jak już wspomniałem, bardziej premiera architektury GF100 miała miejsce przy
okazji odbywającej się równolegle do CES-u technicznej konferencji dla
dziennikarzy GF100 Architecture Deep Dive. Na niej pokazane też zostały same
karty – choć jeszcze nie w wersji finalnej i, jak zastrzegli sobie
przedstawiciele NVIDII, wersja handlowa może się jeszcze dość znacznie różnić –
które zobaczyć można było w poszczególnych maszynach demonstracyjny.


Fot. 08, 09 - Karta z układem NVIDIA GF100 zamontowana w maszynie
demonstracyjnej
© Marcin Bieńkowski

Fot. 10 - Program konferencji
© Marcin Bieńkowski
Pierwsza sesja dotyczyła architektury. Lecz zanim prowadzący przeszli do jej
omawiania zaprezentowana została działająca na karcie GF100 gra Dark Void.
Korzysta ona bardzo intensywnie z efektów fizycznych za pośrednictwem silnika
fizyki PhysX, zwłaszcza z efektów cząsteczkowych.

Fot. 11 - Pokaz gry Dark Void
© Marcin Bieńkowski
Następnie prowadzący przeszli już do omawiania podstaw architektury Fermi.
Zdecydowanych rewelacji nie ujawniono, a wiele z przedstawianych informacji była
już wcześniej znana – choćby z konferencji GPU Technology Conference.

Fot. 12 - Cechy architektury Fermi
© Marcin Bieńkowski
GF100 składa się z 512 procesorów strumieniowych o nazwie CUDA, które
pogrupowane zostały w 16 bloków Streaming Multiprocessor (SM) – każdy z nich
zawiera po 32 jednostki CUDA. Każdy rdzeń CUDA jest tak naprawdę stosunkowo
prostym procesorem RISC wykonującym operacje SIMD. Procesor strumieniowy CUDA
składa się z potokowej 32-bitowej jednostki arytmetyczno-logicznej ALU oraz
64-bitowej jednostki zmiennoprzecinkowej FPU działającej z pojedynczą i podwójną
precyzją. Z kolei 16 bloków SM skupiono zaś w cztery moduły GPC (Graphics
Processing Cluster). Architektura GF100 jest skalowalna z dokładnością do modułu
GPC – moduł ten zawiera wszystkie kluczowe graficzne jednostki niezbędne do
generowania grafiki (werteksowe, geometryczne, rastrujące, teksturujące i
pikselowe jednostki przetwarzające scenę 3D z wyjątkiem renderujących, a więc
bezpośrednio przygotowujących do wyświetlenia obrazu na ekranie monitora modułów
ROP – Raster OPeration). Oznacza to, że do układu Fermi można zarówno dodawać
jednostki GPC, jak i je odejmować. Innymi słowy, obecnie najwydajniejsza karta z
rodziny GF100 będzie miała cztery moduły GPC, zaś najsłabsza jeden GPC.

Fot. 13 - Architektura GF100 Fermi
Źródło: NVIDIA

Fot. 14 - Zdjęcie krzemowej struktury układu GF100
Źródło: NVIDIA
Na jeden klaster GPC przypada jeden skalowalny silnik rastrujący (Raster Engine)
odpowiedzialny za ustawianie trójkątów, rasteryzację i Z-culling czyli
eliminację w głąb sceny 3D niewidocznych dla obserwatora punktów – Z-culling
często nazywany jest też eliminacją wymiaru. Z kolei na każdy pojedynczy blok
procesorów SM przydzielono jeden silnik polimorficzny (Polymorph Engine). Silnik
ten, który, podobnie jak Raster Engine, jest nowością w architekturze NVIDII,
odpowiada m.in. za teselację, transformację płaszczyzny rzutu sceny 3D oraz
ustawianie jej atrybutów np. oświetlenia. Co ciekawe, obliczenia realizowane
przez silnik polimorficzny realizowane są etapowo w taki sposób, że SM przesyła
do jednostki polimorficznej dane, silnik polimorficzny po ich przetworzeniu
odsyła rezultaty, które są wykorzystywane przez shadery, rezultaty z shaderów
trafiają znowu do silnika polimorficznego na następny etap obliczeń itd. Po
skończeniu kalkulacji silnik polimorficzny przesyła wyniki do silnika
rastrującego.
Każdy z 16 silników polimorficznych ma do swojej dyspozycji werteksową jednostkę
odpowiedzialną za ładowanie danych werteksowych z wyprzedzeniem oraz własny
teselator. Takie rozwiązanie w znaczący sposób przyspiesza operacje
geometryczne. Z kolei każdy z czterech równolegle pracujących silników
rastrujących może w jednym cyklu zegara ustawić do czterech trójkątów, co daje
możliwość ustawienia łącznie 16 trójkątów w jednym takcie.

Fot. 15 - Schemat jednostki rastrującej i silnika polimorficznego
Źródło: NVIDIA
Każdy SM ma do swojej dyspozycji cztery jednostki teksturujące Texture Unit (TU)
– na schemacie architektury Fot. 13 są to cztery ciemnoniebieskie prostokąty
znajdujące się nad silnikiem polimorficznym, a na poniższym schemacie oznaczono
je symbolem Tex. Każda jednostka teksturująca jest w stanie w każdym cyklu
nałożyć cztery tekstury. Mogą one być zarówno filtrowane, jak i niefiltrowane.
Dostępne filtrowania to filtrowanie dwuliniowe, trójliniowe i anizotropowe.
Przyspieszenie działania jednostek teksturujących osiągnięto dzięki
przeniesieniu jednostek teksturujących do modułu SM, zwiększeniu wydajności
pamięci cache dla tekstur oraz zwiększeniu szybkości zegara.
W każdym module SM znajduje się 16 jednostek LD/ST (Load/Store). Dzięki temu
możliwa jest bezproblemowa obsługa w jednym cyklu zegarowym adresów źródłowych i
docelowych należących zarówno do przestrzeni adresowej pamięci cache i DRAM dla
maksymalnie 16 wątków przetwarzanych jednocześnie przez każdy SM – warto tu
zauważyć, że każdy SM może fizycznie w danej chwili jednocześnie przetwarzać 32
wątki, po jednym na każdy procesor strumieniowy CUDA, niemniej liczba
symultanicznie wykonywanych wątków dla całego GF100, między którymi przełączają
się procesory CUDA dochodzić może do kilku tysięcy.
Ciekawym elementem w architekturze Fermi są cztery jednostki specjalne SFU (Special
Function Units) przypadające na każdy blok strumieniowy SM – znajdowały się one
również w układach poprzedniej generacji, niemniej w GF100 zostały usprawnione.
Służą one do obliczania wartości takich funkcji jak sinus, cosinus, pierwiastek
kwadratowy oraz odwrotności. Co ważne, każda z tych funkcji realizowana jest dla
jednego wątku w jednym cyklu zegarowym – w wypadku bloku 32 powiązanych,
równoległych wątków (tzw. bloku warp) w ośmiu cyklach – a jednostki SFU wykonują
swoje zadania niezależnie od modułu zlecającego co zwiększa elastyczność
wykonywania obliczeń jako całości. W modułach SM znajdują się też dwie jednostki
rozplanowujące zadania i przydzielające je do odpowiednich procesorów
strumieniowych CUDA.

Fot. 16 - Szczegółowa budowa procesorów strumieniowych SM i procesorów CUDA
Źródło: NVIDIA
Równie interesująco rozwiązano strukturę pamięci. Na pamięć w Fermim składają
się rejestry (umożliwiają one zapamiętanie 32768 32-bitowych wartości –
korzystają z nich wspólnie wszystkie 32 procesory CUDA przypadające na jeden
blok SM), pamięć cache dla instrukcji (16 KB), 64 KB pamięci współdzielonej,
która jest jednocześnie pamięcią podręczną L1, uniform cache (16 KB) oraz pamięć
podręczna dla tekstur (12 KB). Jak widać na schemacie architektury, wymienione
wyżej typy pamięci są pamięciami dostępnymi dla każdego pojedynczego bloku SM.
Bardzo ciekawa jest organizacja pamięci współdzielonej, która jednocześnie jest
pamięcią cache L1. Pamięć ta może być bowiem dzielona w zależności od potrzeb na
48 KB blok Shared memory z 16 KB pamięcią cache lub 16 KB pamięci Shared z 48 KB
cache’m. Przez obecne na rynku aplikacje pamięć Shared może być wykorzystywana
jako software’owo zarządzana pamięć cache.
Jak już wspomniałem w układzie Fermi zastosowano dwupoziomową hierarchiczną
pamięć cache. Wprowadzono też korekcję błędów ECC, które mogą pojawić się w
pamięci zarówno DRAM, jak i cache oraz w rejestrach – innymi słowy algorytmem
ECC chroniona jest cała pamięć. Współdzielona przez wszystkie GPC pamięć
podręczna drugiego poziomu ma 768 KB. Za obsługę pamięci DRAM GDDR5 (maksymalnie
6 GB) odpowiada sześć 64-bitowych kontrolerów pamięci co daje łączną szerokość
szyny danych wynoszącą 384 bity.

Fot. 17 - Hierarchia pamięci cache w GF100
Źródło: NVIDIA
Wróćmy jednak do schematu z Fot. 13 i pozostałych nie omówionych elementów.
Instrukcje od CPU trafiają do układu GPU poprzez Host Interface. Głównym modułem
zarządzającym przydzielaniem danych jest zaś GigaThread Engine. Silnik ten
przydziela bloki wątków poszczególnym modułom SM, a także redystrybuuje zadania
do dalszej obróbki po ich wykonaniu lub przy zwiększającym się obciążeniu
zadaniami w strumieniu graficznym – np. po teselacji lub rasteryzacji.
Ciemnoniebieskie małe bloki na schemacie Fot. 13 zgromadzone dookoła pamięci
cache L2 to jednostki renderujące ROP, których zadaniem jest przekształcające
wygenerowany obraz 3D do postaci, którą jest w stanie wyświetlić na swoim
ekranie monitor. Moduły ROP wykonują także m.in. takie zadania jak antyaliasing,
pixel blending, operacje zapisu do bufora ramki itp. Jednostek tych w układ
GF100 wbudowano 48. Podzielone zostały one na sześć grup – po 8 modułów ROP.
Każda z tych sześciu grup współpracuje bezpośrednio z jednym 64-bitowym
kontrolerem pamięci DRAM. Kontrolery pamięci, pamięć cache L2 oraz grupy
jednostek renderujących ROP są ze sobą bardzo blisko powiązane w krzemowej
strukturze układu GF100.
Na końcu omawiania architektury warto dodać, że Fermi składa się z 3 miliardów
tranzystorów i jest kompatybilny z bibliotekami DirectX 11, OpenGL 3.x i OpenCL
1.x. Ciekawostką jest to, że można go programować również przy wykorzystaniu
standardowego języka programowania C++. Układy GF100 produkowane są procesie
technologicznym 40 nm w tajwańskiej fabryce TSMC. Niestety, uprzedzając pytania,
NVIDIA nie podała innych szczegółów technicznych takich jak np. częstotliwości
taktowania rdzenia graficznego czy pamięci.
Możliwości i wydajność
No dobrze, ale jak nowa architektura sprawdza się w praktyce oraz jakie ma
możliwości. Tym zagadnieniom poświęcono resztę konferencji.

Fot. 18 - GF100 pozwala na geometryczny realizm
© Marcin Bieńkowski



Fot. 19, 20, 21 - Zalety teselacji
© Marcin Bieńkowski




Fot. 22, 23, 24, 25 - Bardziej realistyczna woda uzyskana dzięki teselacji
© Marcin Bieńkowski

Fot. 26 - Emulacja zachowania włosów
© Marcin Bieńkowski

Fot. 27 - Porównanie szybkości teselacji przy wykorzystaniu bibliotek DX11
dla kart ATI i NVIDII
© Marcin Bieńkowski

Fot. 28 - Szybkość pracy shaderów geometrycznych dla kart ATI i NVIDII
© Marcin Bieńkowski

Fot. 29 - Przyspieszenie jednostek ROP
© Marcin Bieńkowski


Fot. 30, 31 - Akceleracja Jitter samplingu
© Marcin Bieńkowski

Fot. 32 - Alpha to Coverage
© Marcin Bieńkowski


Fot. 33, 34 - Rendering z wykorzystaniem ray-tracingu. Na drugim rysunku
białe kropki i niezbyt dokładny obraz wynikają z malej liczby przeprowadzonych
iteracji. Z każdą sekunda jakość obrazu się poprawia, aż osiągnie on założoną
dokładność odwzorowania.
© Marcin Bieńkowski
Wydajność w grach
I teraz przechodzimy do części, która zawsze bardzo interesuje naszych
czytelników - a mianowicie wydajności w grach. W ramach drugiej sesji NVIDIA Developer Program, na żywo mogliśmy zobaczyć m.in. maszynę z nowym i starym GeForcem w grze FarCry 2 (1920x1200 pikseli).

Fot. 35 - Pojedynek GeForców – Po lewej komputer z układem GF100 po prawej z
GTX 285. Konfiguracja obu komputerów, z wyjątkiem karty graficznej jest
identyczna (Windows 7 64-bit, chipset Intel X58, Intel Core i7 960, 6 GB RAM).
© Marcin Bieńkowski


Fot. 36, 37 - Benchmark FarCry 2 w trakcie testów (u góry GF100)...
© Marcin Bieńkowski


Fot. 38, 39 - ... i wyniki końcowe (u góry GF100)
© Marcin Bieńkowski


Fot. 40, 41 - Kolejny test tym razem związany z typowym renderingiem (u góry
GF100)
© Marcin Bieńkowski


Fot. 42, 43 - Teraz przyszła kolej na ray-tracing i renderowanie Bugatti
Veyrona (u góry GF100)
© Marcin Bieńkowski
Niemal na samym końcu zaprezentowano dziennikarzom, w ramach ostatniej sesji NVIDIA Developer Tools, możliwości wykorzystania technologii PhysX w programach graficznych. Zobaczyliśmy m.in. zaimplementowanie PhysX-a do realistycznego odwzorowania zachowania się ubrań w programie 3ds max,,
a następnie metody sprawdzania poprawności generowanej grafiki przy
wykorzystaniu technologii wirtualizacji przy wykorzystaniu oprogramowania Intela
VTd. Maszyną śledząca był system operacyjny pełniący funkcję hosta, a
oprogramowanie graficzne wykonywane było na systemie guest.

Fot. 44 - Symulacja zachowania się ubrań w 3ds max
© Marcin Bieńkowski

Fot. 45 - Wirtualne techniki śledzenia poprawności generowania obrazów
© Marcin Bieńkowski
Na końcu pokazano nam demo Supersonic Sled, historię jego przygotowania,
możliwości techniczne oraz różnego typu funkcje. Cały pokaz odbył się w
technologii 3D i niestety nie mam z niego zdjęć.
I to wszystkie najważniejsze informacje jaki na konferencji GF100 Deep Dive
przekazała dziennikarzom NVIDIA. Teraz pozostaje już nam czekać na premierę
akceleratora 3D GF100 i na możliwość przeprowadzenia w naszej redakcji własnych
testów wydajności na pierwszych próbnych kartach graficznych z układem Fermi –
mamy nadzieję, że już niedługo karty te pojawią się na rynku.
Autor: Marcin Bieńkowski
Komentarze (29) |