Cena detaliczna 59,00 zł
Cena promocyjna 47,20 zł
nie zaw. kosztów wysyłki
MODEL: 978-83-246-3817-8
Wydrukuj kartę produktu
Dostawa: 1-2 Dni
CUDA w przykładach. Wprowadzenie do ogólnego programowania procesorów GPU
Autorzy: Jason Sanders, Edward Kandrot
Data wydania: 2012/01
Stron: 232
Tytuł oryginału: CUDA by Example: An Introduction to General-Purpose GPU Programming
Tłumaczenie: Łukasz Piwko
ISBN: 9788324638178 / 978-83-246-3817-8
Format: 168x237
Oprawa: miękka
Numer z katalogu: 7813
Przykłady na ftp
Książka ta jest obowiązkową pozycją dla wszystkich programistów pracujących z systemami zawierającymi akceleratory.
Ze wstępu autorstwa Jacka Dongarry’ego,
Uniwersytet Tennessee i Oak Ridge National Laboratory
Od astrofizyki i chemii, przez biologię obliczeniową, aż po analizę sejsmiczną i rekonstrukcję obrazu w tomografii komputerowej - architektura CUDA została entuzjastycznie przyjęta przez środowiska naukowe i akademickie. Znalazła też zastosowanie w wielu strategicznych gałęziach gospodarki i stała się niezwykłym ułatwieniem dla twórców programów
równoległych, którym pozwoliła na wykorzystanie olbrzymiej mocy procesorów GPU do budowy ekstremalnie wydajnych aplikacji. Oto podręcznik napisany przez członków zespołu tworzących architekturę CUDA. Stanowi on wyczerpujące wprowadzenie w świat programowania najnowszych akceleratorów o dużych możliwościach przetwarzania równoległego.
Oparty na licznych przykładach, zilustrowany fragmentami przydatnego kodu przewodnik zawiera pełny opis tej platformy, wprowadzenie do języka CUDA C oraz szczegółowy opis wszystkich kluczowych technik pracy z tą niezwykłą architekturą.
Programowanie równoległe
Współpraca wątków
Pamięć stała i zdarzenia
Pamięć teksturowa
Interoperacyjność grafiki
Operacje atomowe
Strumienie
CUDA C na wielu procesorach GPU
Operacje atomowe dla zaawansowanych
Dodatkowe zasoby CUDA
Opanuj język CUDA C i pisz programy wyróżniające się niezwykłą wydajnością!
Jason Sanders jest starszym programistą w zespole ds. platformy CUDA w firmie NVIDIA. Brał udział w pracach nad
pierwszymi wersjami oprogramowania systemowego CUDA. Ma także ma swój wkład w specyfikację OpenCL 1.0. Zanim
rozpoczął pracę w NVIDIA, pracował dla firm ATI Technologies, Apple oraz Novell.
Edward Kandrot jest starszym programistą w zespole ds. algorytmów CUDA w firmie NVIDIA. Przedtem pracował nad
wydajnością programów takich firm, jak Adobe, Microsoft, Google czy Autodesk.
Słowo wstępne 9
Przedmowa 11
Podziękowania 13
O autorach 15
1. Dlaczego CUDA? Dlaczego teraz? 17
1.1. Streszczenie rozdziału 17
1.2. Era przetwarzania równoległego 17
1.2.1. Procesory CPU 18
1.3. Era procesorów GPU 19
1.3.1. Historia procesorów GPU 19
1.3.2. Początki programowania GPU 20
1.4. CUDA 21
1.4.1. Co to jest architektura CUDA 21
1.4.2. Używanie architektury CUDA 22
1.5. Zastosowania technologii CUDA 22
1.5.1. Obrazowanie medyczne 22
1.5.2. Symulacja dynamiki płynów 23
1.5.3. Ochrona środowiska 24
1.6. Podsumowanie 25
2. Konfiguracja komputera 27
2.1. Streszczenie rozdziału 27
2.2. Środowisko programistyczne 27
2.2.1. Procesor graficzny z obsługą technologii CUDA 28
2.2.2. Sterownik urządzeń NVIDII 29
2.2.3. Narzędzia programistyczne CUDA 30
2.2.4. Standardowy kompilator języka C 31
2.3. Podsumowanie 32
3. Podstawy języka CUDA C 33
3.1. Streszczenie rozdziału 33
3.2. Pierwszy program 33
3.2.1. Witaj, świecie! 34
3.2.2. Wywoływanie funkcji jądra 34
3.2.3. Przekazywanie parametrów 35
3.3. Sprawdzanie właściwości urządzeń 38
3.4. Korzystanie z wiedzy o właściwościach urządzeń 42
3.5. Podsumowanie 43
4. Programowanie równoległe w języku CUDA C 45
4.1. Streszczenie rozdziału 45
4.2. Programowanie równoległe w technologii CUDA 45
4.2.1. Sumowanie wektorów 46
4.2.2. Zabawny przykład 52
4.3. Podsumowanie 60
5. Wątki 61
5.1. Streszczenie rozdziału 61
5.2. Dzielenie równoległych bloków 61
5.2.1. Sumowanie wektorów - nowe spojrzenie 62
5.2.2. Generowanie rozchodzących się fal za pomocą wątków 68
5.3. Pamięć wspólna i synchronizacja 72
5.3.1. Iloczyn skalarny 74
5.3.2. Optymalizacja niepoprawna programu obliczającego iloczyn skalarny 82
5.3.3. Generowanie mapy bitowej za pomocą pamięci wspólnej 84
5.4. Podsumowanie 87
6. Pamięć stała i zdarzenia 89
6.1. Streszczenie rozdziału 89
6.2. Pamięć stała 89
6.2.1. Podstawy techniki śledzenia promieni 90
6.2.2. Śledzenie promieni na GPU 91
6.2.3. Śledzenie promieni za pomocą pamięci stałej 96
6.2.4. Wydajność programu a pamięć stała 97
6.3. Mierzenie wydajności programów za pomocą zdarzeń 99
6.3.1. Pomiar wydajności algorytmu śledzenia promieni 100
6.4. Podsumowanie 103
7. Pamięć tekstur 105
7.1. Streszczenie rozdziału 105
7.2. Pamięć tekstur w zarysie 105
7.3. Symulacja procesu rozchodzenia się ciepła 106
7.3.1. Prosty model ogrzewania 106
7.3.2. Obliczanie zmian temperatury 108
7.3.3. Animacja symulacji 110
7.3.4. Użycie pamięci tekstur 114
7.3.5. Użycie dwuwymiarowej pamięci tekstur 117
7.4. Podsumowanie 121
8. Współpraca z bibliotekami graficznymi 123
8.1. Streszczenie rozdziału 124
8.2. Współpraca z bibliotekami graficznymi 124
8.3. Generowanie rozchodzących się fal za pomocą GPU i biblioteki graficznej 130
8.3.1. Struktura GPUAnimBitmap 130
8.3.2. Algorytm generujący fale na GPU 133
8.4. Symulacja rozchodzenia się ciepła za pomocą biblioteki graficznej 135
8.5. Współpraca z DirectX 139
8.6. Podsumowanie 139
9. Operacje atomowe 141
9.1. Streszczenie rozdziału 141
9.2. Potencjał obliczeniowy 141
9.2.1. Potencjał obliczeniowy procesorów GPU NVIDII 142
9.2.2. Kompilacja dla minimalnego potencjału obliczeniowego 144
9.3. Operacje atomowe w zarysie 144
9.4. Obliczanie histogramów 146
9.4.1. Obliczanie histogramu za pomocą CPU 146
9.4.2. Obliczanie histogramu przy użyciu GPU 148
9.5. Podsumowanie 156
10. Strumienie 157
10.1. Streszczenie rozdziału 157
10.2. Pamięć hosta z zablokowanym stronicowaniem 158
10.3. Strumienie CUDA 162
10.4. Używanie jednego strumienia CUDA 162
10.5. Użycie wielu strumieni CUDA 166
10.6. Planowanie pracy GPU 171
10.7. Efektywne wykorzystanie wielu strumieni CUDA jednocześnie 173
10.8. Podsumowanie 175
11. Wykonywanie kodu CUDA C jednocześnie na wielu GPU 177
11.1. Streszczenie rozdziału 177
11.2. Pamięć hosta niewymagająca kopiowania 178
11.2.1. Obliczanie iloczynu skalarnego za pomocą pamięci niekopiowanej 178
11.2.2. Wydajność pamięci niekopiowanej 183
11.3. Użycie kilku procesorów GPU jednocześnie 184
11.4. Przenośna pamięć zablokowana 188
11.5. Podsumowanie 192
12. Epilog 193
12.1. Streszczenie rozdziału 194
12.2. Narzędzia programistyczne 194
12.2.1. CUDA Toolkit 194
12.2.2. Biblioteka CUFFT 194
12.2.3. Biblioteka CUBLAS 195
12.2.4. Pakiet GPU Computing SDK 195
12.2.5. Biblioteka NVIDIA Performance Primitives 196
12.2.6. Usuwanie błędów z kodu CUDA C 196
12.2.7. CUDA Visual Profiler 198
12.3. Literatura 199
12.3.1. Książka Programming Massively Parallel Processors: A Hands-on Approach 199
12.3.2. CUDA U 199
12.3.3. Fora NVIDII 200
12.4. Zasoby kodu źródłowego 201
12.4.1. Biblioteka CUDA Parallel Primitives Library 201
12.4.2. CULATools 201
12.4.3. Biblioteki osłonowe 202
12.5. Podsumowanie 202
A: Operacje atomowe dla zaawansowanych 203
A.1. Iloczyn skalarny po raz kolejny 203
A.1.1. Blokady atomowe 205
A.1.2. Iloczyn skalarny: blokady atomowe 207
A.2. Implementacja tablicy skrótów 210
A.2.1. Tablice skrótów - wprowadzenie 210
A.2.2. Tablica skrótów dla CPU 212
A.2.3. Wielowątkowa tablica skrótów 216
A.2.4. Tablica skrótów dla GPU 217
A.2.5. Wydajność tablicy skrótów 223
A.3. Podsumowanie 224
Skorowidz 225
Autor: Sanders Jason, Kandrot Edward
Rok wydania: 2012
ISBN: 978-83-246-3817-8
Data dodania do sklepu sobota, 21 styczeń 2012.