gpgpu programazioa: txartel grafikoa erabiliz programatu
DESCRIPTION
GPGPUa zer den eta eredu hori baliatzen duten hainbat plataforma azaltzen dituen aurkezpena.TRANSCRIPT
GPGPU programazioaTxartel grafikoa erabiliz programatu
Mikel Iturbe Urretxa
UniEncounter, 2013ko Martxoak 21
Irudiaren egiletza: CC-BY 2.5 Christian Prade (cprade@Flickr)
Edukiak
Sarrera: GPUak
GPGPU
Plataforma desberdinakOpenMP & OpenACCCUDAOpenCL
Non erabiltzen da?
2
<sarrera>
3
zer da txartel grafikoa?
4
“oinarrizko plakako zirrikituetako batean
konektatzen den barruko osagaia da. Bere
helburu nagusia monitoreari azaldu behar
diren datuak zuzen bidaltzea da.”
Iturria: CC-BY-SA 3.0 Euskarazko Wikipedia. http://eu.wikipedia.org/wiki/Txartel grafiko
5
zer da GPUa?
6
“a specialized electronic circuit designed to
rapidly manipulate and alter memory to
accelerate the building of images in a frame
buffer intended for output to a display”
Iturria: CC-BY-SA 3.0 Ingelesezko Wikipedia. http://en.wikipedia.org/wiki/Graphics processing unit
7
zerekin lotzen ditugu?
8
eboluzio handia
9
Jatorrizkoaren egiletza: GPLv3 Gang Garrison 2
10
Jatorrizkoaren egiletza: GPLv2 Xonotic
11
grafikoak+
fisika
12
paraleloan aritzeko egokiak
13
</sarrera>
14
<gpgpu?>
15
denok ezagutzen dugunadibidea
16
17
Jatorrizkoaren egiletza: CC-BY-ND Pavol Davorsky (˜PAulie-SVK@devianART)
18
Jatorrizkoaren egiletza: CC-BY-SA 3.0 OpenStreetMap & Euskalmapa.com
19
Jatorrizkoaren egiletza: CC-BY-SA 3.0 OpenStreetMap, Euskalmapa.com & Amazon Web Services
20
Jatorrizkoaren egiletza: CC-BY-SA 3.0 Janine Arriaga
21
(3)
22
(1)
23
Jatorrizkoaen egiletza: CC-BY-SA 3.0 Janine Arriaga & Guudmorning!@Flickr
24
(2)
25
Jatorrizkoaren egiletza: CC-BY-SA 3.0 Janine Arriaga, Angelica Castillo & Chris Covarrubias
26
(3)
27
Jatorrizkoaren egiletza: CC-BY-SA 3.0 Nikki Ibanez
28
Jatorrizkoaren egiletza: CC-BY-SA 3.0 Christophe Dang Ngoc Chan & PD Charles B. King
29
(1)
30
Moore-ren legea
31
“bi urterik behin, zirkuitu integratuetako
transistore kopurua bikoiztu egiten da”
32
Jatorrizkoaren egiletza: CC-BY-SA 3.0 Wgsimon@Wikimedia Commons
33
eta erlojuaren maiztasuna?
34
Jatorrizkoaren egiletza: CPU DB. http://cpudb.stanford.edu/visualize/clock frequency
35
36
zergatik?
37
Jatorrizkoaren egiletza: CC-BY-SA 3.0 RRZEicons@Wikimedia Commons & PD Clker.com
38
(2) & (3)
39
40
Jatorrizkoaren egiletza: CC-BY 3.0 NVIDIA CUDA Programming Guide version 3.0
41
bakoitza bere lanerako egokia
42
GPGPU
hau baliatzen duenprogramazio eredua
43
general-purpose computing ongraphics processing units
44
orotariko konputazioa grafikoakprozesatzeko unitateetan
45
46
</gpgpu?>
47
<arkitekturak>
48
(2)
49
(1)
50
begiztetanzentratua
Jatorrizkoaren egiletza: CC-BY 2.5 Val Kerry (art makes me smile@Flickr)
51
<OpenMP & OpenACC>
52
industri-estandarrak
53
54
adibidea
55
1 int main(int argc , char *argv []) {
const int N = 500;
3 int i, a[N];
//a[N] bete
5
for (i = 0; i < N; i++)
7 a[i] = 2 * i;
9 return 0;
}
57
OpenMP
58
int main(int argc , char *argv []) {
2 const int N = 500;
int i, a[N];
4 //a[N] bete
6 #pragma omp parallel for
for (i = 0; i < N; i++)
8 a[i] = 2 * i;
10 return 0;
}
60
OpenACC
61
1 int main(int argc , char *argv []) {
const int N = 500;
3 int i, a[N];
//a[N] bete
5
#pragma acc parallel kernels
7 for (i = 0; i < N; i++)
a[i] = 2 * i;
9
return 0;
11 }
63
zer paralelizatu nahi denadierazten da
64
nola egiten den jakin beharrikgabe
65
migrazioa errazagoa
66
OpenMP oso erabiliaOpenACC ez hainbeste
67
</OpenMP & OpenACC>
68
(2)
69
harietanzentratua
Jatorrizkoaren egiletza: CC-BY 2.5 Val Kerry (art makes me smile@Flickr)
70
<CUDA>
71
sakonago
72
gpgpu produktu helduena
73
NVIDIAk garatua
74
eta propietarioa... :-(
75
<CUDAren egitura>
76
Jatorrizkoaren egiletza: CC-BY 3.0 Tosaka@Wikimedia Commons
77
kernelak
78
paraleloan exekutatuko direnfuntzioak
79
ezin dute baliorik bueltatu
80
global
81
CUDA C
82
Jatorrizkoaren egiletza: PD Clker.com & Seamas O Brogain
83
Jatorrizkoaren egiletza: CC-BY 3.0 Tor proiektua
84
Jatorrizkoaren egiletza: CC-BY-SA 3.0 Ricardas.marozas@Wikimedia Commons
85
</CUDAren egitura>
86
eta kernelak exekutatzeko?
87
(1)zeren gainean egingo du lan?
88
89
cudaMalloc()
cudaFree()
cudaMemcpy()
90
(2)nola exekutatuko da?
91
kernela<<<exek param>>>(f param)
92
hariak
blokeak
93
hariak
Jatorrizkoaren egiletza: CC-BY 3.0 Jorge Barrios (jorgebarrios@Wikimedia Commons)
94
3D array bat(dim3)
95
hardware-ak mugatzen dukopurua
96
threadIdx
(threadIdx.x, threadIdx.y, threadIdx.z)
97
blokeak
98
hari taldeak
Jatorrizkoaren egiletza: CC-BY 2.5 Novita Estiti (verypurpleperson@Flickr)
99
3D array bat(dim3)
100
blockIdx
(blockIdx.x, blockIdx.y, blockIdx.z)
101
Jatorrizkoaren egiletza: CC-BY 2.5 Dennis Brekke (dbrekke@Flickr)
102
Jatorrizkoaren egiletza: CC-BY 3.0 NVIDIA CUDA Programming Guide version 3.0
103
kernela<<<hariak, blokeak>>>(f param)
104
(3)eta harien artekokoordinazioa?
105
memoria
106
Jatorrizkoaren egiletza: CC-BY 3.0 NVIDIA CUDA Programming Guide version 3.0
107
synchthreads()
108
adibidea
109
1 int main(int argc , char *argv []) {
const int N = 500;
3 int i, a[N], b[N], c[N];
//a eta b edukiz bete
5
for (i = 0; i < N; i++)
7 c[i] = a[i]+b[i];
9 return 0;
}
111
int main(int argc , char *argv []) {
2 const int N = 500;
int a[N], b[N], C[N];
4 //a eta b edukiz bete
6 cudaMalloc ((void **) &d_a , N*sizeof(int));
cudaMalloc ((void **) &d_b , N*sizeof(int));
8 cudaMalloc ((void **) &d_c , N*sizeof(int));
10 cudaMemcpy(d_a , a, N*sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(d_b , b, N*sizeof(int), cudaMemcpyHostToDevice);
12
dim3 hariak (25, 10, 1);
14 dim3 blokeak (2, 1, 1);
kernel <<<blokeak , hariak >>>(*d_a ,*d_b ,*d_c);
16
cudaMemcpy(c, d_c , N*sizeof(int), cudaMemcpyDeviceToHost);
18
cudaFree(d_a);
20 cudaFree(d_b);
cudaFree(d_c);
22
return 0;
24 }
113
__global__ kernel (int *d_a , int *d_b , int *d_c) {
2 int indizea = (threadIdx.x + 25 * threadIdx.y) * (
blockIdx.x + 1);
d_c[indizea] = d_a[indizea] + d_b[indizea ];
4 }
115
tresnak
116
nvcc
117
CUDA-GDB
118
</CUDA>
119
<OpenCL>
120
GPGPUrako estandar irekia
121
kodea hainbat gailutanexekutatu daiteke
122
C99
123
CUDArekin antzekotasunak etadesberdintasunak
124
maila baxuagokoa
125
oraindik ez CUDA bezain osoabaina...
126
etorkizuna izango da
127
</OpenCL>
128
</arkitekturak>
129
<non? zelan? zertarako?>
130
Jatorrizkoaren egiletza: c© NVIDIA131
Jatorrizkoaren egiletza: CC-BY 2.5 ChrisDag@Flickr
132
Jatorrizkoaren egiletza: PD AEBko energia departamendua
133
baita gailu txikiagotan ere
134
Jatorrizkoaren egiletza: CC-BY 2.5 Android Open Source Project, CC-BY 2.0 Robert Nelson & c© NVIDIA
135
segurtasunaren esparruan...
136
WPA, hash... “ikuskaritza”
137
</non? zelan? zertarako?>
138
eskerrik asko.
139
lizentzia: CC-BY 3.0http://creativecommons.org/licenses/by/3.0/deed.eu
(kontrakoa adierazita duten irudiena izan ezik.)
LATEXeko Beamer klase librearekin eginiko aurkezpena
http://slideshare.net/janfri
http://hamahiru.org
[email protected] gakoa: 0x8141DED2
@azken tximinoa
140