11. 1. Zahtevaju kompleksna i obimna izračunavanja
2. Omogućavaju značajan paralelizam
3. U većoj meri zavise od propusne moći
nego od latencije
Problemi pogodni za GPU
18. + visoke performanse
+ razvijeni alati za programiranje
i optimizaciju
- radi isključivo na Nvidia GPU
+ radi na širokom spektru procesora
(AMD i Nvidia GPU, DSP, FPGA...)
- slabije razvijeni alati i nešto
niže performanse programa
Programski jezici za GPGPU
19. • CUDA C i OpenCL C zasnovani na C99 ISO standardu
• Specijalne ključne reči i dodatne funkcije za podršku
paralelnom programiranju:
kernel, global, shared, sync, get_global_id, ...
• Određena ograničenja (npr. zabrana rekurzije) i
specifičnosti (eksplicitna specifikacija tipa memorije)
Programski jezici za GPGPU
20. Primer: sekvencijalno množenje
dva vektora u C-u na CPU
void addCPU(int* c, const int* a, const int* b)
{
unsigned int i;
for (i = 0; i < n; i++)
{
c[i] = a[i] + b[i];
}
}
22. __global__ void addGPU(int* c,
const int* a,
const int* b)
{
const unsigned int tid = threadIdx.x;
c[tid] = a[tid] + b[tid];
}
Primer: paralelno množenje
dva vektora – CUDA na GPU
23. __kernel void addGPU(__global int* c,
__const int* a,
__const int* b)
{
const unsigned int tid = get_global_id();
c[tid] = a[tid] + b[tid];
}
Primer: paralelno množenje
dva vektora – OpenCL na GPU
24. • Program domаćina (host) i
program uređaja (device)
• Kernel opisuje operacije koje realizuje jedna nit
• Broj niti po bloku i broj blokova u mreži određuje
se u programu domaćina
Glavni koncepti kod GPGPU programa