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.
UNIVERSIDAD DE EXTREMADURA<br />
Escuela Politécnica<br />
MÁSTER UNIVERSITARIO EN<br />
COMPUTACIÓN GRID Y PARALELISMO<br />
Trabajo Fin de Máster<br />
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong><br />
<strong>para</strong> procesami<strong>en</strong>to <strong>para</strong>lelo de imág<strong>en</strong>es de satélite<br />
disponibles <strong>en</strong> la herrami<strong>en</strong>ta Google Maps<br />
Sergio Bernabé García<br />
Septiembre, 2010
<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 />
Trabajo Fin de Máster -2- Sergio Bernabé García
<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 />
UNIVERSIDAD DE EXTREMADURA<br />
Escuela Politécnica<br />
MÁSTER UNIVERSITARIO EN<br />
COMPUTACIÓN GRID Y PARALELISMO<br />
Trabajo Fin de Máster<br />
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong><br />
<strong>para</strong> procesami<strong>en</strong>to <strong>para</strong>lelo de imág<strong>en</strong>es de satélite<br />
disponibles <strong>en</strong> la herrami<strong>en</strong>ta Google Maps<br />
Autor: Sergio Bernabé García<br />
Fdo.:<br />
Director: Antonio Plaza Miguel<br />
Fdo.:<br />
CALIFICACIÓN:<br />
FECHA:<br />
Tribunal Calificador<br />
Presid<strong>en</strong>te:<br />
Fdo.:<br />
Secretario:<br />
Fdo.:<br />
Vocal:<br />
Fdo.:<br />
Trabajo Fin de Máster -3- Sergio Bernabé García
<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 />
Trabajo Fin de Máster -4- Sergio Bernabé García
<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 />
Si supiese qué es lo que estoy haci<strong>en</strong>do,<br />
no le llamaría investigación, verdad?<br />
Albert Einstein.<br />
Trabajo Fin de Máster -5- Sergio Bernabé García
<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 />
Trabajo Fin de Máster -6- Sergio Bernabé García
<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 />
AGRADECIMIENTOS<br />
En estas líneas, quiero agradecer sinceram<strong>en</strong>te todo el apoyo que me ha brindado, la g<strong>en</strong>te que me<br />
ha acompañado durante este año.<br />
En primer lugar deseo expresar mi más sincero agradecimi<strong>en</strong>to a mi director de TFM, Antonio<br />
Plaza Miguel, por haber confiado <strong>en</strong> mí <strong>para</strong> la realización de este trabajo de investigación y por todos<br />
sus consejos recibidos a lo largo <strong>del</strong> mismo. Asimismo agradecer a mis compañeros <strong>del</strong> grupo<br />
HYPERCOMP: Sergio y Gabri, por las ayudas y los consejos recibidos durante la realización <strong>del</strong> trabajo,<br />
también a mis compañeros de Máster: Josi, Kiwi, David y Álvaro por los bu<strong>en</strong>os mom<strong>en</strong>tos pasados a lo<br />
largo de este año.<br />
También darle las gracias a mi familia por todo el apoyo recibido, a mis amigos y el más especial<br />
agradecimi<strong>en</strong>to a mi novia Sheila, porque siempre ha creído <strong>en</strong> mí y que más ha compr<strong>en</strong>dido, que ante<br />
todo <strong>en</strong> esta vida está el ser feliz y que a su lado he conseguido serlo. Sin ti las cosas no serían lo mismo,<br />
TE QUIERO!!.<br />
Trabajo Fin de Máster -7- Sergio Bernabé García
<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 />
Resum<strong>en</strong><br />
En el pres<strong>en</strong>te trabajo desarrollamos una nueva implem<strong>en</strong>tación <strong>en</strong> tarjetas<br />
gráficas programables (<strong>GPU</strong>s) <strong>del</strong> <strong>algoritmo</strong> de clustering no supervisado K-<strong>Means</strong>,<br />
evaluando las prestaciones de dicha implem<strong>en</strong>tación <strong>en</strong> la tarea de clasificar (de<br />
forma no supervisada) imág<strong>en</strong>es de satélite disponibles <strong>en</strong> la herrami<strong>en</strong>ta Google<br />
Maps. Dichas imág<strong>en</strong>es son obt<strong>en</strong>idas utilizando otra herrami<strong>en</strong>ta desarrollada por el<br />
doctorando autor <strong>del</strong> pres<strong>en</strong>te trabajo. Con vistas a validar el nuevo <strong>algoritmo</strong><br />
desarrollado, se ha evaluado el cons<strong>en</strong>so obt<strong>en</strong>ido <strong>en</strong> la clasificación con respecto a<br />
los resultados proporcionados por la implem<strong>en</strong>tación <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong> <strong>en</strong><br />
software comercial (Research Systems ENVI), obt<strong>en</strong>i<strong>en</strong>do resultados muy similares<br />
a los proporcionados por dicha herrami<strong>en</strong>ta <strong>en</strong> difer<strong>en</strong>tes casos de estudio basados <strong>en</strong><br />
imág<strong>en</strong>es de satélite proporcionadas a partir de la herrami<strong>en</strong>ta Google Maps y<br />
obt<strong>en</strong>idas <strong>en</strong> difer<strong>en</strong>tes zonas geográficas de la superficie terrestre. Dicha validación<br />
experim<strong>en</strong>tal revela que el <strong>algoritmo</strong> propuesto permite obt<strong>en</strong>er resultados<br />
prácticam<strong>en</strong>te idénticos a otras implem<strong>en</strong>taciones disponibles de K-<strong>Means</strong> [1], pero<br />
<strong>en</strong> un tiempo mucho más rápido (<strong>en</strong> particular, la implem<strong>en</strong>tación <strong>para</strong>lela <strong>del</strong><br />
<strong>algoritmo</strong> propuesto (desarrollada utilizando el l<strong>en</strong>guaje CUDA de NVidia) <strong>en</strong> una<br />
<strong>GPU</strong> de la gama NVidia Tesla C1060 obti<strong>en</strong>e un speedup por <strong>en</strong>cima de 30 unidades<br />
con respecto a la correspondi<strong>en</strong>te versión serie optimizada, lo cual supon<strong>en</strong> un<br />
importante aum<strong>en</strong>to de las prestaciones computacionales <strong>del</strong> <strong>algoritmo</strong> que se<br />
preve<strong>en</strong> indisp<strong>en</strong>sables a la hora de procesar grandes cantidades de datos de satélite<br />
[2-4], tales como los disponibles <strong>en</strong> la herrami<strong>en</strong>ta Google Maps que se ha utilizado<br />
<strong>en</strong> el pres<strong>en</strong>te trabajo <strong>para</strong> validar el <strong>algoritmo</strong> <strong>para</strong>lelo desarrollado.<br />
Palabras clave:<br />
K-<strong>Means</strong>, imág<strong>en</strong>es de satélite, <strong>GPU</strong>, CUDA, ENVI.<br />
Trabajo Fin de Máster -8- Sergio Bernabé García
<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 />
Abstract<br />
In this work, we develop a new <strong>para</strong>llel implem<strong>en</strong>tation of the K-<strong>Means</strong><br />
unsupervised clustering algorithm for commodity graphic processing units (<strong>GPU</strong>s),<br />
and further evaluate the performance of this newly developed algorithm in the task of<br />
classifying (in unsupervised fashion) satellite imagery available from Google Maps<br />
<strong>en</strong>gine. Those images are obtained using a companion tool developed by the author<br />
of this research work. With the ultimate goal of evaluating the classification<br />
precision of the newly developed algorithm, we have analyzed the cons<strong>en</strong>sus or<br />
agreem<strong>en</strong>t in the classification achieved by our implem<strong>en</strong>tation and an alternative<br />
implem<strong>en</strong>tation of the algorithm available in commercial software (Research<br />
Systems ENVI). Our experim<strong>en</strong>tal results, conducted using satellite images obtained<br />
from Google Maps <strong>en</strong>gine over differ<strong>en</strong>t locations around the Earth, indicate that the<br />
classification agreem<strong>en</strong>t betwe<strong>en</strong> our <strong>para</strong>llel version and the ENVI implem<strong>en</strong>tation<br />
of the K-<strong>Means</strong> algorithm is very high. In addition, the <strong>para</strong>llel version (developed<br />
using the CUDA language available from NVidia) is much faster that the serial one<br />
(more than 30x speedup), thus indicating that our proposed implem<strong>en</strong>tation can<br />
significantly improve the computational performance of this clustering algorithm and<br />
thus allows for larger scale processing of high-dim<strong>en</strong>sional image databases such as<br />
those available in the Google Maps <strong>en</strong>gine used for validating the proposed <strong>GPU</strong><br />
implem<strong>en</strong>tation.<br />
Keywords<br />
K-<strong>Means</strong>, satellite imagery, <strong>GPU</strong>, CUDA, ENVI.<br />
Trabajo Fin de Máster -9- Sergio Bernabé García
<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 />
Índice de Cont<strong>en</strong>ido<br />
1. MOTIVACIONES Y OBJETIVOS ................................................................................ 14<br />
1.1. Motivaciones ................................................................................................................... 14<br />
1.2. Objetivos .......................................................................................................................... 15<br />
2. INTRODUCCIÓN ...................................................................................................... 18<br />
2.1. Concepto de imag<strong>en</strong> de satélite ................................................................................. 18<br />
2.2. S<strong>en</strong>sores de adquisición de imág<strong>en</strong>es multiespectrales ...................................... 20<br />
2.3. Técnicas de clasificación de datos multiespectrales y la necesidad de<br />
<strong>para</strong>lelismo ............................................................................................................................... 21<br />
3. TARJETAS GRÁFICAS PROGRAMABLES <strong>GPU</strong>S ....................................................... 25<br />
3.1. Las <strong>GPU</strong>s como un dispositivo de procesami<strong>en</strong>to de datos <strong>en</strong> <strong>para</strong>lelo ....... 25<br />
3.2. CUDA: una nueva arquitectura <strong>para</strong> el cálculo <strong>en</strong> la <strong>GPU</strong> ............................... 31<br />
3.3. Procesami<strong>en</strong>to <strong>en</strong> la <strong>GPU</strong> ........................................................................................... 34<br />
3.4. <strong>Implem<strong>en</strong>tación</strong> hardware y mo<strong>del</strong>o de ejecución. ............................................. 37<br />
4. PROCESAMIENTO EN IMÁGENES. TIPOS DE CLASIFICACIONES: CLUSTERING ..... 44<br />
4.1. Algoritmos de clasificación no supervisados ........................................................ 45<br />
5. PROCESAMIENTO PARALELO EN <strong>GPU</strong> .................................................................. 48<br />
5.1. <strong>Implem<strong>en</strong>tación</strong> CUDA ............................................................................................... 50<br />
5.1.1. Primera etapa ......................................................................................... 51<br />
5.1.2. Segunda etapa........................................................................................ 53<br />
5.1.3. Tercera etapa ......................................................................................... 54<br />
5.2. CUDA Occupancy Calculator ................................................................................... 55<br />
6. RESULTADOS .......................................................................................................... 61<br />
6.1. Ejemplo de uso 1: World Trade C<strong>en</strong>ter de New York ........................................ 63<br />
6.2. Ejemplo de uso 2: El río Nilo africano .................................................................... 68<br />
6.3. Ejemplo de uso 3: Población de Guareña y sus alrededores ............................. 73<br />
7. CONCLUSIONES Y LÍNEAS FUTURAS ....................................................................... 78<br />
8. ANEXO I: MANUAL DE CUDA ............................................................................ 80<br />
8.1. Introducción .................................................................................................................... 80<br />
8.2. Configuraciones necesarias ........................................................................................ 81<br />
Trabajo Fin de Máster -10- Sergio Bernabé García
<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.3. Compilación programas CUDA. ............................................................................... 85<br />
8.4. Librerías CUDA. ........................................................................................................... 86<br />
8.5. Arquitectura y mo<strong>del</strong>o de programación ................................................................ 87<br />
8.6. Técnicas de Optimización........................................................................................... 94<br />
8.7. Herrami<strong>en</strong>tas desarrollo y depuración. ................................................................... 99<br />
9. BIBLIOGRAFÍA ...................................................................................................... 100<br />
10. PUBLICACIONES ................................................................................................. 104<br />
Índice de Figuras<br />
Figura 2.1. El espectro electromagnético. .................................................................. 19<br />
Figura 2.2. Ejemplo ilustrativo de una imag<strong>en</strong> multi-dim<strong>en</strong>sional de 4 bandas. ....... 20<br />
Figura 2.3. Configuración típica de un cluster Beowulf. ........................................... 23<br />
Figura 2.4. Distintos mo<strong>del</strong>os de <strong>GPU</strong>s NVidia. ....................................................... 24<br />
Figura 2.5. Ejemplo de la Virtex-6 FPGA. ................................................................ 24<br />
Figura 3.1. Operaciones <strong>en</strong> coma flotante por segundo <strong>para</strong> CPU y <strong>GPU</strong>. ............... 25<br />
Figura 3.2. Ancho de banda CPU y <strong>GPU</strong>. ................................................................. 26<br />
Figura 3.3. Pipeline clásico de procesami<strong>en</strong>to <strong>en</strong> una <strong>GPU</strong>. ..................................... 28<br />
Figura 3.4. La <strong>GPU</strong> proporciona más transistores <strong>para</strong> el procesami<strong>en</strong>to de datos. .. 29<br />
Figura 3.5. Pipeline clásico fr<strong>en</strong>te a pipeline unificado. ............................................ 32<br />
Figura 3.6. Pila de software de CUDA. ..................................................................... 33<br />
Figura 3.7. Operaciones de memoria Gather (reunión) y Scatter (dispersión). ......... 33<br />
Figura 3.8. Shared memory. ....................................................................................... 34<br />
Figura 3.9. Grid, bloques e hilos. ............................................................................... 36<br />
Figura 3.10. Acceso a difer<strong>en</strong>tes espacios de memoria. ............................................ 37<br />
Figura 3.11. Arquitectura de la <strong>GPU</strong> Tesla c1060 de NVidia. .................................. 38<br />
Figura 3.12. Conjunto de multiprocesadores SIMD con memoria compartida<br />
on-chip........................................................................................................................ 39<br />
Figura 4.1. Ejemplo gráfico <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong>. ................................................ 47<br />
Figura 5.1. Ejemplo de reducción <strong>en</strong> tres pasos de una suma dado un cluster de<br />
8 elem<strong>en</strong>tos................................................................................................................. 50<br />
Trabajo Fin de Máster -11- Sergio Bernabé García
<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 />
Figura 5.2. Cuda occupancy calculator ...................................................................... 56<br />
Figura 5.3: Cuda occupancy calculator: gráfica asociada al número de hilos por<br />
bloque. ........................................................................................................................ 58<br />
Figura 5.4: Cuda occupancy calculator: gráfica asociada al número de registros por<br />
hilo. ............................................................................................................................ 59<br />
Figura 5.5: Cuda occupancy calculator: gráfica asociada a la cantidad de memoria<br />
compartida usada por cada bloque ............................................................................. 60<br />
Figura 6.1. Ejemplo de construcción de una matriz de confusión. ............................ 62<br />
Figura 6.2. Ubicación <strong>del</strong> WTC de Nueva York, situado <strong>en</strong> las coord<strong>en</strong>adas:<br />
40.713º, -74.0135º .................................................................................................... 63<br />
Figura 6.3. Selección de una zona urbana pert<strong>en</strong>eci<strong>en</strong>te al WTC de Nueva York<br />
(Estados Unidos) ........................................................................................................ 64<br />
Figura 6.4. Segm<strong>en</strong>tación de la zona seleccionada <strong>del</strong> WTC, utilizando el <strong>algoritmo</strong><br />
K-<strong>Means</strong>. .................................................................................................................... 64<br />
Figura 6.5. Segm<strong>en</strong>tación de la zona seleccionada de WTC (Nueva York) utilizando<br />
el <strong>algoritmo</strong> K-<strong>Means</strong> con la herrami<strong>en</strong>ta ENVI. ...................................................... 65<br />
Figura 6.6. Ubicación <strong>del</strong> río Nilo (África), situado <strong>en</strong> las coord<strong>en</strong>adas: 29.89º,<br />
31.28º ......................................................................................................................... 68<br />
Figura 6.7. Selección de un tramo pert<strong>en</strong>eci<strong>en</strong>te al río Nilo (África) ........................ 69<br />
Figura 6.8. Segm<strong>en</strong>tación de la zona seleccionada <strong>del</strong> río Nilo (África) utilizando el<br />
<strong>algoritmo</strong> K-<strong>Means</strong>. ................................................................................................... 69<br />
Figura 6.9. Segm<strong>en</strong>tación de la zona seleccionada <strong>del</strong> río Nilo utilizando el <strong>algoritmo</strong><br />
K-<strong>Means</strong> con la herrami<strong>en</strong>ta ENVI............................................................................ 70<br />
Figura 6.10. Ubicación <strong>del</strong> municipio de Guareña (Badajoz), situado <strong>en</strong> las<br />
coord<strong>en</strong>adas: 38.85º, -6.083333º. ............................................................................... 73<br />
Figura 6.11. Selección de una zona situada cerca de la población de Guareña de la<br />
que escogeremos las zonas con vegetación. ............................................................... 73<br />
Figura 6.12. Segm<strong>en</strong>tación de la zona seleccionada situada cerca de la población de<br />
Guareña utilizando el <strong>algoritmo</strong> K-<strong>Means</strong>. ................................................................ 74<br />
Figura 6.13. Segm<strong>en</strong>tación de la zona seleccionada situada cerca de la población de<br />
Guareña utilizando el <strong>algoritmo</strong> K-<strong>Means</strong> con la herrami<strong>en</strong>ta ENVI. ....................... 74<br />
Figura 8.1. Arquitectura <strong>para</strong>lela Cuda. ..................................................................... 85<br />
Figura 8.2. Arquitectura heterogénea CPU + <strong>GPU</strong>. ................................................... 87<br />
Figura 8.3. Ejemplos de dim<strong>en</strong>siones e id<strong>en</strong>tificadores. ............................................ 90<br />
Trabajo Fin de Máster -12- Sergio Bernabé García
<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 />
Figura 8.4. Ejemplo: traspuesta de una matriz utilizando memoria global. ............... 95<br />
Figura 8.5. Ejemplo: traspuesta de una matriz utilizando memoria compartida. ....... 96<br />
Índice de Tablas<br />
Tabla 3.1. Lecturas y escrituras <strong>en</strong> los difer<strong>en</strong>tes tipos de memoria.......................... 36<br />
Tabla 3.2. Especificaciones técnicas de la <strong>GPU</strong> Tesla c1060 de NVidia. ................. 39<br />
Tabla 3.3. Recursos y limitaciones según la <strong>GPU</strong> que utilicemos <strong>para</strong> programar<br />
CUDA. ....................................................................................................................... 41<br />
Tabla 3.4. Capacidad de cómputo y número de multiprocesadores de cada <strong>GPU</strong> de<br />
NVidia. ....................................................................................................................... 43<br />
Tabla 4.1. V<strong>en</strong>tajas e inconv<strong>en</strong>i<strong>en</strong>tes de la utilización <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong>. ....... 47<br />
Tabla 5.1. Métricas utilizadas <strong>para</strong> calcular la similitud de características. .............. 49<br />
Tabla 5.2: Cuda occupancy calculator: parámetros introducidos .............................. 57<br />
Tabla 5.3: Cuda occupancy calculator: resultados calculados <strong>en</strong> función de los<br />
parámetros .................................................................................................................. 57<br />
Tabla 6.1. Resultados estadísticos tras la ejecución <strong>para</strong>lela <strong>del</strong> <strong>algoritmo</strong> de<br />
clasificación no supervisado K-<strong>Means</strong> con la imag<strong>en</strong> <strong>del</strong> World Trade C<strong>en</strong>ter. ....... 66<br />
Tabla 6.2. Com<strong>para</strong>ción de resultados CPU y <strong>GPU</strong> utilizando la imag<strong>en</strong> <strong>del</strong> World<br />
Trade C<strong>en</strong>ter ajustada según la dim<strong>en</strong>sión. ................................................................ 67<br />
Tabla 6.3. Resultados estadísticos tras la ejecución <strong>para</strong>lela <strong>del</strong> <strong>algoritmo</strong> de<br />
clasificación no supervisado K-<strong>Means</strong> con la imag<strong>en</strong> <strong>del</strong> río Nilo. ........................... 71<br />
Tabla 6.4. Com<strong>para</strong>ción de resultados CPU y <strong>GPU</strong> utilizando la imag<strong>en</strong> <strong>del</strong> río Nilo<br />
ajustada según la dim<strong>en</strong>sión. ...................................................................................... 72<br />
Tabla 6.5. Resultados estadísticos tras la ejecución <strong>para</strong>lela <strong>del</strong> <strong>algoritmo</strong> de<br />
clasificación no supervisado K-<strong>Means</strong> con la imag<strong>en</strong> de Guareña. ........................... 76<br />
Tabla 6.6. Com<strong>para</strong>ción de resultados <strong>GPU</strong> y <strong>GPU</strong> utilizando la imag<strong>en</strong> de Guareña<br />
ajustada según la dim<strong>en</strong>sión. ...................................................................................... 76<br />
Trabajo Fin de Máster -13- Sergio Bernabé García
<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 />
1. Motivaciones y objetivos<br />
1.1. Motivaciones<br />
El pres<strong>en</strong>te trabajo se ha desarrollado d<strong>en</strong>tro de las líneas de investigación<br />
actuales <strong>del</strong> Grupo Hypercomp de la Universidad de Extremadura, y consiste <strong>en</strong> la<br />
implem<strong>en</strong>tación efici<strong>en</strong>te de un <strong>algoritmo</strong> de clasificación no supervisada <strong>en</strong><br />
imág<strong>en</strong>es multiespectrales, haci<strong>en</strong>do uso de <strong>GPU</strong>s de NVidia, aprovechando el<br />
<strong>para</strong>lelismo intrínseco que ofrec<strong>en</strong> dichas tarjetas <strong>en</strong> operaciones de procesami<strong>en</strong>to<br />
de imág<strong>en</strong>es. En concreto el <strong>algoritmo</strong> implem<strong>en</strong>tado es: K-<strong>Means</strong>. Las aplicaciones<br />
pot<strong>en</strong>ciales de este <strong>algoritmo</strong> son múltiples, <strong>en</strong> donde destacamos su uso aplicado <strong>en</strong><br />
sistemas CBIR [5-7] donde se podría aplicar dicho <strong>algoritmo</strong> <strong>en</strong> clasificaciones de<br />
imág<strong>en</strong>es obt<strong>en</strong>idas de grandes repositorios como es el caso de Google Maps.<br />
Hasta la fecha, las técnicas tradicionales <strong>en</strong> la literatura <strong>para</strong> abordar este tipo de<br />
problemas han optado por soluciones basadas <strong>en</strong> el uso de clusters y sistemas<br />
multiprocesador. La computación cluster, a pesar de su adaptabilidad al problema <strong>del</strong><br />
tratami<strong>en</strong>to de datos multiespectrales (especialm<strong>en</strong>te cuando t<strong>en</strong>emos imág<strong>en</strong>es con<br />
una gran cantidad de datos), pres<strong>en</strong>ta problemas <strong>en</strong> cuanto al procesami<strong>en</strong>to de los<br />
datos <strong>en</strong> tiempo real dado el alto coste y elevados requerimi<strong>en</strong>tos <strong>en</strong> cuanto a<br />
espacio, peso y consumo. Por otra parte, la instalación de un cluster suele llevar<br />
asociada la disponibilidad de un número elevado de ord<strong>en</strong>adores interconectados<br />
<strong>en</strong>tre sí <strong>para</strong> que compartan el procesami<strong>en</strong>to de datos a través de sus procesadores,<br />
lo cual hace increm<strong>en</strong>tar la velocidad de ejecución y procesami<strong>en</strong>to de las<br />
aplicaciones; sin embargo, cada nodo (u ord<strong>en</strong>ador) lleva ligado un precio y una serie<br />
de requerimi<strong>en</strong>tos <strong>en</strong> cuanto a espacio y consumo.<br />
Para solucionar estos problemas relativos a coste, consumo y peso, y además<br />
ofrecer además mejoras sustanciales <strong>en</strong> cuanto al tiempo de procesami<strong>en</strong>to, <strong>en</strong> el<br />
pres<strong>en</strong>te TFM proponemos una alternativa basada <strong>en</strong> un nuevo mo<strong>del</strong>o de<br />
tratami<strong>en</strong>to de imág<strong>en</strong>es multiespectrales basado <strong>en</strong> la utilización de <strong>GPU</strong>s.<br />
Convi<strong>en</strong>e destacar que, con una sola <strong>GPU</strong>, pued<strong>en</strong> llegar a obt<strong>en</strong>erse mejoras<br />
notables a la hora de procesador cálculos de tipo ci<strong>en</strong>tífico, como es el caso de los<br />
Trabajo Fin de Máster -14- Sergio Bernabé García
<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 />
<strong>algoritmo</strong>s de tratami<strong>en</strong>to de imág<strong>en</strong>es multiespectrales, a un coste razonable (no<br />
más de 400 euros) y además ocupando un espacio mínimo. No obstante, no todas las<br />
tarjetas <strong>GPU</strong> disponibles <strong>en</strong> el mercado se ajustan a nuestros requerimi<strong>en</strong>tos. Por ello<br />
si aplicamos los <strong>algoritmo</strong>s propuestos a través de tarjetas conv<strong>en</strong>cionales o de gama<br />
baja, veremos que los resultados no sufr<strong>en</strong> ningún tipo de mejorías; es más, podemos<br />
llegar a obt<strong>en</strong>er peores resultados. Finalm<strong>en</strong>te, indicar que <strong>en</strong> este trabajo se ha<br />
int<strong>en</strong>tado ir un poco más allá, y <strong>para</strong> trabajar de forma totalm<strong>en</strong>te innovadora se ha<br />
utilizado la arquitectura CUDA incorporada <strong>en</strong> las tarjetas gráficas de NVidia de las<br />
series 8 (o superiores), Quadro y Tesla, si<strong>en</strong>do algunas de las tarjetas de la primera<br />
gama las que han sido objeto de estudio <strong>en</strong> este TFM.<br />
Para la realización de este trabajo se han utilizado las sigui<strong>en</strong>tes máquinas:<br />
1) Procesador Intel Core i7 920 con una <strong>GPU</strong> NVidia Tesla c1060 y el sistema<br />
operativo Linux Ubuntu 9.04.<br />
2) Procesador Intel Core 2 Duo P8700 a 2.53Ghz con una <strong>GPU</strong> NVidia GeForce<br />
9400M y el sistema operativo Windows 7.<br />
Por otra parte, otra de las actividades desarrolladas <strong>en</strong> el pres<strong>en</strong>te trabajo<br />
consiste <strong>en</strong> la realización de un estudio cuantitativo y com<strong>para</strong>tivo <strong>del</strong> <strong>algoritmo</strong><br />
implem<strong>en</strong>tado tanto <strong>en</strong> C++ <strong>para</strong> su ejecución <strong>en</strong> la CPU como <strong>en</strong> CUDA <strong>para</strong> su<br />
ejecución <strong>en</strong> la distintas <strong>GPU</strong>s así como un análisis de precisión de los resultados<br />
obt<strong>en</strong>idos.<br />
1.2. Objetivos<br />
Este trabajo pret<strong>en</strong>de desarrollar sobre una <strong>GPU</strong> la implem<strong>en</strong>tación de un<br />
<strong>algoritmo</strong> de clasificación no supervisada <strong>en</strong> imág<strong>en</strong>es multiespectrales y establecer<br />
un estudio cualitativo y com<strong>para</strong>tivo de los resultados obt<strong>en</strong>idos tras la ejecución.<br />
Concretam<strong>en</strong>te el <strong>algoritmo</strong> es: K-<strong>Means</strong>.<br />
La consecución <strong>del</strong> objetivo g<strong>en</strong>eral anteriorm<strong>en</strong>te m<strong>en</strong>cionado se lleva a cabo<br />
<strong>en</strong> la pres<strong>en</strong>te memoria abordando una serie de objetivos específicos, los cuales se<br />
<strong>en</strong>umeran a continuación:<br />
Trabajo Fin de Máster -15- Sergio Bernabé García
<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 />
1. Establecer un estudio sobre el funcionami<strong>en</strong>to <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong> <strong>para</strong><br />
extraer el grado de <strong>para</strong>lelismo inher<strong>en</strong>te que pres<strong>en</strong>ta y utilizarlo <strong>para</strong> su<br />
implem<strong>en</strong>tación.<br />
2. Realizar un estudio sobre el l<strong>en</strong>guaje de programación CUDA <strong>para</strong> poder<br />
implem<strong>en</strong>tar cualquier tipo de <strong>algoritmo</strong>s.<br />
3. Implem<strong>en</strong>tar el <strong>algoritmo</strong> K-<strong>Means</strong> <strong>para</strong> ejecutarlo <strong>en</strong> la <strong>GPU</strong> y optimizar el<br />
tiempo de ejecución, <strong>para</strong> poderlo com<strong>para</strong>r con su tiempo <strong>en</strong> serie ya<br />
implantado <strong>en</strong> una herrami<strong>en</strong>ta que realiza clasificaciones no supervisadas y<br />
supervisadas <strong>en</strong> imág<strong>en</strong>es de satélite obt<strong>en</strong>idas desde Google Maps.<br />
4. Implem<strong>en</strong>tar una serie de aplicaciones que nos permitan conocer la precisión<br />
que se ha logrado <strong>en</strong> la ejecución <strong>del</strong> <strong>algoritmo</strong> con su versión serie de la<br />
herrami<strong>en</strong>ta ya implem<strong>en</strong>tada.<br />
5. Realizar un estudio com<strong>para</strong>tivo sobre los resultados obt<strong>en</strong>idos.<br />
T<strong>en</strong>i<strong>en</strong>do pres<strong>en</strong>tes los anteriores objetivos concretos, procedemos a describir la<br />
organización <strong>del</strong> resto de esta memoria, estructurada <strong>en</strong> una serie de capítulos cuyos<br />
cont<strong>en</strong>idos se describ<strong>en</strong> a continuación:<br />
• Introducción. En este capítulo introductorio se describ<strong>en</strong> los conceptos<br />
fundam<strong>en</strong>tales relacionados con las imág<strong>en</strong>es de satélite, s<strong>en</strong>sores de<br />
adquisición de este tipo de imág<strong>en</strong>es y las técnicas de clasificación de datos<br />
multiespectrales, <strong>en</strong>fatizando la necesidad de técnicas de procesami<strong>en</strong>to<br />
<strong>para</strong>lelo <strong>en</strong> este campo y proponi<strong>en</strong>do la utilización de las <strong>GPU</strong>s como<br />
procesador <strong>para</strong>lelo <strong>para</strong> este tipo de técnicas.<br />
• Tarjetas gráficas programables <strong>GPU</strong>s. Este capítulo está dedicado a la<br />
<strong>GPU</strong>, donde se hablará de cómo han ido evolucionando las <strong>GPU</strong>s<br />
programables, de los recursos que ofrec<strong>en</strong> y su capacidad de cómputo.<br />
Introduciremos una serie de conceptos <strong>para</strong> lograr <strong>en</strong>t<strong>en</strong>der cómo se lleva a<br />
cabo el procesami<strong>en</strong>to <strong>en</strong> una <strong>GPU</strong> mediante CUDA. Este capítulo también<br />
describirá el hardware de la tarjeta Tesla c1060 con la que se ha realizado el<br />
Trabajo Fin de Máster -16- Sergio Bernabé García
<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 />
trabajo.<br />
• Procesami<strong>en</strong>to <strong>en</strong> imág<strong>en</strong>es. Este capítulo describe y muestra la utilidad <strong>del</strong><br />
<strong>algoritmo</strong> implem<strong>en</strong>tado <strong>para</strong> el análisis multiespectral así como su<br />
funcionami<strong>en</strong>to y filosofía.<br />
• Procesami<strong>en</strong>to <strong>para</strong>lelo <strong>en</strong> <strong>GPU</strong>. En este capítulo se muestra como se lleva<br />
a cabo el procesami<strong>en</strong>to <strong>para</strong>lelo <strong>en</strong> la <strong>GPU</strong> <strong>para</strong> el caso que nos ocupa,<br />
c<strong>en</strong>trándonos <strong>en</strong> cada una de las fases <strong>del</strong> <strong>algoritmo</strong> por se<strong>para</strong>do.<br />
• Resultados. En este capítulo se describ<strong>en</strong> las imág<strong>en</strong>es que se han utilizado<br />
<strong>para</strong> probar el <strong>algoritmo</strong>, se muestran los resultados de la precisión obt<strong>en</strong>ida<br />
con la versión <strong>para</strong>lela y finalm<strong>en</strong>te se com<strong>para</strong>n estos resultados con los<br />
obt<strong>en</strong>idos por otras herrami<strong>en</strong>tas de refer<strong>en</strong>cia como es el caso de ENVI.<br />
• Conclusiones y líneas futuras. Este capítulo está dedicado a resumir las<br />
principales aportaciones realizadas por la pres<strong>en</strong>te memoria y a mostrar las<br />
conclusiones derivadas. Además, el capítulo sugiere un conjunto de líneas de<br />
trabajo que podrán ser abordadas <strong>en</strong> futuros trabajos.<br />
• ANEXOS. En este capítulo se expone una guía básica <strong>para</strong> poner <strong>en</strong> marcha<br />
una tarjeta gráfica programable, además de unas nociones básicas sobre las<br />
técnicas que podrán ser utilizadas <strong>en</strong> una programación con CUDA. También<br />
se com<strong>en</strong>tarán una serie de técnicas de optimización y las herrami<strong>en</strong>tas de<br />
desarrollo y de depuración más utilizadas. La memoria concluye con una<br />
serie de refer<strong>en</strong>cias bibliográficas utilizadas <strong>en</strong> el estudio.<br />
Trabajo Fin de Máster -17- Sergio Bernabé García
<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 />
2. Introducción<br />
El pres<strong>en</strong>te capítulo se organiza de la sigui<strong>en</strong>te forma: <strong>en</strong> primer lugar,<br />
empezaremos por la descripción <strong>del</strong> concepto de imag<strong>en</strong> multiespectral, más<br />
concretam<strong>en</strong>te de imág<strong>en</strong>es de satélite, detallando las particularidades y<br />
características propias de este tipo de imág<strong>en</strong>es. A continuación, describimos algunas<br />
características g<strong>en</strong>éricas de los s<strong>en</strong>sores de adquisición de este tipo de datos,<br />
destacando los utilizados por el servidor de mapas Google Maps. Seguidam<strong>en</strong>te, se<br />
muestra una visión g<strong>en</strong>eral de las técnicas de clasificación de imág<strong>en</strong>es, destacando<br />
la necesidad de <strong>para</strong>lelismo <strong>en</strong> este campo y mostrando el papel de las <strong>GPU</strong> <strong>para</strong> su<br />
tratami<strong>en</strong>to.<br />
2.1. Concepto de imag<strong>en</strong> de satélite<br />
Una imag<strong>en</strong> de satélite 1 se puede definir como una repres<strong>en</strong>tación visual de la<br />
información capturada por un s<strong>en</strong>sor montado <strong>en</strong> un satélite artificial [8]. Estos<br />
s<strong>en</strong>sores ti<strong>en</strong><strong>en</strong> como cometido recoger información reflejada por la superficie de la<br />
tierra que luego será <strong>en</strong>viada a la Tierra <strong>para</strong> que <strong>en</strong> un posterior procesado, se<br />
obt<strong>en</strong>ga información sobre las características de la zona repres<strong>en</strong>tada. Casi todas las<br />
imág<strong>en</strong>es proced<strong>en</strong>tes de satélite se adquier<strong>en</strong> digitalm<strong>en</strong>te. Dada su naturaleza<br />
digital, las imág<strong>en</strong>es satelitales se procesan, manipulan y realzan <strong>para</strong> extraer de ellas<br />
sutiles detalles e informaciones que otras fu<strong>en</strong>tes no detectarían.<br />
La observación remota de un determinado objeto está basada <strong>en</strong> la captación, por<br />
parte de un instrum<strong>en</strong>to de medida o s<strong>en</strong>sor [9], de la radiación electromagnética<br />
prov<strong>en</strong>i<strong>en</strong>te de la interacción <strong>en</strong>tre el objeto y la fu<strong>en</strong>te de la radiación. La radiación<br />
electromagnética recibe varios nombres dep<strong>en</strong>di<strong>en</strong>do de la longitud de onda que la<br />
caracteriza, como puede apreciarse <strong>en</strong> la figura 2.1.<br />
Para medir la radiación emitida o reflejada por una determinada superficie es<br />
preciso cuantificar la cantidad de flujo <strong>en</strong>ergético que procede de la misma. Para ello<br />
1 http://es.wikipedia.org/wiki/Imag<strong>en</strong>_satelital<br />
Trabajo Fin de Máster -18- Sergio Bernabé García
<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 />
se suele utilizar la medida de la radiancia, que dep<strong>en</strong>derá de varios factores como son<br />
la percepción de brillo, reflectancia, ángulos de observación, <strong>en</strong>tre otros.<br />
En la actualidad nos podemos <strong>en</strong>contrar con un amplio conjunto de instrum<strong>en</strong>tos<br />
o s<strong>en</strong>sores, cuya disponibilidad ha facilitado una redefinición <strong>del</strong> concepto de imag<strong>en</strong><br />
digital a través de la ext<strong>en</strong>sión de la idea de píxel.<br />
Rayos γ<br />
Figura 2.1. El espectro electromagnético.<br />
Recordamos que el valor asociado a cada píxel vi<strong>en</strong>e definido por un valor<br />
numérico d<strong>en</strong>ominado nivel digital (ND). Se d<strong>en</strong>omina de esta manera por tratarse de<br />
un valor numérico, no visual. Así, <strong>en</strong> un esquema puram<strong>en</strong>te espacial, un píxel estará<br />
constituido por un único valor discreto, mi<strong>en</strong>tras que, <strong>en</strong> un esquema espectral, un<br />
píxel constará de un conjunto de valores. Estos valores dep<strong>en</strong>di<strong>en</strong>do <strong>del</strong> tipo de<br />
imag<strong>en</strong> podrán ser <strong>en</strong>t<strong>en</strong>didos como vectores N-dim<strong>en</strong>sionales [10], si<strong>en</strong>do N el<br />
número de bandas espectrales <strong>en</strong> las que el s<strong>en</strong>sor mide información (<strong>en</strong> nuestro caso<br />
utilizaremos 4 dim<strong>en</strong>siones).<br />
0.4 µm 0.7 µm<br />
Rayos X<br />
Visible<br />
Ultravioleta Infrarrojo<br />
10-7 10-5 10-3 10 103 105 103 10-1 Longitud de onda (µm)<br />
Microondas<br />
Radar<br />
La ampliación <strong>del</strong> concepto de píxel ha dado lugar a lo que se conoce como<br />
imag<strong>en</strong> multidim<strong>en</strong>sional, como aparece <strong>en</strong> la figura 2.2. Así dep<strong>en</strong>di<strong>en</strong>do <strong>del</strong> ord<strong>en</strong><br />
Trabajo Fin de Máster -19- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
de magnitud de N podremos realizar una distinción a la hora de hablar de imág<strong>en</strong>es<br />
multidim<strong>en</strong>sionales. De esta manera, cuando el valor de N sea reducido, es decir,<br />
unas cuantas de bandas espectrales [11], , estaremos hablando de imág<strong>en</strong>es<br />
multiespectrales.<br />
Figura 2.2. Ejemplo ilustrativo de una imag<strong>en</strong> multi multi-dim<strong>en</strong>sional dim<strong>en</strong>sional de 4 bandas.<br />
2.2. S<strong>en</strong>sores de adquisición de imág<strong>en</strong>es multiespectrales<br />
En este apartado com<strong>en</strong>taremos brevem<strong>en</strong>te algunos aspectos sobre los s<strong>en</strong>sores<br />
de adquisición de imág<strong>en</strong>es multiespectrales. D<strong>en</strong>tro de las características más<br />
importantes de los s<strong>en</strong>sores multiespectrales, destacamos la resolución <strong>del</strong> s<strong>en</strong>sor, el<br />
proceso de adquisición de da datos y la relación señal-ruido [8].<br />
D<strong>en</strong>tro <strong>del</strong> concepto de resolución nos podemos <strong>en</strong>contrar con difer<strong>en</strong>tes<br />
aspectos, <strong>en</strong>tre los que se <strong>en</strong>cu<strong>en</strong>tran la resolución espacial, y las resoluciones<br />
espectral (número de canales espectrales <strong>en</strong> los que el s<strong>en</strong>sor adquiere datos y la<br />
anchura de las bandas espectrales correspondi<strong>en</strong>tes a dichos canales) y radiom radiométrica<br />
(relacionado con la s<strong>en</strong>sibilidad <strong>del</strong> s<strong>en</strong>sor).<br />
Otro aspecto importante <strong>en</strong> los s<strong>en</strong>sores, es el procedimi<strong>en</strong>to de adquisición de<br />
datos, <strong>en</strong>t<strong>en</strong>di<strong>en</strong>do éste como el procedimi<strong>en</strong>to empleado por estos instrum<strong>en</strong>tos <strong>para</strong><br />
recibir la radiación proced<strong>en</strong>te de los ob objetos. jetos. Los s<strong>en</strong>sores pued<strong>en</strong> ser clasificados<br />
Trabajo Fin de Máster -20- Sergio Bernabé García
<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 />
según su funcionami<strong>en</strong>to y según el modo <strong>en</strong> que son transportados <strong>en</strong> el mom<strong>en</strong>to<br />
de la toma de datos.<br />
Por último, destacar el parámetro de relación señal/ruido o signal-to-noise ratio<br />
(SNR), que puede <strong>en</strong>t<strong>en</strong>derse, <strong>en</strong> términos globales, como la relación <strong>en</strong>tre la<br />
amplitud de la señal obt<strong>en</strong>ida y la amplitud <strong>del</strong> ruido o, lo que es lo mismo, la<br />
cantidad de señal adquirida por unidad de ruido. Este parámetro nos definirá la<br />
calidad de un s<strong>en</strong>sor multiespectral. En términos g<strong>en</strong>erales, las imág<strong>en</strong>es disponibles<br />
<strong>en</strong> la herrami<strong>en</strong>ta Google Maps suel<strong>en</strong> obt<strong>en</strong>erse a partir de la composición de<br />
imág<strong>en</strong>es obt<strong>en</strong>idas por difer<strong>en</strong>tes s<strong>en</strong>sores, predominando las composiciones<br />
basadas <strong>en</strong> datos de Landsat 2 (moderada resolución espacial) y Quickbird 3 (alta<br />
resolución espacial) <strong>en</strong> un contexto multiespectral limitado a 3 bandas (rojo, verde y<br />
azul).<br />
2.3. Técnicas de clasificación de datos multiespectrales y la necesidad de<br />
<strong>para</strong>lelismo<br />
La forma más simple de abordar el problema de la clasificación de píxeles <strong>en</strong><br />
una imag<strong>en</strong> multiespectral es considerar que los píxeles de interés están compuestos<br />
por un solo material, utilizando las técnicas conv<strong>en</strong>cionales de clasificación de<br />
patrones pero con mayor precisión, debido al elevado número de bandas espectrales<br />
disponibles.<br />
Existe un conjunto de técnicas de clasificación de patrones que realizan la<br />
interpretación de una esc<strong>en</strong>a obt<strong>en</strong>ida de forma remota <strong>en</strong> base a la asignación de una<br />
etiqueta o clasificación individual a cada uno de los píxeles de la misma. Estas<br />
técnicas ofrec<strong>en</strong> resultados interesantes dep<strong>en</strong>di<strong>en</strong>do de la aplicación <strong>en</strong> donde se<br />
apliqu<strong>en</strong>.<br />
Los <strong>algoritmo</strong>s de clasificación de imág<strong>en</strong>es multiespectrales pued<strong>en</strong> dividirse<br />
<strong>en</strong> dos grandes categorías [12]: <strong>algoritmo</strong>s supervisados y <strong>algoritmo</strong>s no<br />
supervisados.<br />
2 http://landsat.gsfc.nasa.gov/<br />
3 http://www.digitalglobe.com/<br />
Trabajo Fin de Máster -21- Sergio Bernabé García
<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 />
Las técnicas de clasificación de píxeles de forma no supervisada <strong>en</strong> imág<strong>en</strong>es<br />
multiespectrales se <strong>en</strong>cu<strong>en</strong>tran <strong>en</strong> pl<strong>en</strong>a fase de desarrollo. Entre las técnicas<br />
exist<strong>en</strong>tes, destaca el método K-<strong>Means</strong> [13], que supone la exist<strong>en</strong>cia de K clases<br />
(parámetro que debe ser determinado a priori) y realiza una agrupación de los píxeles<br />
de la imag<strong>en</strong> <strong>en</strong> dichas clases utilizando los vectores métodos puram<strong>en</strong>te estadísticos<br />
basados <strong>en</strong> los valores RGBA promedio de dichas clases.<br />
Por otra parte, el método ISODATA [14,15] también requiere la inicialización<br />
de un parámetro K relativo al número de clases deseadas, de forma previa a la<br />
ejecución <strong>del</strong> <strong>algoritmo</strong>. Además, este método necesita información relativa al<br />
número mínimo de píxeles pert<strong>en</strong>eci<strong>en</strong>tes a una clase. Si el valor inicial de K es bajo,<br />
la dispersión <strong>en</strong>tre clases difer<strong>en</strong>tes puede ser muy alta. Por el contario, si el valor<br />
inicial de K es alto, la distancia <strong>en</strong>tre clases puede ser muy pequeña, provocando el<br />
particionami<strong>en</strong>to de una misma clase <strong>en</strong> varias clases similares <strong>en</strong>tre sí. En g<strong>en</strong>eral,<br />
la literatura reci<strong>en</strong>te no demuestra que los resultados obt<strong>en</strong>idos por estas dos técnicas<br />
hayan sido demasiado satisfactorios, salvo <strong>en</strong> aplicaciones muy concretas [16,17].<br />
D<strong>en</strong>tro de las técnicas de clasificación supervisadas, destacamos varios<br />
clasificadores como son las técnicas nearest neighbour (vecino más cercano),<br />
minimum distance (distancia mínima), <strong>para</strong>llelepiped o maximum likelihood (ML,<br />
máxima probabilidad). Además también nos podría interesar la utilización de la<br />
técnica Support Vector Machine (SVM) la cual ha demostrado excel<strong>en</strong>tes<br />
prestaciones a la hora de trabajar con datos altam<strong>en</strong>te dim<strong>en</strong>sionales.<br />
No obstante, si a las técnicas descritas anteriorm<strong>en</strong>te les añadimos un conjunto<br />
de datos bastante elevado, los resultados de utilizar <strong>algoritmo</strong>s <strong>en</strong> serie serían<br />
altam<strong>en</strong>te costosos desde el punto de vista computacional. Por lo tanto, a<br />
continuación mostraremos énfasis <strong>en</strong> la necesidad de técnicas <strong>para</strong>lelas <strong>para</strong><br />
optimizar su r<strong>en</strong>dimi<strong>en</strong>to computacional.<br />
Necesidad de <strong>para</strong>lelismo<br />
Convi<strong>en</strong>e destacar que las técnicas de clasificación <strong>en</strong> imág<strong>en</strong>es multiespectrales<br />
anteriorm<strong>en</strong>te descritas se basan <strong>en</strong> la realización de operaciones matriciales que<br />
resultan muy costosas desde el punto de vista computacional. Sin embargo, el<br />
Trabajo Fin de Máster -22- Sergio Bernabé García
<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 />
carácter repetitivo de estas operaciones las hace altam<strong>en</strong>te susceptibles de ser<br />
implem<strong>en</strong>tadas <strong>en</strong> difer<strong>en</strong>tes tipos de arquitecturas <strong>para</strong>lelas, permiti<strong>en</strong>do así un<br />
increm<strong>en</strong>to significativo de su r<strong>en</strong>dimi<strong>en</strong>to <strong>en</strong> términos computacionales y dotando a<br />
dichas técnicas de la capacidad de producir una respuesta rápida. Esta tarea es clave<br />
<strong>para</strong> la explotación de dichas técnicas <strong>en</strong> aplicaciones que requier<strong>en</strong> una respuesta <strong>en</strong><br />
tiempo casi real.<br />
Las técnicas de computación <strong>para</strong>lela han sido ampliam<strong>en</strong>te utilizadas <strong>para</strong><br />
llevar a cabo tareas de procesami<strong>en</strong>to de imág<strong>en</strong>es de gran dim<strong>en</strong>sionalidad,<br />
facilitando la obt<strong>en</strong>ción de tiempos de repuesta muy reducidos y pudi<strong>en</strong>do utilizar<br />
difer<strong>en</strong>tes tipos de arquitecturas [18-20]. En la actualidad, es posible obt<strong>en</strong>er<br />
arquitecturas <strong>para</strong>lelas de bajo coste mediante la utilización de <strong>GPU</strong>s de última<br />
g<strong>en</strong>eración que cu<strong>en</strong>tan con múltiples procesadores.<br />
El papel de las <strong>GPU</strong>s<br />
Las técnicas de clasificación de imág<strong>en</strong>es multiespectrales, <strong>en</strong> nuestro caso, el<br />
<strong>algoritmo</strong> de clasificación no supervisado K-<strong>Means</strong> aplicado sobre imág<strong>en</strong>es de<br />
satélite extraídas desde Google Maps muestra desde un punto de vista computacional<br />
un patrón de acceso a los datos regular y por tanto un <strong>para</strong>lelismo inher<strong>en</strong>te a muchos<br />
niveles, como por ejemplo, a nivel de vectores de píxeles. Como resultado se asocian<br />
con sistemas <strong>para</strong>lelos compuestos por CPUs (por ejemplo clusters Beowulf, ver<br />
figura 2.3). Desafortunadam<strong>en</strong>te estos sistemas son caros y difíciles de adaptar a<br />
bordo de esc<strong>en</strong>arios de procesami<strong>en</strong>to de s<strong>en</strong>sación remota.<br />
Figura 2.3. Configuración típica de un cluster Beowulf.<br />
Trabajo Fin de Máster -23- Sergio Bernabé García
<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 />
Un nuevo desarrollo <strong>en</strong> el campo de la computación surge con los procesadores<br />
gráficos programables (<strong>GPU</strong>s, ver figura 2.4). Guiadas por la creci<strong>en</strong>te demanda de<br />
la industria de los videojuegos, las <strong>GPU</strong>s han evolucionado como sistemas<br />
programables altam<strong>en</strong>te <strong>para</strong>lelos. Sin embargo la arquitectura de las <strong>GPU</strong>s no<br />
<strong>en</strong>caja necesariam<strong>en</strong>te con todos los tipos de computación <strong>para</strong>lela.<br />
Figura 2.4. Distintos mo<strong>del</strong>os de <strong>GPU</strong>s NVidia.<br />
En especial, el siempre creci<strong>en</strong>te requerimi<strong>en</strong>to computacional introducido por<br />
el estado actual de los <strong>algoritmo</strong>s de imág<strong>en</strong>es multiespectrales pued<strong>en</strong> b<strong>en</strong>eficiarse<br />
de este hardware y tomar v<strong>en</strong>taja de su poco peso y bajo coste de sus unidades, lo<br />
que lo hace llamativo <strong>para</strong> el procesami<strong>en</strong>to de datos a bordo por un coste mucho<br />
más bajo <strong>del</strong> que ti<strong>en</strong><strong>en</strong> otros dispositivos hardware como las FPGAs [21] (ver figura<br />
2.5).<br />
Figura 2.5. Ejemplo de la Virtex-6 FPGA.<br />
Trabajo Fin de Máster -24- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
3. Tarjetas gráficas programables <strong>GPU</strong>s<br />
En este capítulo hablamos de cómo han ido evolucionando las <strong>GPU</strong>s<br />
programables, de los recursos que ofrec<strong>en</strong> y de su gran capacidad de cómputo.<br />
Introduciremos una serie de conceptos <strong>para</strong> lograr <strong>en</strong>t<strong>en</strong>der cómo se lleva a cabo el<br />
procesami<strong>en</strong>to <strong>en</strong> una <strong>GPU</strong> mediante l<strong>en</strong>guaje CUDA. Describiremos el hardware de<br />
la tarjeta Tesla c1060 1060 con la que se ha realizado el trabajo y finalm<strong>en</strong>te trataremos el<br />
l<strong>en</strong>guaje CUDA <strong>en</strong> sí dando unas nociones básicas <strong>para</strong> llevar a cabo cualquier<br />
proyecto con este l<strong>en</strong>guaje.<br />
3.1. Las <strong>GPU</strong>s como un dispositivo de procesami<strong>en</strong>to de datos <strong>en</strong> <strong>para</strong>lelo<br />
Desde un tiempo o a esta parte, las <strong>GPU</strong>s programables han evolucionado como<br />
un elem<strong>en</strong>to con una carga de trabajo, como podemos apreciar <strong>en</strong> las figuras 3.1 y<br />
3.2, donde se muestra una com<strong>para</strong>tiva de la evolución de la capacidad de cómputo y<br />
<strong>del</strong> ancho de banda de las CPUs y las <strong>GPU</strong>s. Con múltiples núcleos y con un gran<br />
ancho de banda de memoria, hoy por hoy las <strong>GPU</strong>s ofrec<strong>en</strong> prestaciones muy<br />
elevadas <strong>para</strong> el proce procesami<strong>en</strong>to gráfico y ci<strong>en</strong>tífico [22 – 25].<br />
Figura 3.1. Operaciones <strong>en</strong> coma flotante por segundo <strong>para</strong> CPU y <strong>GPU</strong>.<br />
Trabajo Fin de Máster -25- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
Antes de continuar <strong>en</strong> más detalle con la arquitectura de una <strong>GPU</strong> Tesla c1060<br />
de NVIDIA 4 , consideramos relevante explicar cómo han funcionado las operaciones<br />
<strong>en</strong> un pipeline de una <strong>GPU</strong> clásica a lo largo de los años. No obstante, <strong>para</strong> <strong>en</strong>t<strong>en</strong>der<br />
este proceso, también debemos introducir los conceptos de vertex shaders y los p ppíxel<br />
shaders.<br />
Vertex rtex shaders y píxel shaders<br />
A través de los shaders nos podemos <strong>en</strong>cargar <strong>del</strong> procesami<strong>en</strong>to de v vvértices<br />
(vertex shaders) y de píx píxeles (píxel íxel shaders), cuya principal v<strong>en</strong>taja es que pued<strong>en</strong><br />
ser programados por el desarrollador. Es una tecnología reci<strong>en</strong>te y que ha<br />
experim<strong>en</strong>tado una gran evolución destinada a proporcionar al programador una<br />
interacción con la <strong>GPU</strong> hasta ahora imposible. Con los shaders, se podrán conseguir<br />
muchos de los efectos que antes eran imp<strong>en</strong>sables por la cantidad de carga que<br />
conllevaba. Actualm<strong>en</strong>te se utilizan <strong>para</strong> realizar transformaciones y crear efectos<br />
especiales, como por ejemplo iluminación, fuego o niebla. Para su programación los<br />
shaders utilizan l<strong>en</strong>guajes específicos de alto nivel que permit<strong>en</strong> la indep<strong>en</strong>d<strong>en</strong>cia <strong>del</strong><br />
hardware.<br />
4 http://www.nvidia.com<br />
Figura 3.2. Ancho de banda CPU y <strong>GPU</strong>.<br />
Trabajo Fin de Máster -26- Sergio Bernabé García
<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 />
Un vertex shader es una función que recibe como parámetro un vértice. Sólo<br />
trabaja con un vértice a la vez, y no puede eliminarlo, sólo transformarlo. Para ello,<br />
modifica propiedades <strong>del</strong> mismo <strong>para</strong> que repercutan <strong>en</strong> la geometría <strong>del</strong> objeto al<br />
que pert<strong>en</strong>ece. Con esto se pued<strong>en</strong> lograr ciertos efectos específicos, como los que<br />
ti<strong>en</strong><strong>en</strong> que ver con la deformación <strong>en</strong> tiempo real de un elem<strong>en</strong>to; por ejemplo, el<br />
movimi<strong>en</strong>to de una ola. Donde toma una gran importancia es <strong>en</strong> el tratami<strong>en</strong>to de las<br />
superficies curvas.<br />
En cambio, un píxel shader básicam<strong>en</strong>te especifica el color de un píxel. Este<br />
tratami<strong>en</strong>to individual de los píxeles permite que se realic<strong>en</strong> cálculos principalm<strong>en</strong>te<br />
relacionados con la iluminación <strong>del</strong> elem<strong>en</strong>to <strong>del</strong> cual forman parte <strong>en</strong> la esc<strong>en</strong>a, y <strong>en</strong><br />
tiempo real.<br />
La incorporación de los píxel shaders y vertex shaders permite a los<br />
programadores una mayor libertad a la hora de diseñar gráficos <strong>en</strong> tres dim<strong>en</strong>siones,<br />
ya que puede tratarse a cada píxel y cada vértice por se<strong>para</strong>do. De esta manera, los<br />
efectos especiales y de iluminación pued<strong>en</strong> crearse mucho más detalladam<strong>en</strong>te,<br />
sucedi<strong>en</strong>do lo mismo con la geometría de los objetos.<br />
Pipeline clásico de procesami<strong>en</strong>to <strong>en</strong> una <strong>GPU</strong><br />
Cuando revisamos las arquitecturas hardware, el flujo de datos, y las operaciones<br />
pipeline, a m<strong>en</strong>udo es bu<strong>en</strong>o empezar por el nivel más alto, donde los datos llegan<br />
desde la CPU a la <strong>GPU</strong>, y el proceso se desarrolla hacia abajo a través de múltiples<br />
fases de procesami<strong>en</strong>to hasta que un píxel es dibujado definitivam<strong>en</strong>te <strong>en</strong> la pantalla.<br />
Para situarnos, las <strong>GPU</strong>s han utilizado diseños pipeline tradicionales, como los que<br />
aparec<strong>en</strong> ilustrados <strong>en</strong> la figura 3.3.<br />
Después que la <strong>GPU</strong> recibe los datos vertex (vértices) desde el host (CPU), la<br />
fase vertex se ejecuta <strong>en</strong> primer lugar. La función de fijado transforma la imag<strong>en</strong> y el<br />
hardware de luminosidad operado <strong>en</strong> esta fase se lleva a cabo; <strong>en</strong>tonces los píxeles<br />
shaders programables, y el control de flujo dinámico de los mo<strong>del</strong>os shaders <strong>en</strong>tran<br />
<strong>en</strong> juego. El sigui<strong>en</strong>te paso <strong>en</strong> el pipeline clásico es la configuración, donde los<br />
vértices son <strong>en</strong>samblados d<strong>en</strong>tro de primitivas como triángulos, líneas o puntos. Las<br />
primitivas son convertidas por la fase de “rasterización” <strong>en</strong> fragm<strong>en</strong>tos de píxeles (o<br />
Trabajo Fin de Máster -27- Sergio Bernabé García
<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 />
simplem<strong>en</strong>te fragm<strong>en</strong>tos), pero no son considerados píxeles completos <strong>en</strong> esta fase.<br />
Los fragm<strong>en</strong>tos están sometidos a muchas otras operaciones como sombreado,<br />
Z-testing, la posible mezcla <strong>en</strong> el buffer frame, y el antialiasing. Los fragm<strong>en</strong>tos son<br />
finalm<strong>en</strong>te considerados píxeles cuando han sido escritos <strong>en</strong> el buffer frame.<br />
Figura 3.3. Pipeline clásico de procesami<strong>en</strong>to <strong>en</strong> una <strong>GPU</strong>.<br />
A continuación, la sigui<strong>en</strong>te fase es la de píxel shader, que debería ser<br />
d<strong>en</strong>ominada técnicam<strong>en</strong>te como fase fragm<strong>en</strong>t shader, pero utilizamos la notación<br />
estándar <strong>en</strong> la literatura [22 – 25] debido a su aceptación. En el pasado, los<br />
fragm<strong>en</strong>tos sólo podían haber t<strong>en</strong>ido valores de color aplicados de textura simple.<br />
Hoy <strong>en</strong> día, la capacidad de sombreado de un píxel programado de la <strong>GPU</strong> permite<br />
numerosos efectos de sombreado <strong>para</strong> ser aplicados mi<strong>en</strong>tras se trabaja de acuerdo<br />
con métodos complejos de multitextura. Específicam<strong>en</strong>te, los fragm<strong>en</strong>tos<br />
sombreados (con color y valores Z) desde esta fase píxel son <strong>en</strong>viados al ROP<br />
(Raster Operations). La fase ROP es donde se chequea el buffer Z <strong>para</strong> asegurar que<br />
sólo los fragm<strong>en</strong>tos visibles son procesados rápidam<strong>en</strong>te, y los fragm<strong>en</strong>tos visibles,<br />
si son parcialm<strong>en</strong>te transpar<strong>en</strong>tes, son mezclados con el buffer de frame exist<strong>en</strong>te,<br />
junto con los píxeles y aplicándoles antialiased. El píxel procesado final es <strong>en</strong>viado a<br />
la memoria buffer <strong>para</strong> ser escaneado y visualizado <strong>en</strong> el monitor [22].<br />
Evolución <strong>del</strong> uso de <strong>GPU</strong>s <strong>en</strong> aplicaciones ci<strong>en</strong>tíficas<br />
La principal razón que justifica la gran popularidad de las arquitecturas <strong>GPU</strong> <strong>en</strong><br />
Trabajo Fin de Máster -28- Sergio Bernabé García
<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 />
aplicaciones ci<strong>en</strong>tíficas es el hecho de que la <strong>GPU</strong> está especializada <strong>para</strong> cómputo<br />
int<strong>en</strong>sivo, computación <strong>para</strong>lela elevada (exactam<strong>en</strong>te sobre lo que trata el<br />
r<strong>en</strong>derizado de gráficos) y por tanto se designan más transistores dedicados al<br />
procesami<strong>en</strong>to de datos, que a la recolección de datos y control de flujo como se<br />
muestra <strong>en</strong> la figura 3.4.<br />
Figura 3.4. La <strong>GPU</strong> proporciona más transistores <strong>para</strong> el procesami<strong>en</strong>to de datos.<br />
Más específicam<strong>en</strong>te, la <strong>GPU</strong> está especialm<strong>en</strong>te p<strong>en</strong>sada <strong>para</strong> direccionar<br />
problemas que pued<strong>en</strong> ser expresados como computaciones de datos <strong>para</strong>lelos (el<br />
mismo programa es ejecutado <strong>en</strong> muchos elem<strong>en</strong>tos de datos <strong>en</strong> <strong>para</strong>lelo) con gran<br />
int<strong>en</strong>sidad aritmética (el ratio de operaciones aritméticas respecto a operaciones de<br />
memoria). Como el mismo programa es ejecutado <strong>para</strong> cada elem<strong>en</strong>to de datos, hay<br />
m<strong>en</strong>os requisitos <strong>para</strong> un flujo de control sofisticado; y como es ejecutado <strong>en</strong> muchos<br />
elem<strong>en</strong>tos de datos y ti<strong>en</strong>e gran int<strong>en</strong>sidad aritmética, la lat<strong>en</strong>cia de acceso a<br />
memoria puede ser ocultada con cálculos, <strong>en</strong> vez de datos muy grandes de caché<br />
[23].<br />
El procesami<strong>en</strong>to de datos <strong>para</strong>lelos asocia los datos a elem<strong>en</strong>tos de proceso<br />
<strong>para</strong>lelos. Muchas aplicaciones que procesan grandes conjuntos de datos como arrays<br />
pued<strong>en</strong> usar un mo<strong>del</strong>o de programación de datos <strong>para</strong>lelos <strong>para</strong> acelerar los<br />
cálculos. En r<strong>en</strong>derizado 3D los conjuntos de píxeles y vértices se asignan a hilos<br />
<strong>para</strong>lelos. De la misma manera, aplicaciones de procesami<strong>en</strong>to de imág<strong>en</strong>es y<br />
multimedia como postprocesado de imág<strong>en</strong>es r<strong>en</strong>derizadas, codificación y<br />
decodificación de vídeo, escalado de imág<strong>en</strong>es, visión estéreo, y patrones de<br />
reconocimi<strong>en</strong>to pued<strong>en</strong> asociar bloques de la imag<strong>en</strong> y píxeles a hilos de<br />
Trabajo Fin de Máster -29- Sergio Bernabé García
<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 />
procesami<strong>en</strong>to <strong>para</strong>lelo. De hecho, muchos <strong>algoritmo</strong>s fuera <strong>del</strong> campo <strong>del</strong><br />
r<strong>en</strong>derizado como el procesami<strong>en</strong>to de señales, simulaciones físicas finanzas o<br />
biología, se aceleran con el procesami<strong>en</strong>to de datos <strong>en</strong> <strong>para</strong>lelo.<br />
Hasta la fecha, sin embargo, a pesar de acceder a todo el poder de computación<br />
cont<strong>en</strong>ido <strong>en</strong> la <strong>GPU</strong> y usarlo efici<strong>en</strong>tem<strong>en</strong>te <strong>para</strong> aplicaciones ci<strong>en</strong>tíficas, seguía<br />
si<strong>en</strong>do difícil obt<strong>en</strong>er las sigui<strong>en</strong>tes pautas:<br />
• La <strong>GPU</strong> solam<strong>en</strong>te podía ser programada a través de la API (Application<br />
Programming Interface) gráfica; esto provocaba que la curva de apr<strong>en</strong>dizaje<br />
<strong>para</strong> un desarrollador principiante fuese muy elevada, ya que t<strong>en</strong>ía que<br />
trabajar con una API inadecuada, que no estaba adaptada a la aplicación<br />
ci<strong>en</strong>tífica.<br />
• La DRAM de la <strong>GPU</strong> podía ser leída de manera g<strong>en</strong>eral (los programas de<br />
<strong>GPU</strong> pued<strong>en</strong> obt<strong>en</strong>er elem<strong>en</strong>tos de datos de cualquier parte de la DRAM)<br />
pero no se podía escribir de manera g<strong>en</strong>eral (los programas de <strong>GPU</strong> no<br />
pued<strong>en</strong> esparcir la información a cualquier parte de la DRAM), eliminando<br />
mucha de la flexibilidad de programación ya disponible <strong>en</strong> la CPU.<br />
• Algunas aplicaciones t<strong>en</strong>ían <strong>en</strong> problema <strong>del</strong> “cuello de botella”, debido al<br />
ancho de banda de la memoria DRAM, utilizando escasam<strong>en</strong>te el poder<br />
computacional de la <strong>GPU</strong>.<br />
En este s<strong>en</strong>tido, una de las principales motivaciones <strong>del</strong> pres<strong>en</strong>te TFM es<br />
demostrar que dichas limitaciones <strong>en</strong> la actualidad pued<strong>en</strong> superarse mediante la<br />
utilización de la arquitectura CUDA <strong>para</strong> procesami<strong>en</strong>to de datos ci<strong>en</strong>tíficos <strong>en</strong> la<br />
<strong>GPU</strong>. Dicho aspecto será abordado <strong>en</strong> detalle <strong>en</strong> el sigui<strong>en</strong>te subapartado <strong>del</strong><br />
pres<strong>en</strong>te capítulo de la memoria.<br />
Trabajo Fin de Máster -30- Sergio Bernabé García
<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 />
3.2. CUDA: una nueva arquitectura <strong>para</strong> el cálculo <strong>en</strong> la <strong>GPU</strong><br />
CUDA vi<strong>en</strong>e <strong>del</strong> inglés Compute Unified Device Architecture y es una nueva<br />
arquitectura hardware y software, diseñada <strong>para</strong> dar y manejar procesami<strong>en</strong>tos <strong>en</strong> la<br />
<strong>GPU</strong> como un elem<strong>en</strong>to de computación de datos <strong>para</strong>lelos sin la necesidad de<br />
mapearlos a una API de gráficos. Está disponible <strong>para</strong> las versiones GeForce 8<br />
Series, Quadro FX 5600/4600, Tesla y Fermi. El mecanismo de multitarea <strong>del</strong><br />
sistema operativo es responsable de manejar el acceso a la <strong>GPU</strong> mediante CUDA, y<br />
las aplicaciones gráficas funcionan de forma simultánea. A continuación describimos<br />
el pipeline unificado <strong>del</strong> que dispon<strong>en</strong> las actuales <strong>GPU</strong>s de NVIDIA y que puede ser<br />
explotado de forma efici<strong>en</strong>te mediante CUDA, así como la arquitectura completa de<br />
la Tesla C1060. El apartado finaliza describi<strong>en</strong>do los difer<strong>en</strong>tes mo<strong>del</strong>os de<br />
programación <strong>en</strong> CUDA.<br />
Pipeline unificado<br />
A partir <strong>del</strong> mo<strong>del</strong>o de pipeline clásico, con sus flujos de datos empezando <strong>en</strong> lo<br />
más alto, donde los vértices con varios atributos, índices, comandos, y texturas son<br />
pasados a la <strong>GPU</strong> desde la CPU. Las fases de procesami<strong>en</strong>to mayores sigu<strong>en</strong> una<br />
manera lineal segura incluy<strong>en</strong>do vertex shading, píxel shading, operaciones raster,<br />
(que son operaciones a través de las cuales un área espacial queda dividida <strong>en</strong> celdas<br />
regulares, <strong>en</strong> las que cada una de las cuales pres<strong>en</strong>tan unos atributos o valor, como<br />
pued<strong>en</strong> ser la altitud, reflectancia, etc.) y escritura de píxeles <strong>en</strong> el buffer frame.<br />
Con este pipeline unificado y la arquitectura “shader”, el diseño de la <strong>GPU</strong> Tesla<br />
c1060 reduce significativam<strong>en</strong>te el número de fases <strong>del</strong> pipeline y cambia el flujo<br />
secu<strong>en</strong>cial <strong>para</strong> estar más ori<strong>en</strong>tado a bucle. Las <strong>en</strong>tradas son alim<strong>en</strong>tadas <strong>en</strong> la parte<br />
alta <strong>del</strong> núcleo shader unificado, y las salidas son escritas <strong>en</strong> registros y <strong>en</strong>tonces<br />
vuelv<strong>en</strong> otra vez a la parte alta <strong>del</strong> núcleo shader <strong>para</strong> la próxima operación. Como<br />
resultado, <strong>en</strong> el diagrama <strong>GPU</strong> unificado g<strong>en</strong>eralizado que se muestra <strong>en</strong> la<br />
figura 3.5, los flujos de datos bajan secu<strong>en</strong>cialm<strong>en</strong>te por el pipeline a través de<br />
difer<strong>en</strong>tes tipos “shader”. La figura de la derecha repres<strong>en</strong>ta un núcleo “shader”<br />
unificado con uno o más procesadores “shader” unificados estandarizados.<br />
Trabajo Fin de Máster -31- Sergio Bernabé García
<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 />
Figura 3.5. Pipeline clásico fr<strong>en</strong>te a pipeline unificado.<br />
Como puede apreciarse <strong>en</strong> la figura 3.5, los datos vi<strong>en</strong><strong>en</strong> de la parte superior<br />
izquierda <strong>del</strong> diseño unificado (como vértices), y son llevados al núcleo shader <strong>para</strong><br />
su procesami<strong>en</strong>to, y los resultados son <strong>en</strong>viados de vuelta a la parte superior <strong>del</strong><br />
núcleo shader, donde son llevados otra vez, procesados otra vez, mandados de vuelta<br />
a la parte superior, y así hasta que todas las operaciones shader son ejecutadas y el<br />
fragm<strong>en</strong>to de píxel se pasa al subsistema ROP [22].<br />
Mo<strong>del</strong>o de programación CUDA<br />
Antes de profundizar <strong>en</strong> el mo<strong>del</strong>o de programación empleado por CUDA,<br />
destacamos que la pila <strong>del</strong> software de CUDA se compone de varias capas, tal y<br />
como muestra la figura 3.6. En concreto, dichas capas son un controlador de<br />
hardware, una API y su runtime, y dos librerías matemáticas de alto nivel <strong>para</strong> uso<br />
común, CUFFT y CUBLAS. El hardware ha sido diseñado <strong>para</strong> soportar<br />
controladores ligeros y capas runtime, dando como resultado una ejecución óptima.<br />
En este s<strong>en</strong>tido, la API de CUDA es una ext<strong>en</strong>sión <strong>del</strong> l<strong>en</strong>guaje de programación C,<br />
lo cual hace que t<strong>en</strong>ga una curva de apr<strong>en</strong>dizaje mínima.<br />
Trabajo Fin de Máster -32- Sergio Bernabé García
<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 />
Figura 3.6. Pila de software de CUDA.<br />
Por otra parte, CUDA ofrece un direccionami<strong>en</strong>to de carácter g<strong>en</strong>eral <strong>para</strong> la<br />
memoria DRAM como ilustra la figura 3.7. Este mo<strong>del</strong>o de direccionami<strong>en</strong>to<br />
permite obt<strong>en</strong>er mayor flexibilidad <strong>en</strong> la programación, <strong>en</strong> el s<strong>en</strong>tido de que ofrece<br />
tanto la operación de reparto de datos como la de obt<strong>en</strong>ción de estos. Desde una<br />
perspectiva de programación, esto se traduce <strong>en</strong> la habilidad de leer y escribir datos<br />
<strong>en</strong> cualquier lugar de la DRAM, exactam<strong>en</strong>te igual que <strong>en</strong> la CPU [23].<br />
Figura 3.7. Operaciones de memoria Gather (reunión) y Scatter (dispersión).<br />
Trabajo Fin de Máster -33- Sergio Bernabé García
<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 />
CUDA proporciona una memoria compartida on-chip a modo de caché de datos<br />
que permite accesos muy rápidos de lectura y de escritura. Mediante ésta los hilos<br />
pued<strong>en</strong> compartir datos. Como se muestra <strong>en</strong> la figura 3.8, las aplicaciones pued<strong>en</strong><br />
b<strong>en</strong>eficiarse de esta memoria minimizando los accesos a memoria DRAM lo que les<br />
hace m<strong>en</strong>os dep<strong>en</strong>di<strong>en</strong>tes <strong>del</strong> ancho de banda de la DRAM que es mucho m<strong>en</strong>or que<br />
el de la shared memory.<br />
3.3. Procesami<strong>en</strong>to <strong>en</strong> la <strong>GPU</strong><br />
Figura 3.8. Shared memory.<br />
En la sigui<strong>en</strong>te sección pres<strong>en</strong>ta a la <strong>GPU</strong> como un coprocesador multihilo <strong>para</strong><br />
la CPU, seguidam<strong>en</strong>te se expon<strong>en</strong> los difer<strong>en</strong>tes mecanismos de los que se hace uso<br />
<strong>para</strong> llevar a cabo el procesami<strong>en</strong>to <strong>en</strong> la <strong>GPU</strong>, estos son los hilos de ejecución, los<br />
bloques <strong>en</strong> los que se organizan estos hilos y los llamados grid <strong>en</strong> los que se<br />
estructuran estos bloques. La sección finaliza con el mo<strong>del</strong>o de memoria utilizado<br />
por CUDA.<br />
Un coprocesador multihilo<br />
Cuando se programa con CUDA, la <strong>GPU</strong> se ve como un dispositivo de cálculo<br />
(device) capaz de ejecutar un gran número de hilos <strong>en</strong> <strong>para</strong>lelo. Éste opera como un<br />
Trabajo Fin de Máster -34- Sergio Bernabé García
<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
<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 />
normalm<strong>en</strong>te una combinación de ambas [23]. La figura 3.9 muestra como cada<br />
kernel se ejecuta como un grid de bloques de hilos.<br />
Mo<strong>del</strong>o de memoria<br />
Figura 3.9. Grid, bloques e hilos.<br />
Un hilo que se ejecute <strong>en</strong> el device ti<strong>en</strong>e solo acceso a la DRAM <strong>del</strong> device y a<br />
la memoria on-chip a través de los sigui<strong>en</strong>tes espacios de memoria (ver tabla 3.1)<br />
[23], como se muestra <strong>en</strong> la figura 3.10.<br />
Registro<br />
de hilo<br />
Memoria<br />
compartida<br />
de bloque<br />
Memoria<br />
local de<br />
hilo<br />
Memoria<br />
global de<br />
grid<br />
Memoria<br />
constante<br />
de grid<br />
Memoria<br />
de texturas<br />
de grid<br />
Lectura ✓ ✓ ✓ ✓ ✓ ✓<br />
Escritura ✓ ✓ ✓ ✓ × ×<br />
Tabla 3.1. Lecturas y escrituras <strong>en</strong> los difer<strong>en</strong>tes tipos de memoria.<br />
Trabajo Fin de Máster -36- Sergio Bernabé García
<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 />
Los espacios de memoria global, constante y de textura pued<strong>en</strong> ser leídos o<br />
escritos por el host y perduran durante las distintas ejecuciones <strong>del</strong> kernel <strong>en</strong> la<br />
misma aplicación. Estos espacios se optimizan <strong>para</strong> difer<strong>en</strong>tes usos de la memoria.<br />
Además la memoria de texturas ofrece difer<strong>en</strong>tes modos de direccionami<strong>en</strong>to, así<br />
como de filtrado de datos, <strong>para</strong> difer<strong>en</strong>tes formatos de datos.<br />
Figura 3.10. Acceso a difer<strong>en</strong>tes espacios de memoria.<br />
3.4. <strong>Implem<strong>en</strong>tación</strong> hardware y mo<strong>del</strong>o de ejecución.<br />
En esta sección se pres<strong>en</strong>ta la arquitectura hardware de la <strong>GPU</strong> utilizada <strong>en</strong> el<br />
trabajo y se explica el mo<strong>del</strong>o de ejecución que sigue CUDA.<br />
NVidia Tesla c1060<br />
A lo largo de la pres<strong>en</strong>te memoria hemos cubierto muchos de los puntos básicos<br />
de la programación de <strong>GPU</strong>s de NVidia, así que ahora podemos echar un vistazo a<br />
los aspectos específicos de la arquitectura Tesla c1060 [22], la tarjeta que estamos<br />
Trabajo Fin de Máster -37- Sergio Bernabé García
<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 />
usando <strong>para</strong> realizar este TFM. La figura 3.11 describe la arquitectura hardware de<br />
dicha tarjeta. El significado de las siglas que aparec<strong>en</strong> <strong>en</strong> el esquema es el sigui<strong>en</strong>te:<br />
TPC (Texture/Processor Cluster), SM (Streaming Multiprocessor), SP (Streaming<br />
Processor), Tex (Texture), ROP (Raster Operation Processor).<br />
Figura 3.11. Arquitectura de la <strong>GPU</strong> Tesla c1060 de NVidia.<br />
A continuación la tabla 3.2 muestra las características técnicas de la <strong>GPU</strong>:<br />
Specification Description<br />
Form Factor 10.5” x 4.376”, Dual Slot<br />
# of Streaming Processor Cores 240<br />
Frequ<strong>en</strong>cy of Processor cores 1.3 GHz<br />
Single Precision floating point performance (peak) 933<br />
Double Precision floating point performance (peak) 78<br />
Floating Point Precision IEEE 754 single & double<br />
Total Dedicated Memory 4 GDDR3<br />
Memory Speed 800 MHz<br />
Memory Interface 512-bit<br />
Memory Bandwidth 102 GB/sec<br />
Max Power Consumption 187.8 W<br />
System Interface PCIe x16<br />
Trabajo Fin de Máster -38- Sergio Bernabé García
<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 />
Auxiliary Power Connectors<br />
6-pin & 8-pin<br />
Thermal Solution Active fan sink<br />
Tabla 3.2. Especificaciones técnicas de la <strong>GPU</strong> Tesla c1060 de NVidia.<br />
Mo<strong>del</strong>o de ejecución<br />
La <strong>GPU</strong> se implem<strong>en</strong>ta como un conjunto de multiprocesadores como se puede<br />
ver <strong>en</strong> la figura 3.12. Cada multiprocesador ti<strong>en</strong>e una arquitectura SIMD: <strong>en</strong> cada<br />
ciclo de reloj, cada procesador <strong>del</strong> multiprocesador ejecuta la misma instrucción,<br />
pero opera <strong>en</strong> datos distintos. Los espacios de memoria local y global son<br />
implem<strong>en</strong>tados como regiones de la memoria <strong>del</strong> device. Cada procesador ti<strong>en</strong>e<br />
acceso a la memoria compartida <strong>del</strong> multiprocesador <strong>en</strong> el que está integrado. Cada<br />
multiprocesador accede a la cache de textura mediante una unidad de textura que<br />
implem<strong>en</strong>ta los difer<strong>en</strong>tes modos de direccionami<strong>en</strong>to y filtros de datos [23].<br />
Figura 3.12. Conjunto de multiprocesadores SIMD con memoria compartida on-chip.<br />
Trabajo Fin de Máster -39- Sergio Bernabé García
<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 />
Un grid de bloques de hilos se ejecuta <strong>en</strong> el device mediante la programación de<br />
los bloques <strong>en</strong> cada multiprocesador. Cada multiprocesador procesa los bloques por<br />
lotes, un lote tras otro. Un bloque solo se procesa <strong>en</strong> un multiprocesador, así el<br />
espacio de memoria compartida reside <strong>en</strong> la memoria on-chip compartida por lo que<br />
se puede b<strong>en</strong>eficiar de la velocidad que proporciona dicha memoria.<br />
El número de bloques que cada multiprocesador puede procesar <strong>en</strong> un lote<br />
dep<strong>en</strong>de de cuantos registros necesita cada hilo y de cuanta memoria compartida<br />
necesita cada bloque <strong>en</strong> un kernel ya que estos recursos se deb<strong>en</strong> compartir <strong>en</strong>tre<br />
todos los hilos de los bloques <strong>del</strong> lote. Si no hay una cantidad sufici<strong>en</strong>te de registros<br />
o de memoria compartida disponible <strong>en</strong> un multiprocesador <strong>para</strong> procesar al m<strong>en</strong>os<br />
un bloque, el kernel fallará <strong>en</strong> su ejecución.<br />
Los bloques que se procesan <strong>en</strong> un multiprocesador <strong>en</strong> un lote se llaman activos.<br />
Cada bloque activo se divide <strong>en</strong> grupos de hilos SIMD llamados warps. Cada uno de<br />
estos warps conti<strong>en</strong>e el mismo número de hilos, este número se llama warp size, y se<br />
ejecuta <strong>en</strong> un multiprocesador <strong>en</strong> modo SIMD. Los warps activos (los warps de los<br />
bloques activos) se divid<strong>en</strong> <strong>en</strong> el tiempo: un programador de hilos cambia de un warp<br />
a otro <strong>para</strong> maximizar el uso de recursos computacionales <strong>del</strong> multiprocesador. Se<br />
llama half warp a la primera o a la segunda mitad de un warp.<br />
La forma <strong>en</strong> la que un bloque se divide <strong>en</strong> warps es siempre la misma; cada warp<br />
conti<strong>en</strong>e hilos consecutivos, increm<strong>en</strong>tando sus id<strong>en</strong>tificadores de hilo (thread ID).<br />
El primer warp conti<strong>en</strong>e al hilo 0.<br />
El ord<strong>en</strong> de emisión de los warps de un bloque no está definido y no existe un<br />
mecanismo de sincronización <strong>en</strong>tre bloques <strong>para</strong> coordinar los accesos a memoria<br />
global o compartida.<br />
El ord<strong>en</strong> de emisión de los bloques <strong>en</strong> un grid de bloques de hilos tampoco está<br />
definido y no hay un mecanismo de sincronización <strong>en</strong>tre bloques, así que los hilos de<br />
dos bloques difer<strong>en</strong>tes pert<strong>en</strong>eci<strong>en</strong>tes al mismo grid no se pued<strong>en</strong> comunicar de una<br />
forma segura a través de la memoria global durante la ejecución de un grid.<br />
Si una instrucción no atómica ejecutada por un warp escribe <strong>en</strong> la misma<br />
Trabajo Fin de Máster -40- Sergio Bernabé García
<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 />
posición ya sea de memoria global o compartida por más de un hilo de warp, el<br />
número de de escrituras serializadas que ocurran <strong>en</strong> esa posición así como el ord<strong>en</strong><br />
de las escrituras es indefinido, pero se garantiza que al m<strong>en</strong>os una escritura t<strong>en</strong>ga<br />
éxito. Si una instrucción atómica ejecutada por un warp lee, modifica o escribe <strong>en</strong><br />
una posición de memoria ya sea global o compartida por más de un hilo <strong>del</strong> warp,<br />
cada lectura, modificación o escritura <strong>en</strong> la posición ocurre de forma serializada<br />
aunque el ord<strong>en</strong> es indefinido.<br />
Especificaciones g<strong>en</strong>erales<br />
A continuación <strong>en</strong> la tabla 3.3 se listan una serie de especificaciones g<strong>en</strong>erales<br />
que se deb<strong>en</strong> t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta a la hora de programar una <strong>GPU</strong> con CUDA <strong>para</strong> lograr<br />
una ejecución más efici<strong>en</strong>te <strong>en</strong> función de la capacidad de cómputo (Compute<br />
capability) de la <strong>GPU</strong>.<br />
Parámetro Valor según g<strong>en</strong>er. CPU<br />
CUDA Compute<br />
Capabilities<br />
1.0 y 1.1 1.2 y 1.3 Fermi<br />
Limitación Impacto<br />
Multiprocesadores<br />
/ <strong>GPU</strong><br />
16 30 16 HW. Escalabilidad<br />
Procesadores /<br />
Multiprocesador<br />
8 8 32 HW. Escalabilidad<br />
Hilos / Warp 32 32 32 SW. Throughput<br />
Bloques de hilos /<br />
Multiprocesador<br />
8 8 8 SW. Throughput<br />
Hilos / Bloque 512 512 512 SW. Paralelismo<br />
Hilos /<br />
Multiprocesador<br />
768 1024 1536 SW. Paralelismo<br />
Registros de 32<br />
bits / Multiproc.<br />
8192 16384 4096 HW. Working Set<br />
Memoria<br />
compartida /<br />
Multiproc.<br />
16384 16384<br />
16 K<br />
48 K<br />
HW. Working Set<br />
Tabla 3.3. Recursos y limitaciones según la <strong>GPU</strong> que utilicemos <strong>para</strong> programar CUDA.<br />
A continuación <strong>en</strong> la tabla 3.4 se muestra la capacidad de cómputo y el número<br />
de multiprocesadores de cada <strong>GPU</strong> de NVidia.<br />
Trabajo Fin de Máster -41- Sergio Bernabé García
<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 />
Número de<br />
Multiprocesadores (1<br />
Multiprocesador = 8<br />
Procesadores)<br />
Compute<br />
Capability<br />
GeForce GTX 295 2 x 30 1.3<br />
GeForce GTX 285, GTX 280 30 1.3<br />
GeForce GTX 260 24 1.3<br />
GeForce 9800 GX2 2x16 1.1<br />
GeForce GTS 250, GTS 150, 9800<br />
GTX, 9800 GTX+, 8800 GTS 512<br />
16 1.1<br />
GeForce 8800 Ultra, 8800 GTX 16 1.0<br />
GeForce 9800 GT, 8800 GT, GTX<br />
280M, 9800M GTX<br />
14 1.1<br />
GeForce GT 130, 9600 GSO, 8800 GS,<br />
8800M GTX, GTX 260M, 9800M GT<br />
13 1.1<br />
GeForce 8800 GTS 12 1.0<br />
GeForce 9600 GT, 8800M GTS, 9800M<br />
8 1.1<br />
GTS<br />
GeForce 9700M GT<br />
GeForce GT 120, 9500 GT, 8600 GTS,<br />
6 1.1<br />
8600 GT, 9700M GT, 9650M GS,<br />
9600M GT, 9600M GS, 9500M GS,<br />
4 1.1<br />
8700M GT, 8600M GT, 8600M GS<br />
GeForce G100, 8500 GT, 8400 GS,<br />
8400M GT, 9500M G, 9300M G,<br />
8400M GS, 9400 m<strong>GPU</strong>, 9300 m<strong>GPU</strong>,<br />
8300 m<strong>GPU</strong>, 8200 m<strong>GPU</strong>, 8100 m<strong>GPU</strong><br />
GeForce 9300M GS, 9200M GS,<br />
9100M G, 8400M G<br />
2 1.1<br />
1 1.1<br />
Tesla s1070 4x30 1.3<br />
Tesla c1060 30 1.3<br />
Tesla s870 4x16 1.0<br />
Testa d870 2x16 1.0<br />
Tesla c870 16 1.0<br />
Quadro Plex 2200 D2 2x30 1.3<br />
Quadro Plex 2100 D4 4x14 1.1<br />
Quadro Plex 2100 Mo<strong>del</strong> S4 4x16 1.0<br />
Quadro Plex 1000 Mo<strong>del</strong> IV 2x16 1.0<br />
Quadro FX 5800 30 1.3<br />
Quadro FX 4800 24 1.3<br />
Quadro FX 4700 X2 2x14 1.1<br />
Quadro FX 3700 M 16 1.1<br />
Quadro FX 5600 16 1.0<br />
Quadro FX 3700 14 1.1<br />
Quadro FX 3600M 12 1.1<br />
Quadro FX 4600 12 1.0<br />
Quadro FX 2700 M 6 1.1<br />
Trabajo Fin de Máster -42- Sergio Bernabé García
<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 />
Quadro FX 1700, FX 570, NVS 320M,<br />
FX 1700M, FX 1600M, FX 770M, FX<br />
570M<br />
Quadro FX 370, NVS 290, NVS 140M,<br />
NVS 135M, FX 360M<br />
Número de<br />
Multiprocesadores (1<br />
Multiprocesador = 8<br />
Procesadores)<br />
Compute<br />
Capability<br />
4 1.1<br />
2 1.1<br />
Quadro FX 370M, NVS 130M 1 1.1<br />
Tabla 3.4. Capacidad de cómputo y número de multiprocesadores de cada <strong>GPU</strong> de<br />
NVidia.<br />
Trabajo Fin de Máster -43- Sergio Bernabé García
<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 />
4. Procesami<strong>en</strong>to <strong>en</strong> Imág<strong>en</strong>es. Tipos de clasificaciones:<br />
clustering<br />
Es uno de los pasos más importantes una vez que disponemos <strong>del</strong> acceso al<br />
servicio web de Google Maps <strong>en</strong> nuestra aplicación, <strong>para</strong> ello será necesario<br />
desarrollar difer<strong>en</strong>tes <strong>algoritmo</strong>s de análisis de imág<strong>en</strong>es y reconocimi<strong>en</strong>to de<br />
patrones ori<strong>en</strong>tados a caracterizar <strong>en</strong>tre otras cosas, el color <strong>en</strong>globados <strong>en</strong> zonas<br />
geográficam<strong>en</strong>te compactas seleccionadas por el usuario.<br />
Con la integración de técnicas de clasificación de imág<strong>en</strong>es, vamos a int<strong>en</strong>tar<br />
conseguir asignar los distintos píxeles de una imag<strong>en</strong> a un grupo o clase que posea<br />
unas características similares. Este tipo de procedimi<strong>en</strong>to es conocido como<br />
clustering [26-27], cuyo procedimi<strong>en</strong>to consta de realizar agrupaciones de una serie<br />
de vectores de acuerdo a un criterio de cercanía. Para definir dicho criterio vamos a<br />
utilizar <strong>en</strong> esta ocasión la distancia euclídea, aunque exist<strong>en</strong> otras funciones más<br />
robustas.<br />
Con todo esto, nos surgió la duda de qué <strong>algoritmo</strong> habría que utilizar o si habría<br />
que utilizar varios. Para ello t<strong>en</strong>dremos dos opciones:<br />
• Algoritmos no supervisados. También conocidos como <strong>algoritmo</strong>s de<br />
clasificación sin apr<strong>en</strong>dizaje, presupon<strong>en</strong> que no existe ningún tipo de<br />
conocimi<strong>en</strong>to a priori sobre las clases exist<strong>en</strong>tes. El objetivo de estas<br />
técnicas es id<strong>en</strong>tificar, de forma automatizada, clases o agrupaciones de<br />
píxeles, utilizando <strong>para</strong> ello una métrica de similaridad (aquellos píxeles<br />
cuyos valores RGBA se <strong>en</strong>cu<strong>en</strong>tr<strong>en</strong> más próximos se van agrupando<br />
formando clases).<br />
• Algoritmos supervisados. También conocidos como <strong>algoritmo</strong>s de<br />
clasificación con apr<strong>en</strong>dizaje, part<strong>en</strong> de un cierto conocimi<strong>en</strong>to sobre las<br />
clases exist<strong>en</strong>tes basados <strong>en</strong> la disponibilidad de áreas de <strong>en</strong>tr<strong>en</strong>ami<strong>en</strong>to<br />
donde a priori se puede conocer la clase a la que pert<strong>en</strong>ece y que servirá<br />
<strong>para</strong> g<strong>en</strong>erar una firma espectral característica de cada una de las clases.<br />
Trabajo Fin de Máster -44- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
En este trabajo afrontaremos la implem<strong>en</strong>tación de un <strong>algoritmo</strong> de clasificación<br />
no supervisada ampliam<strong>en</strong>te conocido <strong>en</strong> el ámbito ci<strong>en</strong>tífico, dicho <strong>algoritmo</strong> es es:<br />
K-<strong>Means</strong>. La implem<strong>en</strong>tación lem<strong>en</strong>tación <strong>para</strong>lela de los <strong>algoritmo</strong>s supervisados lo dejaremos<br />
como posibles líneas futuras de este trabajo.<br />
4.1. Algoritmos de clasificación no supervisados<br />
Las técnicas de clasificación no supervisadas supon<strong>en</strong> un int<strong>en</strong>to de automatizar<br />
el proceso de clasificación, reduci<strong>en</strong>do al máximo la necesidad de una supervisión<br />
<strong>del</strong> proceso. Entre ntre las técnicas exist<strong>en</strong>tes [18 [18], ], destaca el método K-<strong>Means</strong>, que<br />
supone la exist<strong>en</strong>cia de K clases (parámetro que deberá ser determinado a priori) y<br />
realiza una agrupación de los píxeles de la imag<strong>en</strong> <strong>en</strong> dichas clases utilizando los<br />
vectores métodos puram<strong>en</strong>te estadísticos basados <strong>en</strong> los espectros promedio de<br />
dichas clases.<br />
El funcionami<strong>en</strong>to de dicho <strong>algoritmo</strong> es el sigui<strong>en</strong>te:<br />
Paso 1/4<br />
De una forma arbitraria se deb<strong>en</strong> de elegir K c<strong>en</strong>tros de cluster mm1<br />
(0) , m2 (0) , …,<br />
mk (0) (Por ejemplo, podría ser las k primero muestras <strong>del</strong> conjunto. Si<strong>en</strong>do Conjunto<br />
l=0).<br />
Paso 2/4<br />
Asignar cada una de las muestras {x {xi, , i = 1, …, N} a uno de los grupos de<br />
acuerdo a la distancia <strong>en</strong>tre la muestra y el c<strong>en</strong>tro de agrupación:<br />
x wj<br />
if DL(x, mj (l) ) = min {DL(x, mi (l) ), i = 1, …, k} (4.1)<br />
donde wj d<strong>en</strong>ota el grupo i de muestras cuyo c<strong>en</strong>tro es mj (l) .<br />
Trabajo Fin de Máster -45- Sergio Bernabé García
<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 />
Paso 3/4<br />
( l + 1)<br />
Actualizar todos los c<strong>en</strong>tros de cluster <strong>para</strong> obt<strong>en</strong>er mj<br />
() <br />
=<br />
<br />
∑ <br />
∈ , ( = 1, … , ) (4.2)<br />
Donde Nj (l) es el número de muestras <strong>en</strong> la actualidad wj (l) , y<br />
<br />
()<br />
<br />
= <br />
De este modo la suma de las distancias desde todos los puntos wj (l) al nuevo<br />
c<strong>en</strong>tro se reduce al mínimo, es decir,<br />
Paso 4/4<br />
()<br />
∑ () , → . ( = 1, … , )<br />
∈ <br />
Se terminaría si el <strong>algoritmo</strong> converge (es decir, el número de miembros de cada<br />
mo<strong>del</strong>o no se cambia por el paso 2):<br />
() ()<br />
= ( = 1, … , )<br />
o también si se ha llegado a un número máximo predeterminado de iteraciones.<br />
De lo contrario, se pasaría a la sigui<strong>en</strong>te iteración y se volvería al paso dos.<br />
Cómo hemos podido comprobar, este método es simple, pero ti<strong>en</strong>e algunos<br />
inconv<strong>en</strong>i<strong>en</strong>tes (ver tabla 4.1). La figura 4.1 muestra un ejemplo gráfico de<br />
funcionami<strong>en</strong>to <strong>del</strong> <strong>algoritmo</strong> <strong>en</strong> un espacio de dos dim<strong>en</strong>siones.<br />
(4.3)<br />
(4.4)<br />
(4.5)<br />
Trabajo Fin de Máster -46- Sergio Bernabé García
<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 />
VENTAJAS INCONVENIENTES<br />
S<strong>en</strong>cillo y efici<strong>en</strong>te Limitado por el ord<strong>en</strong> de pres<strong>en</strong>tación de los<br />
patrones (el resultado dep<strong>en</strong>de de la<br />
configuración inicial de los agrupami<strong>en</strong>tos).<br />
Un único parámetro Necesidad de conocer el número de clusters K:<br />
su comportami<strong>en</strong>to dep<strong>en</strong>de <strong>en</strong>ormem<strong>en</strong>te <strong>del</strong><br />
valor elegido <strong>para</strong> el parámetro K.<br />
Tabla 4.1. V<strong>en</strong>tajas e inconv<strong>en</strong>i<strong>en</strong>tes de la utilización <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong>.<br />
Gráficam<strong>en</strong>te y reducido a dos bandas sería de la sigui<strong>en</strong>te forma:<br />
Figura 4.1. Ejemplo gráfico <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong>.<br />
Por otra parte, otro método bastante reconocido <strong>en</strong> el ámbito de clasificaciones<br />
no supervisadas, es el método ISODATA (Iterative Self-Organizing Data Analysis<br />
Techniques). Dado que esta técnica se basa <strong>en</strong> el anterior método com<strong>en</strong>tado, lo<br />
dejaremos como futura línea de trabajo.<br />
Finalm<strong>en</strong>te, tras la aplicación de cualquiera de las dos técnicas no supervisadas<br />
m<strong>en</strong>cionadas anteriorm<strong>en</strong>te, y con carácter opcional, los datos resultantes de la<br />
clasificación pued<strong>en</strong> ser post-procesados (por ejemplo, utilizando técnicas<br />
espaciales) <strong>para</strong> mejorar la coher<strong>en</strong>cia de los mismos.<br />
Trabajo Fin de Máster -47- Sergio Bernabé García
<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 />
5. Procesami<strong>en</strong>to <strong>para</strong>lelo <strong>en</strong> <strong>GPU</strong><br />
Una vez introducidas las v<strong>en</strong>tajas que aportan las <strong>GPU</strong>s <strong>para</strong> el procesami<strong>en</strong>to<br />
<strong>para</strong>lelo pasemos a exponer como se llevo a cabo este procesami<strong>en</strong>to <strong>en</strong> el caso que<br />
nos ocupa, es decir <strong>en</strong> el <strong>algoritmo</strong> de clasificación no supervisada que ha sido<br />
descrito anteriorm<strong>en</strong>te. Como ya sabemos contamos con una <strong>GPU</strong> NVidia Tesla<br />
c1060 la cual cu<strong>en</strong>ta con 30 multiprocesadores cada uno de los cuales dispone a su<br />
vez de 8 procesadores. Pongamos como caso de uso una imag<strong>en</strong> hipotética de<br />
dim<strong>en</strong>siones 512 x 512 x 4, esto es, 512 líneas, 512 columnas y 4 bandas (red R,<br />
gre<strong>en</strong> G, blue B, alpha A).<br />
Pues bi<strong>en</strong>, cuando se necesita <strong>para</strong>lelizar un <strong>algoritmo</strong>, el diseñador debe ser<br />
consci<strong>en</strong>te de las características de la arquitectura donde se va a ejecutar un<br />
<strong>algoritmo</strong> dado. Realizar una bu<strong>en</strong>a distribución <strong>del</strong> trabajo, es decir, repartir una<br />
serie de hilos proporcionalm<strong>en</strong>te al número de elem<strong>en</strong>tos de procesami<strong>en</strong>to<br />
indep<strong>en</strong>di<strong>en</strong>tes, es una de las cuestiones que pued<strong>en</strong> favorecer al proceso de<br />
<strong>para</strong>lelización o perjudicarlo. Por ello, dep<strong>en</strong>di<strong>en</strong>do de cómo asignemos la carga de<br />
trabajo a cada uno de los threads, nos vamos a poder <strong>en</strong>contrar con problemas de<br />
<strong>para</strong>lelización tales como el d<strong>en</strong>ominado “cuello de botella”.<br />
En nuestro caso, que ya conocemos como funciona el <strong>algoritmo</strong> que se desea<br />
<strong>para</strong>lelizar, sabremos que la parte más importante <strong>del</strong> <strong>algoritmo</strong> es la asignación de<br />
cada uno de los píxeles al cluster cuyo c<strong>en</strong>tro sea más cercano.<br />
Para ello necesitaremos calcular la distancia euclídea (ver tabla 5.1) <strong>para</strong> cada<br />
uno de los píxeles al c<strong>en</strong>tro de cluster más cercano. Para implem<strong>en</strong>tar este <strong>algoritmo</strong><br />
<strong>en</strong> CUDA, podemos asignar el cálculo de la distancia de cada píxel de la imag<strong>en</strong> <strong>en</strong><br />
un único subproceso. De tal manera que cada thread realice el cálculo de la distancia<br />
<strong>en</strong>tre los valores de cada uno de los píxeles y el c<strong>en</strong>tro de cluster más cercano,<br />
además de la asignación a su cluster correspondi<strong>en</strong>te. Cuando todos los threads<br />
hayan terminado, conoceremos la composición de cada uno de los cluster y por tanto<br />
la primera fase <strong>del</strong> <strong>algoritmo</strong> habrá terminado.<br />
En la práctica va a ser complicado que nos vayamos a <strong>en</strong>contrar que el número<br />
Trabajo Fin de Máster -48- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
de elem<strong>en</strong>tos a procesar sean iguales al número de proce procesos sos (éste último <strong>en</strong> la<br />
práctica se <strong>en</strong>cu<strong>en</strong>tra limitado). En el <strong>algoritmo</strong> que se ha desarrollado los píxeles<br />
son distribuidos <strong>en</strong> una matriz de 1 dim<strong>en</strong>sión (cuyas posiciones son los valores<br />
RGBA de cada uno de los píxeles).<br />
Tabla 5.1. Métricas utilizadas <strong>para</strong> calcular la similitud de características.<br />
Para la sigui<strong>en</strong>te fase <strong>del</strong> <strong>algoritmo</strong>, donde se necesitan recalcul recalcular los c<strong>en</strong>tros de<br />
cada cluster y reasignar de nuevo los píxeles a cada uno de los clusters,<br />
aprovecharemos la idea <strong>del</strong> <strong>algoritmo</strong> serie utilizado utilizado. . Se realizará de esta manera por<br />
dos razones:<br />
• En este paso el <strong>algoritmo</strong> requiere un int<strong>en</strong>so intercambio de datos y podría<br />
crear una congestión <strong>en</strong> la memoria <strong>del</strong> subsistema. Aunque una forma de<br />
poder <strong>para</strong>lelizar esta parte, sería pedir a cada uno de los th threads qué píxeles<br />
es miembro de un determinado clu cluster ster <strong>para</strong> poder añadir sus valores a una<br />
cierta estructura <strong>en</strong> memoria. Esta opción no sería muy bu<strong>en</strong>a ya que crearía<br />
demasiado tráfico tráfico.<br />
• También se podría aplicar el proceso de reducción, es decir, t<strong>en</strong>i<strong>en</strong>d t<strong>en</strong>i<strong>en</strong>do una lista<br />
de valores RGBA correspondi<strong>en</strong>tes a los píxeles de cada uno de los clusters,<br />
se podrían sumar <strong>en</strong> log log2(n), (n), si<strong>en</strong>do n el número de elem<strong>en</strong>tos pert<strong>en</strong>eci<strong>en</strong>tes<br />
Trabajo Fin de Máster -49- Sergio Bernabé García
<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 />
a un cluster determinado. Para ello <strong>en</strong> cada iteración produciríamos n/2<br />
sumas, después n/4 sumas, n/8 sumas y así hasta llegar al proceso que quede<br />
una suma única. Gráficam<strong>en</strong>te t<strong>en</strong>dríamos lo sigui<strong>en</strong>te (ver figura 5.1):<br />
Figura 5.1. Ejemplo de reducción <strong>en</strong> tres pasos de una suma dado un cluster de 8<br />
elem<strong>en</strong>tos.<br />
• Incluso utilizando un <strong>en</strong>foque <strong>en</strong> serie, este paso <strong>del</strong> <strong>algoritmo</strong> no es un factor<br />
dominante <strong>en</strong> el tiempo total de la solución.<br />
Para el último paso <strong>del</strong> <strong>algoritmo</strong>, comprobar si converge, no vale la p<strong>en</strong>a el<br />
esfuerzo de <strong>para</strong>lelizar este paso, ya que normalm<strong>en</strong>te el número de clusters que se<br />
suele utilizar está compr<strong>en</strong>dido <strong>en</strong>tre 1 y 10, por tanto, optaremos a realizar este paso<br />
<strong>en</strong> serie ya que tampoco es un factor dominante <strong>en</strong> el tiempo total de la solución.<br />
5.1. <strong>Implem<strong>en</strong>tación</strong> CUDA<br />
Para dicha implem<strong>en</strong>tación, hemos utilizado dos estructuras de dato:<br />
Trabajo Fin de Máster -50- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
El <strong>algoritmo</strong> de aceleración <strong>para</strong> KK-<strong>Means</strong><br />
<strong>Means</strong> que se ha implem<strong>en</strong>tado consta de<br />
tres etapas de operación bi<strong>en</strong> difer<strong>en</strong>ciadas.<br />
5.1.1. Primera etapa<br />
En esta primera etapa se inicializa el hardware CUDA, reservando las áreas de<br />
almac<strong>en</strong>ami<strong>en</strong>to de memoria necesaria <strong>para</strong> el hhost<br />
ost y el device, las estimacion estimaciones<br />
iniciales <strong>del</strong> conjunto de clu cluster ster y el conjunto de datos <strong>en</strong> la memoria a bordo de la<br />
tarjeta gráfica. La utilización de las macros CUT_SAFE_CALL y<br />
CUDA_SAFE_CALL es únicam<strong>en</strong>te <strong>para</strong> la comprobación de errores.<br />
Trabajo Fin de Máster -51- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
A continuación mostraremos el código que lanzará lanzarán todos los threads <strong>en</strong> la parte<br />
<strong>del</strong> host. Los threads serán <strong>en</strong>viados automáticam<strong>en</strong>te por el hardware.<br />
La llamada a la función kkernel<br />
ernel se quedará bloqueada <strong>en</strong> la parte host, hasta que<br />
todos los threads sean <strong>en</strong>v <strong>en</strong>viados iados y completados. Después <strong>en</strong> el código host se<br />
Trabajo Fin de Máster -52- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
comprobará bará la correcta ejecución <strong>del</strong> kkernel<br />
CUDA, copiando los resultados desde la<br />
memoria <strong>del</strong> dispositivo.<br />
Finalm<strong>en</strong>te, el host liberará la memoria reservada y finalizará.<br />
5.1.2. Segunda etapa<br />
La segunda parte parte, , qué es la carga de trabajo más pesada <strong>del</strong> programa, es la<br />
ejecución <strong>del</strong> kernel <strong>en</strong> el dispositivo <strong>GPU</strong>. Cada thread procesará un único píxel, y<br />
calculará la distancia <strong>en</strong>tre el píxel y el c<strong>en</strong>tro de cada cluster. Durante la ejecución<br />
<strong>del</strong> bucle se estará dete determinando rminando la misma distancia <strong>en</strong>tre el píxel y cada uno de los<br />
Trabajo Fin de Máster -53- Sergio Bernabé García
<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 />
clusters y una vez que este bucle termine, los resultados serán almac<strong>en</strong>ados <strong>en</strong> la<br />
memoria <strong>del</strong> dispositivo.<br />
Un aspecto importante de este código es el uso de la memoria constante <strong>para</strong> el<br />
almac<strong>en</strong>ami<strong>en</strong>to de los datos relacionados con cada uno de los clusters. La memoria<br />
constante es una parte cacheable de la memoria <strong>del</strong> device. En el mo<strong>del</strong>o c1060 de<br />
Tesla, t<strong>en</strong>emos 16 KB por cada bloque de threads. Su utilización proporciona un<br />
acceso rápido a determinadas variables, que <strong>en</strong> nuestro caso se trataba de acceder a la<br />
información de cada uno de los clusters, de modo que cada thread d<strong>en</strong>tro <strong>del</strong> bucle<br />
pudiera acceder a la información de cada cluster. Nos dimos cu<strong>en</strong>ta que su<br />
utilización fue tan importante que de no haberla utilizado (por tanto se habría<br />
utilizado la memoria global), los resultados hubieran sido de un ord<strong>en</strong> m<strong>en</strong>or a los<br />
obt<strong>en</strong>idos tras esta implem<strong>en</strong>tación.<br />
5.1.3. Tercera etapa<br />
La tercera parte de esta implem<strong>en</strong>tación se trata de actualizar los c<strong>en</strong>tros una vez<br />
que cada uno de los píxeles se ha asignado al c<strong>en</strong>tro de cluster más cercano y de<br />
comprobar si se ha alcanzado la condición de converg<strong>en</strong>cia o incluso si se ha llegado<br />
al máximo de iteraciones definidas por el usuario. Esta parte <strong>del</strong> código se decidió<br />
realizarla <strong>en</strong> serie <strong>en</strong> el host.<br />
Todos los pasos descritos <strong>en</strong> el <strong>algoritmo</strong> se van a realizar hasta que se llegue al<br />
máximo de iteraciones permitidas por el usuario o bi<strong>en</strong> hasta que se alcance la<br />
Trabajo Fin de Máster -54- Sergio Bernabé García
<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 />
condición de converg<strong>en</strong>cia <strong>del</strong> bucle. A continuación mostraremos el código<br />
utilizado tanto <strong>para</strong> la actualización de los c<strong>en</strong>tros, como <strong>para</strong> comprobar la<br />
converg<strong>en</strong>cia y la posterior asignación de los píxeles a su posible cluster más<br />
cercano.<br />
5.2. CUDA Occupancy Calculator<br />
Es una herrami<strong>en</strong>ta que nos asesora <strong>en</strong> la elección de los parámetros de<br />
configuración de un kernel. Se trata de una hoja de cálculo que nos pres<strong>en</strong>ta diversas<br />
gráficas de la ocupación de un multiprocesador <strong>en</strong> función de la capacidad de<br />
cómputo, <strong>del</strong> número de hilos que utilicemos <strong>en</strong> cada bloque, <strong>del</strong> número de registros<br />
que utilicemos por hilo y de la cantidad de memoria compartida por bloque. El<br />
número de hilos por bloque es fácil de conocer ya que es un parámetro fijado por el<br />
desarrollador. Para conocer tanto el número de registros usados como la cantidad de<br />
Trabajo Fin de Máster -55- Sergio Bernabé García
<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 />
memoria compartida necesitamos incluir como modificador <strong>en</strong> el compilador el flag<br />
–ptxas-options=”-v”. Con esto a la hora de compilar podremos conocer esos valores.<br />
Con estos cuatros parámetros CUDA Occupancy Calculator nos mostrará <strong>en</strong>tre<br />
otras cosas el número de hilos activos por multiprocesador, el número de warps<br />
activos por multiprocesador, el número de bloques de hilos activos por<br />
multiprocesador y la ocupación de cada multiprocesador. El principal objetivo de<br />
usar esta herrami<strong>en</strong>ta es conseguir un 100% de ocupación lo que significa que no hay<br />
ningún procesador ocioso <strong>en</strong> ningún multiprocesador. A continuación la figura 5.2<br />
muestra el aspecto de esta herrami<strong>en</strong>ta:<br />
Figura 5.2. Cuda Occupancy Calculator.<br />
Seguidam<strong>en</strong>te mostraremos los resultados de CUDA Occupancy Calculator <strong>para</strong><br />
una de nuestras ejecuciones, concretam<strong>en</strong>te <strong>para</strong> una de nuestras imág<strong>en</strong>es de satélite<br />
Trabajo Fin de Máster -56- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
extraída de Google Maps y descrita <strong>en</strong> el sigui<strong>en</strong>te capítulo.<br />
La tabla 5.2 muestra los parámetros introducidos <strong>en</strong> la herrami<strong>en</strong>ta:<br />
Tabla 5.2: Cuda occupancy calculator: parámetros introducidos introducidos.<br />
Una vez que hemos introducido los parámetros se calcula la ocupación de cada<br />
multiprocesador y se muestra el estado de est estos os <strong>en</strong> las gráficas. La tabla 5.3 muestra<br />
los resultados calculados <strong>en</strong> base a estos parámetros:<br />
Tabla 5.3: : Cuda occupancy calculator: resultados calculados <strong>en</strong> función de los<br />
parámetros.<br />
La herrami<strong>en</strong>ta además proporciona tres gráficas, cada una de ellas asociada a un<br />
parámetro (nº de hilos po por r bloque, nº de registros por hilo y memoria compartida<br />
usada por cada bloque), <strong>en</strong> éstas se muestra la ocupación conseguida con la<br />
configuración actual y los posibles cambios <strong>en</strong> la ocupación si variamos el valor <strong>del</strong><br />
parámetro asociado.<br />
La ocupación se calc calcula como:<br />
Ocupación =<br />
º <br />
º á <br />
Máximo = 24 warps (1.0 y 1.1), 32 warps (1.3)<br />
Trabajo Fin de Máster -57- Sergio Bernabé García
<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 />
La figura 5.3 muestra la gráfica asociada al número de hilos por bloque.<br />
Figura 5.3: Cuda occupancy calculator: gráfica asociada al número de hilos por bloque.<br />
La ocupación calculada con la configuración actual vi<strong>en</strong>e repres<strong>en</strong>tada por la<br />
posición <strong>del</strong> triángulo rojo, éste está a la misma altura <strong>en</strong> las tres gráficas. De esta<br />
gráfica podemos extraer que con 512 hilos por bloque conseguimos la máxima<br />
ocupación. Además si no variamos ninguno de los otros dos parámetros, salvo pocas<br />
configuraciones (128, 256,..), cualquier otra configuración <strong>en</strong> cuanto al número de<br />
hilos por bloque perjudicaría a la ocupación y por tanto al r<strong>en</strong>dimi<strong>en</strong>to conseguido.<br />
Por otra parte 512 hilos es el límite permitido <strong>para</strong> un tamaño de bloque de una<br />
dim<strong>en</strong>sión.<br />
La figura 5.4 muestra la gráfica asociada al número de registros utilizado por<br />
cada hilo.<br />
En esta gráfica podemos observar que se ha alcanzado la ocupación máxima<br />
usando cada hilo un total de 6 registros. Como sabemos por los resultados de la tabla<br />
Trabajo Fin de Máster -58- Sergio Bernabé García
<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 />
5.3 <strong>en</strong> cada multiprocesador t<strong>en</strong>emos 2 bloques activos por tanto los recursos<br />
hardware de ese multiprocesador se compart<strong>en</strong> <strong>en</strong>tre los dos bloques, estos bloque<br />
podrán ejecutarse <strong>en</strong> <strong>para</strong>lelo siempre y cuando ninguno de los dos consuma más de<br />
la mitad de los recursos disponibles. Cada multiprocesador ti<strong>en</strong>e un total de 16K<br />
registros de 32 bits, es decir 16384 registros. La mitad de estos es 8192, t<strong>en</strong>emos <strong>en</strong><br />
un bloque 512 hilos que consum<strong>en</strong> 6 registros cada uno lo que hace un total de 3072<br />
registros, cantidad que no supera la mitad. Como puede verse <strong>en</strong> la gráfica, <strong>en</strong> el<br />
supuesto de que cada hilo utilizase más de 16 registros, la ocupación se reduciría a la<br />
mitad, permiti<strong>en</strong>do solam<strong>en</strong>te la ejecución de un bloque de hilos por<br />
multiprocesador.<br />
Figura 5.4: Cuda occupancy calculator: gráfica asociada al número de registros por hilo.<br />
Finalm<strong>en</strong>te la figura 5.5 muestra la gráfica asociada a la cantidad de memoria<br />
compartida usada por cada bloque.<br />
Trabajo Fin de Máster -59- Sergio Bernabé García
<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 />
Figura 5.5: Cuda occupancy calculator: gráfica asociada a la cantidad de memoria<br />
compartida usada por cada bloque.<br />
En esta gráfica también podemos ver que la ocupación de los multiprocesadores<br />
es máxima, como sabemos el número de bloques activos <strong>en</strong> un multiprocesador es 2<br />
por tanto cada bloque no debe consumir más de la mitad de los recursos disponibles.<br />
Un total de 9 píxeles <strong>en</strong> memoria compartida almac<strong>en</strong>ados por cada bloque hac<strong>en</strong><br />
que se us<strong>en</strong> 8104 bytes que no alcanza por poco la mitad de la memoria compartida<br />
disponible que ti<strong>en</strong>e un total de 16KB. Si mant<strong>en</strong>emos el número de hilos y el<br />
número de registros por hilo y aum<strong>en</strong>tamos el uso de la memoria compartida a más<br />
de la mitad <strong>del</strong> total, la ocupación se reduciría a la mitad y afectaría al r<strong>en</strong>dimi<strong>en</strong>to<br />
gravem<strong>en</strong>te (al 50%). En esta ocasión la cantidad de memoria compartida utilizada es<br />
muy pequeña ya que esta vez se ha utilizado la memoria de constantes, que es más<br />
rápida y además es una de las optimizaciones utilizada <strong>para</strong> reducir el tiempo de<br />
ejecución de dicho <strong>algoritmo</strong>.<br />
Trabajo Fin de Máster -60- Sergio Bernabé García
<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 />
6. Resultados<br />
En este apartado pasaremos a mostrar y analizar cada uno de los resultados<br />
obt<strong>en</strong>idos y posteriorm<strong>en</strong>te verificar su correcto funcionami<strong>en</strong>to al utilizar una<br />
clasificación no supervisada como es el caso <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong> y así poder<br />
validar los mismos com<strong>para</strong>ndo los resultados con herrami<strong>en</strong>tas de análisis y<br />
procesado de imág<strong>en</strong>es como es el caso de ENVI 5 .<br />
Para probar el correcto funcionami<strong>en</strong>to <strong>del</strong> <strong>algoritmo</strong> implem<strong>en</strong>tado de una<br />
forma cualitativa y posteriorm<strong>en</strong>te cuantitativa, el primer paso que debemos realizar<br />
es escoger una zona de <strong>en</strong>tr<strong>en</strong>ami<strong>en</strong>to desde la aplicación GoogleCBIR y una vez<br />
almac<strong>en</strong>ada <strong>en</strong> disco, aplicar el <strong>algoritmo</strong> implem<strong>en</strong>tado K-<strong>Means</strong> <strong>en</strong> sus versiones<br />
serie y <strong>para</strong>lelo. Después <strong>para</strong> verificar su correcto funcionami<strong>en</strong>to <strong>en</strong> función de la<br />
precisión, clasificaremos la misma imag<strong>en</strong> utilizando la herrami<strong>en</strong>ta software <strong>para</strong><br />
análisis y procesado de imág<strong>en</strong>es, ENVI.<br />
ENVI 6 , Entorno <strong>para</strong> Visualización de Imág<strong>en</strong>es (ENVIronm<strong>en</strong>t for Visualizing<br />
Images), es un moderno sistema <strong>para</strong> procesar imág<strong>en</strong>es y así proporcionar análisis<br />
multiespectral de los datos obt<strong>en</strong>idos por teledetección desde aviones y satélites.<br />
Proporciona un pot<strong>en</strong>te <strong>en</strong>torno <strong>para</strong> poder analizar imág<strong>en</strong>es de cualquier tamaño y<br />
tipo de datos <strong>en</strong> un amplio rango de plataformas.<br />
Esta herrami<strong>en</strong>ta software está completam<strong>en</strong>te escrita <strong>en</strong> IDL (Interactive Data<br />
Language), L<strong>en</strong>guaje de Datos Interactivo. IDL es un l<strong>en</strong>guaje de programación<br />
estructurada bastante pot<strong>en</strong>te, basado <strong>en</strong> matrices, que proporciona un procesami<strong>en</strong>to<br />
de imág<strong>en</strong>es integrado, grandes capacidades de visualización y herrami<strong>en</strong>tas GUI<br />
fáciles de usar. Para la ejecución de ENVI es necesario IDL, ya que de parte de su<br />
flexibilidad es conseguida de la pot<strong>en</strong>cia de IDL.<br />
Antes de com<strong>en</strong>tar los difer<strong>en</strong>tes ejemplos de clasificación que se han utilizado<br />
<strong>en</strong> la validación de la herrami<strong>en</strong>ta, procedemos a describir las métricas empleadas <strong>en</strong><br />
la validación. En concreto, la matriz de confusión [28] es una técnica que permite<br />
5 http://www.ittvis.com/ProductServices/ENVI.aspx<br />
6 http://www.innovanet.com.ar/gis/TELEDETE/TELEDETE/maneENVI.htm<br />
Trabajo Fin de Máster -61- Sergio Bernabé García
<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 />
evaluar la precisión de <strong>algoritmo</strong>s de clasificación de imág<strong>en</strong>es digitales obt<strong>en</strong>idas de<br />
forma remota. Esta técnica presupone que la información verdad terr<strong>en</strong>o vi<strong>en</strong>e<br />
expresada <strong>en</strong> forma de un mapa temático [29, 30], caracterizado por las sigui<strong>en</strong>tes<br />
propiedades:<br />
a) Cada píxel se <strong>en</strong>cu<strong>en</strong>tra etiquetado como pert<strong>en</strong>eci<strong>en</strong>te a una determinada<br />
R = .<br />
clase, de forma que ti<strong>en</strong><strong>en</strong> N clases o regiones de refer<strong>en</strong>cia { } N<br />
i i 1<br />
b) Las regiones de refer<strong>en</strong>cia son mutuam<strong>en</strong>te excluy<strong>en</strong>tes <strong>en</strong>tre sí, es decir, dos<br />
regiones difer<strong>en</strong>tes no ti<strong>en</strong><strong>en</strong> ningún píxel <strong>en</strong> común: ∩ R = ∅,<br />
∀i<br />
≠ j.<br />
Ri j<br />
Supongamos que cada píxel i de la imag<strong>en</strong> a evaluar, I, es asignado por el<br />
<strong>algoritmo</strong> como pert<strong>en</strong>eci<strong>en</strong>te a una determinada clase Ci, de forma que se ti<strong>en</strong><strong>en</strong> N<br />
clases. Los conjuntos Ci determinan una partición de la imag<strong>en</strong> a evaluar, es decir, la<br />
unión de todos ellos da como resultado la imag<strong>en</strong> y dos conjuntos distintos no ti<strong>en</strong><strong>en</strong><br />
N<br />
Ci i j<br />
i=<br />
1<br />
ningún elem<strong>en</strong>to <strong>en</strong> común: U = I y C ∩ C = ∅,<br />
∀i<br />
≠ j.<br />
T<strong>en</strong>i<strong>en</strong>do <strong>en</strong> cu<strong>en</strong>ta las<br />
anteriores consideraciones, la figura 6.1 muestra un ejemplo <strong>del</strong> proceso de<br />
construcción de una matriz de confusión. En la figura, se muestra el mapa temático<br />
asociado a la imag<strong>en</strong> a clasificar, el resultado de clasificación proporcionado por un<br />
determinado <strong>algoritmo</strong> <strong>para</strong> dicha imag<strong>en</strong>, y la matriz de confusión que cuantifica la<br />
precisión <strong>del</strong> <strong>algoritmo</strong> <strong>en</strong> la tarea de clasificación.<br />
Lago (R 0 )<br />
Carretera (R 1 )<br />
Árboles (R 2 )<br />
Suelo (R 3 )<br />
C 0<br />
C 1<br />
C 2<br />
C 3<br />
Mapa temático<br />
(verdad terr<strong>en</strong>o)<br />
R 0<br />
a 00 =|C 0 ∩R 0 |<br />
a 10 =|C 1 ∩R 0 |<br />
a 20 =|C 2 ∩R 0 |<br />
a 30 =|C 3 ∩R 0 |<br />
Matriz de confusión<br />
R 1<br />
a 01 =|C 0 ∩R 1 |<br />
a 11 =|C 1 ∩R 1 |<br />
a 21 =|C 2 ∩R 1 |<br />
a 31 =|C 3 ∩R 1 |<br />
Clasificación<br />
(Algoritmo)<br />
a 02 =|C 0 ∩R 2 |<br />
a 12 =|C 1 ∩R 2 |<br />
a 22 =|C 2 ∩R 2 |<br />
a 32 =|C 3 ∩R 2 |<br />
a 03 =|C 0 ∩R 3 |<br />
a 13 =|C 1 ∩R 3 |<br />
a 23 =|C 2 ∩R 3 |<br />
a 33 =|C 3 ∩R 3 |<br />
Lago (C 0 )<br />
Carretera (C 1 )<br />
Árboles (C 2 )<br />
Suelo (C 3 )<br />
Figura 6.1. Ejemplo de construcción de una matriz de confusión.<br />
Trabajo Fin de Máster -62- Sergio Bernabé García<br />
R 2<br />
R 3
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
Como puede apreciarse, las <strong>en</strong>tradas de la matriz vi<strong>en</strong><strong>en</strong> expresadas <strong>en</strong> forma<br />
a jk,<br />
si<strong>en</strong>do = <br />
efectuar la intersección <strong>en</strong>tre una clase CCj<br />
obt<strong>en</strong>ida por el <strong>algoritmo</strong> y una clase<br />
etiquetada Rk. A partir de la matriz de confusión pued<strong>en</strong> derivarse algunas me medidas<br />
de precisión g<strong>en</strong>éricas [31 [31] ] como el porc<strong>en</strong>taje de acierto global: tanto por ci<strong>en</strong>to de<br />
píxeles clasificados de forma correcta <strong>en</strong> todas las clases, calculado de la sigui<strong>en</strong>te<br />
forma:<br />
∩ , el número de píxeles de la región resultante al<br />
OA =<br />
N<br />
∑i N<br />
6.1. Ejemplo de uso 1: World Trade C<strong>en</strong>ter de New York<br />
Para este primer caso de estudio seleccionaremos una zona urbana <strong>del</strong> World<br />
Trade C<strong>en</strong>ter de New York 7 . Esta zona fue un complejo ubicado <strong>en</strong> Lower<br />
Manhattan, <strong>en</strong> Nueva York, Estados Unidos, donde se situaban las Torres Gemelas.<br />
El WTC fue diseñado por Minoru Yamasaki a principios de los años 1960.<br />
Actualm<strong>en</strong>te esta zona se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> construcción debido al at<strong>en</strong>tado ocurrido el<br />
11 de septiembre de 2001. En Wikipedia, se facilitan las coord<strong>en</strong>adas de longitud y<br />
latitud <strong>para</strong> <strong>en</strong>contrar dicha zona tan espectacular (ver figura 6.2).<br />
∑<br />
7<br />
http://es.wikipedia.org/wiki/World_Trade_C<strong>en</strong>ter<br />
ij ij<br />
× 100<br />
Trabajo Fin de Máster -63- Sergio Bernabé García<br />
a<br />
a<br />
ii<br />
(6.1)<br />
Figura 6.2. Ubicación <strong>del</strong> WTC de<br />
Nueva York, situado <strong>en</strong> las<br />
coord<strong>en</strong>adas: 40.713º, -74.0135º.
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
Una vez situados <strong>en</strong> esas coord<strong>en</strong>adas d<strong>en</strong>tro de la aplicación “GoogleCBIR”,<br />
seleccionaremos por ejemplo, alguna zona urbana cualquiera <strong>del</strong> WTC (ver figura<br />
6.3).<br />
Figura 6.3. Selección de una zona urbana pert<strong>en</strong>eci<strong>en</strong>te al WTC de Nueva York (Estados<br />
Unidos).<br />
Figura 6.4. Segm<strong>en</strong>tación de la zona seleccionada <strong>del</strong> WTC, utilizando el <strong>algoritmo</strong><br />
K-<strong>Means</strong>.<br />
Trabajo Fin de Máster -64- Sergio Bernabé García
<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 />
A dicha selección una vez almac<strong>en</strong>ada <strong>en</strong> disco, ejecutaremos el <strong>algoritmo</strong> de<br />
clasificación no supervisada K-<strong>Means</strong> <strong>para</strong>lelizado, al que aplicaremos 5 clases <strong>para</strong><br />
segm<strong>en</strong>tar la imag<strong>en</strong>. Los resultados los obt<strong>en</strong>dremos <strong>en</strong> la figura 6.4.<br />
A continuación y una vez realizado la ejecución <strong>del</strong> <strong>algoritmo</strong> K-<strong>Means</strong>,<br />
procesaremos dicha zona con la herrami<strong>en</strong>ta ENVI. Para ello, seleccionaremos el<br />
<strong>algoritmo</strong> de clasificación no supervisada K-<strong>Means</strong> con la misma configuración que<br />
<strong>en</strong> la ejecución <strong>del</strong> código <strong>para</strong>lelizado (ver figura 6.5).<br />
Figura 6.5. Segm<strong>en</strong>tación de la zona seleccionada de WTC (Nueva York) utilizando el<br />
<strong>algoritmo</strong> K-<strong>Means</strong> con la herrami<strong>en</strong>ta ENVI.<br />
Como hemos podido comprobar de forma visual la segm<strong>en</strong>tación realizada por<br />
nuestro <strong>algoritmo</strong> <strong>en</strong> <strong>GPU</strong> no es muy distinta a la realizada por la herrami<strong>en</strong>ta ENVI.<br />
Ahora nos quedaría demostrarlo a través de la com<strong>para</strong>ción de los distintos píxeles<br />
clasificados por nuestro <strong>algoritmo</strong> calculando un porc<strong>en</strong>taje de acierto. Ya que no se<br />
dispon<strong>en</strong> de medidas verdad-terr<strong>en</strong>o, se ha decidido utilizar las imág<strong>en</strong>es de la<br />
herrami<strong>en</strong>ta ENVI cómo nuestra medida de refer<strong>en</strong>cia <strong>para</strong> evaluar las imág<strong>en</strong>es<br />
obt<strong>en</strong>idas por nuestra herrami<strong>en</strong>ta. De esta manera, es necesario conocer cuántos<br />
píxeles de la imag<strong>en</strong> clasificada g<strong>en</strong>erada por nuestra herrami<strong>en</strong>ta se clasifican<br />
correctam<strong>en</strong>te por clase. Así t<strong>en</strong>dremos unas estadísticas que nos ayudarán a valorar<br />
positivam<strong>en</strong>te o negativam<strong>en</strong>te nuestros resultados tras la aplicación <strong>del</strong> <strong>algoritmo</strong> de<br />
Trabajo Fin de Máster -65- Sergio Bernabé García
<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 />
clasificación no supervisada.<br />
Para la obt<strong>en</strong>ción de dichas estadísticas, se ha elaborado un pequeño programa<br />
capaz de ir com<strong>para</strong>ndo los píxeles de una imag<strong>en</strong> y otra, at<strong>en</strong>di<strong>en</strong>do que los colores<br />
asignados por nuestra herrami<strong>en</strong>ta y por la de ENVI no son iguales. Por ello, es<br />
necesario t<strong>en</strong>erlos <strong>en</strong> cu<strong>en</strong>ta <strong>para</strong> ofrecer unos resultados correctos.<br />
La tabla 6.1 muestra una com<strong>para</strong>tiva (<strong>en</strong> términos de porc<strong>en</strong>taje de acierto)<br />
<strong>en</strong>tre la imag<strong>en</strong> mostrada <strong>en</strong> la figura 6.4 (correspondi<strong>en</strong>te al método K-<strong>Means</strong><br />
implem<strong>en</strong>tado) y la imag<strong>en</strong> mostrada <strong>en</strong> la figura 6.5 (correspondi<strong>en</strong>te al método<br />
K-<strong>Means</strong> implem<strong>en</strong>tado <strong>en</strong> ENVI). Los códigos de color indicados <strong>en</strong> la tabla<br />
correspond<strong>en</strong> a los colores asociados a cada clase <strong>en</strong> nuestra implem<strong>en</strong>tación<br />
<strong>para</strong>lelizada. Las celdas que se <strong>en</strong>cu<strong>en</strong>tran sombreadas correspond<strong>en</strong> a las clases con<br />
las que el usuario ha querido conservar, de las que se han obt<strong>en</strong>ido una media de<br />
valores por <strong>en</strong>cima <strong>del</strong> 80% de acierto. Como puede apreciarse <strong>en</strong> la tabla 6.1, la<br />
evaluación de los resultados obt<strong>en</strong>idos se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> torno al 70-80% de similitud<br />
al emplear el porc<strong>en</strong>taje de acierto calculado píxel a píxel, con porc<strong>en</strong>tajes muy<br />
elevados de similitud al com<strong>para</strong>r clases predominantes <strong>en</strong> la esc<strong>en</strong>a <strong>del</strong> World Trade<br />
C<strong>en</strong>ter como las asociadas a zonas urbanas, por lo que podemos concluir que la<br />
implem<strong>en</strong>tación desarrollada se comporta de forma correcta con la imag<strong>en</strong> que ha<br />
sido procesada.<br />
Estos resultados aún podrían ser mejores, puesto que la com<strong>para</strong>ción que se ha<br />
realizado con la imag<strong>en</strong> de validación ha sido píxel a píxel, sin t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta<br />
ningún posible marg<strong>en</strong> de error <strong>en</strong>tre el resultado obt<strong>en</strong>ido y el deseado.<br />
Azul<br />
(Sombra1)<br />
Verde<br />
(ZUrbana2)<br />
Naranja<br />
(Zurbana3)<br />
Rojo<br />
(Sombra2)<br />
Amarillo<br />
(Zurbana1)<br />
Media<br />
Global<br />
78.26 % 90.65 % 97.39 % 95.49 % 85.56 % 89.47 %<br />
Tabla 6.1. Resultados estadísticos tras la ejecución <strong>para</strong>lela <strong>del</strong> <strong>algoritmo</strong> de<br />
clasificación no supervisado K-<strong>Means</strong> con la imag<strong>en</strong> <strong>del</strong> World Trade C<strong>en</strong>ter.<br />
Una vez que hemos explicado como se ha llevado a cabo el análisis de<br />
resultados <strong>en</strong> cuanto a precisión, a continuación expondremos los resultados de los<br />
Trabajo Fin de Máster -66- Sergio Bernabé García
<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 />
experim<strong>en</strong>tos realizados sobre la imag<strong>en</strong> <strong>del</strong> World Trade C<strong>en</strong>ter y com<strong>para</strong>remos<br />
los tiempos de las versiones CPU y <strong>GPU</strong>.<br />
La tabla 6.2 muestra el tiempo de ejecución por cada una de las <strong>GPU</strong>s y la<br />
versión serie, además <strong>del</strong> speedup conseguido.<br />
Parámetros<br />
Núm.<br />
Elem<strong>en</strong>tos<br />
Núm.<br />
Clusters<br />
K-<strong>Means</strong> versión<br />
Tiempo<br />
(segs)<br />
C (CPU)<br />
Speedup Tiempo<br />
(segs)<br />
K-<strong>Means</strong> versión<br />
CUDA (<strong>GPU</strong><br />
GeForce 9400M)<br />
K-<strong>Means</strong> versión<br />
CUDA (<strong>GPU</strong><br />
Tesla c1060)<br />
Speedup Tiempo<br />
(segs) Speedup<br />
512x512 5 0.822 1x 0.252 3.26x 0.145 5.67x<br />
512x512 64 3.769 1x 0.496 7.60x 0.210 17.95x<br />
512x512 128 7.861 1x 0.764 10.29x 0.268 29.33x<br />
1024x1024 64 22.147 1x 3.582 6.18x 0.715 30.97x<br />
1024x1024 128 38.301 1x 4.374 8.76x 1.044 36.69x<br />
Tabla 6.2. Com<strong>para</strong>ción de resultados CPU y <strong>GPU</strong> utilizando la imag<strong>en</strong> <strong>del</strong> World Trade<br />
C<strong>en</strong>ter ajustada según la dim<strong>en</strong>sión.<br />
A medida que aum<strong>en</strong>tamos el número de elem<strong>en</strong>tos, es decir, las dim<strong>en</strong>siones de<br />
la imag<strong>en</strong> a clasificar y el número de clusters, el speedup conseguido por la <strong>GPU</strong><br />
Tesla es cada vez mayor, concretam<strong>en</strong>te la versión <strong>GPU</strong> tarda casi 37 veces m<strong>en</strong>os<br />
<strong>en</strong> ejecutarse que la versión CPU demostrando la gran pot<strong>en</strong>cia de cálculo que puede<br />
aprovecharse <strong>en</strong> una <strong>GPU</strong>. Sin embargo utilizando una <strong>GPU</strong> GeForce 9400M el<br />
límite nos lo <strong>en</strong>contramos al aum<strong>en</strong>tar <strong>en</strong> 1024x1024 las dim<strong>en</strong>siones de la imag<strong>en</strong>,<br />
<strong>en</strong> donde el speedup va disminuy<strong>en</strong>do. Así y todo se ha conseguido ejecutar el<br />
código <strong>en</strong> 10 veces m<strong>en</strong>os que la versión CPU.<br />
Trabajo Fin de Máster -67- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
6.2. Ejemplo de uso 22:<br />
El río Nilo africano<br />
Para este caso seleccionaremos un pequeño tramo de este gran río situado <strong>en</strong><br />
África 8 , considerado uno de los ríos más largos <strong>del</strong> mundo aunque hay fu<strong>en</strong>tes que ya<br />
no lo colocan como el más largo <strong>del</strong> mundo y le han cedido este puesto al río<br />
Amazonas. El Nilo por su parte, nace <strong>en</strong> Burundi, recorre Uganda, Sudán y Egipto,<br />
desembocando <strong>en</strong> el mar Mediterráneo, al norte de El Cairo, formand formando un amplio<br />
<strong>del</strong>ta. En Wikipedia, se facilitan las coord<strong>en</strong>adas de longitud y latitud <strong>para</strong> <strong>en</strong>contrar<br />
dicha zona tan particular de África (ver figura 6.6).<br />
Figura 6.6. Ubicación <strong>del</strong> río Nilo (África), situado <strong>en</strong> las coord<strong>en</strong>adas: 29.89º, 31.28º.<br />
Una vez situados <strong>en</strong> esas coord<strong>en</strong>adas d<strong>en</strong>tro de la aplicación “GoogleCBIR”,<br />
seleccionaremos por ejemplo, algún tramo <strong>del</strong> río Nilo (ver figura 6.7 6.7).<br />
A dicha selección una vez almac<strong>en</strong>ada <strong>en</strong> disco, ejecutaremos el <strong>algoritmo</strong> de<br />
clasificación no supervisada K-<strong>Means</strong> <strong>Means</strong> <strong>para</strong>lelizado, al que aplicaremos 5 clases <strong>para</strong><br />
segm<strong>en</strong>tar la imag<strong>en</strong>. Los resultados los obt<strong>en</strong>dremos <strong>en</strong> la figura 6.8.<br />
8<br />
http://es.wikipedia.org/wiki/Nilo<br />
Trabajo Fin de Máster -68- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
Figura 6.7. Selección de un tramo pert<strong>en</strong>eci<strong>en</strong>te al río Nilo ilo (África).<br />
Figura 6.8. Segm<strong>en</strong>tación de la zona seleccionada <strong>del</strong> río Nilo (África) utilizando el<br />
<strong>algoritmo</strong> K-<strong>Means</strong>.<br />
A continuación y una vez realizado la ejecución <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong>,<br />
procesaremos dicha zona con la herrami<strong>en</strong>ta ENVI. Para ello, seleccionaremos el<br />
<strong>algoritmo</strong> de clasificación no supervisada KK-<strong>Means</strong><br />
con la misma isma configuración que<br />
<strong>en</strong> la ejecución <strong>del</strong> código <strong>para</strong>lelizado (ver figura 6.9).<br />
Trabajo Fin de Máster -69- Sergio Bernabé García
<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 />
Figura 6.9. Segm<strong>en</strong>tación de la zona seleccionada <strong>del</strong> río Nilo utilizando el <strong>algoritmo</strong><br />
K-<strong>Means</strong> con la herrami<strong>en</strong>ta ENVI.<br />
Como hemos podido comprobar de forma visual la segm<strong>en</strong>tación realizada por<br />
nuestro <strong>algoritmo</strong> <strong>en</strong> <strong>GPU</strong> no es muy distinta a la realizada por la herrami<strong>en</strong>ta ENVI.<br />
Ahora nos quedaría demostrarlo a través de la com<strong>para</strong>ción de los distintos píxeles<br />
clasificados por nuestro <strong>algoritmo</strong> calculando un porc<strong>en</strong>taje de acierto. Ya que no se<br />
dispon<strong>en</strong> de medidas verdad-terr<strong>en</strong>o, se ha decidido utilizar las imág<strong>en</strong>es de la<br />
herrami<strong>en</strong>ta ENVI cómo nuestra medida de refer<strong>en</strong>cia <strong>para</strong> evaluar las imág<strong>en</strong>es<br />
obt<strong>en</strong>idas por nuestra herrami<strong>en</strong>ta. De esta manera, es necesario conocer cuántos<br />
píxeles de la imag<strong>en</strong> clasificada g<strong>en</strong>erada por nuestra herrami<strong>en</strong>ta se clasifican<br />
correctam<strong>en</strong>te por clase. Así t<strong>en</strong>dremos unas estadísticas que nos ayudarán a valorar<br />
positivam<strong>en</strong>te o negativam<strong>en</strong>te nuestros resultados tras la aplicación <strong>del</strong> <strong>algoritmo</strong> de<br />
clasificación no supervisada.<br />
Para la obt<strong>en</strong>ción de dichas estadísticas, se ha elaborado un pequeño programa<br />
capaz de ir com<strong>para</strong>ndo los píxeles de una imag<strong>en</strong> y otra, at<strong>en</strong>di<strong>en</strong>do que los colores<br />
asignados por nuestra herrami<strong>en</strong>ta y por la de ENVI no son iguales. Por ello, es<br />
necesario t<strong>en</strong>erlos <strong>en</strong> cu<strong>en</strong>ta <strong>para</strong> ofrecer unos resultados correctos.<br />
La tabla 6.3 muestra una com<strong>para</strong>tiva (<strong>en</strong> términos de porc<strong>en</strong>taje de acierto)<br />
<strong>en</strong>tre la imag<strong>en</strong> mostrada <strong>en</strong> la figura 6.8 (correspondi<strong>en</strong>te al método K-<strong>Means</strong><br />
implem<strong>en</strong>tado) y la imag<strong>en</strong> mostrada <strong>en</strong> la figura 6.9 (correspondi<strong>en</strong>te al método<br />
Trabajo Fin de Máster -70- Sergio Bernabé García
<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 />
K-<strong>Means</strong> implem<strong>en</strong>tado <strong>en</strong> ENVI). Los códigos de color indicados <strong>en</strong> la tabla<br />
correspond<strong>en</strong> a los colores asociados a cada clase <strong>en</strong> nuestra implem<strong>en</strong>tación<br />
<strong>para</strong>lelizada. Las celdas que se <strong>en</strong>cu<strong>en</strong>tran sombreadas correspond<strong>en</strong> a las clases con<br />
las que el usuario ha querido conservar, de las que se han obt<strong>en</strong>ido una media de<br />
valores por <strong>en</strong>cima <strong>del</strong> 80% de acierto. Como puede apreciarse <strong>en</strong> la tabla 6.3, la<br />
evaluación de los resultados obt<strong>en</strong>idos se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> torno al 70-80% de similitud<br />
al emplear el porc<strong>en</strong>taje de acierto calculado píxel a píxel, con porc<strong>en</strong>tajes muy<br />
elevados de similitud al com<strong>para</strong>r clases predominantes <strong>en</strong> la esc<strong>en</strong>a <strong>del</strong> río Nilo<br />
como las asociadas a zonas de agua, por lo que podemos concluir que la<br />
implem<strong>en</strong>tación desarrollada se comporta de forma correcta con la imag<strong>en</strong> que ha<br />
sido procesada.<br />
Estos resultados aún podrían ser mejores, puesto que la com<strong>para</strong>ción que se ha<br />
realizado con la imag<strong>en</strong> de validación ha sido píxel a píxel, sin t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta<br />
ningún posible marg<strong>en</strong> de error <strong>en</strong>tre el resultado obt<strong>en</strong>ido y el deseado.<br />
Azul<br />
(Suelo2)<br />
Verde<br />
(Agua2)<br />
Naranja<br />
(Suelo1)<br />
Rojo<br />
(Agua1)<br />
Amarillo<br />
(Zurbana1)<br />
Media<br />
Global<br />
94.85 % 57.29 % 89.25 % 99.56 % 99.74 % 88.14 %<br />
Tabla 6.3. Resultados estadísticos tras la ejecución <strong>para</strong>lela <strong>del</strong> <strong>algoritmo</strong> de<br />
clasificación no supervisado K-<strong>Means</strong> con la imag<strong>en</strong> <strong>del</strong> río Nilo.<br />
Una vez que hemos explicado como se ha llevado a cabo el análisis de<br />
resultados <strong>en</strong> cuanto a precisión, a continuación expondremos los resultados de los<br />
experim<strong>en</strong>tos realizados sobre la imag<strong>en</strong> <strong>del</strong> río Nilo y com<strong>para</strong>remos los tiempos de<br />
las versiones CPU y <strong>GPU</strong>.<br />
La tabla 6.4 muestra el tiempo de ejecución por cada una de las <strong>GPU</strong>s y la<br />
versión serie, además <strong>del</strong> speedup conseguido.<br />
A medida que aum<strong>en</strong>tamos el número de elem<strong>en</strong>tos, es decir, las dim<strong>en</strong>siones de<br />
la imag<strong>en</strong> a clasificar y el número de clusters, el speedup conseguido por la <strong>GPU</strong><br />
Tesla es cada vez mayor, concretam<strong>en</strong>te la versión <strong>GPU</strong> tarda casi 21 veces m<strong>en</strong>os<br />
<strong>en</strong> ejecutarse que la versión CPU demostrando la gran pot<strong>en</strong>cia de cálculo que puede<br />
Trabajo Fin de Máster -71- Sergio Bernabé García
<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 />
aprovecharse <strong>en</strong> una <strong>GPU</strong>. Sin embargo utilizando una <strong>GPU</strong> GeForce 9400M el<br />
límite nos lo <strong>en</strong>contramos al aum<strong>en</strong>tar <strong>en</strong> 1024x1024 las dim<strong>en</strong>siones de la imag<strong>en</strong>,<br />
<strong>en</strong> donde el speedup va disminuy<strong>en</strong>do. Así y todo se ha conseguido ejecutar el<br />
código <strong>en</strong> 6 veces m<strong>en</strong>os que la versión CPU.<br />
Parámetros<br />
Núm.<br />
Elem<strong>en</strong>tos<br />
Núm.<br />
Clusters<br />
K-<strong>Means</strong> versión<br />
Tiempo<br />
(segs)<br />
C (CPU)<br />
Speedup Tiempo<br />
(segs)<br />
K-<strong>Means</strong> versión<br />
CUDA (<strong>GPU</strong><br />
GeForce 9400M)<br />
K-<strong>Means</strong> versión<br />
CUDA (<strong>GPU</strong><br />
Tesla c1060)<br />
Speedup Tiempo<br />
(segs) Speedup<br />
512x512 5 0.537 1x 0.140 3.84x 0.118 4.55x<br />
512x512 64 2.196 1x 0.458 4.79x 0.210 10.46x<br />
512x512 128 3.718 1x 0.592 6.28x 0.223 16.67x<br />
1024x1024 64 18.492 1x 5.153 3.59x 1.046 17.68x<br />
1024x1024 128 25.902 1x 6.467 4.01x 1.254 20.66x<br />
Tabla 6.4. Com<strong>para</strong>ción de resultados CPU y <strong>GPU</strong> utilizando la imag<strong>en</strong> <strong>del</strong> río Nilo<br />
ajustada según la dim<strong>en</strong>sión.<br />
Trabajo Fin de Máster -72- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
6.3. Ejemplo de uso 3: Población de Guareña y sus alrededores<br />
Para este tercer y último caso de estudio seleccionaremos una zona cercana a la<br />
población de Guareña 9 , municipio español pert<strong>en</strong>eci<strong>en</strong>te a la provincia de Badajoz<br />
(comunidad autónoma de Extremadura) <strong>del</strong> que es natural el autor <strong>del</strong> pres<strong>en</strong>te<br />
trabajo. Wikipedia nos facilita las coord<strong>en</strong>adas de longitud y latitud <strong>para</strong> <strong>en</strong>contrar<br />
dicha localidad (ver figura 6.10).<br />
Figura 6.10. 10. Ubicación <strong>del</strong> municipio de Guareña (B (Badajoz), adajoz), situado <strong>en</strong> las coord<strong>en</strong>adas:<br />
38.85º, -6.083333º.<br />
Una vez situados <strong>en</strong> esas coord<strong>en</strong>adas d<strong>en</strong>tro de la aplicación “GoogleCBIR”,<br />
seleccionaremos emos por ejemplo, una zona de vegetación (ver figura 6.11).<br />
Figura 6.11. Selección de una zona si situada tuada cerca de la población de GGuareña<br />
de la que<br />
escogeremos las zonas con vegetación.<br />
9<br />
http://es.wikipedia.org/wiki/Guare%C3%B1a_(Badajoz)<br />
Trabajo Fin de Máster -73- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
A dicha selección una vez almac<strong>en</strong>ada <strong>en</strong> disco, ejecutaremos el <strong>algoritmo</strong> de<br />
clasificación no supervisada KK-<strong>Means</strong><br />
<strong>Means</strong> <strong>para</strong>lelizado, al que aplicaremos 5 clases <strong>para</strong><br />
segm<strong>en</strong>tar la imag<strong>en</strong>. Los resultados los obt<strong>en</strong>dremos <strong>en</strong> la figura 6.12.<br />
Figura 6.12. Segm<strong>en</strong>tación de la zona seleccionada si situada tuada cerca de la población de GGuareña<br />
utilizando el <strong>algoritmo</strong> K-<strong>Means</strong>.<br />
A continuación y una vez realizado la ejecución <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong>,<br />
procesaremos dicha zona con la herrami<strong>en</strong>ta ENVI. Para ello, seleccionaremos el<br />
<strong>algoritmo</strong> de clasificación no supervisada KK-<strong>Means</strong><br />
<strong>Means</strong> con la misma conf configuración que<br />
<strong>en</strong> la ejecución <strong>del</strong> código <strong>para</strong>lelizado (ver figura 6.13).<br />
Figura 6.13. Segm<strong>en</strong>tación de la zona seleccionada situada cerca de la población de<br />
Guareña utilizando el <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<strong>Means</strong> con la herrami<strong>en</strong>ta ENVI ENVI.<br />
Como hemos podido comprobar de forma visual la segm<strong>en</strong>tación realizada por<br />
Trabajo Fin de Máster -74- Sergio Bernabé García
<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 />
nuestro <strong>algoritmo</strong> <strong>en</strong> <strong>GPU</strong> no es muy distinta a la realizada por la herrami<strong>en</strong>ta ENVI.<br />
Ahora nos quedaría demostrarlo a través de la com<strong>para</strong>ción de los distintos píxeles<br />
clasificados por nuestro <strong>algoritmo</strong> calculando un porc<strong>en</strong>taje de acierto. Ya que no se<br />
dispon<strong>en</strong> de medidas verdad-terr<strong>en</strong>o, se ha decidido utilizar las imág<strong>en</strong>es de la<br />
herrami<strong>en</strong>ta ENVI cómo nuestra medida de refer<strong>en</strong>cia <strong>para</strong> evaluar las imág<strong>en</strong>es<br />
obt<strong>en</strong>idas por nuestra herrami<strong>en</strong>ta. De esta manera, es necesario conocer cuántos<br />
píxeles de la imag<strong>en</strong> clasificada g<strong>en</strong>erada por nuestra herrami<strong>en</strong>ta se clasifican<br />
correctam<strong>en</strong>te por clase. Así t<strong>en</strong>dremos unas estadísticas que nos ayudarán a valorar<br />
positivam<strong>en</strong>te o negativam<strong>en</strong>te nuestros resultados tras la aplicación <strong>del</strong> <strong>algoritmo</strong> de<br />
clasificación no supervisada.<br />
Para la obt<strong>en</strong>ción de dichas estadísticas, se ha elaborado un pequeño programa<br />
capaz de ir com<strong>para</strong>ndo los píxeles de una imag<strong>en</strong> y otra, at<strong>en</strong>di<strong>en</strong>do que los colores<br />
asignados por nuestra herrami<strong>en</strong>ta y por la de ENVI no son iguales. Por ello, es<br />
necesario t<strong>en</strong>erlos <strong>en</strong> cu<strong>en</strong>ta <strong>para</strong> ofrecer unos resultados correctos.<br />
La tabla 6.5 muestra una com<strong>para</strong>tiva (<strong>en</strong> términos de porc<strong>en</strong>taje de acierto)<br />
<strong>en</strong>tre la imag<strong>en</strong> mostrada <strong>en</strong> la figura 6.12 (correspondi<strong>en</strong>te al método K-<strong>Means</strong><br />
implem<strong>en</strong>tado) y la imag<strong>en</strong> mostrada <strong>en</strong> la figura 6.13 (correspondi<strong>en</strong>te al método<br />
K-<strong>Means</strong> implem<strong>en</strong>tado <strong>en</strong> ENVI). Los códigos de color indicados <strong>en</strong> la tabla<br />
correspond<strong>en</strong> a los colores asociados a cada clase <strong>en</strong> nuestra implem<strong>en</strong>tación<br />
<strong>para</strong>lelizada. Las celdas que se <strong>en</strong>cu<strong>en</strong>tran sombreadas correspond<strong>en</strong> a las clases con<br />
las que el usuario ha querido conservar, de las que se han obt<strong>en</strong>ido una media de<br />
valores por <strong>en</strong>cima <strong>del</strong> 80% de acierto. Como puede apreciarse <strong>en</strong> la tabla 6.5, la<br />
evaluación de los resultados obt<strong>en</strong>idos se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> torno al 70-80% de similitud<br />
al emplear el porc<strong>en</strong>taje de acierto calculado píxel a píxel, con porc<strong>en</strong>tajes muy<br />
elevados de similitud al com<strong>para</strong>r clases predominantes <strong>en</strong> la esc<strong>en</strong>a de Guareña<br />
como las asociadas a hierba y vegetación (árboles) por lo que podemos concluir que<br />
la implem<strong>en</strong>tación desarrollada se comporta de forma correcta con la imag<strong>en</strong> que ha<br />
sido procesada.<br />
Estos resultados aún podrían ser mejores, puesto que la com<strong>para</strong>ción que se ha<br />
realizado con la imag<strong>en</strong> de validación ha sido píxel a píxel, sin t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta<br />
Trabajo Fin de Máster -75- Sergio Bernabé García
<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 />
ningún posible marg<strong>en</strong> de error <strong>en</strong>tre el resultado obt<strong>en</strong>ido y el deseado.<br />
Rojo<br />
(Pasto)<br />
Verde<br />
(Hierba1)<br />
Azul<br />
(Hierba2)<br />
Amarillo<br />
(Vegetación1)<br />
Naranja<br />
(Vegetación2)<br />
Media<br />
Global<br />
71.93 % 90.11 % 90.57 % 83.67 % 81.44 % 83.54 %<br />
Tabla 6.5. Resultados estadísticos tras la ejecución <strong>para</strong>lela <strong>del</strong> <strong>algoritmo</strong> de<br />
clasificación no supervisado K-<strong>Means</strong> con la imag<strong>en</strong> de Guareña.<br />
Una vez que hemos explicado como se ha llevado a cabo el análisis de<br />
resultados <strong>en</strong> cuanto a precisión, a continuación expondremos los resultados de los<br />
experim<strong>en</strong>tos realizados sobre la imag<strong>en</strong> de Guareña y com<strong>para</strong>remos los tiempos de<br />
las versiones CPU y <strong>GPU</strong>.<br />
La tabla 6.6 muestra el tiempo de ejecución por cada una de las <strong>GPU</strong>s y la<br />
versión serie, además <strong>del</strong> speedup conseguido.<br />
Parámetros<br />
Núm.<br />
Elem<strong>en</strong>tos<br />
Núm.<br />
Clusters<br />
K-<strong>Means</strong> versión<br />
Tiempo<br />
(segs)<br />
C (CPU)<br />
Speedup Tiempo<br />
(segs)<br />
K-<strong>Means</strong> versión<br />
CUDA (<strong>GPU</strong><br />
GeForce 9400M)<br />
K-<strong>Means</strong> versión<br />
CUDA (<strong>GPU</strong><br />
Tesla c1060)<br />
Speedup Tiempo<br />
(segs) Speedup<br />
512x512 5 0.311 1x 0.093 3.34x 0.126 2.47x<br />
512x512 64 5.122 1x 1.307 3.92x 0.415 12.34x<br />
512x512 128 6.387 1x 1.453 4.40x 0.457 13.98x<br />
1024x1024 64 15.305 1x 5.427 2.82x 0.930 16.46x<br />
1024x1024 128 24.234 1x 8.056 3.01x 1.060 22.86x<br />
Tabla 6.6. Com<strong>para</strong>ción de resultados CPU y Gpu utilizando la imag<strong>en</strong> de Guareña.<br />
A medida que aum<strong>en</strong>tamos el número de elem<strong>en</strong>tos, es decir, las dim<strong>en</strong>siones de<br />
la imag<strong>en</strong> a clasificar y el número de clusters, el speedup conseguido por la <strong>GPU</strong><br />
Tesla es cada vez mayor, concretam<strong>en</strong>te la versión <strong>GPU</strong> tarda casi 23 veces m<strong>en</strong>os<br />
<strong>en</strong> ejecutarse que la versión CPU demostrando la gran pot<strong>en</strong>cia de cálculo que puede<br />
aprovecharse <strong>en</strong> una <strong>GPU</strong>. Sin embargo utilizando una <strong>GPU</strong> GeForce 9400M el<br />
Trabajo Fin de Máster -76- Sergio Bernabé García
<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 />
límite nos lo <strong>en</strong>contramos al aum<strong>en</strong>tar <strong>en</strong> 1024x1024 las dim<strong>en</strong>siones de la imag<strong>en</strong>,<br />
<strong>en</strong> donde el speedup va disminuy<strong>en</strong>do, aunque los resultados obt<strong>en</strong>idos son de 4<br />
veces m<strong>en</strong>os <strong>en</strong> ejecutarse que la versión CPU.<br />
Trabajo Fin de Máster -77- Sergio Bernabé García
<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 />
7. Conclusiones y líneas futuras<br />
En la pres<strong>en</strong>te memoria se ha realizado un estudio sobre la implem<strong>en</strong>tación de<br />
un <strong>algoritmo</strong> de clasificación no supervisado <strong>en</strong> imág<strong>en</strong>es multiespectrales sobre<br />
<strong>GPU</strong>s programables. Concretam<strong>en</strong>te se ha implem<strong>en</strong>tado el <strong>algoritmo</strong> K-<strong>Means</strong> <strong>en</strong><br />
sus versiones serie (C++) y <strong>para</strong>lela (CUDA) obt<strong>en</strong>i<strong>en</strong>do una serie de resultados <strong>en</strong><br />
base al tiempo y la precisión que han sido com<strong>para</strong>dos. Dichos resultados han sido<br />
obt<strong>en</strong>idos utilizando el repositorio de imág<strong>en</strong>es de satélites de Google Maps,<br />
necesarios <strong>para</strong> evaluar el <strong>algoritmo</strong> <strong>en</strong> términos de precisión y r<strong>en</strong>dimi<strong>en</strong>to<br />
computacional <strong>en</strong> arquitecturas <strong>GPU</strong> de última g<strong>en</strong>eración.<br />
Como resultado, se ha obt<strong>en</strong>ido un detallado estudio de técnicas <strong>para</strong>lelas <strong>para</strong><br />
tratami<strong>en</strong>to de datos multiespectrales <strong>en</strong> <strong>GPU</strong>, realizando contribuciones sustanciales<br />
al estado <strong>del</strong> arte <strong>en</strong> la materia dada la falta de implem<strong>en</strong>taciones <strong>para</strong>lelas (<strong>en</strong><br />
particular, <strong>en</strong> <strong>GPU</strong>s) de <strong>algoritmo</strong>s de análisis de imág<strong>en</strong>es multiespectrales <strong>en</strong> la<br />
literatura actual.<br />
Según los objetivos conseguidos a lo largo <strong>del</strong> trabajo, las principales<br />
aportaciones <strong>del</strong> pres<strong>en</strong>te estudio pued<strong>en</strong> resumirse un conjunto de contribuciones<br />
que se <strong>en</strong>umeran a continuación:<br />
• Después de analizar los resultados de las ejecuciones podemos decir que se<br />
ha conseguido obt<strong>en</strong>er una precisión superior al 80% <strong>en</strong> los tres casos<br />
estudiados, además se ha conseguido obt<strong>en</strong>er un speedup cercano a 40<br />
respecto a la versión C, por lo que podemos decir que las <strong>GPU</strong>s son bu<strong>en</strong>a<br />
alternativa a la hora de dar soporte de una forma barata a <strong>algoritmo</strong>s<br />
<strong>para</strong>lelos.<br />
• Convi<strong>en</strong>e destacar, llegados a este punto, las v<strong>en</strong>tajas económicas que la<br />
implem<strong>en</strong>tación <strong>GPU</strong> ofrece con respecto a otras soluciones <strong>para</strong>lelas como<br />
las basadas <strong>en</strong> cluster de computadores. En concreto, mi<strong>en</strong>tras que el precio<br />
de una <strong>GPU</strong> de última g<strong>en</strong>eración se sitúa <strong>en</strong> torno a los 400 euros, el precio<br />
de un cluster puede ser mucho mayor, además de resaltar <strong>en</strong> una serie de<br />
condiciones desfavorables desde el punto de vista de su implantación como<br />
Trabajo Fin de Máster -78- Sergio Bernabé García
<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 />
módulo de procesami<strong>en</strong>to a bordo <strong>del</strong> s<strong>en</strong>sor, con difer<strong>en</strong>tes aspectos que<br />
puedan afectar de forma negativa al payload de la misión (peso, consumo<br />
<strong>en</strong>ergético, cal<strong>en</strong>tami<strong>en</strong>to, mant<strong>en</strong>imi<strong>en</strong>to, etc.) En este s<strong>en</strong>tido, las <strong>GPU</strong>s<br />
ofrec<strong>en</strong> una solución mucho más compacta, si bi<strong>en</strong> es cierto que es preciso<br />
realizar un estudio detallado de las condiciones de tolerancia de las <strong>GPU</strong>s a<br />
requerimi<strong>en</strong>tos extremos <strong>en</strong> cuanto a consumo y s<strong>en</strong>sibilidad a radiación,<br />
necesario a la hora de calibrar la adaptabilidad de esta plataforma hardware<br />
especializada a misiones reales de observación remota de la tierra.<br />
Para concluir este capítulo, planteamos algunas líneas futuras de trabajo<br />
adicionales que serían interesante perseguir <strong>en</strong> futuras ampliaciones de este trabajo:<br />
• Se ha hablado de que la principal v<strong>en</strong>taja de la implem<strong>en</strong>tación <strong>GPU</strong> con<br />
respecto al uso de cluster es el aspecto económico; sin embargo no se ha<br />
podido realizar ningún tipo de com<strong>para</strong>ción real <strong>en</strong>tre ambas soluciones <strong>en</strong><br />
cuanto resultados y tiempos de ejecución, luego sería interesante realizar<br />
dicho estudio <strong>en</strong> el futuro.<br />
• Una alternativa interesante a la metodología propuesta vi<strong>en</strong>e dada por la<br />
posibilidad de implem<strong>en</strong>tar <strong>algoritmo</strong>s <strong>para</strong>lelos <strong>en</strong> clusters de <strong>GPU</strong>s,<br />
aprovechando las v<strong>en</strong>tajas de ambos <strong>para</strong>digmas de computación <strong>para</strong>lela.<br />
• Por otra parte, y con vistas a ampliar el desarrollo de este trabajo, otra línea<br />
futura de trabajo deberá consistir <strong>en</strong> probar implem<strong>en</strong>taciones <strong>GPU</strong> <strong>en</strong><br />
<strong>algoritmo</strong>s de clasificación supervisada que han sido desarrollados <strong>en</strong> la<br />
herrami<strong>en</strong>ta GoogleCBIR, tales como Maximum Likelihood y Mínimas<br />
distancias.<br />
• Finalm<strong>en</strong>te, se plantea como futura ext<strong>en</strong>sión <strong>del</strong> trabajo desarrollado la<br />
implem<strong>en</strong>tación <strong>del</strong> <strong>algoritmo</strong> <strong>en</strong> otras arquitecturas <strong>para</strong>lelas como FPGAs,<br />
clusters de computación <strong>para</strong>lela o sistemas GRID, de cara a evaluar las<br />
prestaciones de dicho <strong>algoritmo</strong> <strong>en</strong> com<strong>para</strong>ción con otros <strong>algoritmo</strong>s de<br />
clasificación no supervisada también disponibles <strong>en</strong> forma de<br />
implem<strong>en</strong>tación <strong>para</strong>lela.<br />
Trabajo Fin de Máster -79- Sergio Bernabé García
<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. ANEXO I: Manual de CUDA<br />
A continuación vamos a incluir un pequeño manual sobre cómo poner <strong>en</strong> marcha<br />
una tarjeta gráfica programable, <strong>para</strong> ello necesitaremos realizar unas<br />
configuraciones <strong>en</strong> el equipo. Además será necesario t<strong>en</strong>er unas nociones básicas de<br />
las técnicas que podrán ser utilizadas <strong>en</strong> una programación con CUDA. Finalm<strong>en</strong>te<br />
pasaremos a tratar algunas técnicas de optimización y una serie de herrami<strong>en</strong>tas de<br />
desarrollo y de depuración.<br />
8.1. Introducción<br />
Lo primero que debemos de conocer: ¿Qué es CUDA? ¿Para qué sirve?. Pues<br />
bi<strong>en</strong>, CUDA es la arquitectura de cómputo <strong>para</strong>lelo de propósito g<strong>en</strong>eral de NVIDIA<br />
que nos va a permitir realizar cómputos de altas prestaciones, de tal manera, que<br />
podamos aprovechar al máximo la pot<strong>en</strong>cia de la <strong>GPU</strong> (Unidad de Procesami<strong>en</strong>to<br />
Gráfico). Incluye el conjunto de instrucciones de la arquitectura CUDA (ISA) y el<br />
motor de cálculo <strong>para</strong>lelo <strong>en</strong> la <strong>GPU</strong>. Para programar <strong>en</strong> arquitecturas CUDA, los<br />
desarrolladores podrán utilizar C, uno de los l<strong>en</strong>guajes de programación más<br />
utilizados de alto nivel, que funcionarán a un gran r<strong>en</strong>dimi<strong>en</strong>to <strong>en</strong> la utilización de<br />
procesadores donde se <strong>en</strong>cu<strong>en</strong>tr<strong>en</strong> habilitados con CUDA.<br />
Hasta la fecha actual nos podremos <strong>en</strong>contrar con varios tipos de <strong>GPU</strong>s, <strong>en</strong> los<br />
que desarrolladores de software, ci<strong>en</strong>tíficos e investigadores han ido <strong>en</strong>contrando<br />
usos distintos utilizando una programación CUDA, incluy<strong>en</strong>do procesami<strong>en</strong>to de<br />
imág<strong>en</strong>es de media y alta resolución, al igual pasa con el procesami<strong>en</strong>to de vídeo, la<br />
biología y la química computacional, la simulación dinámica de fluidos, el análisis<br />
sísmico, y mucho más.<br />
Actualm<strong>en</strong>te <strong>en</strong> la página oficial de CUDA de NVIDIA 10 nos vamos a poder<br />
<strong>en</strong>contrar con las herrami<strong>en</strong>tas necesarias <strong>para</strong> configurar nuestro equipo con todo lo<br />
necesario <strong>para</strong> utilizar CUDA. Para hacerlo más fácil, com<strong>en</strong>taremos las<br />
configuraciones previas necesarias <strong>para</strong> Windows y cualquier distribución de Linux.<br />
10 http://www.nvidia.com/object/cuda_home_new.html<br />
Trabajo Fin de Máster -80- Sergio Bernabé García
<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.2. Configuraciones necesarias<br />
Windows:<br />
Para poder usar CUDA <strong>en</strong> nuestro sistema (Microsoft Windows XP, Microsoft<br />
Windows Vista o Microsoft Windows 7), t<strong>en</strong>dremos que instalar o verificar si se<br />
<strong>en</strong>cu<strong>en</strong>tra instalado lo sigui<strong>en</strong>te:<br />
CUDA habilitado <strong>para</strong> <strong>GPU</strong>.<br />
Driver <strong>del</strong> dispositivo.<br />
Software CUDA.<br />
Microsoft Visual Studio 2005 o 2008.<br />
Antes de realizar las instalaciones oportunas, sería importante comprobar si<br />
nuestra tarjeta de NVIDIA pert<strong>en</strong>ece a algunas de estas categorías:<br />
• NVIDIA GeForce 8, 9, 200 y <strong>GPU</strong>s de la serie 400.<br />
• NVIDIA Tesla.<br />
• NVIDIA Quadro.<br />
Una vez que se ha comprobado que nuestra tarjeta de NVIDIA está <strong>en</strong> algunas<br />
de las categorías anteriores, ahora ya podremos instalar lo sigui<strong>en</strong>te:<br />
Driver.<br />
CUDA Toolkit: conti<strong>en</strong>e las herrami<strong>en</strong>tas necesarias <strong>para</strong> construir y<br />
compilar una aplicación CUDA <strong>en</strong> Microsoft Visual Studio.<br />
CUDA SDK: incluye una serie de ejemplos de proyectos que ti<strong>en</strong><strong>en</strong><br />
todas las configuraciones de proyectos necesarias, desarrolladas y válidas<br />
<strong>en</strong> Microsoft Visual Studio.<br />
Después necesitaremos descargar el software de NVIDIA CUDA y una vez<br />
descargado, será necesario desinstalar otras versiones de NVIDIA CUDA Toolkit <strong>en</strong><br />
Trabajo Fin de Máster -81- Sergio Bernabé García
<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 />
nuestro equipo. Ahora ya podremos instalar CUDA Toolkit, que se instalará por<br />
defecto <strong>en</strong> C:\CUDA.<br />
A continuación t<strong>en</strong>dremos que definir las sigui<strong>en</strong>tes variables de <strong>en</strong>torno:<br />
• CUDA_BIN_PATH (por defecto lo <strong>en</strong>contraremos <strong>en</strong> C:\CUDA\bin o<br />
C:\CUDA\bin64). Conti<strong>en</strong>e los ejecutables <strong>del</strong> compilador y las<br />
bibliotecas <strong>en</strong> tiempo de ejecución.<br />
• CUDA_INC_PATH (por defecto lo <strong>en</strong>contraremos <strong>en</strong><br />
C:\CUDA\include). Conti<strong>en</strong>e los ficheros que hay que incluir y que son<br />
necesarios <strong>para</strong> compilar programas CUDA.<br />
• CUDA_LIB_PATH (por defecto lo <strong>en</strong>contraremos <strong>en</strong> C:\CUDA\lib o<br />
C:\CUDA\lib64). Conti<strong>en</strong>e las librerías necesarias <strong>para</strong> conectar códigos<br />
CUDA.<br />
Por último nos quedará por instalar el CUDA SDK que por defecto se instalará<br />
<strong>en</strong> C:\Docum<strong>en</strong>ts and Settings\All Users\Application Data\NVIDIA Corporation\NVIDIA<br />
<strong>GPU</strong> Computing SDK y conti<strong>en</strong>e el código fu<strong>en</strong>te de muchos problemas de ejemplo y<br />
plantillas <strong>para</strong> Microsoft Visual Studio.<br />
Linux:<br />
Para poder usar CUDA <strong>en</strong> nuestro sistema, t<strong>en</strong>dremos que instalar o verificar si<br />
se <strong>en</strong>cu<strong>en</strong>tra instalado lo sigui<strong>en</strong>te:<br />
CUDA habilitado <strong>para</strong> <strong>GPU</strong>.<br />
Driver <strong>del</strong> dispositivo.<br />
Una versión de Linux que soporte el compilador gcc y<br />
Software CUDA (disponible gratuitam<strong>en</strong>te <strong>en</strong> http://www.nvidia.com/cuda).<br />
Antes de realizar las instalaciones oportunas, sería importante comprobar si<br />
nuestra tarjeta de NVIDIA pert<strong>en</strong>ece a algunas de estas categorías:<br />
Trabajo Fin de Máster -82- Sergio Bernabé García
<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 />
• NVIDIA GeForce 8, 9, 200 y <strong>GPU</strong>s de la serie 400.<br />
• NVIDIA Tesla.<br />
• NVIDIA Quadro.<br />
Para comprobar qué adaptador de vídeo es utilizado por nuestro sistema y qué<br />
mo<strong>del</strong>o utiliza, t<strong>en</strong>dremos que consultarlo desde línea de comando escribi<strong>en</strong>do lo<br />
sigui<strong>en</strong>te:<br />
lspci | grep –i nvidia<br />
Una vez que se ha comprobado que nuestra tarjeta de NVIDIA está <strong>en</strong> algunas<br />
de las categorías anteriores y es compatible con la versión de Linux, ahora ya<br />
podremos instalar lo sigui<strong>en</strong>te:<br />
Driver (última versión disponible).<br />
CUDA Toolkit: conti<strong>en</strong>e las herrami<strong>en</strong>tas necesarias <strong>para</strong> construir y<br />
compilar una aplicación CUDA. Incluye librerías, herrami<strong>en</strong>tas, ficheros<br />
cabeceras y otros recursos.<br />
CUDA SDK: incluye una serie de ejemplos de proyectos que ti<strong>en</strong><strong>en</strong><br />
todas las configuraciones de proyectos necesarias y desarrolladas <strong>para</strong><br />
construir programas CUDA.<br />
Con el driver y el software de NVIDIA ya descargados, necesitaremos instalar el<br />
driver. A partir de este mom<strong>en</strong>to ya podremos instalar y configurar CUDA Toolkit y<br />
SDK, previam<strong>en</strong>te descargados. Para conseguir una instalación satisfactoria, es<br />
necesario seguir los sigui<strong>en</strong>tes pasos:<br />
1. Desinstalar cualquier versión de CUDA Toolkit y CUDA SDK. Para ello<br />
t<strong>en</strong>dremos que eliminar los archivos de /usr/local/cuda y de<br />
$(HOME)/NVIDIA_CUDA_SDK/, los lugares de instalación predeterminados.<br />
En caso de no ser los mismos directorios, ajustarlos.<br />
2. Instalar el CUDA Toolkit ejecutando el archivo descargado. Ejecutarlo<br />
<strong>en</strong> modo super-usuario. La instalación de CUDA Toolkit por defecto es<br />
Trabajo Fin de Máster -83- Sergio Bernabé García
<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 />
/usr/local/cuda.<br />
3. Definir las variables de <strong>en</strong>torno.<br />
a. La variable PATH debe incluir /usr/local/cuda/bin.<br />
b. LD_LIBRARY_PATH debe cont<strong>en</strong>er /usr/local/cuda/lib o<br />
/usr/local/cuda/lib64 <strong>para</strong> sistemas operativos de 32 o 64 bits,<br />
respectivam<strong>en</strong>te.<br />
La forma típica de colocar estos valores <strong>en</strong> su <strong>en</strong>torno, son con los<br />
sigui<strong>en</strong>tes comandos:<br />
export PATH=/usrlocal/cuda/bin:$PATH<br />
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH<br />
<strong>para</strong> los sistemas operativos de 32 bit, con lib64 sustituir lib <strong>para</strong><br />
sistemas operativos de 64bits como se m<strong>en</strong>cionó anteriorm<strong>en</strong>te. Para<br />
realizar los ajustes, colóquelos <strong>en</strong> ~/.bash_profile.<br />
4. Instale el SDK (que se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> el segundo fichero .run) como un<br />
usuario normal <strong>en</strong> la ubicación por defecto,<br />
$(HOME)/NVIDIA_<strong>GPU</strong>_Computing_SDK. T<strong>en</strong>ga <strong>en</strong> cu<strong>en</strong>ta que este<br />
lugar es difer<strong>en</strong>te a la ubicación por defecto <strong>en</strong> las versiones anteriores:<br />
$(HOME)/NVIDIA_CUDA_SDK. La instalación como un usuario<br />
normal evita problemas de acceso.<br />
La versión <strong>del</strong> CUDA Toolkit puede comprobarse mediante la ejecución de<br />
nvcc –V <strong>en</strong> un v<strong>en</strong>tana de terminal. El comando nvcc ejecuta el driver compilador<br />
que compila los programas CUDA. Llama al compilador gcc <strong>para</strong> códigos <strong>en</strong> C y el<br />
compilador de NVIDIA PTX <strong>para</strong> el código de CUDA.<br />
NVIDIA incluye programas de ejemplo <strong>en</strong> el directorio fu<strong>en</strong>te de CUDA SDK.<br />
Usted deberá compilarlos cambiando al directorio de NVIDA_<strong>GPU</strong>_Computing_SDK/C<br />
y teclear make. Los binarios resultantes se instalarán <strong>en</strong> el directorio home <strong>en</strong><br />
NVIDIA_<strong>GPU</strong>_Computing_SDK/C/bin/Linux/release.<br />
Trabajo Fin de Máster -84- Sergio Bernabé García
<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.3. Compilación programas CUDA.<br />
Necesitaremos crearnos un proyecto <strong>en</strong> C <strong>para</strong> Cuda, <strong>para</strong> ello necesitaremos<br />
crear un proyecto con una serie de ficheros necesarios (ver figura 8.1):<br />
Figura 8.1. Arquitectura <strong>para</strong>lela Cuda.<br />
• Archivos *.cpp, *.c: serán necesarios <strong>para</strong> el código que se ejecute <strong>en</strong> la<br />
CPU.<br />
o Compilador plataforma (gcc, …).<br />
• Archivos *.cu: código <strong>para</strong> CPU y <strong>GPU</strong> (kernels).<br />
o Nvcc los se<strong>para</strong> y compila los kernels <strong>GPU</strong>.<br />
PTX code: código <strong>en</strong>samblador.<br />
.cubin: código objeto (binario)<br />
Con nvcc proporcionado por el Toolkit de CUDA, es el <strong>en</strong>cargado de llevar<br />
todas las tareas necesarias <strong>para</strong> g<strong>en</strong>erar los ejecutables. Además, podrá estar<br />
acompañado de los sigui<strong>en</strong>tes argum<strong>en</strong>tos:<br />
• -arch: especifica la compute capability con la que se compila código C a<br />
PTX (conjunto de instrucciones máquinas de CUDA).<br />
Ejemplo: nvcc –o sumavectores sumavectores.cu –arch=sm_13<br />
Trabajo Fin de Máster -85- Sergio Bernabé García
<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 />
• -deviceemu: modo de emulación, compila todo el código <strong>para</strong> ser ejecutado<br />
<strong>en</strong> la CPU, incluy<strong>en</strong>do los kernels escritos <strong>para</strong> ser lanzados a la <strong>GPU</strong>.<br />
Ejemplo: nvcc –o sumavectores_dbg –deviceemu –g sumavectores.cu<br />
• -G: proporciona una herrami<strong>en</strong>ta nativa de depuración <strong>para</strong> CUDA,<br />
ejecutando <strong>en</strong> modo de depuración los códigos <strong>en</strong> la <strong>GPU</strong>, con sus<br />
limitaciones y comportami<strong>en</strong>to reales, sin las variaciones introducidas por la<br />
emulación.<br />
Ejemplo: nvcc –o sumavectores_dbg –g –G sumavectores.cu<br />
• -c: no se g<strong>en</strong>era binario ejecutable.<br />
8.4. Librerías CUDA.<br />
Nos podemos <strong>en</strong>contrar con varios tipos de librerías bastantes utilizadas <strong>en</strong> el<br />
ámbito ci<strong>en</strong>tífico cuando se utiliza CUDA, a continuación expondremos las más<br />
utilizadas:<br />
CUBLAS: implem<strong>en</strong>tación BLAS.<br />
o Basic Linear Algebra Subprograms.<br />
CUFFT: implem<strong>en</strong>tación de la transformada de Fourier.<br />
o 1D, 2D, 3D Fast Fourier Transform.<br />
CUDPP: Data Parallel Primitives.<br />
o Reducciones, ord<strong>en</strong>aciones, búsquedas.<br />
NPP: NVIDA Performance Primitives.<br />
o <strong>Implem<strong>en</strong>tación</strong> IPP <strong>para</strong> <strong>GPU</strong>.<br />
Trabajo Fin de Máster -86- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
8.5. Arquitectura y mo<strong>del</strong>o de programación<br />
ARQUITECTURA:<br />
La utilización de una arquitectura CPU más una arquitectura <strong>GPU</strong>, estamos<br />
obt<strong>en</strong>i<strong>en</strong>do una arquitectura heterogénea (ver figura 8.2).<br />
Figura 8.2 8.2. Arquitectura heterogénea CPU + <strong>GPU</strong>.<br />
Otro apartado interesante es la utilización de las copias <strong>en</strong>tre las distintas<br />
memorias. . Nos vamos a <strong>en</strong>contrar con espacios se<strong>para</strong>dos de memoria:<br />
Copia a través de bus PCI PCI-e x16.<br />
Punteros no indican explícitam<strong>en</strong>te a qué memoria pert<strong>en</strong>ec<strong>en</strong>.<br />
Ejemplo: reserva e inicialización de un array de 512 <strong>en</strong>teros.<br />
Trabajo Fin de Máster -87- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
Ejemplo: copia CPU <strong>GPU</strong>.<br />
Las primitivas utilizadas son las sigui<strong>en</strong>tes:<br />
• cudaMalloc: : asigna size bytes de memoria lineal <strong>en</strong> el dispositivo y vuelve<br />
<strong>en</strong> *devPtr un puntero a la memoria asignada. La memoria asignada está<br />
conv<strong>en</strong>i<strong>en</strong>tem<strong>en</strong>te pre<strong>para</strong>da <strong>para</strong> cualquier tipo de variable. cudaMalloc()<br />
devuelve cudaErrorMemory<br />
cudaErrorMemoryAllocation, la a memoria no se borra. cudaMalloc<br />
() devuelve cudaErrorMemoryAllocation<br />
cudaErrorMemoryAllocation, <strong>en</strong> caso de fallo. La función se<br />
define de la sigui<strong>en</strong>te forma:<br />
cudaError_t cudaMalloc (voiod **devPtr, size_t tamaño)<br />
• cudaMemset: : rell<strong>en</strong>a el primer count byte <strong>del</strong> área de memoria apuntada por<br />
devPtr con el valor cconstante<br />
value. La función se define de la sigui<strong>en</strong>te<br />
forma:<br />
cudaError_t cudaMemset (voiod *devPtr, int valor, size_t nbytes)<br />
• cudaFree: libera ibera el espacio de memoria apuntado por devPtr , que debe haber<br />
sido devuelto por una llamada previa a cudaMalloc () o cudaMallocPitch () ().<br />
De lo contrario devolverá un error. Si devPtr es 0, no realiza realizará ninguna<br />
operación. CudaFree udaFree () devuelve cudaErrorInvalidDevicePointer <strong>en</strong> caso de<br />
fallo. La función se define de la sigui<strong>en</strong>te forma:<br />
cudaError_t cudaFree (void *devPtr)<br />
• cudaMemCpy<br />
cudaMemCpy: copia count bytes desde el área de memoria apuntada por src<br />
al área de memoria apuntada por dst, donde kind es uno de los sigui<strong>en</strong>tes<br />
Trabajo Fin de Máster -88- Sergio Bernabé García
<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 />
modificadores: cudaMemcpyHostToHost, cudaMemcpyHostToDevice,<br />
cudaMemcpyDeviceToHost o cudaMemcpyDeviceToDevice, y especifican la<br />
dirección de la copia. Las áreas de memoria no se pued<strong>en</strong> solapar.<br />
cudaError_t cudaMemcpy (void *dst, const void *src, size_t nbytes, <strong>en</strong>um<br />
MODELO DE PROGRAMACIÓN:<br />
cudaMemcpyKind kind)<br />
Los kernels son funciones invocadas desde el host y ejecutadas <strong>en</strong> <strong>para</strong>lelo sobre<br />
el device empleando <strong>GPU</strong> threads. Características:<br />
• Paralelismo a nivel de datos.<br />
• Agrupación de threads.<br />
• Block: thread ∈ block.<br />
o Compartir datos.<br />
o Sincronizar ejecución.<br />
• Grid: # blocks.<br />
o Dominio de cálculo.<br />
• Tamaño block y grid se decide <strong>en</strong> la invocación <strong>del</strong> kernel.<br />
Otro aspecto utilizado <strong>en</strong> el mo<strong>del</strong>o de programación son las dim<strong>en</strong>siones e<br />
id<strong>en</strong>tificadores:<br />
• Grid (hasta 2D), block (hasta 3D), tipos dim3.<br />
• Ejemplos (ver figura 8.3):<br />
Trabajo Fin de Máster -89- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
Figura 8.3 8.3. Ejemplos de dim<strong>en</strong>siones e id<strong>en</strong>tificadores.<br />
El tamaño <strong>del</strong> grid y de los bloques los determina el programador. Se usan las<br />
variables gridDim y blockDim <strong>para</strong> refer<strong>en</strong>ciar la dim<strong>en</strong>sión de grid y bloque,<br />
respectivam<strong>en</strong>te. De esta manera, un thread va a quedar id<strong>en</strong>tificado por un<br />
id<strong>en</strong>tificador d<strong>en</strong>tificador propio d<strong>en</strong>t d<strong>en</strong>tro ro <strong>del</strong> bloque al que pert<strong>en</strong>ece y por un id<strong>en</strong>tificador <strong>del</strong><br />
bloque al que pert<strong>en</strong>ece. Para ello, se utilizarán las variables threadIdx y blockIdx<br />
<strong>para</strong> refer<strong>en</strong>ciar el id<strong>en</strong>tificador <strong>del</strong> thread d<strong>en</strong>tro <strong>del</strong> bloque y al bloque d<strong>en</strong>tro <strong>del</strong><br />
grid, respectivam<strong>en</strong>te.<br />
También ién resulta necesario conocer los aspectos que intervi<strong>en</strong><strong>en</strong> <strong>en</strong> la ejecución<br />
sobre el hardware:<br />
• Device: : compuesta de SMs.<br />
o SM: Stream Multiprocessor.<br />
Shared memory.<br />
o SP: Scalar Processor.<br />
Registers, local mem.<br />
• Kernel (son funciones C con algunas restricciones)<br />
restricciones).<br />
o SP thread.<br />
Trabajo Fin de Máster -90- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
• SIMT<br />
o SM block.<br />
o Device grid.<br />
o WARP:<br />
A través de la creac creación de un kernel, ernel, estamos utilizando el mismo código <strong>para</strong><br />
cada uno de los threads que se están ejecutando. Como hemos com<strong>en</strong>tado<br />
anteriorm<strong>en</strong>te, posee algunas restricciones que pasamos a m<strong>en</strong>cionarlas:<br />
Deb<strong>en</strong> de devolver un tipo void.<br />
El número de variables por parámetros es fijo.<br />
Son funciones no recursivas.<br />
Solo podrán acceder a la memoria propia de la <strong>GPU</strong>.<br />
Utiliza variables dinámicas.<br />
Ejemplo de invocación:<br />
32 threads.<br />
Concurr<strong>en</strong>tes SM.<br />
myKernel(..);<br />
Trabajo Fin de Máster -91- Sergio Bernabé García
<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 />
Ext<strong>en</strong>siones básicas:<br />
Modificadores de función:<br />
Indica donde se ejecuta la función: <strong>GPU</strong> (device) o CPU (host)<br />
__device__: la función debe ejecutarse <strong>en</strong> el dispositivo.<br />
• Sólo podrá ser llamada por el propio dispositivo.<br />
• No soporta recursividad.<br />
• No podrán declararse variables estáticas d<strong>en</strong>tro de la función.<br />
• La función no puede t<strong>en</strong>er un número variable de argum<strong>en</strong>tos.<br />
__global__: la función es un kernel que debe ejecutarse <strong>en</strong> el dispositivo.<br />
• Sólo puede ser llamada por el host.<br />
• No soporta recursividad.<br />
• No podrán declararse variables estáticas d<strong>en</strong>tro de la función.<br />
• La función no puede t<strong>en</strong>er un número variable de argum<strong>en</strong>tos.<br />
• La función debe devolver siempre void.<br />
__host__: la función debe ejecutarse <strong>en</strong> el host.<br />
• Sólo puede ser llamada por el host.<br />
• No puede utilizarse junto con __global__.<br />
Modificadores de función:<br />
Indica <strong>en</strong> qué parte de la memoria se localiza la variable.<br />
__device__: la variable reside <strong>en</strong> el dispositivo.<br />
• Requiere que se indique uno de los otros dos modificadores de<br />
variables <strong>para</strong> indicar dónde exactam<strong>en</strong>te reside la variable <strong>en</strong> el<br />
dispositivo.<br />
Trabajo Fin de Máster -92- Sergio Bernabé García
<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 />
__constant__: la variable reside <strong>en</strong> el espacio de memoria constante <strong>del</strong><br />
dispositivo.<br />
• Está viva durante todo el tiempo de ejecución de la aplicación.<br />
• Accesible por todos los threads <strong>del</strong> grid, así como desde el host.<br />
__shared__: la variable reside <strong>en</strong> el espacio de memoria compartida <strong>del</strong> bloque<br />
de threads <strong>en</strong> el dispositivo.<br />
• Está viva mi<strong>en</strong>tras el bloque está vivo.<br />
• Accesible sólo por los threads <strong>del</strong> bloque.<br />
Herrami<strong>en</strong>tas de sincronización:<br />
Todas las ejecuciones de los kernels son asíncronas. El control es devuelto a la<br />
CPU inmediatam<strong>en</strong>te. Los kernels que se ejecut<strong>en</strong> después de llamadas CUDA<br />
previas ti<strong>en</strong><strong>en</strong> que completarse. De la misma manera la llamada cudaMemcpy<br />
síncrona, por lo que el control se devuelve a la CPU después de que las copias se han<br />
completado. Las copias que comi<strong>en</strong>zan después de llamadas CUDA previas ti<strong>en</strong><strong>en</strong><br />
que completarse. Para sincronizar contamos con la sigui<strong>en</strong>te llamada:<br />
cudaThreadSynchronize()<br />
cudaError_t cudaThreadSynchronize(void);<br />
La CPU espera hasta que el device ha completado todas las áreas p<strong>en</strong>di<strong>en</strong>tes<br />
anteriores. CudaThreadSynchronize() retorna error si una de las tareas p<strong>en</strong>di<strong>en</strong>tes<br />
falla.<br />
Existe otra herrami<strong>en</strong>ta de sincronización interna a un kernel que se utiliza <strong>para</strong><br />
sincronizar hilos d<strong>en</strong>tro de un bloque, esto resulta útil por ejemplo cuando todos los<br />
hilos de un bloque necesitan leer un dato común que debe ser calculado previam<strong>en</strong>te,<br />
suele utilizarse también tras finalizar una escritura <strong>en</strong> la memoria compartida de<br />
manera que ningún hilo lea de ésta hasta que no se haya finalizado la escritura.<br />
Utilizamos la sigui<strong>en</strong>te llamada:<br />
syncthreads()<br />
cudaError_t syncthreads(void);<br />
Trabajo Fin de Máster -93- Sergio Bernabé García
<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
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
La solución sería reservar memoria no paginable y emplear la primitiva<br />
cudaMemcpyAsync(…) <strong>en</strong> vez de malloc(…) pero sin abusar:<br />
Otro problema d<strong>en</strong>tro de la memoria global son los accesos ccesos coalesc<strong>en</strong>tes kernel<br />
<strong>GPU</strong> – Memoria <strong>GPU</strong> y viceversa. En este caso los accesos por threads van a ser<br />
agrupados <strong>para</strong> minimizar el número de transfer<strong>en</strong>cias. Vamos a poder t<strong>en</strong>er<br />
segm<strong>en</strong>tos de 32,64 y 128 bits.<br />
Un ejemplo lo podemos t<strong>en</strong>er al realizar la traspuesta de una matriz, <strong>en</strong> donde las<br />
lecturas serán coalesc<strong>en</strong>tes, pero las escrituras NO (ver figura 8.4).<br />
Figura 8.4. Ejemplo: traspuesta de una matriz utilizando memoria global global.<br />
En este caso t<strong>en</strong>dremos que aprovechar la memoria compartida (shared memory)<br />
<strong>para</strong> solucionarlo.<br />
Trabajo Fin de Máster -95- Sergio Bernabé García
<strong>Implem<strong>en</strong>tación</strong> <strong>en</strong> <strong>GPU</strong> <strong>del</strong> <strong>algoritmo</strong> KK-<strong>Means</strong><br />
<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 MMaps<br />
Memoria compartida compartida: copias <strong>en</strong>tre memoria <strong>GPU</strong> – on-chip chip <strong>GPU</strong> y viceversa.<br />
En este caso, t<strong>en</strong>dremos <strong>en</strong> cada SM (d<strong>en</strong>tro <strong>del</strong> chip):<br />
• Lat<strong>en</strong>cia
<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 />
• En cada SM la memoria está dividida <strong>en</strong> 16 bloques.<br />
• Las palabras de 32 bits se asignan a bancos sucesivam<strong>en</strong>te.<br />
• Cada bloque permite una lectura/escritura por ciclo.<br />
• Accesos simultáneos al mismo banco produc<strong>en</strong> un conflicto:<br />
o Serialización de los accesos.<br />
o Broadcast desde un banco no p<strong>en</strong>aliza.<br />
Texturas y memoria constante: <strong>en</strong> memoria global, <strong>para</strong> lectura:<br />
• Caché 2D <strong>en</strong> SM: b<strong>en</strong>eficio si coalesc<strong>en</strong>cia es problemática de conseguir.<br />
• Permite interpolación de valores por hardware.<br />
• Modos de acceso: Clamp (to edge), Repeat, …<br />
2) Evitar la diverg<strong>en</strong>cia de threads <strong>en</strong> un warp.<br />
Características de los Warp:<br />
• Grupos de 32 threads.<br />
o Concurr<strong>en</strong>tes SM.<br />
• Branching: if, switch, do, for, while.<br />
• Si threads <strong>en</strong> warp toman distintos caminos serialización.<br />
Evitar diverg<strong>en</strong>cias:<br />
• Con diverg<strong>en</strong>cia: if (threadIdx.x>4) {}<br />
• Sin diverg<strong>en</strong>cia: if (threadIdx.x/WARP_SIZE >= 1) {}<br />
Trabajo Fin de Máster -97- Sergio Bernabé García
<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 />
3) Ocupancia: maximizar utilización HW.<br />
Si los threads ejecutan una instrucción de acceso a memoria global se pierd<strong>en</strong><br />
ciclos de reloj. Por ello, es posible “ocultar” esa lat<strong>en</strong>cia ejecutando mi<strong>en</strong>tras tanto<br />
un warp distinto. La ocupancia vi<strong>en</strong>e determinada por la sigui<strong>en</strong>te ecuación:<br />
Ocupancia =<br />
# á <br />
# á <br />
El número máximo de warps que nos podemos <strong>en</strong>contrar es de 24 warps (1.0 y<br />
1.1) y 32 warps (1.3).<br />
Para ocultar la lat<strong>en</strong>cia implica aum<strong>en</strong>tar el tamaño <strong>del</strong> bloque:<br />
• Limitación: recursos disponibles (registros y shared memory).<br />
o Compilar con flag --ptxas-options=-v<br />
o Compilar con flag –cubin<br />
code{<br />
}<br />
name = my_kernel<br />
lmem = 0<br />
smem = 2048<br />
reg = 10<br />
bar = 0<br />
bincode { … }<br />
const { … }<br />
• Si se supera el número de registros, el thread usará memoria “local”<br />
(muy l<strong>en</strong>ta, <strong>en</strong> zona de memoria global).<br />
• Si hay reserva dinámica de memoria compartida es necesario sumarla a<br />
smem.<br />
Una de las partes importantes de este apartado, es la elección <strong>del</strong> tamaño de<br />
bloque y de grid:<br />
Trabajo Fin de Máster -98- Sergio Bernabé García
<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 />
Bloque:<br />
Grid:<br />
o El tamaño <strong>del</strong> bloque estará <strong>en</strong>tre 192 y 256 threads.<br />
o Aum<strong>en</strong>tar ocupancia sólo significa aum<strong>en</strong>tar el r<strong>en</strong>dimi<strong>en</strong>to si el<br />
kernel está “bandwidth bound”.<br />
o Empezar con #bloques / #SMs > 2 (hasta 8 bloques simultáneam<strong>en</strong>te<br />
<strong>en</strong> cada SM).<br />
o Idealm<strong>en</strong>te: <strong>algoritmo</strong> # bloques >> (escalable a futuras <strong>GPU</strong>s).<br />
o En Fermi distintos SMs podrán ejecutar distintos kernel, de esta<br />
manera se obt<strong>en</strong>drá un <strong>para</strong>lelismo a nivel de tarea.<br />
8.7. Herrami<strong>en</strong>tas desarrollo y depuración.<br />
• Modo emudebug:<br />
o Opción –deviceemu <strong>en</strong> nvcc.<br />
o Código de kernels se ejecuta <strong>en</strong> CPU.<br />
o Posibilidad de depurar con la incorporación de printf();<br />
• CUDA Profiler:<br />
• NEXUS:<br />
o Utiliza HW counters: según compute capability.<br />
o Coalesc<strong>en</strong>cia, memory/instruction throughput, diverg<strong>en</strong>cia threads …<br />
o Entorno integrado sobre Visual Studio: CUDA, Op<strong>en</strong>CL, …<br />
o Profiling + depuración sobre <strong>GPU</strong>.<br />
o Más información <strong>en</strong>: http://developer.nvidia.com/object/nexus.html.<br />
Trabajo Fin de Máster -99- Sergio Bernabé García
<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 />
9. Bibliografía<br />
[1] K. Alsabti, S. Ranka, V. Singh. An effici<strong>en</strong>t K-means Clustering Algorithm. In<br />
11th International Parallel Processing Symposium, 1998.<br />
[2] A. Plaza and C.-I. Chang, High Performance Computing in Remote S<strong>en</strong>sing,<br />
CRC Press, Boca Raton, Fla, USA, 2007.<br />
[3] R. A. Schow<strong>en</strong>gerdt, Remote S<strong>en</strong>sing: Mo<strong>del</strong>s and Methods for Image<br />
Processing, Academic Press, New York, NY, USA, 2nd edition, 1997.<br />
[4] D. A. Landgrebe, Signal Theory Methods in Multispectral Remote S<strong>en</strong>sing,<br />
John Wiley & Sons, New York, NY, USA, 2003.<br />
[5] Smeulders, A.W.M., M. Worring, S. Santini, A. Gupta, R. Jain: Cont<strong>en</strong>t-based<br />
image retrieval at the <strong>en</strong>d of the early years. IEEE Transactions on Pattern<br />
Analysis and Machine Intellig<strong>en</strong>ce 22 (2000) 1349–1380.<br />
[6] J. Vogel, B. Schiele: Performance evaluation and optimization for cont<strong>en</strong>t-<br />
based image retrieval. Pattern Recognition 39 (2006) 897–909.<br />
[7] H.-W. Yoo, H.-S. Park, D.-S. Jang: Expert system for color image retrieval.<br />
Expert systems with applications 28 (2005) 347–357.<br />
[8] A. Plaza, P. Martinez, R. M. Perez, J. Plaza: A quantitative and com<strong>para</strong>tive<br />
analysis of <strong>en</strong>dmember extraction algorithms from hyperspectral data. IEEE<br />
Transactions on Geosci<strong>en</strong>ce and Remote S<strong>en</strong>sing 42 (2004) 650–663.<br />
[9] A. Plaza, J. A. B<strong>en</strong>ediktsson, J. W. Boardman, et al., “Rec<strong>en</strong>t advances in<br />
techniques for hyperspectral image processing,” Remote S<strong>en</strong>sing of<br />
Environm<strong>en</strong>t, vol. 113, supplem<strong>en</strong>t 1, pp. S110–S122, 2009.<br />
[10] J. W. Boardman, F. A. Kruse, and R. O. Gre<strong>en</strong>,“Mapping Target Signatures<br />
Via Partial Unmixing of Aviris Data”, Proc. VII NASA/JPL Airborne Earth<br />
Sci<strong>en</strong>ce Workshop, pp. 23–26, 1995.<br />
[11] P.-F. Hsieh, D. Landgrebe, Classification of High Dim<strong>en</strong>sional Data. Tesis<br />
Trabajo Fin de Máster -100- Sergio Bernabé García
<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 />
Doctoral, School of Electrical and Computer Engineering, Purdue University,<br />
1998.<br />
[12] S.V. Stehman, “Selecting and Interpreting Measures of Thematic Classification<br />
Accuracy”. Remote S<strong>en</strong>sing of Environm<strong>en</strong>t, vol. 62, pp. 77-89, 1997.<br />
[13] J. Theiler, G. Gisler, “A contiguity-<strong>en</strong>hanced k-means clustering algorithm for<br />
unsupervised multispectral image segm<strong>en</strong>tation”, <strong>en</strong>: Proc. SPIE, vol. 3159, pp.<br />
108-118, 1997.<br />
[14] J. A. Richards, Remote S<strong>en</strong>sing Digital Image Analysis: An Introduction.<br />
Springer-Verlag, Berlin, 1993.<br />
[15] G. Ball and D. Hall,“ISODATA, a novel method of data analysis and<br />
classification”. Tech. Rep. AD-699616, Stanford University, 1965.<br />
[16] S. Bernabé, A. Plaza., “A New System to Perform Unsupervised and<br />
Supervised Classification of Satellite Images from Google Maps”. SPIE Optics<br />
and Photonics, Satellite Data Compression, Communication, and Processing<br />
Confer<strong>en</strong>ce, San Diego, CA, 2010.<br />
[17] S. Bernabé, A. Plaza, “A New Tool for Information Extraction and Mining<br />
from Satellite Imagery Available from Google Maps Engine”. 3 rd International<br />
Symposium on Rec<strong>en</strong>t Advances in Quantitative Remote S<strong>en</strong>sing<br />
(RAQRS´10), Val<strong>en</strong>cia, Spain, 2010.<br />
[18] A. Plaza, J. Plaza, D. Val<strong>en</strong>cia, “AMEEPAR: Parallel Morphological<br />
Algorithm for Hyperspectral Image Classification in Heterog<strong>en</strong>eous Networks<br />
of Workstations.” Lecture Notes in Computer Sci<strong>en</strong>ce, vol. 3391, pp. 888-891,<br />
2006.<br />
[19] J. Setoain, M. Prieto, C. T<strong>en</strong>llado, A. Plaza, F. Tirado, “Parallel Morphological<br />
Endmember Extraction Using Commodity Graphics Hardware,” IEEE<br />
Geosci<strong>en</strong>ce and Remote S<strong>en</strong>sing Letters, vol. 43, no. 3, pp. 441-445, 2007.<br />
[20] R. M. Pérez, P. Martinez, A. Plaza, P. L. Aguilar. “Systolic Array<br />
Methodology for a Neural Mo<strong>del</strong> to Solve the Mixture Problem”, in: Neural<br />
Trabajo Fin de Máster -101- Sergio Bernabé García
<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 />
Networks and Systolic Array Design. Edited by D. Zhang and S.K. Pal. World<br />
Sci<strong>en</strong>tific, 2002.<br />
[21] A. Plaza, C.-I. Chang,“Clusters Versus FPGA for Parallel Processing of<br />
Hyperspactral Imagery”The International Journal of High Performance<br />
Computing Applications, vol. 22 – no. 1 – pp.1-7, 2008.<br />
[22] NVIDIA GeForce 8800 <strong>GPU</strong> Architecture Overview (November 2006<br />
TB-02787-001_v0.9).<br />
[23] NVIDIA CUDA Compute Unified Device Architecture – Programming Guide,<br />
Versión 1.1 (29/11/07).<br />
[24] NVIDIA CUDA. Installation and Verification on Microsoft Windows XP and<br />
Windows Vista (C Edition). (August 2008 | DU-04165-001_v01).<br />
[25] CUDA Technical Training. Volum<strong>en</strong> 1: Introduction to CUDA Programming<br />
(Prepared and Provided by NVIDIA. Q2 2008).<br />
[26] Zhexue Huang,”A Fast Clustering Algorithm to Cluster Very Large Categorical<br />
Data Sets in Data Mining.” Workshop on Research Issues on Data Mining and<br />
Knowledge Discovery, 1997.<br />
[27] P. Drineas, A. Frieze, R. Kannan, S. Vempala, and V.Vinay, ”Clustering in<br />
large graphs and matrices,” in SODA ’99: Proceedings of the t<strong>en</strong>th annual<br />
ACM-SIAM symposium on Discrete algorithms. Phila<strong>del</strong>phia, PA, USA:<br />
Society for Industrial and Applied Mathematics, 1999, pp. 291299.<br />
[28] R. G. Congalton, “Considerations and Techniques for Assessing the Accuracy<br />
of Remotely S<strong>en</strong>sed Data”, <strong>en</strong>: Proc. International Geosci<strong>en</strong>ce and Remote<br />
S<strong>en</strong>sing Symposium IGARSS, vol. 3, pp. 1847-1850, 1989.<br />
[29] S. V. Stehman, “Practical Implications of Design-Based Sampling Infer<strong>en</strong>ce<br />
for Thematic Map Accuracy Assessm<strong>en</strong>t”. Remote S<strong>en</strong>sing of Environm<strong>en</strong>t,<br />
vol. 72, pp. 35-45, 2000.<br />
[30] B. M. Steele, J. C. Winne, R. L. Redmond, “Estimation and Mapping of<br />
Trabajo Fin de Máster -102- Sergio Bernabé García
<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 />
Misclassification Probabilities for Thematic Land Cover Maps”, Remote<br />
S<strong>en</strong>sing of Environm<strong>en</strong>t, vol. 66, pp. 192-202, 1998.<br />
[31] G. Jäger, U. B<strong>en</strong>z, “Measures of classification accuracy based on fuzzy<br />
similarity”. IEEE Transactions on Geosci<strong>en</strong>ce and Remote S<strong>en</strong>sing, vol. 38,<br />
no. 2, pp. 1462-1467, 2000.<br />
Trabajo Fin de Máster -103- Sergio Bernabé García
<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 />
10. Publicaciones<br />
Congresos internacionales:<br />
• S. Bernabé and A. Plaza. A New System to Perform Unsupervised and<br />
Supervised Classification of Satellite Images from Google Maps. SPIE Optics<br />
and Photonics, Satellite Data Compression, Communication, and Processing<br />
Confer<strong>en</strong>ce, San Diego, CA, 2010.<br />
• S. Bernabé and A. Plaza. A New Tool for Information Extraction and<br />
Mining from Satellite Imagery Available from Google Maps Engine. 3 rd<br />
International Symposium on Rec<strong>en</strong>t Advances in Quantitative Remote<br />
S<strong>en</strong>sing (RAQRS´10), Val<strong>en</strong>cia, Spain, 2010.<br />
Próximos congresos internacionales (previsto pres<strong>en</strong>tar este trabajo):<br />
• SPIE Optics and Photonics, Satellite Data Compression, Communication, and<br />
Processing Confer<strong>en</strong>ce, San Diego, CA, 2011.<br />
• 3 rd Workshop on Hyperspectral Image and Signal Processing: Evolution in<br />
Remote S<strong>en</strong>sing (Whispers), Lisbon, Portugal, 2011.<br />
Trabajo Fin de Máster -104- Sergio Bernabé García