GPGPU programazioa: Txartel grafikoa erabiliz programatu

Post on 05-Dec-2014

1.005 views 4 download

description

GPGPUa zer den eta eredu hori baliatzen duten hainbat plataforma azaltzen dituen aurkezpena.

Transcript of GPGPU programazioa: Txartel grafikoa erabiliz programatu

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

mikel@hamahiru.orgpgp gakoa: 0x8141DED2

@azken tximinoa

140