際際滷

際際滷Share a Scribd company logo
JCuda
Czy Java i CUDA mog si polubi?
Konrad Szakowski
 GPU
 Dlaczego warto u甜ywa GPU
 Budowa GPU
 CUDA
 JCuda
 Przykadowa implementacja
Agenda
GPU
Co to jest?
Graphical
GPU
Graphical
Processing
GPU
Graphical
Processing
Unit
GPU
GPU
Graphical
Processing
Unit
Procesor graficzny.
Kr坦tka historia GPU
 Terminale znakowe
Kr坦tka historia GPU
 Terminale znakowe
 Renderowanie obrazu skadajcego si z pixeli
Kr坦tka historia GPU
 Terminale znakowe
 Renderowanie obrazu skadajcego si z pixeli
 Akceleracja 2D, rysowanie ksztat坦w, Z-bufory, sprite'y.
Kr坦tka historia GPU
 Wejcie w wiat 3D - obliczenia na wektorach macierzach liczb
zmiennoprzecinkowych
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.
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)
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).
Dlaczego warto u甜ywa GPU
Architektura procesora graficznego jest
zoptymalizowana pod ktem oblicze
zmiennoprzecinkowych.
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.
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.
Dlaczego warto u甜ywa GPU
Prdko pamici
DDR3-19200 ~ 19,2 GB/s
Dlaczego warto u甜ywa GPU
Prdko pamici
DDR3-19200 ~ 19,2 GB/s
GDDR5 ~ 224 GB/s
Dlaczego warto u甜ywa GPU
Prdko pamici
DDR3-19200 ~ 19,2 GB/s
GDDR5 ~ 224 GB/s
Wydajno mocy
Intel i7 Core 980XE: 220 GFLOPS / 130W
= 1,7 GFLOPS/W
Dlaczego warto u甜ywa GPU
Prdko pamici
DDR3-19200 ~ 19,2 GB/s
GDDR5 ~ 224 GB/s
Wydajno mocy
Intel i7 Core 980XE: 220 GFLOPS / 130W
= 1,7 GFLOPS/W
NVIDIA GTX 580: 1580 GFLOPS / 244 W
= 6,5 GFLOPS/W
Dlaczego warto u甜ywa GPU
店r坦do:http://www.hardwareinsight.com/
Dlaczego warto u甜ywa GPU
CPU GPU
Core 2 Duo Quad Q6600 2,4GHz
4GB DDR2-800
NVidia GeForce GTX470
1296 MB GDDR5
Dlaczego warto u甜ywa GPU
CPU GPU
Core 2 Duo Quad Q6600 2,4GHz
4GB DDR2-800
NVidia GeForce GTX470
1296 MB GDDR5
Raytracer 4-8 FPS 80 FPS
Dlaczego warto u甜ywa GPU
CPU GPU
Core 2 Duo Quad Q6600 2,4GHz
4GB DDR2-800
NVidia GeForce GTX470
1296 MB GDDR5
Raytracer 4-8 FPS 80 FPS
SGEMM
1000x1000
5924 ms 528 ms
Dlaczego warto u甜ywa GPU
CPU GPU
Core 2 Duo Quad Q6600 2,4GHz
4GB DDR2-800
NVidia GeForce GTX470
1296 MB GDDR5
Raytracer 4-8 FPS 80 FPS
SGEMM 5924 ms 528 ms
Sort 10^6 43 ms 547 ms
Sort 10^8 1000 ms 800 ms
Do czego u甜yto GPU
 Symulacje objtociowe cieczy i gaz坦w
Do czego u甜yto GPU
 Symulacje objtociowe cieczy i gaz坦w
 Optymalizacja wydajnoci aerodynamicznej
pojazd坦w
Do czego u甜yto GPU
 Symulacje objtociowe cieczy i gaz坦w
 Optymalizacja wydajnoci aerodynamicznej
pojazd坦w
 Analiza pogody
Do czego u甜yto GPU
 Symulacje objtociowe cieczy i gaz坦w
 Optymalizacja wydajnoci aerodynamicznej
pojazd坦w
 Analiza pogody
 Wizualizacje
Do czego u甜yto GPU
 Symulacje objtociowe cieczy i gaz坦w
 Optymalizacja wydajnoci aerodynamicznej
pojazd坦w
 Analiza pogody
 Wizualizacje
 Symulacja detonacji atomowej bomby
plecakowej
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.
Gdzie GPU, bdzie skuteczne
 Algorytmy przetwarzania r坦wnolegego
Gdzie GPU, bdzie skuteczne
 Algorytmy przetwarzania r坦wnolegego
 Mao komunikacji midzy wtkowej
Gdzie GPU, bdzie skuteczne
 Algorytmy przetwarzania r坦wnolegego
 Mao komunikacji midzy wtkowej
 Masowe obliczenia zmienno przecinkowe SP
Zapraszam
http://www.nvidia.pl/object/cuda_apps_flash_pl.html
GPU
Pikne liczby, powoduj dreszcze, ale gdzie jest
haczyk?
GPU
Pikne liczby, powoduj dreszcze, ale gdzie jest
haczyk?
 Wtki.
GPU
Pikne liczby, powoduj dreszcze, ale gdzie jest
haczyk?
 Wtki. Du甜o wtk坦w.
GPU
Pikne liczby, powoduj dreszcze, ale gdzie jest
haczyk?
 Wtki. Du甜o wtk坦w.
Nawet 2^9 * 2^32 wtk坦w.
CPU
DRAM
CPU
DRAM
Cache
CPU
CONTROL
DRAM
Cache
CPU
CONTROL
DRAM
Cache
ALU
ALU
ALU
ALU
ALU
ALU
GPU
DRAM
GPU
DRAM
GPU
DRAM
GPU
DRAM
Cache
CONT
ROL
Cache
CONT
ROL
Cache
CONT
ROL
Cache
CONT
ROL
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
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.
GPU
DRAM
GPU
DRAM
Pami tekstur Pami 壊岳温霞界鞄
GPU
DRAM
Cache 壊岳温霞界鞄Cache tekstur
Pami tekstur Pami 壊岳温霞界鞄
GPU
DRAM
Pami
instrukcji
Cache 壊岳温霞界鞄Cache tekstur
Procesor Procesor Procesor Procesor
Pami tekstur Pami 壊岳温霞界鞄
GPU
DRAM
Pami
instrukcji
Cache 壊岳温霞界鞄Cache tekstur
Procesor Procesor Procesor Procesor
Rejestry Rejestry Rejestry RejestryRejestry
Pami tekstur Pami 壊岳温霞界鞄
GPU
DRAM
Pami
instrukcji
Cache 壊岳温霞界鞄Cache tekstur
Procesor Procesor Procesor Procesor
Rejestry Rejestry Rejestry Rejestry
Pami wsp坦dzielona
Rejestry
Pami tekstur Pami 壊岳温霞界鞄
CUDA
Compute
Unified
Device
Architecture
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).
CUDA
Jest to r坦wnie甜 synonim rozszerzenia
standardowego jzyka C o skadni i biblioteki
potrzebne do wygodnego przeprowadzania
oblicze na kartach graficznych.
JCuda
Zestaw bibliotek opakowywujcych natywne
biblioteki CUDY z wykorzystaniem interfejsu JNI.
Niestety, zale甜ne od systemu
operacyjnego/architektury procesora.
JCuda
CUDA DRIVER API
CUDA RUNTIME API
libJCudaDriver.so
libJCudaRuntime.so
JCuda
CUDA DRIVER API
CUDA RUNTIME API
libJCudaDriver.so
libJCudaRuntime.so
JCuda
CUDA DRIVER API
CUDA RUNTIME API
JCudaRuntime.jar JCudaDriver.jar
Jk zawodu na sali
Niestety, zale甜ne od systemu
operacyjnego/architektury procesora.
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.
Co to jest kernel?
Funkcja adowana do pamici instrukcji
multiprocesora.
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];
}
}
Organizacja przetwarzania
struct dim3 {
int x, y, z;
}
dim3 gridDim, blockDim;
dim3 blockIdx, threadIdx;
Organizacja przetwarzania
Blok
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
WtekWtek
Wtek Wtek
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.
Organizacja przetwarzania
Grid
BlokBlok
Blok Blok
BlokBlok
Blok Blok
BlokBlok
Blok Blok
Ograniczenia przetwarzania
Ograniczenia:
 Maksymalna ilo wtk坦w w bloku: 512 (256).
 Maksymalny wymiar grida 2^16 x 2^16 x 1.
 Do niedawna brak rekurencji.
 Do niedawna brak printf.
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.
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
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);
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");
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);
Typowy przebieg przetwarzania
2. Alokacja pamici wyjciowej
// Allocate device output memory
CUdeviceptr deviceOutput = new CUdeviceptr();
cuMemAlloc(deviceOutput, numElements * Sizeof.FLOAT);
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)
);
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();
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);
Typowy przebieg przetwarzania
5. Dealokacja pamici
// Clean up.
cuMemFree(deviceInputA);
cuMemFree(deviceInputB);
cuMemFree(deviceOutput);
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
Maven challenge
Obecnie pracuj nad integracj biblioteki z
mavenem.
Niestety biblioteki bd zale甜ne od architektury 
co psuje jedn z idei maven'a.
CMake... ?
Pytania
?
Materiay
JCUDA
http://jcuda.org
CUDA
http://www.nvidia.com/object/cuda_home_new.html
-> NVIDIA CUDA Programming Guide
Materiay
Repozytorium
svn://smijran.is-a-geek.org/jcuda
login: visitor
pass: access#52832
Godz. 8-24

More Related Content

[JUG] JCuda