29.04.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!