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
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<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 />
coprocesador de la CPU principal, o host. En otras palabras, los datos <strong>para</strong>lelos,<br />
cálculo int<strong>en</strong>sivo de porciones de aplicaciones ejecutándose <strong>en</strong> el host son cargados<br />
<strong>en</strong> el device. De forma más precisa, una parte de una aplicación que se ejecuta<br />
muchas veces, pero con datos difer<strong>en</strong>tes e indep<strong>en</strong>di<strong>en</strong>tes, puede ser aislada <strong>en</strong> una<br />
función que es ejecutada <strong>en</strong> el device como muchos hilos indep<strong>en</strong>di<strong>en</strong>tes. Como<br />
dicha función es compilada, la instrucción obt<strong>en</strong>ida a partir <strong>del</strong> device (<strong>en</strong> nuestro<br />
caso, la <strong>GPU</strong>) y el programa resultante, llamado kernel, se descargan <strong>en</strong> el device.<br />
Tanto el host como el device manti<strong>en</strong><strong>en</strong> su propia DRAM, referidas como memoria<br />
<strong>del</strong> host y memoria <strong>del</strong> device respectivam<strong>en</strong>te. Una puede copiar datos de una<br />
memoria a la otra a través de llamadas a una API optimizada, que usa el Acceso<br />
Directo a Memoria (DMA) <strong>del</strong> device [23].<br />
Hilos, Bloques y Grids<br />
El tratami<strong>en</strong>to por lotes de los hilos que ejecuta el kernel está organizado como<br />
un grid de bloques de hilos, ilustrado <strong>en</strong> la figura 3.9. Un bloque de hilos es un lote<br />
de hilos que pued<strong>en</strong> cooperar juntos comparti<strong>en</strong>do datos efici<strong>en</strong>tem<strong>en</strong>te a través de la<br />
memoria compartida y sincronizar sus ejecuciones <strong>para</strong> coordinar los accesos a<br />
memoria. De forma precisa, uno puede especificar puntos de sincronización <strong>en</strong> el<br />
kernel, donde los hilos <strong>en</strong> un bloque están susp<strong>en</strong>didos hasta que todos ellos alcanc<strong>en</strong><br />
el punto de sincronización. Cada hilo es id<strong>en</strong>tificado por su id<strong>en</strong>tificador de hilo<br />
(thread ID), que es el número de hilo d<strong>en</strong>tro de un bloque [23].<br />
Hay un número máximo de hilos que un bloque puede cont<strong>en</strong>er (512 hilos<br />
concretam<strong>en</strong>te). Sin embargo, los bloques de misma dim<strong>en</strong>sión y tamaño que<br />
ejecutan el mismo kernel pued<strong>en</strong> ser tratados por lotes de forma conjunta, <strong>en</strong> un grid<br />
de bloques, así que el número total de hilos puede ser lanzado <strong>en</strong> una única<br />
invocación <strong>del</strong> kernel es mucho más grande. Esto se debe al gasto de reducir la<br />
cooperación <strong>en</strong>tre hilos, porque los hilos <strong>en</strong> difer<strong>en</strong>tes bloques <strong>del</strong> mismo grid no<br />
pued<strong>en</strong> comunicarse ni sincronizarse con los de los demás. Este mo<strong>del</strong>o permite a los<br />
kernels ejecutarse efici<strong>en</strong>tem<strong>en</strong>te sin recompilación <strong>en</strong> varios devices con difer<strong>en</strong>tes<br />
capacidades <strong>para</strong>lelas: un device puede ejecutar todos los bloques de un grid<br />
secu<strong>en</strong>cialm<strong>en</strong>te si ti<strong>en</strong>e poca capacidad, o <strong>en</strong> <strong>para</strong>lelo si ti<strong>en</strong>e mucha, o<br />
Trabajo Fin de Máster -35- Sergio Bernabé García