
GeForce GTX 480 (Fermi) – nowa generacja kart graficznych NVIDI-i (w końcu!)
Przyszłość według NVIDI-i
Trochę architektury – multiprocesor i okolice
W końcu możemy zejść trochę niżej, czyli do budowy pojedynczego multiprocesora i tego, co zostało tutaj zmienione.
Gdyby GPU było CPU, to multiprocesor byłby jednym z jego rdzeni (autor uchyla się przed cegłą rzuconą przez marketingowców NVIDI-i). Na naszej ulubionej ilustracji widać, że liczba „rdzeni” w Fermim zmalała z 30 do 16. Pojedynczy SM składa się teraz z 32 SP zamiast ośmiu, więc całkowita liczba procesorów strumieniowych wzrosła z 240 do 512. Oczywiście NVIDIA (zresztą AMD też) twierdzi, że rdzeniami należy nazywać pojedyncze SP, z których składają się SM-y (nawet dostały chwytliwą nazwę „CUDA Core”), ale my niezbyt chętnie patrzymy na to w ten sposób. Oczywiście, pojedynczy SP / CUDA Core jest w pewnym sensie rdzeniem. Ma własny potok wykonawczy i daleko mu do zwykłej jednostki wykonawczej, którą znamy ze standardowych procesorów. Ale do pełnego procesora też mu sporo brakuje, ponieważ znaczna część zasobów jest dzielona z innymi SP znajdującymi się w danym multiprocesorze, przez co nie jest to „byt” autonomiczny. A my lubimy patrzeć na rdzeń jak na najmniejszą autonomiczną część danego procesora.
Wróćmy jednak do zmian w budowie multiprocesora. Już wspomnieliśmy o znacznym zwiększeniu liczby SP, ale nie pisaliśmy, że są one wewnętrznie podzielone na dwie grupy po 16 jednostek. Każda z tych grup zajmuje się oddzielną grupą wątków, którą nazwano... osnową (ang. warp). Tak, nazwa jest wzięta prosto z tkalni. Tutaj znowu musimy zrobić małą dygresję. Przy okazji wytłumaczymy w końcu, o co chodzi z tym całym SIMD i SIMT.
Od czasów G80 osnowa składa się z 32 wątków (lub z ośmiu czwórek pikseli, gdy mówimy o grafice). Podział ten został wprowadzony, ponieważ cały blok wątków (przypominamy, że składa się on z 512 wątków) jest za duży, aby nim efektywnie zarządzać jako całością. A pojedynczy wątek jest zbyt małą jednostką. Potrzebne było coś pomiędzy i tym czymś jest właśnie osnowa będąca grupą 32 wątków. Jest to twór podobny do wektora danych w przetwarzaniu SIMD. W przetwarzaniu SIMD dane są pakowane w wektory, a później przed wykonaniem są rozpakowywane i przetwarzane równolegle (stąd Multiple Data w nazwie). Aby było możliwe jednoczesne wykonywanie obliczeń na tak przygotowanym zbiorze danych, muszą one wiązać się z wykonywaniem tej samej instrukcji (stąd Single Instruction w nazwie). Albo mówiąc bardziej precyzyjnie i trochę bardziej „asemblerowo”: muszą mieć taki sam adres początku instrukcji. Przykładem może być podwojenie wszystkich liczb znajdujących się w macierzy o rozmiarach 100×100 (tylko proszę pamiętać, że instrukcje to nie tylko działania matematyczne). Pakujemy z tej macierzy na przykład 10 liczb (bo na tyle pozwala nasz teoretyczny procesor SIMD), pakujemy je w wektor, zaznaczamy, że każda z tych liczb ma zostać podwojona, i wysyłamy wektor do 10 jednostek, które te obliczenia wykonują równolegle. Mamy jednego zarządcę, jeden pobrany adres instrukcji i 10 „przemielonych” liczb. Gdy mamy do wykonania takie samo działanie na dużym zbiorze danych, wyraźnie widać zalety takiego rozwiązania. W przypadku GPU NVIDI-i nie ma jednak wektorów takich jak w SIMD. Zamiast tego jest osnowa (dziwnie to brzmi po polsku, ale nie my wymyślaliśmy te nazwy ;)). Różnica polega na tym, że o ile w przetwarzaniu SIMD dane trzeba pakować w wektory świadomie i jest to bezpośrednio związane z architekturą danego układu, to w przypadku GPU NVIDI-i jest to zaszyte w mikroarchitekturze. Układ sam grupuje wątki i nie mamy na to żadnego wpływu. Świadomość pakowania wątków w 32-elementowe grupy pomaga przy optymalizacji kodu, ale nie jest wymagana do tego, aby obliczenia były wykonywane równolegle.
Inna różnica pomiędzy SIMD a SIMT jest taka, że o ile w SIMD wątki obliczeniowe mogą się bez problemu komunikować ze sobą, to w SIMT wątki komunikują się ze sobą jedynie za pośrednictwem pamięci współdzielonej i jeden wątek nie może korzystać z danych zawartych w rejestrach wykorzystywanych przez drugi. Koniec dygresji, wróćmy do rdzeni Fermiego i GT200.
Czterokrotnie większa liczba procesorów strumieniowych znajdujących się w multiprocesorze oraz ich podział na dwie grupy to nie wszystko. Podwojono liczbę zarządców i liczbę jednostek SFU (ang. Special Function Unit – jednostki zajmujące się bardziej skomplikowanymi działaniami, na przykład obliczaniem wartości funkcji sinus) oraz pozbyto się oddzielnej jednostki wykonującej obliczenia na liczbach zmiennopozycyjnych podwójnej precyzji.
Podwojenie liczby zarządców łączy się bezpośrednio z podzieleniem SP na dwie podgrupy. Każdy z zarządców może przygotować i wysłać do danej grupy jednostek obliczeniowych pojedynczą grupę wątków, dzięki czemu jednocześnie mogą być wykonywane obliczenia związane z dwiema osnowami. Mamy tu więc do czynienia z czymś, co w procesorach nazwalibyśmy dwudrożnością (ang. dual-issue). Zarządcy są oddzieleni od SP i każdy z nich co cykl zegara może wysłać przygotowaną połowę osnowy do jednej z dwóch grup SP lub do SFU. Wartą wzmianki nowością jest to, że obliczenia wykonywane przez SFU nie „paraliżują” już obliczeń wykonywanych przez SP, tak jak to było w G80 i GT200. Teraz obliczenia mogą być tam wykonywane niezależnie od SP i zarządca po wysłaniu grupy wątków do SFU może wysłać zestaw wątków do grupy procesorów strumieniowych. Wcześniej, gdy obliczeniami zajmowały się „jednostki do zadań specjalnych”, procesory strumieniowe cierpliwie czekały, aż ich wyspecjalizowani koledzy ukończą swoje zadanie, co mogło trwać nawet kilkadziesiąt cykli zegara (w porównaniu z czterema potrzebnymi na wykonanie wszystkich obliczeń dla pojedynczej osnowy, gdy są to standardowe działania wykonywane przez jednostki zmiennoprzecinkowe). Pozbycie się z multiprocesora oddzielnej jednostki zajmującej się obliczeniami na liczbach zmiennopozycyjnych podwójnej precyzji jest ściśle związane ze zmianami, które omawialiśmy przed chwilą. W GT200 obsługę obliczeń na typie danych double dodano „na szybko”. NVIDIA otrzymała informację od programistów tworzących oprogramowanie wykonujące obliczenia na kartach z układami G80/G92, że czasem przydałaby im się możliwość wykonywania obliczeń o większej precyzji. Najszybszym sposobem było dodanie nowej jednostki. Wadą tego rozwiązania była wydajność, wynosząca zaledwie 1/8 wydajności GT200 w obliczeniach na liczbach 32-bitowych. Teraz zostało to naprawione. Gdy do gry wchodzi 64-bitowa arytmetyka, jednocześnie są wykorzystywane obie grupy procesorów strumieniowych w multiprocesorze. Łatwo więc policzyć, że Fermi na liczbach podwójnej precyzji wykonuje dwa razy mniej obliczeń niż na liczbach pojedynczej precyzji, co prowadzi do wniosku, że pod tym względem nowa architektura jest cztery razy bardziej efektywna niż stara. Całkiem spory krok naprzód. Oczywiście, w grach nie ma to żadnego znaczenia (przynajmniej na razie), ale w przypadku niektórych profesjonalnych aplikacji jest to gigantyczna różnica.
Pozostało nam omówić zmiany w budowie pojedynczego procesora strumieniowego, lub jak kto woli, rdzenia CUDA. Przed Fermim we wnętrzu procesora strumieniowego znajdowała się pojedyncza jednostka wykonawcza, zajmująca się działaniami zarówno na liczbach stało-, jak i zmiennopozycyjnych. Za to pojedynczy rdzeń CUDA w Fermim ma w sobie dwie oddzielne jednostki, z których każda jest przeznaczona do innego typu obliczeń. Ale nie mogą one wykonywać ich jednocześnie. W GT200 łączona jednostka obliczeniowa znajdująca się w SP mogła wykonywać mnożenie liczb stałopozycyjnych jedynie z 24-bitową precyzją, a 32-bitowe mnożenie musiało być emulowane (nie dało się go wykonać w jednym cyklu zegara), co negatywnie wpływało na wydajność.
Nastąpiło też kilka zmian mających na celu przystosowanie Fermiego do wykonywania obliczeń zgodnych z normą IEE 754-2008. Dodano obsługę instrukcji FMA (ang. Fused Multiply Add), czyli bardziej precyzyjnej odmiany instrukcji MAD. Obie pozwalają na wykonanie w jednym cyklu zegara mnożenia dwóch liczb i dodanie wyniku tego mnożenia do trzeciej liczby (A*B+C). MAD przed przejściem do dodawania zaokrąglała wynik mnożenia liczb. FMA tego nie robi, co pozwala uzyskać większą precyzję obliczeń. Dodano też obsługę liczb „subnormal”, czyli takich, jakie są większe od zera, ale mniejsze od najmniejszej liczby, którą da się zapisać za pomocą 32-bitowej liczby zmiennopozycyjnej (na przykład... 10-8 ). Wcześniej takie liczby były zerowane i bezpowrotnie tracone.
Nastąpiło też dużo dodatkowych zmian mających na celu umożliwienie kompilacji kodu C++ na Fermim. Niektóre z nich zostały omówione już wcześniej (na przykład ujednolicenie przestrzeni adresowej). Trzeba było licznych zmian, aby możliwe było wykorzystywanie takich rzeczy, jak obiekty i wskaźniki, albo zgłaszanie wyjątków (tak, w końcu Try-Catch w CUDA i porządny debugger!). Wszystko to po to, aby zachęcić programistów do pisania jak największej liczby programów korzystających z tych kart graficznych.
- 1.Trochę architektury – widok z góry
- 2.Trochę architektury – pamięć podręczna, zarządca, kontroler pamięci
- 3.Trochę architektury – multiprocesor i okolice
- 4.Trochę architektury – umarł TPC, niech żyje GPC!
- 5.Modele i specyfikacja kart
- 6.Filtrowanie tekstur i wygładzanie krawędzi
- 7.Fermi pręży muskuły – wydajność teselacji i DirectCompute
- 8.3DVision, OptiX i inne CUDA
- 9.GeForce GTX 480 – karta referencyjna
- 10.Zestaw testowy
- 11.3DMark Vantage
- 12.Battlefield: Bad Company 2 DX 10
- 13.Borderlands
- 14.Call of Duty: Modern Warfare 2
- 15.Colin McRae: DiRT 2 DX 9
- 16.Crysis: Warhead
- 17.Enemy Territory: Quake Wars
- 18.Left 4 Dead 2
- 19.Metro 2033 DX 10
- 20.Need for Speed: Shift
- 21.S.T.A.L.K.E.R.: Zew Prypeci DX 10.1
- 22.Battlefield: Bad Company 2 DX 11
- 23.Colin McRae: DiRT 2 DX 11
- 24.Metro 2033 DX 11
- 25.S.T.A.L.K.E.R.: Zew Prypeci DX 11
- 26.Pobór mocy, głośność, temperatura
- 27.Podkręcanie
- 28.Podsumowanie
- Pogłębiony test Radeona HD 7970 – multi-GPU, GPGPU, kodowanie wideo, karty różnych firm, podkręcanie ekstremalne 132
- Radeon HD 7950 – kontynuacja ofensywy Graphics Core Next 131
- Test 104 kart graficznych DirectX 11 168
- Radeon HD 7970 – „bombowe” wejście Graphics Core Next 302
- MSI R6970 Lightning kontra Asus Matrix GTX 580 – starcie kart graficznych dla entuzjastów 193
- GeForce GTX 580 – pięć kart, pięć różnych systemów chłodzenia, w tym wodny. Test porównawczy 48
- Radeon HD 6770 i HD 6750 – AMD gra na bis 100
- Radeon HD 6570 – wydajność 38
- OC School – podkręcanie kart graficznych, materiał wideo 47
- Test 104 kart graficznych DirectX 11 168
- Radeon HD 7970 – „bombowe” wejście Graphics Core Next 302
- Przerabiamy radeona HD 6950 na HD 6970 43
- OC School, czyli szkoła podkręcania. Część 1. – karty graficzne 89
- AMD Radeon HD 6990 – czy mamy nowego króla kart graficznych? 174
- Radeon HD 6770 i HD 6750 – AMD gra na bis 100
- GeForce GTX 590 – czy korona wydajności wróci do obozu Nvidii? 180
- AMD Radeon HD 6790 – twardy przeciwnik dla GeForce'a GTX 550 Ti 119
- MSI R6970 Lightning kontra Asus Matrix GTX 580 – starcie kart graficznych dla entuzjastów 193
- Asus GTX580 DirectCU II i MSI N580GTX Lightning – pojedynek kart dla entuzjastów wydajności 108
- Pogłębiony test Radeona HD 7970 – multi-GPU, GPGPU, kodowanie wideo, karty różnych firm, podkręcanie ekstremalne 132
- AMD Radeon HD 6790 – twardy przeciwnik dla GeForce'a GTX 550 Ti 119
- Radeon HD 7970 – „bombowe” wejście Graphics Core Next 302
- Test 104 kart graficznych DirectX 11 168
- GeForce GTX 590 – czy korona wydajności wróci do obozu Nvidii? 180
- AMD Radeon HD 6990 – czy mamy nowego króla kart graficznych? 174
- MSI R6970 Lightning kontra Asus Matrix GTX 580 – starcie kart graficznych dla entuzjastów 193
- OC School – podkręcanie kart graficznych, materiał wideo 47
- PowerColor przygotowuje jeszcze jednego Radeona HD 7970 9
- Jak duży będzie w końcu Kepler? 18
- AMD wprowadza karty FirePro V3900 15
- Nowe karty graficzne Nvidii w szczegółach - specyfikacje, ceny i daty pojawienia się na rynku 112
- Zwodowany Radeon HD 7970 11
- Sea Islands, czyli następna generacja GPU firmy AMD 19
- Radeon HD 7950 z trzema wentylatorami 15
- Radeony 7700 i 7800 tuż tuż? 37
- Radeon HD 7970 z pamięcią o szybkości ponad 2 GHz 7
- Nowe karty graficzne Nvidii w szczegółach - specyfikacje, ceny i daty pojawienia się na rynku 112
- Sea Islands, czyli następna generacja GPU firmy AMD 19
- Jak duży będzie w końcu Kepler? 18
- Zwodowany Radeon HD 7970 11
- AMD wprowadza karty FirePro V3900 15
- PowerColor przygotowuje jeszcze jednego Radeona HD 7970 9
- Sea Islands, czyli następna generacja GPU firmy AMD 19
- AMD wprowadza karty FirePro V3900 15
- Zwodowany Radeon HD 7970 11
- PowerColor przygotowuje jeszcze jednego Radeona HD 7970 9
- Nowe karty graficzne Nvidii w szczegółach - specyfikacje, ceny i daty pojawienia się na rynku 112
- Jak duży będzie w końcu Kepler? 18
- Google Bouncer – sposób na ostateczne rozprawienie się ze szkodliwymi programami w Android Markecie? 0
- JUŻ JEST AIWI MOTION DETECTOR KOZUMI W POLSCE! Dostępny tylko w ACTION! Sprawdź już dziś! 2
- Podróże z kamerą w samochodzie 1
- ZyNOS 4.0: nowe certyfikowane oprogramowanie IPv6 do przełączników ZyXELa 0
- Brennestuhl: domowy sprzęt elektryczny na wyciągnięcie ręki 1
- Niezależny test programów antywirusowych - dostajesz to, za co płacisz 2
- Komputronik Pro-DH600: kompaktowe desktopy dla firm 3
- Legendarne etui G-Form do tabletów na polskim rynku 5
- Genius na CES 2012 4
- Trojany kradnące dane bankowe atakują tysiące komputerów każdego dnia 0
- Xavax: tańsze ogrzewanie domu przez Internet 6
- Tablety Lark FreeMe: tak tanio jeszcze nie było 2
- Atak phishingowy na użytkowników Allegro - rzekome zwolnienie z prowizji 2
- Polska premiera kart Radeon HD 7950: Asus, HIS, Gigabyte 2
- 2011 - dobry rok dla graczy sponsorowanych przez SteelSeries. 2012 zapowiada się równie dobrze... 2
- 2Wymienię HD5870+Zalman VF300023:04 | Sasilton
- 5Android 2,3 w tablecie za 129,99zł ?23:03 | NeCr0
- 11Płyta główna pod procek Athlo II X4 635 AM323:03 | miru666
- 2423Battlefield 323:03 | daniob
- 10Kupiłem AMD x4 955 - czarny ekran nie włącza23:02 | meo_pl
- 26671Battlefield 323:02 | PiotreQ!
- 25537Prezentujemy swoje maszynki.23:02 | Decanek
- 1MSI 6850 problem23:02 | karol2444
- 1It’s Not My Fault That I’m Not Popular!23:01 | Galvatron
- 33Słuchawki do 250zł; counter strike 1.623:01 | cyganix11
- 2423Battlefield 323:03 | daniob
- 26671Battlefield 323:02 | PiotreQ!
- 25537Prezentujemy swoje maszynki.23:02 | Decanek
- 4574The Elder Scrolls V Skyrim22:59 | azgan
- 3257FIFA 1222:58 | Igła
- 14960Luźne fotografów rozmowy22:55 | Yuurei
- 126Pomoc w wyborze imienia dla dziecka22:54 | BeerBoobs
- 725Dell 22 Ultrasharp 2209WA matryca IPS22:48 | jagular
- 1895WĄTEK ZBIORCZY - Lista polecanych zasilaczy22:48 | fukster
- 5903Spis polecanych myszek i podkładek dla graczy - dyskusja22:42 | DragonNT

