Karty graficzne

Architektura GT200 w pigułce

przeczytasz w 4 min.

Układ GT200 pod względem architektury i wykorzystania Stream Procesorów należy do drugiej generacji Unified Shader (zunifikowanych shaderów). W dalszym ciągu karta wspiera jednak komunikację z aplikacjami poprzez standardy API DirectX10 oraz OpenGL 2.1. Wydawało by się, że dzięki temu nie uświadczymy żadnej większej rewolucji, jednak wprowadzone usprawnienia w potokach wykonawczych mają wg producenta znacznie przyspieszyć przetwarzanie kodu zgodnego z Shader Model 4.0, a tym samym na bardziej efektywne wykorzystanie środowiska DirectX10.

nagi GT200, czyli zdjęcia rdzenia pod mikroskopem elektronowym�

Rdzeń GT200 składa się z około 1,4 miliarda tranzystorów, czyli prawie dwukrotnie więcej aniżeli miało to miejsce w układach serii G92, oraz ponad dwukrotnie więcej od G80. Zwiększenie liczby tranzystorów budujących układ nie bierze się z niczego. Ilość miejsca potrzebna do "wciśnięcia" 240-tu SPu,  większej ilości pamięci podręcznej, szerszego kontrolera pamięci (512-bit) oraz większej ilości jednostek ROP i TF musi znaleźć ujście. Warto jednak zauważyć iż sam rdzeń, produkowany przez fabrykę TSMC w wymiarze technologicznym 65nm zajmuje przy tym "zaledwie" 576mm2. Jest zatem większy od poprzedniego "potwora" G80 o tylko i aż 95mm2.

TPC

Zarówno pierwsza generacja zunifikowanej architektury o strukturze Scalable Processor Array (SPA) jak i jej rozszerzenie w GT200, zbudowane zostały w oparciu o klastry (bloki wykonawcze). Dzięki dodatkowym optymalizacjom w GT200, bloki te mogą pracować jako TPC czyli "Texture Processing Clusters" w trybie przetwarzania grafiki (Graphics processing mode) lub TPC "Thread Processing Clusters" w trybie przetwarzania równoległego (Parallel compute mode).

Każdy klaster TPC zawiera pewną liczbę tzw. "streaming multiprocessors" (SM), w których znajduje się po 8 "rdzeni procesorowych" SP (dawniej wg nomenklatury stream procesorów). I tu dochodzimy do sedna.  Podstawową różnicą jaką dzieli obydwie rodziny kart GeForce będzie, nie tyle liczba klastrów TPC ( 10 w stosunku do 8 ), co przede wszystkim liczba bloków multiprocesorowych (SM) przypadających na pojedynczy klaster. W GeForce 8 i 9 mieliśmy 2 takie bloki, w GeForce GTX 260/280 są już po 3. Z prostego rachunku wychodzi nam zatem: 10 TPC * 3 bloki SM * 8 pojedynczych rdzeni SP, co daje całkowitą sumę w ilości 240 jednostek przetwarzających SP.

Ponadto w każdym klastrze TPC znajduje się po 8 jednostek filtrujących tekstury, a więc całościowo równa się to liczbie 80-u TF/TA. Cały klaster do ROPów (render operation processors) "przyłączony" jest przy pomocy pamięci podręcznej drugiego poziomu (Tex L2 cache). Ale tylko w przypadku korzystania z TPC jako "Texture Processing Units", czyli operacji na grafice. Drugi przypadek (wykorzystanie skalowalności architektury) to TPC jako "Thread Processing", czyli przetwarzanie równoległe (wielowątkowość) znane doskonale z procesorów CPU. To także duża zmiana jeżeli chodzi o elastyczność nowego rdzenia.


Parrallel Computing Architecture

Przetwarzanie równoległe, przy wykorzystaniu TPC w roli "Thread Processing Clusters" (klastrów wątków) jest obecnie o wiele łatwiejsze i efektywniejsze niż miało to miejsce do tej pory. W każdym z bloków multiprocesorowych (SM) do komunikacji i wymiany danych pomiędzy pojedynczymi "rdzeniami procesorowymi" wykorzystywana jest szybka pamięć dzielona tzw. "Local Memory", bez niepotrzebnego angażowania do zapisu, lub odczytu podsystemu pamięci zewnętrznej. Charakter tej otwartej architektury, predyscynuje do wykorzystania możliwości jakie do tej pory zarezerwowane były tylko dla procesorów centralnych. I tu z pomocą przychodzi środowisko NVIDIA CUDA (Compute Unified Device Architecture), dzięki któremu nieużywane do generowania grafiki rdzenie procesorowe SP, zostaną zaangażowane do pracy przy bardziej pożytecznych np. dla nauki obliczeniach.

Architektura SIMT

Operacje graficzne oraz obliczenia wielowątkowe używają dwóch różnych modeli przetwarzania. Do wykonywania poleceń w strukturze klastra TPC używana jest architektura instrukcji MIMD (multiple instruction, multiple data); do wykonywania poleceń w obrębie samych bloków SM używana jest architektura SIMT (single instruction, multiple thread). W odróżnieniu od architektury SIMD (single instruction, multiple data), skalarny SIMT nie potrzebuje jednak do obliczeń pobierać parametrów szerokości wektora, stąd operacje mogą teraz przebiegać znacznie szybciej (pomijanie tej wartości w przebiegu). Dzięki architekturze SIMT jednostki SP w układzie przetwarzania wątków mogą być przez cały czas w pełni wykorzystywane. Zapewnia to także łatwiejszą programowalność i bardziej efektywne wykorzystanie stream procesorów do wymaganych obliczeń.

Dzięki znacznym usprawnieniom w architekturze bloków SM, 20% wydajniejszym"schedulerze" rozkazów oraz multiwątkowemu zestawowi instrukcji SIMT, układ potrafi w locie przetworzyć ponad 30.000 wątków, co w porównaniu z nieco ponad 12.000 możliwymi do wykonania jednoczesnymi wątkami przez układ G80 (8800GTX) wydaje się ogromnym usprawnieniem.

Larger Register File

Przestrzeń przeznaczona dla przetrzymywania pliku rejestru w bloku SM, została również podwojona względem serii GeForce 8 i 9. W starszej serii układów, zbyt długi program shaderowy powodował konieczność przenoszenia części danych do pamięci (plik wymiany). W GT200 wykorzystanie znacznie dłuższych i bardziej złożonych programów shaderowych jest nie tylko możliwe, ale i zdecydowanie bardziej efektywne.

Double Precision

Jedną z najważniejszych zmian w nowej architekturze układu GT200, jest podwojona, 64-bitowa precyzja obliczeń zmiennoprzecinkowych (double precision). Dzięki takiemu rozwiązaniu na GPU będzie można bez przeszkód dokonywać złożonych obliczeń, które wymagają wysokiej precyzji i dokładności pomiarów, np. aplikacje naukowe, inżynierskie, czy finansowe. Dla przykładu wydajność pojedynczego rdzenia GT200 jest porównywalna, mniej więcej z dwoma czterordzeniowymi procesorami Xeon. 64-bitowa precyzja floating-point GT200 jest także zgodna z normą IEEE 754R.

Usprawnienia dotknęły ponadto nie tylko samych bloków  wykonawczych, ale również wszystkich pozostałych elementów logiki układu:

  • usprawniono Dual Issue w  SFU (Special Funktion Units) - specjalne funkcje matematyczne (zmiennoprzecinkowe) realizowane przez jednostki SM przy pomocy instrukcji MUL, MADD, oraz ADD
  • podniesiono wydajność jednostek TF w zakresie filtrowania tekstur w trybach bilinearnym oraz anizotropowym. Zmierzona poprawa prędkości filtrowania, przypadająca na jeden cykl zegara, względem układu G92 wynosi około 22%.
  • usprawniono pracę jednostek ROP, które zdolne są obecnie do przetwarzania i mieszania 32 pikseli na zegar. W starszej generacji możliwości te ograniczone były do przetworzenia 24 oraz mieszania (blending) 12 pikseli w jednym cyklu. Nowe rozwiązanie posiada zatem wymierny wpływ na wydajność antyaliasingu w połączeniu z oświetleniem HDR.
  • usprawniono prędkość przetwarzania geometry shadera oraz komunikacji z buforem Stream Out
  • podniesiono wydajność w  zakresie kompresji bufora głębokości, w tym także funkcji Z-cull
  • zastosowano bardziej efektywny sposób komunikacji z systemem (usprawnienie komunikacji na drodze hardware - sterownik)