29.04.2013 Views

Implementación en GPU del algoritmo K-Means para ... - UMBC

Implementación en GPU del algoritmo K-Means para ... - UMBC

Implementación en GPU del algoritmo K-Means para ... - UMBC

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

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

Saved successfully!

Ooh no, something went wrong!