Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Grand Central Dispatch & OpenGl [2010 / PL]

Grand Central Dispatch & OpenGl [2010 / PL]

Presentation which I delivered at the University of Science and Technology in Kraków.

Feel free to visit: http://www.mackn.agh.edu.pl/

Avatar for Michał Dziadkowiec

Michał Dziadkowiec

June 22, 2010

Other Decks in Programming

Transcript

  1. AGENDA • Co to jest Grand Central Dispatch? • Wizualizacja

    GCD • Co to jest OpenCL? • Zastosowanie, zasada działania • Rola nadgryzionego jabłka (Apple)
  2. GPU? CPU? • GPU - Graphics Processing Unit • główna

    jednostka obliczeniowa w kartach graficznych • CPU - Central Processing Unit • pobiera dane z pamięci, interpretuje je i wykonuje jako rozkazy
  3. CPU VS. GPU Core 2 Duo NVIDIA GTX 285 Pobór

    mocy Liczba rdzeni Transer danych szybkość obliczeń 150W 204W 4 240 8.5 GB/s 159 GB/s 45 GF/s 1 TF/s
  4. GRAND CENTRAL DISPATCH • od wersji 10.6 (Snow Leopard) •

    podstawy dla programowania wielowątkowego • „Matka” wszystkich wątków
  5. GDZIE DZIAŁA GCD? • Komputery Mac z procesorem Intel, Snow

    Leopard 10.6 • iPad • iPhone 4 • oraz... FreeBSD 9.x
  6. CO TO JEST OPENCL? • Open Computing Language • otwarta

    specyfikacja • zaproponowana przez Apple • rozwijana przez wiele firm, m.in. NVIDIA, AMD, INTEL
  7. OPENCL • OpenCL potrzebuje implementacji • podobna do OpenGL •

    otwarty standard tzn. może być adoptowany przez kogokolwiek • implementacja musi być zgodna ze specyfikacją
  8. DLACZEGO OPENCL? • aktualnie wydajność obliczeń zwiększa się z liczbą

    rdzeni a nie z takowaniem zegara • Wiele CPU oraz programowalnych GPU • API dające możliwość wykorzystania wszystkich zasobów • wsparcie dla każdego rodzaju obliczeń równoległych
  9. OPENCL • niezależne od hardware, na dowolnym sprzęcie, który ma

    implementację • kod powinen być przenośny (portable) • żadna firma nie ma kontroli nad specifikacji
  10. CELE OPENCL • łatwy w użyciu, lekki i wydajny •

    wykorzystujący wszystkie jednostki liczące w komputerze • minimum błędów dla funkcji matematycznych • udostępniający wsparcie dla najnowszych urządzeń
  11. OPENCL: PRAWIE JAK C • oparty na standardzie ANSI-C99 •

    przejrzyste API • dodano wektory, dodatkowe typy i funkcje
  12. OPENCL - PAMIĘĆ • tablice, podobnie jak C, ale nie

    są buforowane • obrazy 2D oraz 3D • dane jako tekstury
  13. WYKORZYSTANIE OPENCL • przetwarzanie obazów, filmów oraz dźwięku • symulacje

    i obliczenia naukowe • obrazowanie medyczne • modele finansowe • programowanie równoległe wymagające dużych obliczeń
  14. OPENCL ORAZ OPENGL • doskonała współpraca • dane mogą być

    współdzielone • bardzo małe wykorzystanie CPU CPU OpenCL OpenGL dane dane
  15. OPENCL - KIEDY NIE UŻYWAĆ • programowanie sekwencyjne, krok po

    kroku • obliczenia wymagające wielu operacji wskaźnikowych • obliczenia wymagające komunikacji i uaktualnień wyników • rozwiązania ograniczane przez urządzenia
  16. A MOŻE CUDA? • Compute Unified Device Architecture • CUDA

    jest potężnym, zaawansowanym API dla GPGPU (General-purpose computing on graphics processing units) • integruje się z istniejącym kodem (C/C++) • jest zależna od urządzeń (!) • działa tylko na urządzeniach firmy NVIDIA • wspiera tylko karty graficzne
  17. OPENCL: ŚRODOWISKO • Kompilacja przed uruchomieniem • całkowicie dynamicznie •

    kompilator llvm (rozwijany głównie przez Apple) • kompilacja Just-in-time
  18. OPENCL W SYSTEMIE SNOW LEOPARD Grafika i Media Darwin QuickTime

    CoreImage CoreAudio CoreVideo OpenGL OpenCL Grand Central Dispatch
  19. JĄDRO OBLICZENIOWE • Compute kernel • równoległa funkcja wykonywana przez

    jednostkę obliczeniową (CPU lub GPU) __kernel void sum (__global const float *a, __global const float *b, __global float *wynik) { int xid = get_global_id(0); wynik[xid] = a[xid] + b[xid]; } float *a = 2 5 4 1 6 float *b = 1 4 2 6 2 float *wynik = 3 9 6 7 8 __kernel void sum(...);
  20. PROGRAMY OBLICZENIOWE • Compute program • grupa kerneli oraz funkcji

    __kernel void sum(...); __kernel void slad(...); float product(...); ... __kernel void oblicz(...);
  21. TYPY ZMIENNYCH • private • local • constant • global

    Compute Unit 1 Threat 1 Private Threat I1 Private Compute Unit 2 Threat 1 Private Threat I1 Private Local Memory Local Memory Global/Constant Memory Cache Compute Device
  22. PRZEDMIOTY OBIERALNE RAELIZOWANE NA VII SEMESTRZE STUDIÓW STACJONARNYCH I STOPNIA

    NA KIERUNKU INFORMATYKA STOSOWANA W KATEDRZE GEOINFORMATYKI I INFORMATYKI STOSOWANEJ • Fakultet geoinformatyczny: 15W • Obliczenia z wykorzystaniem GPU • Historia obliczeń z wykorzystaniem kart graficznych; Przegląd architektur i technologii: Compute Unified Device Architecture ("CUDA"), AMD Stream Computing, OpenCL, OpenGL; Wstęp do programowania w C dla architektury CUDA: API, wątki, bloki, grid, pamięć itp.; Obliczenia zmiennoprzecinkowe: wydajność i precyzja; Plusy i minusy architektury GPU; Wybrane algorytmy równoległe i ich sprzętowa akceleracja; Porównanie wydajności obliczeń na GPU i tradycyjnych metod obliczeń równoległych; Możliwości i ograniczenia obliczeń z wykorzystaniem GPU w środowiskach rozproszonych i heterogenicznych (multiGPU i multiCPU-multiGPU).