OpenCL. Akceleracja GPU w praktyce - ebook
OpenCL. Akceleracja GPU w praktyce - ebook
Książka jest skierowana do programistów, którzy chcą się zapoznać z technologią OpenCL W publikacji duży nacisk został położony na przedstawienie konkretnych przykładów (wraz z komentarzem opisującym sposób implementacji danego przykładu oraz techniczne aspekty danego problemu). Zaprezentowane zostały także sposoby wykorzystywania OpenCL do realizacji różnych zadań obliczeniowych. Praktyczne przykłady obejmują zagadnienia m.in. z algebry liniowej. W książce znajdują się także przykłady przetwarzania grafiki. Ze względu na charakter OpenCL opisano również sposoby korzystania z możliwości OpenCL oferowanych przez różne dodatkowe biblioteki, a także pakiety ułatwiające współpracę z technologią OpenCL. Uzupełnieniem publikacji są bardziej zaawansowane przykłady rozwiązywania równań różniczkowych czy też przedstawienie metody Black Scholes.
Z książki można nauczyć się, jak: – korzystać z technologii OpenCL; – tworzyć własne jądra obliczeniowe; – przetwarzać grafikę za pomocą wbudowanych możliwości OpenCL.
Dobrze jest znać: – wybrane pojęcia algebry liniowej, m.in. macierze, wektory; – podstawy języków C, C++ oraz Python; – środowisko IDE, np. Visual Studio. Choć nie jest to książka przeznaczona dla początkującego czytelnika i wymaga umiejętności programowania na poziomie średnim, to zawarte w niej informacje z pewnością pozwolą na zapoznanie się z technologią OpenCL i możliwościami obliczeniowymi, jakie ona oferuje.
Spis treści
1. Wprowadzenie
1.1. Obliczenia równoległe
1.2. Zawartość książki
2. Standard OpenCL
2.1. Model platformy
2.2. Model pamięci
2.3. Model wykonawczy
2.3.1. Siatka obliczeniowa – NDRange
2.3.2. Kontekst obliczeń oraz kolejka poleceń
2.4. Model programowania
3. Język programowania dostępny w OpenCL
3.1. Typy danych
3.1.1. Typy podstawowe (typy skalarne)
3.1.2. Typy wektorowe
3.1.3. Typy do obsługi obrazów
3.1.4. Inne typy oraz nazwy zarezerwowane
3.2. Dostępne operatory
3.3. Funkcje wbudowane
3.4. Dodatkowe kwalifikatory oraz atrybuty
3.5. Operacje na typach wektorowych OpenCL
3.5.1. Dane typu wektorowego – dostęp do składowych
3.5.2. Operacje na typach wektorowych
3.5.3. Funkcje obsługujące dane typu wektorowego
3.6. Obsługa siatki obliczeniowej
3.7. Funkcje synchronizacji i funkcje atomowe
3.8. Funkcje do obsługi obrazów
3.9. Preprocesor OpenCL C
3.10. Ograniczenia OpenCL C
4. OpenCL – łatwe przykłady na początek
4.1. Informacje o urządzeniu obliczeniowym
4.1.1. Wersja dla API w języku C
4.1.2. Informacje o urządzeniu obliczeniowym obiektowo i w C++
4.2. Witaj Świecie!
4.2.1. Przygotowania
4.2.2. Uruchomienie jądra obliczeniowego
4.3. Dodawanie wektorów
4.3.1. Jądro obliczeniowe
4.3.2. Wersja dla C++
4.3.3. Inne operacje na wektorach do ćwiczeń
4.4. Siatka lokalna oraz globalna
4.5. Zlecanie i wykonywanie zadań
4.6. Uwagi o kompilacji jądra obliczeniowego
5. Przykłady obliczeń w OpenCL
5.1. Obsługa printf w OpenCL
5.2. Operacja redukcji
5.2.1. Operacja redukcji – wersja szeregowa
5.2.2. Operacja redukcji – jądro obliczeniowe podejście pierwsze
5.2.3. Operacja redukcji – jądro obliczeniowe podejście drugie
5.2.4. Operacja redukcji – jądro obliczeniowe poddane optymalizacji
5.3. Wyznaczanie histogramu
5.3.1. Wersja szeregowa
5.3.2. Wersja dla OpenCL
5.4. Równoległe szukanie prawie binarne
5.4.1. Wersja równoległa dla OpenCL
5.5. Przybliżanie wartości liczby ?
5.5.1. Wersja szeregowa
5.5.2. Wersja OpenCL – podejście bezpośrednie
5.5.3. Wersja OpenCL – podejście o wyższej wydajności
5.6. Gra w życie
5.6.1. Gra w życie – procedura obliczeniowa
5.6.2. Gra w życie – obsługa symulacji
5.7. Zbiór Mandelbrota
5.7.1. Zbiór Julii
5.7.2. Tworzenie obrazu zbioru Mandelbrota – wersja szeregowa
5.7.3. Tworzenie obrazu zbioru Mandelbrota – wersja OpenCL
5.7.4. Tworzenie obrazu zbioru Julii
5.7.5. Kolorowanie zbioru fraktalnego
5.8. Algorytm sortowania bitonicznego
5.8.1. Sieci sortujące
5.8.2. Bitoniczna sieć sortująca
5.8.3. Szeregowa wersja algorytmu sortowania bitonicznego
5.8.4. Równoległa wersja algorytmu sortowania bitonicznego dla OpenCL
5.9. Przetwarzanie obrazów
5.9.1. Podstawy – wypełnienie obrazu
5.9.2. Skalowanie obrazu
5.9.3. Rozmywanie obrazu – filtr Gaussa
5.9.4. Wykrywanie krawędzi w obrazie za pomocą filtru Sobela
5.10. Współpraca OpenCL z OpenGL
5.10.1. Procedury obliczeniowe OpenCL
5.10.2. Czynności wykonywane w programie gospodarza
6. OpenCL w innych językach programowania
6.1. Język Python
6.1.1. Przegląd API pakietu PyOpenCL
6.1.2. Znów dodawanie wektorów, ale w Pythonie
6.1.3. Skrypt do testowania siatki obliczeniowej
6.1.4. Stosowanie typów użytkownika
6.1.5. Klasa w Pythonie dla łatwiejszej współpracy z OpenCL
6.2. Pakiet APARAPI dla języka Java
6.2.1. Dodawanie wektorów
6.2.2. Przegląd API pakietu APARAPI
6.2.3. Algorytm Blacka-Sholesa
6.2.4. Mechanizm rozszerzeń
6.3. Inne rozwiązania, VexCL i nie tylko
7. Zamiast zakończenia
7.1.1. Analiza wydajności symulacji przykładu „Gra w życie”
Dodatek A. Kompilacja przykładów
Dodatek B. Instalacja pakietu OpenCL dla języka Python
Dodatek C. Opis funkcji pomocniczych
C.1. Zapis do formatu PPM
C.2. Konwersja kodów formatu koloru do wartości znakowych
C.3. Zapis i odczyt danych w formacie PNG
C.4. Konwersja z modelu kolorów HSV do RGB
C.5. Utworzenie macierzy dla filtru rozmywającego
Dodatek D. Zestawianie używanych funkcji API OpenCL
D.1. Funkcja clGetPlatformIDs
D.2. Funkcja clGetPlatformInfo
D.3. Funkcja clGetDeviceInfo
D.4. Funkcja clGetSupportedImageFormats
D.5. Funkcja clGetDeviceIDs
D.6. Funkcja clCreateContext
D.7. Funkcja clBuildProgram
D.8. Funkcja clGetProgramBuildInfo
D.9. Funkcja clCreateCommandQueue
D.10. Funkcja clCreateBuffer
D.11. Funkcja clEnqueueReadBuffer
D.12. Funkcja clEnqueueWriteBuffer
D.13. Funkcja clCreateProgramWithSource
D.14. Funkcja clCreateKernel
D.15. Funkcja clSetKernelArg
D.16. Funkcja clEnqueueNDRangeKernel
D.17. Funkcja clEnqueueTask
D.18. Funkcja clGetKernelWorkGroupInfo
D.19. Funkcja clCreateImage2D
D.20. Funkcja clEnqueueReadImage
D.21. Funkcja clEnqueueWriteImage
D.22. Funkcja clFinish
D.23. Funkcja clReleaseKernel
D.24. Funkcja clReleaseProgram
D.25. Funkcja clReleaseCommandQueue
D.26. Funkcja clReleaseMemObject
D.27. Funkcja clReleaseContext
D.28. Funkcja clCreateFromGLBuffer
D.29. Funkcja clCreateFromGLTexture2D
D.30. Funkcja clEnqueueAcquireGLObjects
D.31. Funkcja clEnqueueReleaseGLObjects
Dodatek E. Spis kodów błędów API OpenCL
Dodatek F. Najczęściej spotykane nazwy rozszerzeń
Literatura
Indeks
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-01-18045-4 |
Rozmiar pliku: | 3,3 MB |