9. Kr坦tka historia GPU
Terminale znakowe
Renderowanie obrazu skadajcego si z pixeli
10. Kr坦tka historia GPU
Terminale znakowe
Renderowanie obrazu skadajcego si z pixeli
Akceleracja 2D, rysowanie ksztat坦w, Z-bufory, sprite'y.
11. Kr坦tka historia GPU
Wejcie w wiat 3D - obliczenia na wektorach macierzach liczb
zmiennoprzecinkowych
12. Kr坦tka historia GPU
Wejcie w wiat 3D - obliczenia na wektorach macierzach liczb
zmiennoprzecinkowych
Pojawienie si pierwszego GPU - NV10. Karta graficzna przeja
obliczenia T&L.
13. Kr坦tka historia GPU
Wejcie w wiat 3D - obliczenia na wektorach macierzach liczb
zmiennoprzecinkowych
Pojawienie si pierwszego GPU - NV10. Karta graficzna przeja
obliczenia T&L.
Pojawienie si shader坦w. Kr坦tkich program坦w operujcych na danych
wewntrz karty graficznej. (NV30)
14. Kr坦tka historia GPU
Wejcie w wiat 3D - obliczenia na wektorach macierzach liczb
zmiennoprzecinkowych
Pojawienie si pierwszego GPU - NV10. Karta graficzna przeja
obliczenia T&L.
Pojawienie si shader坦w. Kr坦tkich program坦w operujcych na danych
wewntrz karty graficznej. (NV30)
Pojawienie si CUDA - dowolne programowanie na GPU (G80).
15. Dlaczego warto u甜ywa GPU
Architektura procesora graficznego jest
zoptymalizowana pod ktem oblicze
zmiennoprzecinkowych.
16. Dlaczego warto u甜ywa GPU
Architektura procesora graficznego jest
zoptymalizowana pod ktem oblicze
zmiennoprzecinkowych.
Wydajno tego typu oblicze jest a甜 do 5 razy
wiksza ni甜 CPU, w przypadku oblicze
podw坦jnej skali precyzji.
17. Dlaczego warto u甜ywa GPU
Architektura procesora graficznego jest
zoptymalizowana pod ktem oblicze
zmiennoprzecinkowych.
Wydajno tego typu oblicze jest a甜 do 5 razy
wiksza ni甜 CPU, w przypadku oblicze
podw坦jnej skali precyzji.
I a甜 do 10 razy w przypadku pojedynczej skali
precyzji.
28. Do czego u甜yto GPU
Symulacje objtociowe cieczy i gaz坦w
Optymalizacja wydajnoci aerodynamicznej
pojazd坦w
29. Do czego u甜yto GPU
Symulacje objtociowe cieczy i gaz坦w
Optymalizacja wydajnoci aerodynamicznej
pojazd坦w
Analiza pogody
30. Do czego u甜yto GPU
Symulacje objtociowe cieczy i gaz坦w
Optymalizacja wydajnoci aerodynamicznej
pojazd坦w
Analiza pogody
Wizualizacje
31. Do czego u甜yto GPU
Symulacje objtociowe cieczy i gaz坦w
Optymalizacja wydajnoci aerodynamicznej
pojazd坦w
Analiza pogody
Wizualizacje
Symulacja detonacji atomowej bomby
plecakowej
32. Do czego u甜yto GPU
Symulacje objtociowe cieczy i gaz坦w
Optymalizacja wydajnoci aerodynamicznej
pojazd坦w
Analiza pogody
Wizualizacje
Symulacja detonacji atomowej bomby
plecakowej
Problem n cia
i wiele innych.
49. GPU
DRAM
Cache
CONT
ROL ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU
ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU
Cache
CONT
ROL ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU
ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU
Cache
CONT
ROL ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU
ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU
Cache
CONT
ROL ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU
ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU
50. GPU
Pikne liczby, powoduj dreszcze, ale gdzie jest
haczyk?
Wtki. Du甜o wtk坦w.
Ok. 2^24 * 2^32 wtk坦w.
Pami. Zarzdzanie. Transfer. Optymalne
wykorzystanie.
58. CUDA
Cytujc stron NVidii:
CUDA jest opracowan przez firm NVIDIA,
r坦wnoleg architektur obliczeniow, kt坦ra
zapewnia radykalny wzrost wydajnoci oblicze
dziki wykorzystaniu mocy ukad坦w GPU
(graphics processing unit jednostka
przetwarzania graficznego).
59. CUDA
Jest to r坦wnie甜 synonim rozszerzenia
standardowego jzyka C o skadni i biblioteki
potrzebne do wygodnego przeprowadzania
oblicze na kartach graficznych.
60. JCuda
Zestaw bibliotek opakowywujcych natywne
biblioteki CUDY z wykorzystaniem interfejsu JNI.
Niestety, zale甜ne od systemu
operacyjnego/architektury procesora.
64. Jk zawodu na sali
Niestety, zale甜ne od systemu
operacyjnego/architektury procesora.
65. Jk zawodu na sali
Niestety, zale甜ne od systemu
operacyjnego/architektury procesora.
Nale甜y jednak pamita, 甜e API CUDY plus
biblioteki to ok. 2500 r坦甜nych funkcji
zmieniajcych si z ka甜dym wydaniem.
66. Co to jest kernel?
Funkcja adowana do pamici instrukcji
multiprocesora.
67. Co to jest kernel?
Funkcja adowana do pamici instrukcji
multiprocesora.
Przykad JCudaVectorAdd.cu:
extern "C"
__global__ void add(int n, float *a, float *b, float *sum)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i<n)
{
sum[i] = a[i] + b[i];
}
}
70. Organizacja przetwarzania
Ka甜dy blok mo甜e zosta przydzielony do
dowolnego multiprocesora.
To w jaki spos坦b zostanie on przydzielony zale甜y
od jego wymaga co do pamici wsp坦dzielonej
oraz rejestr坦w.
73. Ograniczenia przetwarzania
Wtki w bloku formowane s w tzw. warpy po 32
wtki ka甜dy i nastpnie s adowane do
multiprocesora.
W ramach jednego warpa r坦wnolegle przez wtki
mo甜e by wykonywana tylko jedna instrukcja.
Jeli nastpi rozgazienie (if) zasada ta nadal
obowizuje i instrukcje gazi si przeplataj.
74. Typowy przebieg przetwarzania
1. Przygotowanie rodowiska i kerneli
2. Alokacja pamici na urzdzeniu.
3. adowanie danych (wskie gardo)
4. Wykonaniu oblicze
a. wykonywanie oblicze GPU
b. wykonywanie oblicze CPU
5. Synchronizacja z kart
6. Pobranie wynik坦w oblicze (wskie gardo)
7. Dealokacja pamici
75. Typowy przebieg przetwarzania
1. Przygotowanie rodowiska i kerneli
import static jcuda.driver.JCudaDriver.*;
// Enable exceptions and omit all subsequent error checks
setExceptionsEnabled(true);
// Initialize the driver and
// create a context for the first device.
cuInit(0);
CUdevice device = new CUdevice();
cuDeviceGet(device, 0);
CUcontext context = new CUcontext();
cuCtxCreate(context, 0, device);
76. Typowy przebieg przetwarzania
1. Przygotowanie rodowiska i kerneli
// Load the ptx file.
// Create the PTX file by calling the NVCC
String ptxFileName =
preparePtxFile("JCudaVectorAddKernel.cu");
CUmodule module = new CUmodule();
cuModuleLoad(module, ptxFileName);
// Obtain a function pointer to the "add" function.
CUfunction function = new CUfunction();
cuModuleGetFunction(function, module, "add");
77. Typowy przebieg przetwarzania
2. Alokacja pamici i adowanie danych
// Allocate the device input data, and copy the
// host input data to the device
CUdeviceptr deviceInputA = new CUdeviceptr();
cuMemAlloc(deviceInputA, numElements * Sizeof.FLOAT);
cuMemcpyHtoD(deviceInputA, Pointer.to(hostInputA),
numElements * Sizeof.FLOAT);
CUdeviceptr deviceInputB = new CUdeviceptr();
cuMemAlloc(deviceInputB, numElements * Sizeof.FLOAT);
cuMemcpyHtoD(deviceInputB, Pointer.to(hostInputB),
numElements * Sizeof.FLOAT);
79. Typowy przebieg przetwarzania
3. Wykonanie oblicze
// Set up the kernel parameters: A pointer to an array
// of pointers which point to the actual values.
Pointer kernelParameters = Pointer.to(
Pointer.to(new int[]{numElements}),
Pointer.to(deviceInputA),
Pointer.to(deviceInputB),
Pointer.to(deviceOutput)
);
80. Typowy przebieg przetwarzania
3. Wykonanie oblicze
// Call the kernel function.
int blockSizeX = 256;
int gridSizeX = (int)
Math.ceil((double)numElements / blockSizeX);
cuLaunchKernel(function,
gridSizeX, 1, 1, // Grid dimension
blockSizeX, 1, 1, // Block dimension
0, null, // Shared memory size and stream
kernelParameters, null // Kernel- and extra
parameters
);
cuCtxSynchronize();
81. Typowy przebieg przetwarzania
4. Pobranie wynik坦w oblicze
// Allocate host output memory and copy the device output
// to the host.
float hostOutput[] = new float[numElements];
cuMemcpyDtoH(Pointer.to(hostOutput), deviceOutput,
numElements *
Sizeof.FLOAT);
83. JCuda zmapowane biblioteki
Biblioteki:
Core mapowanie podstawowych funkcji zar坦wno
Cuda Driver API jak i Cuda Runtime API
JcuFFT biblioteka FFT
JcuBLAS biblioteka operacji na macierzach
JcuRAND biblioteka liczb losowych
JcuDPP biblioteka operacji r坦wnolegych (scan,
suma, redukcja)
JcuSPARSE biblioteka operacji na macierzach
rzadkich
84. Maven challenge
Obecnie pracuj nad integracj biblioteki z
mavenem.
Niestety biblioteki bd zale甜ne od architektury
co psuje jedn z idei maven'a.
CMake... ?