134
GPGPU programazioa Txartel grafikoa erabiliz programatu Mikel Iturbe Urretxa UniEncounter, 2013ko Martxoak 21 Irudiaren egiletza: CC-BY 2.5 Christian Prade (cprade@Flickr)

GPGPU programazioa: Txartel grafikoa erabiliz programatu

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: 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)

Page 2: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Edukiak

Sarrera: GPUak

GPGPU

Plataforma desberdinakOpenMP & OpenACCCUDAOpenCL

Non erabiltzen da?

2

Page 3: GPGPU programazioa: Txartel grafikoa erabiliz programatu

<sarrera>

3

Page 4: GPGPU programazioa: Txartel grafikoa erabiliz programatu

zer da txartel grafikoa?

4

Page 5: GPGPU programazioa: Txartel grafikoa erabiliz programatu

“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

Page 6: GPGPU programazioa: Txartel grafikoa erabiliz programatu

zer da GPUa?

6

Page 7: GPGPU programazioa: Txartel grafikoa erabiliz programatu

“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

Page 8: GPGPU programazioa: Txartel grafikoa erabiliz programatu

zerekin lotzen ditugu?

8

Page 9: GPGPU programazioa: Txartel grafikoa erabiliz programatu

eboluzio handia

9

Page 10: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: GPLv3 Gang Garrison 2

10

Page 11: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: GPLv2 Xonotic

11

Page 12: GPGPU programazioa: Txartel grafikoa erabiliz programatu

grafikoak+

fisika

12

Page 13: GPGPU programazioa: Txartel grafikoa erabiliz programatu

paraleloan aritzeko egokiak

13

Page 14: GPGPU programazioa: Txartel grafikoa erabiliz programatu

</sarrera>

14

Page 15: GPGPU programazioa: Txartel grafikoa erabiliz programatu

<gpgpu?>

15

Page 16: GPGPU programazioa: Txartel grafikoa erabiliz programatu

denok ezagutzen dugunadibidea

16

Page 17: GPGPU programazioa: Txartel grafikoa erabiliz programatu

17

Page 18: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY-ND Pavol Davorsky (˜PAulie-SVK@devianART)

18

Page 19: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY-SA 3.0 OpenStreetMap & Euskalmapa.com

19

Page 20: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY-SA 3.0 OpenStreetMap, Euskalmapa.com & Amazon Web Services

20

Page 21: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY-SA 3.0 Janine Arriaga

21

Page 22: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(3)

22

Page 23: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(1)

23

Page 24: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaen egiletza: CC-BY-SA 3.0 Janine Arriaga & Guudmorning!@Flickr

24

Page 25: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(2)

25

Page 26: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY-SA 3.0 Janine Arriaga, Angelica Castillo & Chris Covarrubias

26

Page 27: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(3)

27

Page 28: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY-SA 3.0 Nikki Ibanez

28

Page 29: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY-SA 3.0 Christophe Dang Ngoc Chan & PD Charles B. King

29

Page 30: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(1)

30

Page 31: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Moore-ren legea

31

Page 32: GPGPU programazioa: Txartel grafikoa erabiliz programatu

“bi urterik behin, zirkuitu integratuetako

transistore kopurua bikoiztu egiten da”

32

Page 33: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY-SA 3.0 Wgsimon@Wikimedia Commons

33

Page 34: GPGPU programazioa: Txartel grafikoa erabiliz programatu

eta erlojuaren maiztasuna?

34

Page 35: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CPU DB. http://cpudb.stanford.edu/visualize/clock frequency

35

Page 36: GPGPU programazioa: Txartel grafikoa erabiliz programatu

36

Page 37: GPGPU programazioa: Txartel grafikoa erabiliz programatu

zergatik?

37

Page 38: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY-SA 3.0 RRZEicons@Wikimedia Commons & PD Clker.com

38

Page 39: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(2) & (3)

39

Page 40: GPGPU programazioa: Txartel grafikoa erabiliz programatu

40

Page 41: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY 3.0 NVIDIA CUDA Programming Guide version 3.0

41

Page 42: GPGPU programazioa: Txartel grafikoa erabiliz programatu

bakoitza bere lanerako egokia

42

Page 43: GPGPU programazioa: Txartel grafikoa erabiliz programatu

GPGPU

hau baliatzen duenprogramazio eredua

43

Page 44: GPGPU programazioa: Txartel grafikoa erabiliz programatu

general-purpose computing ongraphics processing units

44

Page 45: GPGPU programazioa: Txartel grafikoa erabiliz programatu

orotariko konputazioa grafikoakprozesatzeko unitateetan

45

Page 46: GPGPU programazioa: Txartel grafikoa erabiliz programatu

46

Page 47: GPGPU programazioa: Txartel grafikoa erabiliz programatu

</gpgpu?>

47

Page 48: GPGPU programazioa: Txartel grafikoa erabiliz programatu

<arkitekturak>

48

Page 49: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(2)

49

Page 50: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(1)

50

Page 51: GPGPU programazioa: Txartel grafikoa erabiliz programatu

begiztetanzentratua

Jatorrizkoaren egiletza: CC-BY 2.5 Val Kerry (art makes me smile@Flickr)

51

Page 52: GPGPU programazioa: Txartel grafikoa erabiliz programatu

<OpenMP & OpenACC>

52

Page 53: GPGPU programazioa: Txartel grafikoa erabiliz programatu

industri-estandarrak

53

Page 54: GPGPU programazioa: Txartel grafikoa erabiliz programatu

54

Page 55: GPGPU programazioa: Txartel grafikoa erabiliz programatu

adibidea

55

Page 56: GPGPU programazioa: Txartel grafikoa erabiliz programatu

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

Page 57: GPGPU programazioa: Txartel grafikoa erabiliz programatu

OpenMP

58

Page 58: GPGPU programazioa: Txartel grafikoa erabiliz programatu

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

Page 59: GPGPU programazioa: Txartel grafikoa erabiliz programatu

OpenACC

61

Page 60: GPGPU programazioa: Txartel grafikoa erabiliz programatu

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

Page 61: GPGPU programazioa: Txartel grafikoa erabiliz programatu

zer paralelizatu nahi denadierazten da

64

Page 62: GPGPU programazioa: Txartel grafikoa erabiliz programatu

nola egiten den jakin beharrikgabe

65

Page 63: GPGPU programazioa: Txartel grafikoa erabiliz programatu

migrazioa errazagoa

66

Page 64: GPGPU programazioa: Txartel grafikoa erabiliz programatu

OpenMP oso erabiliaOpenACC ez hainbeste

67

Page 65: GPGPU programazioa: Txartel grafikoa erabiliz programatu

</OpenMP & OpenACC>

68

Page 66: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(2)

69

Page 67: GPGPU programazioa: Txartel grafikoa erabiliz programatu

harietanzentratua

Jatorrizkoaren egiletza: CC-BY 2.5 Val Kerry (art makes me smile@Flickr)

70

Page 68: GPGPU programazioa: Txartel grafikoa erabiliz programatu

<CUDA>

71

Page 69: GPGPU programazioa: Txartel grafikoa erabiliz programatu

sakonago

72

Page 70: GPGPU programazioa: Txartel grafikoa erabiliz programatu

gpgpu produktu helduena

73

Page 71: GPGPU programazioa: Txartel grafikoa erabiliz programatu

NVIDIAk garatua

74

Page 72: GPGPU programazioa: Txartel grafikoa erabiliz programatu

eta propietarioa... :-(

75

Page 73: GPGPU programazioa: Txartel grafikoa erabiliz programatu

<CUDAren egitura>

76

Page 74: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY 3.0 Tosaka@Wikimedia Commons

77

Page 75: GPGPU programazioa: Txartel grafikoa erabiliz programatu

kernelak

78

Page 76: GPGPU programazioa: Txartel grafikoa erabiliz programatu

paraleloan exekutatuko direnfuntzioak

79

Page 77: GPGPU programazioa: Txartel grafikoa erabiliz programatu

ezin dute baliorik bueltatu

80

Page 78: GPGPU programazioa: Txartel grafikoa erabiliz programatu

global

81

Page 79: GPGPU programazioa: Txartel grafikoa erabiliz programatu

CUDA C

82

Page 80: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: PD Clker.com & Seamas O Brogain

83

Page 81: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY 3.0 Tor proiektua

84

Page 82: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY-SA 3.0 Ricardas.marozas@Wikimedia Commons

85

Page 83: GPGPU programazioa: Txartel grafikoa erabiliz programatu

</CUDAren egitura>

86

Page 84: GPGPU programazioa: Txartel grafikoa erabiliz programatu

eta kernelak exekutatzeko?

87

Page 85: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(1)zeren gainean egingo du lan?

88

Page 86: GPGPU programazioa: Txartel grafikoa erabiliz programatu

89

Page 87: GPGPU programazioa: Txartel grafikoa erabiliz programatu

cudaMalloc()

cudaFree()

cudaMemcpy()

90

Page 88: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(2)nola exekutatuko da?

91

Page 89: GPGPU programazioa: Txartel grafikoa erabiliz programatu

kernela<<<exek param>>>(f param)

92

Page 90: GPGPU programazioa: Txartel grafikoa erabiliz programatu

hariak

blokeak

93

Page 91: GPGPU programazioa: Txartel grafikoa erabiliz programatu

hariak

Jatorrizkoaren egiletza: CC-BY 3.0 Jorge Barrios (jorgebarrios@Wikimedia Commons)

94

Page 92: GPGPU programazioa: Txartel grafikoa erabiliz programatu

3D array bat(dim3)

95

Page 93: GPGPU programazioa: Txartel grafikoa erabiliz programatu

hardware-ak mugatzen dukopurua

96

Page 94: GPGPU programazioa: Txartel grafikoa erabiliz programatu

threadIdx

(threadIdx.x, threadIdx.y, threadIdx.z)

97

Page 95: GPGPU programazioa: Txartel grafikoa erabiliz programatu

blokeak

98

Page 96: GPGPU programazioa: Txartel grafikoa erabiliz programatu

hari taldeak

Jatorrizkoaren egiletza: CC-BY 2.5 Novita Estiti (verypurpleperson@Flickr)

99

Page 97: GPGPU programazioa: Txartel grafikoa erabiliz programatu

3D array bat(dim3)

100

Page 98: GPGPU programazioa: Txartel grafikoa erabiliz programatu

blockIdx

(blockIdx.x, blockIdx.y, blockIdx.z)

101

Page 99: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY 2.5 Dennis Brekke (dbrekke@Flickr)

102

Page 100: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY 3.0 NVIDIA CUDA Programming Guide version 3.0

103

Page 101: GPGPU programazioa: Txartel grafikoa erabiliz programatu

kernela<<<hariak, blokeak>>>(f param)

104

Page 102: GPGPU programazioa: Txartel grafikoa erabiliz programatu

(3)eta harien artekokoordinazioa?

105

Page 103: GPGPU programazioa: Txartel grafikoa erabiliz programatu

memoria

106

Page 104: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY 3.0 NVIDIA CUDA Programming Guide version 3.0

107

Page 105: GPGPU programazioa: Txartel grafikoa erabiliz programatu

synchthreads()

108

Page 106: GPGPU programazioa: Txartel grafikoa erabiliz programatu

adibidea

109

Page 107: GPGPU programazioa: Txartel grafikoa erabiliz programatu

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

Page 108: GPGPU programazioa: Txartel grafikoa erabiliz programatu

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

Page 109: GPGPU programazioa: Txartel grafikoa erabiliz programatu

__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

Page 110: GPGPU programazioa: Txartel grafikoa erabiliz programatu

tresnak

116

Page 111: GPGPU programazioa: Txartel grafikoa erabiliz programatu

nvcc

117

Page 112: GPGPU programazioa: Txartel grafikoa erabiliz programatu

CUDA-GDB

118

Page 113: GPGPU programazioa: Txartel grafikoa erabiliz programatu

</CUDA>

119

Page 114: GPGPU programazioa: Txartel grafikoa erabiliz programatu

<OpenCL>

120

Page 115: GPGPU programazioa: Txartel grafikoa erabiliz programatu

GPGPUrako estandar irekia

121

Page 116: GPGPU programazioa: Txartel grafikoa erabiliz programatu

kodea hainbat gailutanexekutatu daiteke

122

Page 117: GPGPU programazioa: Txartel grafikoa erabiliz programatu

C99

123

Page 118: GPGPU programazioa: Txartel grafikoa erabiliz programatu

CUDArekin antzekotasunak etadesberdintasunak

124

Page 119: GPGPU programazioa: Txartel grafikoa erabiliz programatu

maila baxuagokoa

125

Page 120: GPGPU programazioa: Txartel grafikoa erabiliz programatu

oraindik ez CUDA bezain osoabaina...

126

Page 121: GPGPU programazioa: Txartel grafikoa erabiliz programatu

etorkizuna izango da

127

Page 122: GPGPU programazioa: Txartel grafikoa erabiliz programatu

</OpenCL>

128

Page 123: GPGPU programazioa: Txartel grafikoa erabiliz programatu

</arkitekturak>

129

Page 124: GPGPU programazioa: Txartel grafikoa erabiliz programatu

<non? zelan? zertarako?>

130

Page 125: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: c© NVIDIA131

Page 126: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY 2.5 ChrisDag@Flickr

132

Page 127: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: PD AEBko energia departamendua

133

Page 128: GPGPU programazioa: Txartel grafikoa erabiliz programatu

baita gailu txikiagotan ere

134

Page 129: GPGPU programazioa: Txartel grafikoa erabiliz programatu

Jatorrizkoaren egiletza: CC-BY 2.5 Android Open Source Project, CC-BY 2.0 Robert Nelson & c© NVIDIA

135

Page 130: GPGPU programazioa: Txartel grafikoa erabiliz programatu

segurtasunaren esparruan...

136

Page 131: GPGPU programazioa: Txartel grafikoa erabiliz programatu

WPA, hash... “ikuskaritza”

137

Page 132: GPGPU programazioa: Txartel grafikoa erabiliz programatu

</non? zelan? zertarako?>

138

Page 133: GPGPU programazioa: Txartel grafikoa erabiliz programatu

eskerrik asko.

139

Page 134: GPGPU programazioa: Txartel grafikoa erabiliz programatu

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