gpgpu programazioa: txartel grafikoa erabiliz programatu

Post on 05-Dec-2014

1.005 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

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

mikel@hamahiru.orgpgp gakoa: 0x8141DED2

@azken tximinoa

140

top related