Implementación en GPU del algoritmo K-Means para ... - UMBC
Implementación en GPU del algoritmo K-Means para ... - UMBC
Implementación en GPU del algoritmo K-Means para ... - UMBC
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong> <strong>para</strong> procesami<strong>en</strong>to <strong>para</strong>lelo<br />
de imág<strong>en</strong>es de satélite disponibles <strong>en</strong> la herrami<strong>en</strong>ta Google Maps<br />
8.6. Técnicas de Optimización.<br />
Es un apartado a t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta cuando estamos implem<strong>en</strong>tando un código <strong>en</strong><br />
CUDA <strong>para</strong> después aplicarlo <strong>en</strong> una arquitectura <strong>para</strong>lela como puede ser el caso de<br />
una <strong>GPU</strong>. Para ello, com<strong>en</strong>tamos los principales problemas que nos <strong>en</strong>contraremos<br />
cuando un código se <strong>en</strong>cu<strong>en</strong>tra sin optimizar:<br />
• Paralelización + implem<strong>en</strong>tación <strong>en</strong> CUDA:<br />
o Int<strong>en</strong>sidad aritmética (cálculos fr<strong>en</strong>te al BW): a veces resulta<br />
necesario t<strong>en</strong>er que re-calcular un dato antes que re-acceder al dato.<br />
Por ello, es importante optimizar las transfer<strong>en</strong>cias de Memoria.<br />
o Maximizar <strong>para</strong>lelismo a nivel de datos: minimizar la dep<strong>en</strong>d<strong>en</strong>cia<br />
<strong>en</strong>tre hilos. Por ello, es importante evitar la diverg<strong>en</strong>cia de threads<br />
<strong>en</strong> un warp.<br />
o Maximizar la utilización de HW: hay que prestar at<strong>en</strong>ción <strong>en</strong> la<br />
elección de los tamaños de bloque y de grid. Además hay que t<strong>en</strong>er<br />
cuidado con la Ocupancia (ocultar lat<strong>en</strong>cia memoria).<br />
De los tres problemas señalados anteriorm<strong>en</strong>te, que podrán <strong>en</strong>contrarse<br />
fácilm<strong>en</strong>te cuando nos <strong>en</strong>contrarnos programando <strong>en</strong> CUDA, pasaremos a describir<br />
una serie de indicaciones <strong>para</strong> poderlos contrarrestarlos.<br />
1) Optimizar las transfer<strong>en</strong>cias de Memoria.<br />
Reducir la p<strong>en</strong>alización de transfer<strong>en</strong>cias de memoria según el tipo de memoria<br />
utilizado:<br />
Memoria global: copias <strong>en</strong>tre memoria CPU – <strong>GPU</strong> y viceversa. En este tipo de<br />
copias t<strong>en</strong>dremos que simultanear las copias con los cálculos <strong>en</strong> CPU, es decir,<br />
cuando estemos utilizando la primitiva cudaMemcpy(…) devuelve el control a CPU<br />
sólo al finalizar:<br />
Trabajo Fin de Máster -94- Sergio Bernabé García