INNE EBOOKI AUTORA
Autor:
Wydawca:
Format:
mobi, epub, ibuk
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.
Rok wydania | 2014 |
---|---|
Liczba stron | 344 |
Kategoria | Programowanie |
Wydawca | Wydawnictwo Naukowe PWN |
ISBN-13 | 978-83-01-18045-4 |
Numer wydania | 1 |
Język publikacji | polski |
Informacja o sprzedawcy | ePWN sp. z o.o. |
INNE EBOOKI AUTORA
EBOOKI WYDAWCY
POLECAMY
Ciekawe propozycje
Spis treści
1. Wprowadzenie | 9 |
1.1. Obliczenia równoległe | 10 |
1.2. Zawartość książki | 13 |
2. Standard OpenCL | 17 |
2.1. Model platformy | 17 |
2.2. Model pamięci | 19 |
2.3. Model wykonawczy | 21 |
2.3.1. Siatka obliczeniowa – NDRange | 23 |
2.3.2. Kontekst obliczeń oraz kolejka poleceń . | 25 |
2.4. Model programowania | 26 |
3. Język programowania dostępny w OpenCL | 29 |
3.1. Typy danych | 29 |
3.1.1. Typy podstawowe (typy skalarne) | 30 |
3.1.2. Typy wektorowe | 33 |
3.1.3. Typy do obsługi obrazów | 34 |
3.1.4. Inne typy oraz nazwy zarezerwowane | 36 |
3.2. Dostępne operatory | 38 |
3.3. Funkcje wbudowane | 38 |
3.4. Dodatkowe kwalifikatory oraz atrybuty | 48 |
3.5. Operacje na typach wektorowych OpenCL | 51 |
3.5.1. Dane typu wektorowego – dostęp do składowych | 52 |
3.5.2. Operacje na typach wektorowych | 55 |
3.5.3. Funkcje obsługujące dane typu wektorowego | 58 |
3.6. Obsługa siatki obliczeniowej | 60 |
3.7. Funkcje synchronizacji i funkcje atomowe | 62 |
3.8. Funkcje do obsługi obrazów | 65 |
3.9. Preprocesor OpenCL C | 68 |
3.10. Ograniczenia OpenCL C | 71 |
4. OpenCL – łatwe przykłady na początek | 73 |
4.1. Informacje o urządzeniu obliczeniowym | 73 |
4.1.1. Wersja dla API w języku C | 75 |
4.1.2. Informacje o urządzeniu obliczeniowym obiektowo i w C++ | 90 |
4.2. Witaj Świecie! | 97 |
4.2.1. Przygotowania | 98 |
4.2.2. Uruchomienie jądra obliczeniowego | 99 |
4.3. Dodawanie wektorów | 109 |
4.3.1. Jądro obliczeniowe | 110 |
4.3.2. Wersja dla C++ | 114 |
4.3.3. Inne operacje na wektorach do ćwiczeń | 119 |
4.4. Siatka lokalna oraz globalna | 120 |
4.5. Zlecanie i wykonywanie zadań | 124 |
4.6. Uwagi o kompilacji jądra obliczeniowego | 126 |
5. Przykłady obliczeń w OpenCL | 129 |
5.1. Obsługa printf w OpenCL | 129 |
5.2. Operacja redukcji | 133 |
5.2.1. Operacja redukcji – wersja szeregowa | 134 |
5.2.2. Operacja redukcji – jądro obliczeniowe podejście pierwsze . | 135 |
5.2.3. Operacja redukcji – jądro obliczeniowe podejście drugie | 139 |
5.2.4. Operacja redukcji – jądro obliczeniowe poddane optymalizacji | 143 |
5.3. Wyznaczanie histogramu | 145 |
5.3.1. Wersja szeregowa | 145 |
5.3.2. Wersja dla OpenCL | 147 |
5.4. Równoległe szukanie prawie binarne | 150 |
5.4.1. Wersja równoległa dla OpenCL | 152 |
5.5. Przybliżanie wartości liczby π | 154 |
5.5.1. Wersja szeregowa | 154 |
5.5.2. Wersja OpenCL – podejście bezpośrednie | 156 |
5.5.3. Wersja OpenCL – podejście o wyższej wydajności | 162 |
5.6. Gra w życie | 168 |
5.6.1. Gra w życie – procedura obliczeniowa | 169 |
5.6.2. Gra w życie – obsługa symulacji | 172 |
5.7. Zbiór Mandelbrota | 176 |
5.7.1. Zbiór Julii | 177 |
5.7.2. Tworzenie obrazu zbioru Mandelbrota – wersja szeregowa | 177 |
5.7.3. Tworzenie obrazu zbioru Mandelbrota – wersja OpenCL | 180 |
5.7.4. Tworzenie obrazu zbioru Julii | 184 |
5.7.5. Kolorowanie zbioru fraktalnego | 185 |
5.8. Algorytm sortowania bitonicznego | 188 |
5.8.1. Sieci sortujące | 188 |
5.8.2. Bitoniczna sieć sortująca | 190 |
5.8.3. Szeregowa wersja algorytmu sortowania bitonicznego | 192 |
5.8.4. Równoległa wersja algorytmu sortowania bitonicznego dla OpenCL | 195 |
5.9. Przetwarzanie obrazów | 197 |
5.9.1. Podstawy – wypełnienie obrazu | 197 |
5.9.2. Skalowanie obrazu | 202 |
5.9.3. Rozmywanie obrazu – filtr Gaussa . | 207 |
5.9.4. Wykrywanie krawędzi w obrazie za pomocą filtru Sobela | 212 |
5.10. Współpraca OpenCL z OpenGL | 218 |
5.10.1. Procedury obliczeniowe OpenCL | 218 |
5.10.2. Czynności wykonywane w programie gospodarza | 219 |
6. OpenCL w innych językach programowania | 225 |
6.1. Język Python | 225 |
6.1.1. Przegląd API pakietu PyOpenCL | 227 |
6.1.2. Znów dodawanie wektorów, ale w Pythonie | 232 |
6.1.3. Skrypt do testowania siatki obliczeniowej | 236 |
6.1.4. Stosowanie typów użytkownika . | 238 |
6.1.5. Klasa w Pythonie dla łatwiejszej współpracy z OpenCL | 240 |
6.2. Pakiet APARAPI dla języka Java | 242 |
6.2.1. Dodawanie wektorów | 242 |
6.2.2. Przegląd API pakietu APARAPI | 245 |
6.2.3. Algorytm Blacka-Sholesa | 246 |
6.2.4. Mechanizm rozszerzeń | 249 |
6.3. Inne rozwiązania, VexCL i nie tylko | 251 |
7. Zamiast zakończenia | 255 |
7.1.1. Analiza wydajności symulacji przykładu „Gra w życie” | 255 |
Dodatek A. Kompilacja przykładów | 261 |
Dodatek B. Instalacja pakietu OpenCL dla języka Python | 263 |
Dodatek C. Opis funkcji pomocniczych | 265 |
C.1. Zapis do formatu PPM | 265 |
C.2. Konwersja kodów formatu koloru do wartości znakowych | 267 |
C.3. Zapis i odczyt danych w formacie PNG | 268 |
C.4. Konwersja z modelu kolorów HSV do RGB | 271 |
C.5. Utworzenie macierzy dla filtru rozmywającego | 272 |
Dodatek D. Zestawianie używanych funkcji API OpenCL | 275 |
D.1. Funkcja clGetPlatformIDs | 275 |
D.2. Funkcja clGetPlatformInfo | 276 |
D.3. Funkcja clGetDeviceInfo | 278 |
D.4. Funkcja clGetSupportedImageFormats | 286 |
D.5. Funkcja clGetDeviceIDs | 288 |
D.6. Funkcja clCreateContext | 290 |
D.7. Funkcja clBuildProgram | 291 |
D.8. Funkcja clGetProgramBuildInfo | 295 |
D.9. Funkcja clCreateCommandQueue | 297 |
D.10. Funkcja clCreateBuffer | 298 |
D.11. Funkcja clEnqueueReadBuffer | 300 |
D.12. Funkcja clEnqueueWriteBuffer | 303 |
D.13. Funkcja clCreateProgramWithSource | 305 |
D.14. Funkcja clCreateKernel | 306 |
D.15. Funkcja clSetKernelArg | 307 |
D.16. Funkcja clEnqueueNDRangeKernel | 309 |
D.17. Funkcja clEnqueueTask | 311 |
D.18. Funkcja clGetKernelWorkGroupInfo | 313 |
D.19. Funkcja clCreateImage2D | 316 |
D.20. Funkcja clEnqueueReadImage | 317 |
D.21. Funkcja clEnqueueWriteImage | 321 |
D.22. Funkcja clFinish | 324 |
D.23. Funkcja clReleaseKernel | 325 |
D.24. Funkcja clReleaseProgram | 325 |
D.25. Funkcja clReleaseCommandQueue | 326 |
D.26. Funkcja clReleaseMemObject | 327 |
D.27. Funkcja clReleaseContext | 327 |
D.28. Funkcja clCreateFromGLBuffer | 328 |
D.29. Funkcja clCreateFromGLTexture2D | 329 |
D.30. Funkcja clEnqueueAcquireGLObjects | 331 |
D.31. Funkcja clEnqueueReleaseGLObjects | 332 |
Dodatek E. Spis kodów błędów API OpenCL | 335 |
Dodatek F. Najczęściej spotykane nazwy rozszerzeń | 339 |
Literatura | 341 |
Indeks | 343 |