O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Uvod u
GPGPU
programiranje
Elektronski fakultet Niš
16.04.2015.
dr Dušan Gajić
• Commodore Amiga - 1985.
• Nvidia GeForce 256 - 1999.
• Industrija video igara
• GPU danas: PC, tablet, smartphone, konzo...
Savremene GPU arhitekture
Manycore arhitekture
43 51 55 58 86 187 225 225 225
518 576 648
1062
1581
2488
3090
4500
5632
0
1000
2000
3000
4000
5000
6000
2006 2007 2008 20...
10
26 26 32 32 32
51 51 51
90
108
142
159
177
192 192
288
336
0
50
100
150
200
250
300
350
2006 2007 2008 2009 2010 2011 2...
CPU – von Neumannova arhitektura
GPU – SIMD arhitektura
1. Zahtevaju kompleksna i obimna izračunavanja
2. Omogućavaju značajan paralelizam
3. U većoj meri zavise od propusne moći...
Intenzitet izračunavanja
CPU GPU
ulazni
podaci
izračunati
rezultati
ulazni
bafer
1
2
GPU izvršava kernel sa velikim
brojem paralelnih niti3
izlazni
bafer
4...
Struktura GPGPU programa
Elementi rada GPGPU programa
2000 2005 2007 2015
Programski jezici za GPGPU
+ visoke performanse
+ razvijeni alati za programiranje
i optimizaciju
- radi isključivo na Nvidia GPU
+ radi na širokom s...
• CUDA C i OpenCL C zasnovani na C99 ISO standardu
• Specijalne ključne reči i dodatne funkcije za podršku
paralelnom prog...
Primer: sekvencijalno množenje
dva vektora u C-u na CPU
void addCPU(int* c, const int* a, const int* b)
{
unsigned int i;
...
#include “cuda_runtime.h”
#include “device_launch_parameters.h”
…
void main()
{
…
cudaMalloc((void**)&a, size*sizeof(int))...
__global__ void addGPU(int* c,
const int* a,
const int* b)
{
const unsigned int tid = threadIdx.x;
c[tid] = a[tid] + b[tid...
__kernel void addGPU(__global int* c,
__const int* a,
__const int* b)
{
const unsigned int tid = get_global_id();
c[tid] =...
• Program domаćina (host) i
program uređaja (device)
• Kernel opisuje operacije koje realizuje jedna nit
• Broj niti po bl...
https://www.coursera.org/course/hetero
Heterogeneous Parallel Programming
https://www.udacity.com/course/cs344
Introductio...
http://gpgpu.org/
http://www.gpucomputing.net/
https://developer.nvidia.com/
category/zone/cuda-zone
http://developer.amd....
Preporučena literatura - CUDA
Preporučena literatura - OpenCL
Uvod u
GPGPU
programiranje
Elektronski fakultet Niš
16.04.2015.
dr Dušan Gajić
e-mail: dusan.b.gajic@gmail.com
Uvod u GPGPU programiranje
Uvod u GPGPU programiranje
Uvod u GPGPU programiranje
Próximos SlideShares
Carregando em…5
×

Uvod u GPGPU programiranje

409 visualizações

Publicada em

Šta je GPGPU programiranje? Kako iskoristiti moć grafičkih kartica?

Publicada em: Engenharia
  • Seja o primeiro a comentar

Uvod u GPGPU programiranje

  1. 1. Uvod u GPGPU programiranje Elektronski fakultet Niš 16.04.2015. dr Dušan Gajić
  2. 2. • 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
  3. 3. Savremene GPU arhitekture
  4. 4. Manycore arhitekture
  5. 5. 43 51 55 58 86 187 225 225 225 518 576 648 1062 1581 2488 3090 4500 5632 0 1000 2000 3000 4000 5000 6000 2006 2007 2008 2009 2010 2011 2012 2013 2014 moćobrade[GFLOPS] godina CPU GPU Moć obrade CPU i GPU
  6. 6. 10 26 26 32 32 32 51 51 51 90 108 142 159 177 192 192 288 336 0 50 100 150 200 250 300 350 2006 2007 2008 2009 2010 2011 2012 2013 2014 propusniopseg[GB/s] godina CPU GPU Propusnu opseg CPU i GPU
  7. 7. CPU – von Neumannova arhitektura
  8. 8. GPU – SIMD arhitektura
  9. 9. 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
  10. 10. Intenzitet izračunavanja CPU GPU
  11. 11. ulazni podaci izračunati rezultati ulazni bafer 1 2 GPU izvršava kernel sa velikim brojem paralelnih niti3 izlazni bafer 4 Rad GPGPU programa
  12. 12. Struktura GPGPU programa
  13. 13. Elementi rada GPGPU programa
  14. 14. 2000 2005 2007 2015 Programski jezici za GPGPU
  15. 15. + 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
  16. 16. • 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
  17. 17. 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]; } }
  18. 18. #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)
  19. 19. __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
  20. 20. __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
  21. 21. • 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
  22. 22. https://www.coursera.org/course/hetero Heterogeneous Parallel Programming https://www.udacity.com/course/cs344 Introduction to Parallel Programming GPGPU MOOC-ovi
  23. 23. http://gpgpu.org/ http://www.gpucomputing.net/ https://developer.nvidia.com/ category/zone/cuda-zone http://developer.amd.com/ resources/ heterogeneous- computing/opencl-zone/ Web resursi
  24. 24. Preporučena literatura - CUDA
  25. 25. Preporučena literatura - OpenCL
  26. 26. Uvod u GPGPU programiranje Elektronski fakultet Niš 16.04.2015. dr Dušan Gajić e-mail: dusan.b.gajic@gmail.com

×