uvod u gpgpu programiranje

29
Uvod u GPGPU programiranje Elektronski fakultet Niš 16.04.2015. dr Dušan Gajić

Upload: sicef

Post on 30-Jul-2015

88 views

Category:

Engineering


15 download

TRANSCRIPT

Page 1: Uvod u GPGPU programiranje

Uvod u GPGPU programiranje

Elektronski fakultet Niš 16.04.2015.

dr Dušan Gajić

Page 2: Uvod u GPGPU programiranje
Page 3: Uvod u GPGPU programiranje

•Commodore Amiga - 1985.

•Nvidia GeForce 256 - 1999.

• Industrija video igara

•GPU danas: PC, tablet, smartphone, konzole…

•Heterogeni računarski sistemi

(CPU, GPU, DSP, FPGA…)

Kratka istorija GPU

brza evolucija GPU

Page 4: Uvod u GPGPU programiranje

Savremene GPU arhitekture

Page 5: Uvod u GPGPU programiranje

Manycore arhitekture

Page 6: Uvod u GPGPU programiranje
Page 7: Uvod u GPGPU programiranje

2006 2007 2008 2009 2010 2011 2012 2013 20140

1000

2000

3000

4000

5000

6000

43 51 55 58 86 187 225 225 225518 576 648

1062

1581

2488

3090

4500

5632

CPU GPU

godina

moć o

bra

de [

GFLO

PS

]Moć obrade CPU i GPU

Page 8: Uvod u GPGPU programiranje

2006 2007 2008 2009 2010 2011 2012 2013 20140

50

100

150

200

250

300

350

1026 26 32 32 32

51 51 51

90108

142159

177192 192

288

336

CPU GPU

godina

pro

pu

sn

i op

seg

[G

B/s

]Propusnu opseg CPU i GPU

Page 9: Uvod u GPGPU programiranje

CPU – von Neumannova arhitektura

Page 10: Uvod u GPGPU programiranje

GPU – SIMD arhitektura

Page 11: Uvod u GPGPU programiranje

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

Page 12: Uvod u GPGPU programiranje

Intenzitet izračunavanja

CPU GPU

Page 13: Uvod u GPGPU programiranje
Page 14: Uvod u GPGPU programiranje

ulazni podaci

izračunati rezultati

ulazni

bafer

1

2

GPU izvršava kernel sa velikim brojem paralelnih

niti3

izlazni bafer

4

Rad GPGPU programa

Page 15: Uvod u GPGPU programiranje

Struktura GPGPU programa

Page 16: Uvod u GPGPU programiranje

Elementi rada GPGPU programa

Page 17: Uvod u GPGPU programiranje

2000 2005 2007 2015

Programski jezici za GPGPU

Page 18: Uvod u GPGPU programiranje

+ 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

Page 19: Uvod u GPGPU programiranje

• 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

Page 20: Uvod u GPGPU programiranje

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];

}

}

Page 21: Uvod u GPGPU programiranje

#include “cuda_runtime.h”#include “device_launch_parameters.h”…void main(){

…cudaMalloc((void**)&a, size*sizeof(int));…cudaMemcpy(a, input, size*sizeof(int),

cudaMemcpyHostToDevice);

…dim3 gridDim(1,1,1);dim3 blockDim(N,1,1);

addGPU<<<gridDim, blockDim>>>(c, a, b);

cudaMemcpy(c, output, size*sizeof(int), cudaMemcpyDeviceToHost);

…}

Primer: host CUDA program (CPU)

Page 22: Uvod u GPGPU programiranje

__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

Page 23: Uvod u GPGPU programiranje

__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

Page 24: Uvod u GPGPU programiranje

• 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

Page 25: Uvod u GPGPU programiranje

https://www.coursera.org/course/hetero

Heterogeneous Parallel Programming

https://www.udacity.com/course/cs344

Introduction to Parallel Programming

GPGPU MOOC-ovi

Page 27: Uvod u GPGPU programiranje

Preporučena literatura - CUDA

Page 28: Uvod u GPGPU programiranje

Preporučena literatura - OpenCL

Page 29: Uvod u GPGPU programiranje

Uvod u GPGPU programiranje

Elektronski fakultet Niš 16.04.2015.

dr Dušan Gajić e-mail: [email protected]