część 1 – architektura zbigniew kozakoma/pr/2011/7-cuda1.pdf · 2011. 4. 14. · spis treści...

109
. . CUDA część 1 – architektura Zbigniew Koza Uniwersytet Wrocławski Wydział Fizyki i Astronomii Wrocław, 13 kwietnia 2011 Zbigniew Koza (IFT UWr) CUDA 1 / 68

Upload: others

Post on 04-Feb-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

  • .

    ......

    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