część 1 – architektura Zbigniew Kozakoma/pr/2011/7-cuda1.pdf · 2011. 4. 14. · Spis treści...
Transcript of część 1 – architektura Zbigniew Kozakoma/pr/2011/7-cuda1.pdf · 2011. 4. 14. · Spis treści...
-
.
......
CUDAczęść 1 – architektura
Zbigniew Koza
Uniwersytet WrocławskiWydział Fizyki i Astronomii
Wrocław, 13 kwietnia 2011
Zbigniew Koza (IFT UWr) CUDA 1 / 68
-
Spis treści
Spis treści
...1 Wstęp: GPU a CPUCPUGPU
...2 CUDACo to jest CUDA?Architektura procesora GT 200CUDA API
...3 Przyszłość GPU
Zbigniew Koza (IFT UWr) CUDA 2 / 68
-
Spis treści
Spis treści
...1 Wstęp: GPU a CPUCPUGPU
...2 CUDACo to jest CUDA?Architektura procesora GT 200CUDA API
...3 Przyszłość GPU
Zbigniew Koza (IFT UWr) CUDA 2 / 68
-
Spis treści
Spis treści
...1 Wstęp: GPU a CPUCPUGPU
...2 CUDACo to jest CUDA?Architektura procesora GT 200CUDA API
...3 Przyszłość GPU
Zbigniew Koza (IFT UWr) CUDA 2 / 68
-
Wstęp: GPU a CPU CPU
CPU („jednostka arytmetyczno-logiczna”)
CPU to procesor sekwencyjny ogólnego przeznaczeniaOptymalizowany do przetwarzania strumienia poleceńna heterogenicznych danychSwobodny dostęp do pamięci operacyjnejStosunkowo skomplikowane sterowanieOryginalnie projektowany jako procesor typu SISD(single instruction, single data)Obecnie dostosowany jest do potrzeb systemów operacyjnychumożliwiających współbieżne wykonywanie programów (wirtualizacjaRAM, częsta i kosztowna zmiana kontekstu)
Zbigniew Koza (IFT UWr) CUDA 3 / 68
-
Wstęp: GPU a CPU CPU
CPU – coraz prędzej. . .
Ok. 2003 r. osiągnięto taktowanie rzędu 3 GHz i tak już zostało. . .Taktowanie rzędu 3-4 GHz to obecnie fundamentalna barieratechnologicznaP ∝ f 31 procesor 4 GHz grzeje się ≈ jak 8 procesorów 2GHz
Zbigniew Koza (IFT UWr) CUDA 4 / 68
-
Wstęp: GPU a CPU CPU
Wąskie gardło: dostęp do danych (latency)
Źródło: tomshardware.com/Intel
Latency ≈ czas między zleceniem a pierwszym jego efektemEfekt można zmniejszyć, pobierając dane z sąsiednich lokalizacji
Zbigniew Koza (IFT UWr) CUDA 5 / 68
http://www.tomshardware.com/reviews/dual-xeon-duo,664-3.html
-
Wstęp: GPU a CPU CPU
Antidotum sprzętowe: pamięć podręczna L1, L2, L3
Źródło: tomshardware.com/Intel
Procesor Intela Montecito (dual core Itanium 2) to ponad 1.7× 109tranzystorów; 1.5× 109 z nich to 24 MB pamięci podręcznej L3
Zbigniew Koza (IFT UWr) CUDA 6 / 68
http://www.tomshardware.com/reviews/dual-xeon-duo,664-3.html
-
Wstęp: GPU a CPU CPU
CPU – coraz szerzej. . .
Zamiast zwiększać częstotliwość zegara, w coraz większym stopniu„urównolegla” się CPU:Architektura superskalarnaInstrukcje typu SIMD (single instruction, multiple data)Hiperwątkowość (hyperthreading)WielordzeniowośćWieloprocesorowośćKlastry. . .
Zbigniew Koza (IFT UWr) CUDA 7 / 68
-
Wstęp: GPU a CPU CPU
CPU – coraz trudniej. . .
.
......
Postępujące „urównoleglanie” CPU wymagazmiany paradygmatu programowania
.
...... Ten nowy paradygmat jeszcze nie istnieje. . .
.
...... Bo nie istnieje uniwersalna architektura równoległa
Zbigniew Koza (IFT UWr) CUDA 8 / 68
-
Wstęp: GPU a CPU CPU
CPU – coraz trudniej. . .
.
......
Postępujące „urównoleglanie” CPU wymagazmiany paradygmatu programowania
.
...... Ten nowy paradygmat jeszcze nie istnieje. . .
.
...... Bo nie istnieje uniwersalna architektura równoległa
Zbigniew Koza (IFT UWr) CUDA 8 / 68
-
Wstęp: GPU a CPU CPU
CPU – coraz trudniej. . .
.
......
Postępujące „urównoleglanie” CPU wymagazmiany paradygmatu programowania
.
...... Ten nowy paradygmat jeszcze nie istnieje. . .
.
...... Bo nie istnieje uniwersalna architektura równoległa
Zbigniew Koza (IFT UWr) CUDA 8 / 68
-
Wstęp: GPU a CPU GPU
GPU („koprocesor graficzny”)
GPU to wyspecjalizowany akcelerator sprzętowy zaprojektowany doprzetwarzania geometrii (np. miliony trójkątów) i tekstur (mapybitowe) w barwne piksele na ekranie (frame buffer)
GPU stosuje te same operacje matematyczne (np. obroty i translacje;interpolacja kolorów) na ogromnej liczbie podobnych elementów
Te operacje wykonywane są zwykle na liczbach zmiennoprzecinkowychpojedynczej precyzji
Zbigniew Koza (IFT UWr) CUDA 9 / 68
-
Wstęp: GPU a CPU GPU
GPU jako koprocesor
GPU to wyspecjalizowany koprocesor
Nie obsługuje urządzeń zewnętrznych innych niż magistrala PCI-EBrak wirtualizacji pamięci, możliwości instalacji systemu operacyjnego
Ale: wirtualizacja pamięci w kolejnej wersji CUDANvidia wykupiła licencję na procesor ARM. . .
Zbigniew Koza (IFT UWr) CUDA 10 / 68
-
Wstęp: GPU a CPU GPU
GPU jako koprocesor
GPU to wyspecjalizowany koprocesor
Nie obsługuje urządzeń zewnętrznych innych niż magistrala PCI-EBrak wirtualizacji pamięci, możliwości instalacji systemu operacyjnego
Ale: wirtualizacja pamięci w kolejnej wersji CUDA
Nvidia wykupiła licencję na procesor ARM. . .
Zbigniew Koza (IFT UWr) CUDA 10 / 68
-
Wstęp: GPU a CPU GPU
GPU jako koprocesor
GPU to wyspecjalizowany koprocesor
Nie obsługuje urządzeń zewnętrznych innych niż magistrala PCI-EBrak wirtualizacji pamięci, możliwości instalacji systemu operacyjnego
Ale: wirtualizacja pamięci w kolejnej wersji CUDANvidia wykupiła licencję na procesor ARM. . .
Zbigniew Koza (IFT UWr) CUDA 10 / 68
-
Wstęp: GPU a CPU GPU
GPU – procesor strumieniowy
GPU są projektowane do jednoczesnego wykonywania tych samychinstrukcji na tysiącach niemal niezależnych wierzchołkach trójkątówi elementach tekstur
Na wejściu jest strumień wierzchołków i strumień tekseli (teksel =texture element), na wyjściu – strumień pikseli.
Tekstury mają zwykle geometrię 2D, stąd GPU posiadają specjalneukłady do „geometrycznej” optymalizacji wczytywania strumieniawejściowego (specjalna pamięć podręczna)
GPU są optymalizowane do wykonywania dodawania, odejmowaniai mnożenia danych zmiennopozycyjnych pojedynczej precyzji; słabiejradzą sobie z dzieleniem.
GPU są więc przykładem procesorów SIMD (Single Instruction,Multiple Data)
Zbigniew Koza (IFT UWr) CUDA 11 / 68
-
Wstęp: GPU a CPU GPU
GPU – procesor masowo równoległy
Terminologia:
CPU: „multicore processor”. „Multi” ≈ 4GPU: „a highly parallel, multithreaded, manycore processor”.„Many” ≈ 500
Uwaga: Rdzenie CPU są dużo bardziej złożone od rdzeni GPU; Inteluważa, że GT 200 składa się z 30 rdzeni, każdy z 8-drożną wektorowąjednostką wykonawczą; Nvidia uważa, że GT 200 ma 240 rdzeni.
Rzetelne porównania powinny uwzględniać rejestry SSE etc.
Zbigniew Koza (IFT UWr) CUDA 12 / 68
-
Wstęp: GPU a CPU GPU
GPU – procesor masowo równoległy
Terminologia:
CPU: „multicore processor”. „Multi” ≈ 4GPU: „a highly parallel, multithreaded, manycore processor”.„Many” ≈ 500Uwaga: Rdzenie CPU są dużo bardziej złożone od rdzeni GPU; Inteluważa, że GT 200 składa się z 30 rdzeni, każdy z 8-drożną wektorowąjednostką wykonawczą; Nvidia uważa, że GT 200 ma 240 rdzeni.
Rzetelne porównania powinny uwzględniać rejestry SSE etc.
Zbigniew Koza (IFT UWr) CUDA 12 / 68
-
Wstęp: GPU a CPU GPU
Który większy?
GTX 280:1.4× 109 tranzystorów,65 nm,240 rdzeni,pobór mocy: 160-330 W.1 TFLPOS (fp32)
Intel Penryn:0.4× 109 tranzystorów,technologia 45 nm,2 rdzenie,pobór mocy: 4-70 W.≈ 0.01 TFLOPS (fp64)Źródło: anandtech.com
Zbigniew Koza (IFT UWr) CUDA 13 / 68
http://www.anandtech.com/video/showdoc.aspx?i=3334
-
Wstęp: GPU a CPU GPU
Rozdział tranzystorów
CPU: zdecydowana większość tranzystorów tworzy pamięć podręczną
GPU: pamięć podręczna mniejsza; więcej tranzystorów wykonujeobliczenia
Źródło: NVIDIA CUDA Programming Guide
Zbigniew Koza (IFT UWr) CUDA 14 / 68
http://
-
Wstęp: GPU a CPU GPU
GPU – superkomputer za 300 zł
Źródło: NVIDIA CUDA Programming GuideZbigniew Koza (IFT UWr) CUDA 15 / 68
http://www.nvidia.com
-
Wstęp: GPU a CPU GPU
Magiczne słowo – bandwidth
Źródło: NVIDIA CUDA Programming GuideZbigniew Koza (IFT UWr) CUDA 16 / 68
http://
-
Wstęp: GPU a CPU GPU
bandwidth
Przepustowośćpamięci jest głównymogranicznikiemwydajności bardzowielu symulacjinumerycznych
Źródło: NVIDIA CUDA Programming Guide
Zbigniew Koza (IFT UWr) CUDA 17 / 68
http://
-
Wstęp: GPU a CPU GPU
GPU są naprawdę szybkie!
Źródło: Nicolas Pinto, MIT
Zbigniew Koza (IFT UWr) CUDA 18 / 68
http://dl.getdropbox.com/u/484203/Lectures/NicolasPinto/6963_Lecture02_CUDA_Basics_1_webopt.pdf
-
Wstęp: GPU a CPU GPU
GPU są szybkie nie tylko w testach!
Istnieje wiele przykładów przyspieszenia obliczeńnaukowo-inżynierskich na GPU o czynnik rzędu 10-100 względem CPUTakie przyspieszenie to prawdziwa rewolucjaObliczenia trwające rok → tydzieńObliczenia trwające tydzień → godziny
Nowe obszary zastosowań (np. diagnostyka medyczna)
Zbigniew Koza (IFT UWr) CUDA 19 / 68
-
Wstęp: GPU a CPU GPU
GPU = śmierć CPU?
Obliczenia na GPU zamiast CPU mają sens tylko w wąskiej klasieproblemów
Bardzo wąskie gardło: komunikacja CPU↔GPUMniej wąskie gardło: komunikacja rdzeni GPU↔DRAM GPUGPU wymaga bardzo specyficznych technik programistycznych
Wniosek: GPU nigdy nie zastąpi CPU
ale może w jakimś stopniu zostać zintegrowany z CPU jak niegdyśkoprocesor matematyczny. . .albo może sam upodobnić się do CPU
Nigdy nie mów nigdy. . .
Zbigniew Koza (IFT UWr) CUDA 20 / 68
-
Wstęp: GPU a CPU GPU
GPU = śmierć CPU?
Obliczenia na GPU zamiast CPU mają sens tylko w wąskiej klasieproblemów
Bardzo wąskie gardło: komunikacja CPU↔GPUMniej wąskie gardło: komunikacja rdzeni GPU↔DRAM GPUGPU wymaga bardzo specyficznych technik programistycznychWniosek: GPU nigdy nie zastąpi CPU
ale może w jakimś stopniu zostać zintegrowany z CPU jak niegdyśkoprocesor matematyczny. . .albo może sam upodobnić się do CPU
Nigdy nie mów nigdy. . .
Zbigniew Koza (IFT UWr) CUDA 20 / 68
-
Wstęp: GPU a CPU GPU
GPU = śmierć CPU?
Obliczenia na GPU zamiast CPU mają sens tylko w wąskiej klasieproblemów
Bardzo wąskie gardło: komunikacja CPU↔GPUMniej wąskie gardło: komunikacja rdzeni GPU↔DRAM GPUGPU wymaga bardzo specyficznych technik programistycznychWniosek: GPU nigdy nie zastąpi CPUale może w jakimś stopniu zostać zintegrowany z CPU jak niegdyśkoprocesor matematyczny. . .albo może sam upodobnić się do CPU
Nigdy nie mów nigdy. . .
Zbigniew Koza (IFT UWr) CUDA 20 / 68
-
Wstęp: GPU a CPU GPU
GPU = śmierć CPU?
Obliczenia na GPU zamiast CPU mają sens tylko w wąskiej klasieproblemów
Bardzo wąskie gardło: komunikacja CPU↔GPUMniej wąskie gardło: komunikacja rdzeni GPU↔DRAM GPUGPU wymaga bardzo specyficznych technik programistycznychWniosek: GPU nigdy nie zastąpi CPUale może w jakimś stopniu zostać zintegrowany z CPU jak niegdyśkoprocesor matematyczny. . .albo może sam upodobnić się do CPU
Nigdy nie mów nigdy. . .
Zbigniew Koza (IFT UWr) CUDA 20 / 68
-
Wstęp: GPU a CPU GPU
Krótka historia GPU
Pierwsze GPU – procesory strumieniowe całkowicie„zaprogramowane” w fabryce2003 – GeForce FXobsługa liczb zmiennopozycyjnychponad tysiąc instrukcjiwada: dostęp wyłącznie poprzez OpenGL/DirectX etc.
2003/2004 – BrookBrook to kompilator i nowy język programowania oparty na C(„C with streams”)→ Nowa gałąź informatyki: GPGPU (General-purpose computing ongraphics processing units)Problem 1: brook korzysta z OpenGL/DirectX/. . .→ narzutProblem 2: zwykła zmiana sterownika może „rozłożyć” program
2006 – GeForce 8 z technologią CUDA. Unifikacja programowalnychjednostek (vertex i pixel shaders) → uniwersalne multiprocesory.
Zbigniew Koza (IFT UWr) CUDA 21 / 68
-
CUDA Co to jest CUDA?
Część 2
...1 Wstęp: GPU a CPUCPUGPU
...2 CUDACo to jest CUDA?Architektura procesora GT 200CUDA API
...3 Przyszłość GPU
Zbigniew Koza (IFT UWr) CUDA 22 / 68
-
CUDA Co to jest CUDA?
CUDA
CUDA = Compute Unified Device Architecture
CUDA = uniwersalna architektura sprzętowo-programistycznamasowo równoległych, masowo wielordzeniowych procesorów(graficznych) firmy NVidia
CUDA = specyfikacja abstrakcyjnego procesora równoległego(niekoniecznie graficznego)
CUDA = abstrakcyjne API programowania procesorów zgodnychz CUDA izolujące programistów od „metalu”, tj. sprzętu
CUDA = wieloplatformowe (Windows, Linux, MacOS), bezpłatne,uniwersalne środowisko programowania (SDK) procesorów firmyNVidia (kompilator, emulator, debuger, profiler, biblioteki) oparte najęzyku wysokiego poziomu („C/C++ for CUDA”)
Zbigniew Koza (IFT UWr) CUDA 23 / 68
-
CUDA Co to jest CUDA?
CUDA
CUDA = Compute Unified Device Architecture
CUDA = uniwersalna architektura sprzętowo-programistycznamasowo równoległych, masowo wielordzeniowych procesorów(graficznych) firmy NVidia
CUDA = specyfikacja abstrakcyjnego procesora równoległego(niekoniecznie graficznego)
CUDA = abstrakcyjne API programowania procesorów zgodnychz CUDA izolujące programistów od „metalu”, tj. sprzętu
CUDA = wieloplatformowe (Windows, Linux, MacOS), bezpłatne,uniwersalne środowisko programowania (SDK) procesorów firmyNVidia (kompilator, emulator, debuger, profiler, biblioteki) oparte najęzyku wysokiego poziomu („C/C++ for CUDA”)
Zbigniew Koza (IFT UWr) CUDA 23 / 68
-
CUDA Co to jest CUDA?
CUDA
CUDA = Compute Unified Device Architecture
CUDA = uniwersalna architektura sprzętowo-programistycznamasowo równoległych, masowo wielordzeniowych procesorów(graficznych) firmy NVidia
CUDA = specyfikacja abstrakcyjnego procesora równoległego(niekoniecznie graficznego)
CUDA = abstrakcyjne API programowania procesorów zgodnychz CUDA izolujące programistów od „metalu”, tj. sprzętu
CUDA = wieloplatformowe (Windows, Linux, MacOS), bezpłatne,uniwersalne środowisko programowania (SDK) procesorów firmyNVidia (kompilator, emulator, debuger, profiler, biblioteki) oparte najęzyku wysokiego poziomu („C/C++ for CUDA”)
Zbigniew Koza (IFT UWr) CUDA 23 / 68
-
CUDA Co to jest CUDA?
CUDA
CUDA = Compute Unified Device Architecture
CUDA = uniwersalna architektura sprzętowo-programistycznamasowo równoległych, masowo wielordzeniowych procesorów(graficznych) firmy NVidia
CUDA = specyfikacja abstrakcyjnego procesora równoległego(niekoniecznie graficznego)
CUDA = abstrakcyjne API programowania procesorów zgodnychz CUDA izolujące programistów od „metalu”, tj. sprzętu
CUDA = wieloplatformowe (Windows, Linux, MacOS), bezpłatne,uniwersalne środowisko programowania (SDK) procesorów firmyNVidia (kompilator, emulator, debuger, profiler, biblioteki) oparte najęzyku wysokiego poziomu („C/C++ for CUDA”)
Zbigniew Koza (IFT UWr) CUDA 23 / 68
-
CUDA Co to jest CUDA?
CUDA
CUDA = Compute Unified Device Architecture
CUDA = uniwersalna architektura sprzętowo-programistycznamasowo równoległych, masowo wielordzeniowych procesorów(graficznych) firmy NVidia
CUDA = specyfikacja abstrakcyjnego procesora równoległego(niekoniecznie graficznego)
CUDA = abstrakcyjne API programowania procesorów zgodnychz CUDA izolujące programistów od „metalu”, tj. sprzętu
CUDA = wieloplatformowe (Windows, Linux, MacOS), bezpłatne,uniwersalne środowisko programowania (SDK) procesorów firmyNVidia (kompilator, emulator, debuger, profiler, biblioteki) oparte najęzyku wysokiego poziomu („C/C++ for CUDA”)
Zbigniew Koza (IFT UWr) CUDA 23 / 68
-
CUDA Co to jest CUDA?
Zalety CUDA dla programisty C/C++
Język wysokiego poziomu (minimalne rozszerzenie C/C++) +dokumentacja + SDK
Abstrakcja sprzętu – programy skompilowane dziś będą optymalniedziałać na sprzęcie, który pojawi się za kilka lat; są niewrażliwe nazmianę sterowników etc.Metoda: PTX jako „bytecode” + kompilacja JIT
Automatyzacja zarządzania wątkami (których są tysiące!)Niemal liniowa skalowalność – te same programy można uruchamiaćna różnych procesorach lub ich „klastrach” (od CUDA 4.0 obsługaklastrów GPU nie wymaga wielowątkowości kodu CPU)CUDA nie wymaga znajomości OpenGL/DirectX/etc. –jest stosunkowo łatwa do opanowania dla „numeryków”CUDA umożliwia bezpośredni rendering (OpenGL lub DirectX)CUDA udostępnia ogólnie znany model pamięci (jak w języku C)i standardowe operacje matematyczne (+, −, ∗, /, sin, sqrt, exp,. . . )
Zbigniew Koza (IFT UWr) CUDA 24 / 68
-
CUDA Co to jest CUDA?
Zalety CUDA dla programisty C/C++
Język wysokiego poziomu (minimalne rozszerzenie C/C++) +dokumentacja + SDKAbstrakcja sprzętu – programy skompilowane dziś będą optymalniedziałać na sprzęcie, który pojawi się za kilka lat; są niewrażliwe nazmianę sterowników etc.Metoda: PTX jako „bytecode” + kompilacja JIT
Automatyzacja zarządzania wątkami (których są tysiące!)Niemal liniowa skalowalność – te same programy można uruchamiaćna różnych procesorach lub ich „klastrach” (od CUDA 4.0 obsługaklastrów GPU nie wymaga wielowątkowości kodu CPU)CUDA nie wymaga znajomości OpenGL/DirectX/etc. –jest stosunkowo łatwa do opanowania dla „numeryków”CUDA umożliwia bezpośredni rendering (OpenGL lub DirectX)CUDA udostępnia ogólnie znany model pamięci (jak w języku C)i standardowe operacje matematyczne (+, −, ∗, /, sin, sqrt, exp,. . . )
Zbigniew Koza (IFT UWr) CUDA 24 / 68
-
CUDA Co to jest CUDA?
Zalety CUDA dla programisty C/C++
Język wysokiego poziomu (minimalne rozszerzenie C/C++) +dokumentacja + SDKAbstrakcja sprzętu – programy skompilowane dziś będą optymalniedziałać na sprzęcie, który pojawi się za kilka lat; są niewrażliwe nazmianę sterowników etc.Metoda: PTX jako „bytecode” + kompilacja JIT
Automatyzacja zarządzania wątkami (których są tysiące!)
Niemal liniowa skalowalność – te same programy można uruchamiaćna różnych procesorach lub ich „klastrach” (od CUDA 4.0 obsługaklastrów GPU nie wymaga wielowątkowości kodu CPU)CUDA nie wymaga znajomości OpenGL/DirectX/etc. –jest stosunkowo łatwa do opanowania dla „numeryków”CUDA umożliwia bezpośredni rendering (OpenGL lub DirectX)CUDA udostępnia ogólnie znany model pamięci (jak w języku C)i standardowe operacje matematyczne (+, −, ∗, /, sin, sqrt, exp,. . . )
Zbigniew Koza (IFT UWr) CUDA 24 / 68
-
CUDA Co to jest CUDA?
Zalety CUDA dla programisty C/C++
Język wysokiego poziomu (minimalne rozszerzenie C/C++) +dokumentacja + SDKAbstrakcja sprzętu – programy skompilowane dziś będą optymalniedziałać na sprzęcie, który pojawi się za kilka lat; są niewrażliwe nazmianę sterowników etc.Metoda: PTX jako „bytecode” + kompilacja JIT
Automatyzacja zarządzania wątkami (których są tysiące!)Niemal liniowa skalowalność – te same programy można uruchamiaćna różnych procesorach lub ich „klastrach” (od CUDA 4.0 obsługaklastrów GPU nie wymaga wielowątkowości kodu CPU)
CUDA nie wymaga znajomości OpenGL/DirectX/etc. –jest stosunkowo łatwa do opanowania dla „numeryków”CUDA umożliwia bezpośredni rendering (OpenGL lub DirectX)CUDA udostępnia ogólnie znany model pamięci (jak w języku C)i standardowe operacje matematyczne (+, −, ∗, /, sin, sqrt, exp,. . . )
Zbigniew Koza (IFT UWr) CUDA 24 / 68
-
CUDA Co to jest CUDA?
Zalety CUDA dla programisty C/C++
Język wysokiego poziomu (minimalne rozszerzenie C/C++) +dokumentacja + SDKAbstrakcja sprzętu – programy skompilowane dziś będą optymalniedziałać na sprzęcie, który pojawi się za kilka lat; są niewrażliwe nazmianę sterowników etc.Metoda: PTX jako „bytecode” + kompilacja JIT
Automatyzacja zarządzania wątkami (których są tysiące!)Niemal liniowa skalowalność – te same programy można uruchamiaćna różnych procesorach lub ich „klastrach” (od CUDA 4.0 obsługaklastrów GPU nie wymaga wielowątkowości kodu CPU)CUDA nie wymaga znajomości OpenGL/DirectX/etc. –jest stosunkowo łatwa do opanowania dla „numeryków”
CUDA umożliwia bezpośredni rendering (OpenGL lub DirectX)CUDA udostępnia ogólnie znany model pamięci (jak w języku C)i standardowe operacje matematyczne (+, −, ∗, /, sin, sqrt, exp,. . . )
Zbigniew Koza (IFT UWr) CUDA 24 / 68
-
CUDA Co to jest CUDA?
Zalety CUDA dla programisty C/C++
Język wysokiego poziomu (minimalne rozszerzenie C/C++) +dokumentacja + SDKAbstrakcja sprzętu – programy skompilowane dziś będą optymalniedziałać na sprzęcie, który pojawi się za kilka lat; są niewrażliwe nazmianę sterowników etc.Metoda: PTX jako „bytecode” + kompilacja JIT
Automatyzacja zarządzania wątkami (których są tysiące!)Niemal liniowa skalowalność – te same programy można uruchamiaćna różnych procesorach lub ich „klastrach” (od CUDA 4.0 obsługaklastrów GPU nie wymaga wielowątkowości kodu CPU)CUDA nie wymaga znajomości OpenGL/DirectX/etc. –jest stosunkowo łatwa do opanowania dla „numeryków”CUDA umożliwia bezpośredni rendering (OpenGL lub DirectX)
CUDA udostępnia ogólnie znany model pamięci (jak w języku C)i standardowe operacje matematyczne (+, −, ∗, /, sin, sqrt, exp,. . . )
Zbigniew Koza (IFT UWr) CUDA 24 / 68
-
CUDA Co to jest CUDA?
Zalety CUDA dla programisty C/C++
Język wysokiego poziomu (minimalne rozszerzenie C/C++) +dokumentacja + SDKAbstrakcja sprzętu – programy skompilowane dziś będą optymalniedziałać na sprzęcie, który pojawi się za kilka lat; są niewrażliwe nazmianę sterowników etc.Metoda: PTX jako „bytecode” + kompilacja JIT
Automatyzacja zarządzania wątkami (których są tysiące!)Niemal liniowa skalowalność – te same programy można uruchamiaćna różnych procesorach lub ich „klastrach” (od CUDA 4.0 obsługaklastrów GPU nie wymaga wielowątkowości kodu CPU)CUDA nie wymaga znajomości OpenGL/DirectX/etc. –jest stosunkowo łatwa do opanowania dla „numeryków”CUDA umożliwia bezpośredni rendering (OpenGL lub DirectX)CUDA udostępnia ogólnie znany model pamięci (jak w języku C)i standardowe operacje matematyczne (+, −, ∗, /, sin, sqrt, exp,. . . )
Zbigniew Koza (IFT UWr) CUDA 24 / 68
-
CUDA Co to jest CUDA?
Zalety CUDA dla podatnika/płatnika
Źródło: Estonia Donates
4 podwójne kartyGTX295 GPU(8 procesorów GT 200)
8 TFLOPS mocyobliczeniowej(1560 procesorówstrumieniowych)
2 zasilacze 850 W ;-)
cena kart graficznych(2009): 7 000 – 8 000 zł
cena kart graficznych(wyprzedaż 2011): ≈3 000 zł
Zbigniew Koza (IFT UWr) CUDA 25 / 68
http://estoniadonates.wordpress.com/our-supercomputer/
-
CUDA Co to jest CUDA?
Zalety CUDA dla podatnika/płatnika
Źródło: Estonia Donates
4 podwójne kartyGTX295 GPU(8 procesorów GT 200)
8 TFLOPS mocyobliczeniowej(1560 procesorówstrumieniowych)
2 zasilacze 850 W ;-)
cena kart graficznych(2009): 7 000 – 8 000 zł
cena kart graficznych(wyprzedaż 2011): ≈3 000 zł
Zbigniew Koza (IFT UWr) CUDA 25 / 68
http://estoniadonates.wordpress.com/our-supercomputer/
-
CUDA Co to jest CUDA?
Zalety CUDA dla podatnika/płatnika
SGI Altix 3700(centra superkomputerowewe Wrocławiu, Gdańsku,Poznaniu, Krakowie)
Rok 2007:„Najnowocześniejszykomputer w Polsce”
0.768 TFLOPS mocyobliczeniowej(128 procesorów IA-64)
zasilanie – ?? kW
cena: milion zł
Źródło: task.gda.pl
Zbigniew Koza (IFT UWr) CUDA 26 / 68
http://wiki.task.gda.pl/wiki/SGI_Altix_3700
-
CUDA Co to jest CUDA?
Zalety CUDA dla podatnika/płatnika
SGI Altix 3700(centra superkomputerowewe Wrocławiu, Gdańsku,Poznaniu, Krakowie)
Rok 2007:„Najnowocześniejszykomputer w Polsce”
0.768 TFLOPS mocyobliczeniowej(128 procesorów IA-64)
zasilanie – ?? kW
cena: milion zł
⇐⇒
4 podwójne kartyGTX295 GPU(8 procesorów GT 200)
8 TFLOPS mocyobliczeniowej(1560 procesorówstrumieniowych)
2 zasilacze 850 W ;-)
cena kart graficznych:7 000 – 8 000 zł
Zbigniew Koza (IFT UWr) CUDA 27 / 68
-
CUDA Sprzęt: GT 200
Część 2
...1 Wstęp: GPU a CPUCPUGPU
...2 CUDACo to jest CUDA?Architektura procesora GT 200CUDA API
...3 Przyszłość GPU
Zbigniew Koza (IFT UWr) CUDA 28 / 68
-
CUDA Sprzęt: GT 200
Procesor strumieniowy (SP)
Źródło: anandtech.com
Streaming processor (SP, scalar processor) jest dość prymitywnyPrzetwarza jeden wątek programuAle to z takich „zer” tworzą się miliony („teraFLOPS-y”). . .
Zbigniew Koza (IFT UWr) CUDA 29 / 68
http://www.anandtech.com/video/showdoc.aspx?i=3334&p=2
-
CUDA Sprzęt: GT 200
Multiprocesor strumieniowy (SM)
Źródło: anandtech.com
8 równoległych procesorów strumieniowych(SP)
2 jednostki dla funkcji specjalnych (SFU), np.sin, cos,. . .
1 jednostka fp64 (brak na rysunku)
jednostka sterująca (MT Issue, multithreadedinstruction fetch and issue)
pamięć podręczna instrukcji (I Cache)
pamięć podręczna danych (Constant Cache),dla SP tylko do odczytu
pamięć współdzielona (shared memory, 16 KB)
16 384 rejestrów
Zbigniew Koza (IFT UWr) CUDA 30 / 68
http://www.anandtech.com/video/showdoc.aspx?i=3334&p=2
-
CUDA Sprzęt: GT 200
Multiprocesor strumieniowy (SM)
Wątki są wykonywane jednocześnie w pojedynczych SP(ten sam kod!)
Wątki są automatycznie grupowane w wiązki przetwarzane w tymsamym SM, tzw. bloki (blocks)
Kolejność i miejsce przetwarzania różnych bloków jest nieokreślona
Wątki z różnych bloków nie mogą wymieniać (efektywnie) informacji
.Zapamiętaj!........ Rozłączność bloków gwarantuje skalowalność!
Zbigniew Koza (IFT UWr) CUDA 31 / 68
-
CUDA Sprzęt: GT 200
Multiprocesor strumieniowy (SM)
Wątki w tym samym bloku mogą korzystać z programowalnychpamięci Constant Cache i pamięci dzielonej równie szybkich jakrejestry procesora
.Zapamiętaj!..
......
Efektywne posługiwanie się różnego rodzajami pamięci (szczególniepamięci dzielonej) to podstawowa umiejętność programisty CUDA!
Zbigniew Koza (IFT UWr) CUDA 32 / 68
-
CUDA Sprzęt: GT 200
Multiprocesor strumieniowy (SM)
Liczba wątków aktywnych w multiprocesorze (maks. 1024) znacznieprzekracza liczbę fizycznie dostępnych SP(większość „śpi”, ale zajmuje rejestry multiprocesora)Wiązka wątków fizycznie obsługiwanych w danej chwili (32) to warp(wiązka)Muliprocesor może jednocześnie obsługiwać do 8 bloków i do 32warpów; maksymalna wielkość bloku: 512 wątków.
.Zapamiętaj!..
......
Nadwyżka liczby wątków w bloku w stosunku do liczby SP w SM maskujelatencję w dostępie do danych globalnych. Cena: rejestry multiprocesora.
Zbigniew Koza (IFT UWr) CUDA 33 / 68
-
CUDA Sprzęt: GT 200
Multiprocesor strumieniowy (SM)
Wiązka (warp) to 32 wątkiprzetwarzane w danym cykluprzez SM (2 takty zegara MTIssue = 4 takty zegara SP;kontroler „widzi’ 16 procesorówSP, tzw. half-warp)
Kontroler SM wybiera dowykonania kolejno różne wiązki(karuzela)
Wszystkie 32 wątki w wiązcewykonują tę samą instrukcję(w 2 [4] cyklach zegara)
Zbigniew Koza (IFT UWr) CUDA 34 / 68
-
CUDA Sprzęt: GT 200
Multiprocesor strumieniowy (SM)
Jeżeli program zawiera if/else lubgoto. . .
Wątki w różnych wiązkach mogąswobodnie wykonywać różnegałęzie danego programu
Jeżeli różne wątki danej wiązkizechcą wykonać różne instrukcje,instrukcje wszystkich gałęzi zostanąkolejno wykonane przez wszystkiewątki, ale część z nich będziemaskowana
Możliwy drastyczny spadekwydajności obliczeniowej(„unieważniana”)
Zbigniew Koza (IFT UWr) CUDA 35 / 68
-
CUDA Sprzęt: GT 200
Multiprocesor strumieniowy (SM)
Wiązka (warp) to 32 wątki
Każdy SM może łącznieprzetwarzać do 32 wiązek(1024 wątków)
GT 200 może więc jednocześnieprzetwarzać 1024*30 = 30720wątków
Zbigniew Koza (IFT UWr) CUDA 36 / 68
-
CUDA Sprzęt: GT 200
30 720 wątków???
CPUWiele procesów
Wątek = „lekki proces” słaboodseparowany od innych wątkówtego samego procesu
Wątki mogą być w każdej chwiliprzerwane, a ich kontekstusunięty z procesora
Kontekst wątku: stan rejestrów,przestrzeń adresowa etc.
Kontekst 1 wątku na procesor(fizycznie)
Nadzór – system operacyjny –spory narzut
GPU1 proces (8 w Fermim)
Wątek = „ultra lekki proces”;separacja hierarchiczna
Wątki mogą być w każdej chwiliuśpione, ich kontekst pozostajew procesorze
Kontekst wątku: prywatnerejestry, uchwyt do pamięcidzielonej, (unikatowy dla bloku)adres kolejnej instrukcji
Kontekst 1024 wątków naprocesor (fizycznie) w max. 8blokach, w 32-elem. wiązkach
Nadzór – sprzęt – zero overhead
Zbigniew Koza (IFT UWr) CUDA 37 / 68
-
CUDA Sprzęt: GT 200
30 720 wątków???
CPUWiele procesów
Wątek = „lekki proces” słaboodseparowany od innych wątkówtego samego procesu
Wątki mogą być w każdej chwiliprzerwane, a ich kontekstusunięty z procesora
Kontekst wątku: stan rejestrów,przestrzeń adresowa etc.
Kontekst 1 wątku na procesor(fizycznie)
Nadzór – system operacyjny –spory narzut
GPU1 proces (8 w Fermim)
Wątek = „ultra lekki proces”;separacja hierarchiczna
Wątki mogą być w każdej chwiliuśpione, ich kontekst pozostajew procesorze
Kontekst wątku: prywatnerejestry, uchwyt do pamięcidzielonej, (unikatowy dla bloku)adres kolejnej instrukcji
Kontekst 1024 wątków naprocesor (fizycznie) w max. 8blokach, w 32-elem. wiązkach
Nadzór – sprzęt – zero overhead
Zbigniew Koza (IFT UWr) CUDA 37 / 68
-
CUDA Sprzęt: GT 200
30 720 wątków???
CPUWiele procesów
Wątek = „lekki proces” słaboodseparowany od innych wątkówtego samego procesu
Wątki mogą być w każdej chwiliprzerwane, a ich kontekstusunięty z procesora
Kontekst wątku: stan rejestrów,przestrzeń adresowa etc.
Kontekst 1 wątku na procesor(fizycznie)
Nadzór – system operacyjny –spory narzut
GPU1 proces (8 w Fermim)
Wątek = „ultra lekki proces”;separacja hierarchiczna
Wątki mogą być w każdej chwiliuśpione, ich kontekst pozostajew procesorze
Kontekst wątku: prywatnerejestry, uchwyt do pamięcidzielonej, (unikatowy dla bloku)adres kolejnej instrukcji
Kontekst 1024 wątków naprocesor (fizycznie) w max. 8blokach, w 32-elem. wiązkach
Nadzór – sprzęt – zero overhead
Zbigniew Koza (IFT UWr) CUDA 37 / 68
-
CUDA Sprzęt: GT 200
30 720 wątków???
CPUWiele procesów
Wątek = „lekki proces” słaboodseparowany od innych wątkówtego samego procesu
Wątki mogą być w każdej chwiliprzerwane, a ich kontekstusunięty z procesora
Kontekst wątku: stan rejestrów,przestrzeń adresowa etc.
Kontekst 1 wątku na procesor(fizycznie)
Nadzór – system operacyjny –spory narzut
GPU1 proces (8 w Fermim)
Wątek = „ultra lekki proces”;separacja hierarchiczna
Wątki mogą być w każdej chwiliuśpione, ich kontekst pozostajew procesorze
Kontekst wątku: prywatnerejestry, uchwyt do pamięcidzielonej, (unikatowy dla bloku)adres kolejnej instrukcji
Kontekst 1024 wątków naprocesor (fizycznie) w max. 8blokach, w 32-elem. wiązkach
Nadzór – sprzęt – zero overhead
Zbigniew Koza (IFT UWr) CUDA 37 / 68
-
CUDA Sprzęt: GT 200
30 720 wątków???
CPUWiele procesów
Wątek = „lekki proces” słaboodseparowany od innych wątkówtego samego procesu
Wątki mogą być w każdej chwiliprzerwane, a ich kontekstusunięty z procesora
Kontekst wątku: stan rejestrów,przestrzeń adresowa etc.
Kontekst 1 wątku na procesor(fizycznie)
Nadzór – system operacyjny –spory narzut
GPU1 proces (8 w Fermim)
Wątek = „ultra lekki proces”;separacja hierarchiczna
Wątki mogą być w każdej chwiliuśpione, ich kontekst pozostajew procesorze
Kontekst wątku: prywatnerejestry, uchwyt do pamięcidzielonej, (unikatowy dla bloku)adres kolejnej instrukcji
Kontekst 1024 wątków naprocesor (fizycznie) w max. 8blokach, w 32-elem. wiązkach
Nadzór – sprzęt – zero overhead
Zbigniew Koza (IFT UWr) CUDA 37 / 68
-
CUDA Sprzęt: GT 200
30 720 wątków???
CPUWiele procesów
Wątek = „lekki proces” słaboodseparowany od innych wątkówtego samego procesu
Wątki mogą być w każdej chwiliprzerwane, a ich kontekstusunięty z procesora
Kontekst wątku: stan rejestrów,przestrzeń adresowa etc.
Kontekst 1 wątku na procesor(fizycznie)
Nadzór – system operacyjny –spory narzut
GPU1 proces (8 w Fermim)
Wątek = „ultra lekki proces”;separacja hierarchiczna
Wątki mogą być w każdej chwiliuśpione, ich kontekst pozostajew procesorze
Kontekst wątku: prywatnerejestry, uchwyt do pamięcidzielonej, (unikatowy dla bloku)adres kolejnej instrukcji
Kontekst 1024 wątków naprocesor (fizycznie) w max. 8blokach, w 32-elem. wiązkach
Nadzór – sprzęt – zero overheadZbigniew Koza (IFT UWr) CUDA 37 / 68
-
CUDA Sprzęt: GT 200
Multiprocesor strumieniowy (SM)
Komunikacja z pamięcią karty: magistrala 512bitowa (64 bajty na 30 multiprocesorów i 240 SP)
Wąskie gardło: latencja DRAM (400-600 cyklizegara!)
Optymalizacja: „burst mode” – jednoczesnewczytywanie 64 użytecznych danych z ciągłegoobszaru pamięci
Optymalizacja: dużo liczyć, by zamaskowaćlatencję DRAM
Optymalizacja: właściwe „data alignment”
Optymalizacja: „coalesced data transfer”(złączony transfer danych)
Zbigniew Koza (IFT UWr) CUDA 38 / 68
-
CUDA Sprzęt: GT 200
Multiprocesor strumieniowy (SM)
Aż dziesięć slajdów poświęciłemmultiprocesorowi. . .
Bo to fundament architektury CUDA
Zbigniew Koza (IFT UWr) CUDA 39 / 68
-
CUDA Sprzęt: GT 200
Klaster procesorów strumieniowych (TPC)
Multiprocesory łączy sięw klastry(Texture/ProcessorCluster)
Buforowana pamięćtekstur – ulubione źródłodanychCUDA-programisty(przed fermim)
W fermim nie ma TPC,jest pamięć tekstur
Zbigniew Koza (IFT UWr) CUDA 40 / 68
-
CUDA Sprzęt: GT 200
Klaster procesorów strumieniowych (TPC)
Multiprocesory łączy sięw klastry(Texture/ProcessorCluster)
Buforowana pamięćtekstur – ulubione źródłodanychCUDA-programisty(przed fermim)
W fermim nie ma TPC,jest pamięć tekstur
Zbigniew Koza (IFT UWr) CUDA 40 / 68
-
CUDA Sprzęt: GT 200
Macierz procesorów strumieniowych (SPA)
Triumf modularyzacji: 10 TPC = 30 SM = 240 SP + 60 SFU
Zbigniew Koza (IFT UWr) CUDA 41 / 68
-
CUDA Sprzęt: GT 200
GT 200 w pełnej okazałości
Zbigniew Koza (IFT UWr) CUDA 42 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 80 i GT 200
8800 GTX GTX 280 postęprdzenie SP 128 240 88%tekstury 64t/clk 80t/clk 25%ROP 12p/clk 32p/clk 167%precyzja fp32 fp32, fp64GFLOPS 518 933 80%przepustowość FB 86 GB/s 142 GB/s 65%przepustowość PCI-E 6,4 GB/s 12,8 GB/s 100%
Wąskie gardło: przepustowość złącza PCI-Express (łączy CPU z GPU)
GT 200 komunikują się ze sobą poprzez CPU!!!
Zbigniew Koza (IFT UWr) CUDA 43 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpuWięcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpuMniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpuWięcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpuMniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpuWięcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpuMniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpuWięcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpuMniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpuWięcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpuMniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpuWięcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpuMniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpu
Więcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpu
Mniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpuWięcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpuMniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpuWięcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpuMniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpuWięcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpuMniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GT 200 i GF 100 (fermi)
GF 100, GF 104 (fermi)32 rdzenie na multiprocesor
64-bit. przestrzeń adres. (4GB)
16 jednostek DP/multiprocesor
2 jednostki sterujące namultiprocesor (po 16 wątków)
Komunikacja bezpośredniaGPU-GPU (PCI E)
8 procesów (kerneli) na raz
n kerneli ↔ 1 wątek cpuWięcej on-chip memory
CUDA 4.x (C++, biblioteki)
Pamięć podręczna L1, L2
Pamięć ECC (tesla, Quadro)
GT 2008 rdzeni na multiprocesor
32-bitowa przestrzeń adresowa
1 jednostka DP na multiprocesor
1 jednostka sterująca namultiprocesor
Komunikacja tylko pośrednia:GPU-CPU-GPU (PCI E)
1 proces (kernel) na raz
1 kernel ↔ 1 wątek cpuMniej on-chip memory
CUDA [1,2].x (mniej C++)
Zbigniew Koza (IFT UWr) CUDA 44 / 68
-
CUDA Sprzęt: GT 200
Porównanie GF 100 (GTX 4xx) i GF 104 (GTX 5xx)
GF 100bardziej prądożerny i hałaśliwy
do 492 rdzeni
2 jednostki sterujące namultiprocesor
32 rdzenie na multiprocesor
GF 104mniej prądożerny i cichszy
do 512 rdzeni
2 jednostki sterująca namultiprocesor, inaczej działające
48 rdzeni na multiprocesor
pełne nasycenie wymagaprogramów o większejintensywności obliczeniowej niżGF 100
Zbigniew Koza (IFT UWr) CUDA 45 / 68
-
CUDA Sprzęt: GT 200
Porównanie GF 100 (GTX 4xx) i GF 104 (GTX 5xx)
GF 100bardziej prądożerny i hałaśliwy
do 492 rdzeni
2 jednostki sterujące namultiprocesor
32 rdzenie na multiprocesor
GF 104mniej prądożerny i cichszy
do 512 rdzeni
2 jednostki sterująca namultiprocesor, inaczej działające
48 rdzeni na multiprocesor
pełne nasycenie wymagaprogramów o większejintensywności obliczeniowej niżGF 100
Zbigniew Koza (IFT UWr) CUDA 45 / 68
-
CUDA Sprzęt: GT 200
Porównanie GF 100 (GTX 4xx) i GF 104 (GTX 5xx)
GF 100bardziej prądożerny i hałaśliwy
do 492 rdzeni
2 jednostki sterujące namultiprocesor
32 rdzenie na multiprocesor
GF 104mniej prądożerny i cichszy
do 512 rdzeni
2 jednostki sterująca namultiprocesor, inaczej działające
48 rdzeni na multiprocesor
pełne nasycenie wymagaprogramów o większejintensywności obliczeniowej niżGF 100
Zbigniew Koza (IFT UWr) CUDA 45 / 68
-
CUDA Sprzęt: GT 200
Porównanie GF 100 (GTX 4xx) i GF 104 (GTX 5xx)
GF 100bardziej prądożerny i hałaśliwy
do 492 rdzeni
2 jednostki sterujące namultiprocesor
32 rdzenie na multiprocesor
GF 104mniej prądożerny i cichszy
do 512 rdzeni
2 jednostki sterująca namultiprocesor, inaczej działające
48 rdzeni na multiprocesor
pełne nasycenie wymagaprogramów o większejintensywności obliczeniowej niżGF 100
Zbigniew Koza (IFT UWr) CUDA 45 / 68
-
CUDA Sprzęt: GT 200
Porównanie GF 100 (GTX 4xx) i GF 104 (GTX 5xx)
GF 100bardziej prądożerny i hałaśliwy
do 492 rdzeni
2 jednostki sterujące namultiprocesor
32 rdzenie na multiprocesor
GF 104mniej prądożerny i cichszy
do 512 rdzeni
2 jednostki sterująca namultiprocesor, inaczej działające
48 rdzeni na multiprocesor
pełne nasycenie wymagaprogramów o większejintensywności obliczeniowej niżGF 100
Zbigniew Koza (IFT UWr) CUDA 45 / 68
-
CUDA Software: CUDA API
...1 Wstęp: GPU a CPUCPUGPU
...2 CUDACo to jest CUDA?Architektura procesora GT 200CUDA API
...3 Przyszłość GPU
Zbigniew Koza (IFT UWr) CUDA 46 / 68
-
CUDA Software: CUDA API
CUDA API
Źródło: tomshardware.com
CUDA Driver:niskopoziomowy
CUDA Runtime:bliższy języka CBiblioteki:CUBLAS(Basic Linear Algebra)CUFFT (Fast FourierTransform)CURAND(Random Numbers)CUSPARSE(Sparse LinearAlgebra)CUSP(C++ STL na GPU)
Zbigniew Koza (IFT UWr) CUDA 47 / 68
http://www.tomshardware.com/reviews/nvidia-cuda-gpu,1954-6.html
-
CUDA Software: CUDA API
Słowniczek
host: CPU
device: GPU
kernel: program uruchomiony na GPU
thread: wątek
warp: pakiet 32 wątków przetwarzanych w tym samymmultiprocesorze w tym samym cyklu zegara
block: grupa wątków załadowanych do rejestrów tego samegomultiprocesora; maksymalny rozmiar: 512/1024 wątków; jedenmuliprocesor może przetwarzać kilka bloków naraz (skalowalność!).
grid: niemal dowolnie duża grupa bloków przetwarzanych w różnychmultiprocesorach
wywołanie asynchroniczne: wywołanie funkcji (na GPU)i natychmiastowa kontynuacja obliczeń na CPU
Zbigniew Koza (IFT UWr) CUDA 48 / 68
-
CUDA Software: CUDA API
Kernel
Kernel to program wykonywany na GPU asynchronicznie
W kodzie programu (C/C++) wyróżniony słowem kluczowymglobal
Kiedyś nie mógł zawierać rekurencji/zmiennych statycznych
Nie powinien „konsumować” wielu zmiennych lokalnych (rejestry!)
Powinien zawierać możliwie dużo instrukcji matematycznych(bo właśnie to GPU robi najlepiej)
Nie może zwrócić do hosta wartości
Zbigniew Koza (IFT UWr) CUDA 49 / 68
-
CUDA Software: CUDA API
Wątek
Wątek na GPU jest „lekki” – łatwo go utworzyć i zniszczyć
Wątki na GPU łatwo zsynchronizować
Stosując odpowiedni styl programowania, można uniknąć blokadywątków („deadlock”)
Wątki tworzy się wokół danych a nie algorytmówWątki można w programie zidentyfikować poprzez wartości 3 nowych„parametrów kluczowych”:threadIdx (numer/położenie wątku w bloku )blockIdx (numer/położenie bloku w siatce)blockDim (rozmiar bloku)
Powyższe „parametry” mogą mieć trzy składowe (x, y i z)
Na ich podstawie zwykle każdemu wątkowi jednoznacznieprzyporządkowuje się w programie elementy tablic (1D, 2D lub 3D),na których wątek operuje
Zbigniew Koza (IFT UWr) CUDA 50 / 68
-
CUDA Software: CUDA API
Grid, block
Blok jest najmniejszą jednostką z dostępem do wspólnej pamięci(shared memory)
Bloków powinno być duuuużo
Siatka to sposób podziału wątków na bloki. Dzięki niej programy sąniezależne od sprzętu i łatwo skalowalne (programista nie musiwiedzieć, ile bloków na raz może przetwarzać GPU)
Rozmiar siatki uwarunkowany jest zwykle rozmiarem danych doprzetworzenia
Zbigniew Koza (IFT UWr) CUDA 51 / 68
-
CUDA Software: CUDA API
Nowe typy danych
float1, float2, float3, float4
char1, uchar1, char2, uchar2, char3, uchar3, char4, uchar4
double2
etc.
dim3
Sa to typy wektorowe o składowych x (y, z, w).Przykład:
float4 z;
float p = z.w + z.x;
Zbigniew Koza (IFT UWr) CUDA 52 / 68
-
CUDA Software: CUDA API
Wywołanie kernela
Kernel wywoływany jest asynchronicznie z hosta
Specjalna składnia:
nazwa_funkcji(param1, param2,...);
Przykład:
float A[N][N];
float B[N][N];
float C[N][N];
...
dim3 dimBlock(16, 16);
dim3 dimGrid( (N + dimBlock.x - 1) / dimBlock.x,
(N + dimBlock.y - 1) / dimBlock.y );
...
matAdd(A, B, C);
Zbigniew Koza (IFT UWr) CUDA 53 / 68
-
CUDA Software: CUDA API
Przykład kernela
__global__
void matAdd(float A[N][N], float B[N][N], float C[N][N])
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
int j = blockIdx.y * blockDim.y + threadIdx.y;
if (i < N && j < N)
C[i][j] = A[i][j] + B[i][j];
}
256 wątków na blok o strukturze 2D (16*16)
blockDim podaje rozmiar bloku
blockIdx podaje pozycję bloku na siatce
threadIdx podaje położenie wątku w bloku
Zbigniew Koza (IFT UWr) CUDA 54 / 68
-
CUDA Software: CUDA API
Ułożenie bloków w siatce
Siatki i bloki mogą miećgeometrię (1D, 2D, 3D)
Dobór właściwejgeometrii możeprzyspieszyć dostęp dodanych (poprzezoptymalizację cache-ów)
Zbigniew Koza (IFT UWr) CUDA 55 / 68
-
CUDA Software: CUDA API
Optymalizacja
CUDA SDK zawiera profilerZalecenia programistyczneOrganizuj program wokół przepływu danych, a nie wokół algorytmówOptymalizuj wykorzystanie różnych rodzajów pamięci, szczególniebuforowanych na poziomie L1 (shared memory, constant memory,rejestry, bufor tekstur)Twórz bloki o dużej liczbie wątków (tu trzeba eksperymentować)Twórz kernele o dużej pracochłonnosci obliczeniowej i niewielkimzapotrzebowaniu na rejestry
Zbigniew Koza (IFT UWr) CUDA 56 / 68
-
CUDA Software: CUDA API
Klucz do sukcesu: wykorzystanie pamięci L1
GT 200:
Rejestry(16 384 na multiprocesor)
Shared memory – ultraszybka,całkowicie programowalna,dostęp swobodny, mała (16 KBw 16 bankach)
Constant memory – ultraszybka,tylko do odczytu(8KB cache / MP, łącznie 64KB)
Texture memory – buforowanymagazyn gigabajtów danych(cache rzędu 6-8 KB / MP)
Zbigniew Koza (IFT UWr) CUDA 57 / 68
-
CUDA Software: CUDA API
Compute capability
Compute capability to specyfikacja gwarantowanych możliwościsprzętu.
Obecnie: Compute capability 1.0, 1.1, 1.2 i 1.3, 2.0, 2.1.
Nowe generacje sprzętu – coraz większa Compute capability
Kompatybilność wsteczna
Przykład: tylko urządzenia z Compute capability 1.3 lub wyższej mogąprzetwarzać liczby w podwójnej precyzji
Compute capability 2.x: GTX 4xx, GTX 5xx, Tesla C2xx (fermi)
Compute capability 2.1 nie jest lepsza od 2.0 (równoległa gałąź)
Zbigniew Koza (IFT UWr) CUDA 58 / 68
-
CUDA Software: CUDA API
FMAD (Fused multiply and add)
FMAD to operacja polegająca na pomnożeniu zawartości dwóchrejestrów i dodaniu wyniku do trzeciego rejestru:
a← a+ b × c
„Fused” oznacza, że FMAD traktowana jest jak jedna operacja –tylko jedno zaokrąglenie wyniku!FMAD przyspiesza i poprawia dokładność obliczeń:Iloczynów skalarnychIloczynów macierzyWartości wielomianów
FMAD występuje w standardzie IEEE 754-2008 i języku C99
FMAD zaimplementowano sprzętowo m.in. w procesorach POWER,SPARC, Itanium, GT 200, GF 100, GF 204.
Zbigniew Koza (IFT UWr) CUDA 59 / 68
-
CUDA Software: CUDA API
Podwójne instrukcje (Dual issue) w GT 200
Jednostki obliczeniowe (SP, SFU, FP64) są taktowane 2 razy szybciejniż jednostka sterująca (MT Issue)
Najszybsze operacje obliczeniowe trwają 2 takty zegara MT Issue= 4 takty zegara SP (bo 4*8 wątków = warp).
SFU mogą działać niezależnie od SP
⇒ multiprocesor może jednocześnie przetwarzać „2 potoki” instrukcji
Źródło: beyond3d.com
Niestety, jednostki FP64 nie mogą pracować w trybie dual issue
Zbigniew Koza (IFT UWr) CUDA 60 / 68
http://www.beyond3d.com/content/reviews/51/1
-
CUDA Software: CUDA API
Giga FLOPS-y (w GT 200)
FLOPS (Floating point operation per second) – liczba operacjizmiennoprzecinkowych na sekundę
W trybie dual-issue każdy SP może wykonać 1 FMAD, a SFU – 1MUL = dodawanie i dwa mnożenia = 3 operacje arytmetyczne (fp32)
W trybie fp64 pojedynczy multiprocesor może wykonać 1 FMAD =2 operacje arytmetyczne w podwójnej precyzji
Liczba FLOPS-ów = częstotliwość zegara × liczba rdzeni SP × 3Liczba FLOPS-ów = częstotliwość zegara × liczba multiprocesorów ×2
.Ge Force GTX 280..
......
1296 MHz × 240 ×3 = 933 GFLOPS (fp32)1296 MHz × 30 ×2 = 77.8 GFLOPS (fp64)
Zbigniew Koza (IFT UWr) CUDA 61 / 68
-
CUDA Software: CUDA API
Lepiej mnożyć niż dzielićWydajność instrukcji (w jednym multiprocesorze procesora GT 200)
float a, x, y; int n, m; double A, X, Y
Instrukcja liczba instrukcji w cyklu zegarax + y , x ∗ y , a += x*y (FMAD) 8
1/x 2x/y 0,881/√x 2√x 1
logf (x) 2sinf(x), cosf(x), expf(x) 1sinf(x), cosf(x), expf(x) < 1, dużo rejstrówn +m, n ×m 8n/m, n%m bardzo powoli
min, max, ==, operatory bitowe 8X + Y, X * Y, A += X * Y 1 (?)
Zbigniew Koza (IFT UWr) CUDA 62 / 68
-
CUDA Software: CUDA API
Nasz pierwszy test – problem klasy O(N)
0.001
0.01
0.1
1
105 106 107
t[ms]
N
CPUGPU3GPU4
Źródło: Maciej Matyka
N ∼ liczbaprzetwarzanych danych
t = czas wykonaniazadania
CPU – wiadomo
GPU3 – zwykłeprzepisanie CPU na GPU
GPU4 – reorganizacjadostępu do globalnejpamięci karty
Zbigniew Koza (IFT UWr) CUDA 63 / 68
http://www.matyka.pl
-
CUDA Software: CUDA API
Nasz drugi test – problem klasy O(N2)Rola pamięci dzielonej
1
10
100
1000
102 103 104 105
t CP
U /
t GP
U
N
naive (loop)shared mem
Źródło: Maciej Matyka
naive:zwykła pętla jak dlaCPU
shared mem:kod z optymalnymwykorzystaniem pamięcidzielonej
Zbigniew Koza (IFT UWr) CUDA 64 / 68
http://www.matyka.pl
-
Przyszłość GPU
Część 3
...1 Wstęp: GPU a CPUCPUGPU
...2 CUDACo to jest CUDA?Architektura procesora GT 200CUDA API
...3 Przyszłość GPU
Zbigniew Koza (IFT UWr) CUDA 65 / 68
-
Przyszłość GPU
Futurologia
NVidia zamierza wprowadzać nową architekturę w cyklach 2-3 letnich.
Cokolwiek dziś kupimy, za 2 lata będzie doskonałą kartą graficzną, aleułomnym sprzętem do GPGPU
Co NVidia zrobi z licencją na ARM?
Zbigniew Koza (IFT UWr) CUDA 66 / 68
-
Linki
CUDA Zone (NVidia)
Zbigniew Koza (IFT UWr) CUDA 67 / 68
http://www.nvidia.com/object/cuda_home.html
-
Literatura
NVIDIA CUDA Programming Guide
F. Abi-Chahla, Nvidia’s CUDA: The End of the CPU?
D. Kirk, W. Hwu, CUDA Textbook
Materiały dydaktyczne MIT
A. L. Shimpi, D. Wilson, NVIDIA’s 1.4 Billion Transistor GPU:GT200 Arrives as the GeForce GTX 280 & 260
R. Farber, CUDA, Supercomputing for the Masses
David Kanter, NVIDIA’s GT200: Inside a Parallel Processor
NVIDIA GT200 GPU and Architecture Analysis
J. Piekarski, CUDA się zdarzają, czyli programowanie GPGPU(Software Developer’s Journal 5/2009)
Zbigniew Koza (IFT UWr) CUDA 68 / 68
http://www.nvidia.com/object/cuda_develop.htmlhttp://www.tomshardware.com/reviews/nvidia-cuda-gpu,1954.htmlhttp://sites.google.com/site/cudaiap2009/materials-1/cuda-textbookhttp://sites.google.com/site/cudaiap2009/http://www.anandtech.com/video/showdoc.aspx?i=3334http://www.anandtech.com/video/showdoc.aspx?i=3334http://www.ddj.com/cpp/207200659http://www.realworldtech.com/page.cfm?ArticleID=RWT090808195242&p=1http://www.beyond3d.com/content/reviews/51/1http://www.software.com.pl/prt/view/aktualnosci/issue/983.html
Wst¦p: GPU a CPUCPUGPU
CUDACo to jest CUDA?Architektura procesora GT 200CUDA API
Przyszªo±¢ GPU