Universidad de Extremadura

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Universidad de Extremadura"

Transcripción

1 Universidad de Extremadura Escuela Politécnica Ingeniería Informática PROYECTO FI DE CARRERA Implementación de algoritmos de tratamiento de imágenes en tarjetas gráficas programables Hugo María Vegas Carrasco Septiembre, 2008

2

3 Universidad de Extremadura Escuela Politécnica Ingeniería Informática PROYECTO FI DE CARRERA Implementación de algoritmos de tratamiento de imágenes en tarjetas gráficas programables Autor: Hugo María Vegas Carrasco Fdo: Director: Antonio Plaza Miguel Fdo: Tribunal Calificador Presidente: Pablo Martínez Cobo Fdo: Secretario: David Valencia Corrales Fdo: Vocal: José Moreno del Pozo Fdo: CALIFICACIÓ : FECHA: Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 3

4

5 Resumen En el presente Proyecto de Fin de Carrera (PFC) proponemos la utilización de una nueva herramienta para la programación de tarjetas gráficas de la gama NVIDIA, denominada CUDA (Compute Unified Device Architecture), para acelarar el rendimiento computacional de algoritmos de tratamiento de imágenes, con particular énfasis en el tratamiento de imágenes hiperespectrales de la superficie terrestre, obenidas a partir de sensores remotos de observación de la tierra. Los algoritmos de análisis hiperespectral se caracterizan por su gran complejidad de cómputo y por el gran consumo de tiempo que se produce cuando se intentan procesar las imágenes proporcionadas por los sensores a través de soluciones basadas en CPU, debido al gran tamaño de dichas imágenes y a la complejidad computacional inherente a los algoritmos. Conviene destacar que la tecnología CUDA tiene apenas un año de vida, pero su aparición ha supuesto una revolución en cuanto a la posibilidad de desarrollar aplicaciones paralelas de carácter general utilizando tarjetas gráficas programables o graphical processing units (GPUs). En el presente PFC además hemos contextualizado el uso de GPUs frente a otras arquitecturas especializadas de alto rendimiento que se vienen utilizando en aplicaciones de tiempo real relacionadas con observación remota de la tierra, tales como los sistemas reconfigurables de tipo field programable gate array (FPGA). En concreto, el algoritmo seleccionado para ilustrar la posibilidad de implementar técnicas de análisis hiperespectral en GPUs es el método Pixel Purity Index (PPI), que se basa en la búsqueda de píxeles extremos (es decir, espectralmente más puros) en la imagen hiperespectral, de forma que dichos píxels pueden utilizarse para desmezclar otros píxels formados por sustancias con diferente composición a nivel sub-píxel como resultado de las limitaciones en la resolución espacial de los sensores. La implementación desarrollada del algoritmo PPI en una GPU es contrastada y evaluada experimentalmente (en términos de precisión en la selección de píxels puros y rendimiento computacional) con respecto a la versión original del algoritmo PPI disponible en la herramienta Environment for Visualizing Images (ENVI) de ITTVIS, utilizando para ello imágenes hiperespectrales simuladas y reales, proporcionadas por el sensor Airborne Visible Infra-Red Imaging Spectrometer (AVIRS) del Jet Propulsion Laboratory de NASA. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 5

6 6 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

7 1. Motivaciones y Objetivos 1.1. Motivaciones La principal motivación del presente PFC consiste en evaluar la posibilidad de utilizar tarjetas gráficas programables en aplicaciones de observación remota de la tierra a partir del tratamiento de imágenes hiperespectrales. En particular, el uso de algoritmos de detección de píxeles puros en imágenes hiperespectrales es una práctica habitual en este campo, ya que dicho proceso permite abordar el fenómeno de la mezcla espectral que se produce en dichas imágenes, lo cual facilita la utilización y explotación de los datos en diversas aplicaciones independientemente de las limitaciones introducidas por la resolución espacial. Entre los algoritmos más ampliamente utilizados con este fin, se encuentran los algoritmos de detección de píxeles puros o endmembers, de entre los cuales uno de los más utilizados es el método PPI (Píxel Purity Index). Este algoritmo tiene la ventaja de ser muy efectivo, además de no estar basado en un método muy complejo de cálculo de los píxeles extremos, lo cual lo hace muy asequible a la hora de ser implementado de forma eficiente mediante arquitecturas de computación paralela. Sin embargo, conviene destacar los algoritmos de análisis hiperespectral generalmente necesitan grandes cantidades de tiempo a la hora de proporcionar resultados, debido a la complejidad computacional de los mismos (en el caso de PPI, el algoritmo debe ejecutar un gran número de iteraciones) y también debido al gran tamaño de las imágenes a procesar, lo cual requiere que la transferencia de datos entre el procesador y el dispositivo hardware especializado utilizado como coprocesador deba optimizarse. Al requerir tantas iteraciones, y tener dentro de estas operaciones no triviales, los algoritmos de análisis hiperespectral generalmente se traducen en un consumo de CPU elevado, por lo que la utilización de arquitecturas especializadas como coprocesadores puede resultar una alternativa altamente interesante. Hasta la fecha, las técnicas tradicionales en la literatura para abordar este problema han optado por soluciones basadas en el uso de clusters y sistemas multiprocesador. La computación cluster, a pesar de su adaptabilidad al problema del Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 7

8 tratamiento de datos hiperspectrales (especialmente, cuando dichos datos se encuentran almacenados en un repositorio de datos en tierra), presenta problemas en cuanto al procesamiento de los datos en tiempo real dado el alto coste y elevados requerimientos en cuanto a espacio, peso y consumo (denominado payload en misiones de observación remota de la tierra). Por otra parte, la instalación de un cluster suele llevar asociada la disponibilidad de un número elevado de ordenadores interconectados entre sí para que compartan el procesamiento de datos a través de sus procesadores, lo cual hace incrementar la velocidad de ejecución y procesamiento de las aplicaciones; sin embargo, cada nodo (u ordenador) lleva ligado un precio y una serie de requerimientos en cuanto a espacio y consumo que alejan esta aproximación de las características requeridas en cuanto a payload en misiones reales de observación remota de la tierra. Para solucionar estos problemas relativos a coste, consumo y peso, y además ofrecer además mejoras sustanciales en cuanto al tiempo de procesamiento, en el presente PFC proponemos una alternativa basada en un nuevo modelo de tratamiento de imágenes hiperespectrales basado en la utilización de GPUs. Conviene destacar que, con una sóla GPU, pueden llegar a obtenerse mejoras notables a la hora de procesar cálculos de tipo científico, como es el caso de los algoritmos de tratamiento de imágenes hiperespectrales, a un coste razonable (no más de 500 euros) y además ocupando un espacio mínimo. No obstante, no todas las tarjetas GPU disponibles en el mercado se ajustan a nuestros requerimientos. Por ello si aplicamos los algoritmos propuestos a través de tarjetas convencionales o de gama baja, veremos que los resultados no sufren ningún tipo de mejoría; es más, podemos llegar a obtener peores resultados. Finalmente, indicar que en este proyecto se ha intentado ir un poco más allá, y para trabajar de forma totalmente innovadora se ha utilizado la arquitectura CUDA incorporada en as tarjetas gráficas de NVIDIA de las series 8 (ó superiores), Quadro y Tesla, siendo algunas de las tarjetas de la primera gama las que han sido objeto de estudio en este PFC. 8 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

9 1.2. Objetivos El principal objetivo del presente trabajo es el desarrollo y comparación de técnicas computacionalmente eficientes, basadas en procesamiento mediante GPUs, para la detección de píxeles espectralmente puros, a través del algoritmo PPI en imágenes hiperespectrales. Para ello se utilizarán tarjetas GPU de tipo GeForce 8800 GTX y GeForce 8600 GT, un procesador Core 2 Quad Q6600 a 2.40 GHz y 2GB RAM y las implementaciones del algoritmo PPI disponibles en la herramienta ENVI 4.2 y las implementaciones serie y paralelas desarrolladas en los lenguajes C y CUDA con motivo del presente PFC. Para todas las implementaciones propuestas se comparan los resultados obtenidos tanto en lo relativo a la precisión de los algoritmos como en lo relativo a su rendimiento computacional, utilizando para ello imágenes simuladas y reales obtenidas por un sensor hiperespectral de altas prestaciones (AVIRIS). El objetivo general mencionado, se lleva a cabo en la presente memoria mediante unos objetivos específicos, los cuales se enumeran a continuación: Analizar las ventajas e inconvenientes de las diferentes versiones propuestas para el algoritmo PPI. Establecer un estudio comparativo de las diferentes versiones paralelas del algoritmo PPI desarrolladas, tanto en lo relativo a su precisión a la hora de identificar los píxels más puros de la imagen como a la hora de analizar su rendimiento computacional con respecto a las versiones serie. Comparar los resultados obtenidos por la metodología propuesta con respecto a los proporcionados por otras técnicas estándar de análisis hiperespectral. Teniendo presentes los anteriores objetivos, vamos a describir como está organizada esta memoria, viendo sus diferentes capítulos cuyos contenidos se describen a continuación: Análisis hiperespectral: este capítulo describe conceptos previos sobre análisis hiperespectral, incluyendo el concepto de imagen hiperespectral, las técnicas más populares para desmezclado de este tipo de datos, y la necesidad de paralelismo para su procesamiento eficiente. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 9

10 Programación de tarjetas gráficas: este apartado describe algunos aspectos fundamentales sobre la programación de tarjetas gráficas, y describe algunas herramientas utilizadas en el presente trabajo tales como el lenguaje CUDA y las GPUs utilizadas en el estudio. Métodos: en este capítulo se incluyen los datos más técnicos acerca del algoritmo PPI, y además se realiza una explicación de la versión en CPU, GPU y ENVI del algoritmo. Análisis y discusión de los resultados: en este capítulo se analizan los resultados experimentales obtenidos, analizando las características de una GPU frente a otra, de una CPU frente a la otra, describiendo imágenes simuladas y reales que se han utilizado para realizar las comparativas, y concluyendo con un análisis y discusión detallada de los resultados obtenidos. Conclusiones y líneas futuras de trabajo: en este apartado se expondrán las principales conclusiones derivadas del proyecto, así como las líneas futuras de trabajo que pueden derivarse a partir del mismo. Bibliografía: el proyecto incluye una exhaustiva revisión bibliográfica que permitirá al lector profundizar en mayor detalle en los diferentes aspectos teóricos y relativos a la implementación de los algoritmos descritos en la presente memoria. Anexos: los anexos del PFC incluyen un manual de usuario que explica paso a paso la instalación de los diferents componentes necesarios para crear y ejecutar programas en CUDA, un primer seguimiento de la creación de un proyecto nuevo en CUDA, y los códigos debidamente documentados del algoritmo PPI implementado en la CPU y en la GPU, así como el algoritmo PPI disponible en el paquete ENVI Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

11 Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 11

12 2. Análisis hiperespectral El presente capítulo se organiza de la siguiente forma. En primer lugar, describimos el concepto de imagen hiperespectral, detallando las particularidades y características propias de este tipo de imágenes de alta dimensionalidad. A continuación, describimos algunas características genéricas de los sensores de adquisición de este tipo de datos, haciendo énfasis en los sensores utilizados en el presente trabajo. Seguidamente, se muestra una visión general de las técnicas de desmezclado disponibles en la actualidad, con particular énfasis en el modelo lineal de mezcla, utilizado en el presente trabajo para abordar el problema de la caracterización subpíxel de una imagen hiperespectral a partir de la identificación de los píxels espectralmente más puros en la misma. El capítulo concluye destacando la necesidad de de paralelismo en este campo Concepto de imagen hiperspectral El resultado de la toma de datos por parte de un sensor hiperespectral sobre una determinada escena puede ser representado en forma de cubo de datos, con dos dimensiones para representar la ubicación espacial de un píxel, y una tercera dimensión que representa la singularidad espectral de cada píxel en diferentes longitudes de onda [1]. La Figura 1 muestra la estructura de una imagen hiperespectral donde el eje X es el indicador de las líneas, el eje Y es el indicador de las muestras y el eje Z es el número de bandas, es decir, la longitud de onda de esa banda (canal). Como puede apreciarse en la Figura 2.1, el resultado de la toma de datos por parte de un sensor hiperespectral sobre una determinada escena puede ser representado en forma de cubo de datos, con dos dimensiones para representar la ubicación espacial de un pixel, y una tercera dimensión que representa la singularidad espectral de cada pixel en diferentes longitudes de onda. En concreto, la capacidad de observación de los sensores denominados hiperespectrales permite la obtención de una firma espectral detallada para cada píxel de la imagen, dada por los valores de reflectancia adquiridos por el sensor en diferentes longitudes de onda, lo cual permite una caracterización muy precisa de la superficie de nuestro planeta. 12 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

13 Bandas 1-4 Muestras Pixel en posición (x,y) ND en banda 4 ND en banda 3 ND en banda 2 ND en banda 1 Líneas Figura 2.1: Concepto de imagen hiperespectral. Conviene destacar que, en este tipo de imágenes, es habitual la existencia de mezclas a nivel de subpixel, por lo que a grandes rasgos podemos encontrar dos tipos de píxels en estas imágenes: píxel puros y píxel mezcla [2]. Se puede definir un píxel mezcla como aquel en el que cohabitan diferentes materiales. Este tipo de píxel en realidad constituyen la mayor parte de la imagen hiperespectral, en parte, debido a que este fenómeno es independiente de la escala considerada ya que tiene lugar incluso a niveles microscópicos [3]. La Figura 2.2 muestra un ejemplo del proceso de adquisición de píxels puros (a nivel macroscópico) y mezcla en imágenes hiperespectrales Pixel mezcla (suelo + rocas) Reflectancia Long. onda (nm) Pixel puro (agua) Reflectancia Pixel mezcla (vegetación + suelo) Reflectancia Long. onda (nm) Long. onda (nm) Figura 2.2: El fenómeno de la mezcla en imágenes hiperespectrales. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 13

14 El desarrollo tecnológico introducido por la incorporación de sensores hiperespectrales en plataformas de observación remota de la tierra de última generación ha sido particularmente notable durante los últimos años. En este sentido, conviene destacar que dos de las principales plataformas de tipo satélite que se encuentran en funcionamiento en la actualidad: Earth Observing-1 de NASA ( y ENVISAT de la Agencia Espacial Europea ( llevan incorporados sensores de este tipo, permitiendo así la posibilidad de obtener imágenes hiperespectrales de la práctica totalidad del planeta de manera casi continua. A continuación, describimos brevemente las características de los sensores hiperespectrales utilizados en el presente estudio Sensores hiperespectrales En la actualidad, existe una amplia gama de sensores hiperespectrales de observación remota de la tierra. Dichos sensores pueden clasificarse según el modo en que son transportados (plataforma de transporte) en el momento de la toma de datos [4-6]. La mayor parte de los sensores hiperespectrales actuales son aerotransportados (siendo el ejemplo más claro de este tipo de instrumentos el sensor Airborne Visible Infra- Red Imaging Spectrometer (AVIRIS) de NASA Jet Propulsion Laboratory ( Otros sensores aerotransportados ampliamente utilizados son DAIS 7915 (Digital Airborne Imaging Spectrometer), el cual cubre un amplio rango del espectro mediante 79 canales espectrales comprendidos entre 0.4 y 12.5 µm, y ROSIS (Reflective Optics System Imaging Spectrometer), capaz de medir información espectral entre 0.4 y 0.9 µm utilizando 92 canales espectrales ( También destaca el sensor hiperespectral aerotransportado HYDICE (HYperspectral DIgital Collection Experiment) utilizado en aplicaciones militares. Finalmente, en algunos proyectos se utilizan sensores hiperespectrales instalados en plataformas de tipo satélite como CHRIS/Proba ( o Meris ( de la Agencia Espacial Europea, o Hyperion de NASA. En el presente trabajo, nos centramos en la utilización del sensor AVIRIS, cuyas principales características son descritas a continuación. 14 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

15 AVIRIS es un sensor hiperespectral aerotransportado con capacidades analíticas en las zonas visible e infrarroja del espectro [8-10]. Este sensor está en funcionamiento desde Fue el primer sistema de adquisición de imágenes capaz de obtener información en una gran cantidad de bandas espectrales estrechas y casi contiguas. AVIRIS es un instrumento único en el mundo de la teledetección, pues permite obtener información espectral en 224 canales espectrales contiguos, cubriendo un rango de longitudes de onda entre 0.4 y 2.5 m, siendo el ancho entre las bandas muy pequeño, aproximadamente 0.01 m. En 1989, AVIRIS se convirtió en un instrumento aerotransportado. Desde ese momento, se realizan varias campañas de vuelo cada año para tomar datos mediante AVIRIS. El sensor ha realizado tomas de datos en Estados Unidos, Canadá y Europa, utilizando para ello dos plataformas: Un avión ER-2 perteneciente a NASA/Jet Propulsion Laboratory. El ER-2 puede volar a un máximo de 20 km sobre el nivel del mar, a una velocidad máxima de aproximadamente 730 km/h. Un avión denominado Twin Otter, capaz de volar a un máximo de 4 km sobre el nivel del mar, a velocidades de 130 km/h. Algunas de las características más relevantes en cuanto al diseño interno del sensor AVIRIS son las siguientes: El sensor utiliza un explorador de barrido que permite obtener un total de 614 píxels por cada oscilación. La cobertura de la parte visible del espectro es realizada por un espectrómetro EFOS- A, compuesto por un array de 32 detectores lineales. La cobertura en el infrarrojo es realizada por los espectrómetros EFOS-B, EFOS-C y EFOS-D, compuestos todos ellos por arrays de 64 detectores lineales. La señal medida por cada detector se amplifica y se codifica utilizando 12 bits. Esta señal se almacena en una memoria intermedia donde es sometida a una etapa de preprocesado. El sensor dispone de un sistema de calibración a bordo, que utiliza una lámpara halógena de cuarzo que proporciona la radiación de referencia necesaria para comprobar el estado de los diferentes espectrómetros. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 15

16 A lo largo de los últimos años, el sensor ha ido mejorando sus prestaciones en cuanto a la relación señal-ruido o signal-to-noise ratio (SNR), como se muestra en la Figura 2.3, que describe la evolución de la relación SNR del sensor a lo largo de los últimos años. Figura 2.3: Evolución de la relación señal-ruido en el sensor AVIRIS de NASA Técnicas de análisis hiperespectral basadas en el modelo lineal de mezcla La mayoría de las técnicas de análisis hiperespectral desarrolladas hasta la fecha presuponen que la medición obtenida por el sensor en un determinado píxel viene dada por la contribución de diferentes materiales que residen a nivel sub-píxel. El fenómeno de la mezcla puede venir ocasionado por una insuficiente resolución espacial del sensor, pero lo cierto es que este fenómeno ocurre de forma natural en el mundo real, incluso a niveles microscópicos, por lo que el diseño de técnicas capaces de modelar este fenómeno de manera adecuada resulta imprescindible. No obstante, las técnicas basadas en este modelo son altamente costosas desde el punto de vista computacional. En este sentido, el modelo lineal de mezcla [11] expresa los píxels mezcla como una combinación lineal de firmas asociadas a componentes espectralmente puros (llamados endmembers) en la imagen [12]. Este modelo ofrece resultados satisfactorios cuando los componentes que residen a nivel sub-píxel aparecen 16 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

17 espacialmente separados, situación en la que los fenómenos de absorción y reflexión de la radiación electromagnética incidente pueden ser caracterizados siguiendo un patrón estrictamente lineal. En la actualidad, el modelo lineal de mezcla es el más utilizado en análisis hiperespectral, debido a su sencillez y generalidad. Endmember s Banda j mezcla: 1/2 u + 1/2 s u s mezcla: c1 s + c2 v = c3 u v centroide: 1/3 u + 1/3 v + 1/3 s Endmember v Endmember u mezcla: 1/2 u + 1/2 v Banda i Figura 3.4: Interpretación gráfica del modelo lineal de mezcla El modelo lineal de mezcla puede interpretarse de forma gráfica en un espacio bidimensional utilizando un diagrama de dispersión entre dos bandas poco correlacionadas de la imagen (ver Fig. 3.4). En la misma, puede apreciarse que todos los puntos de la imagen quedan englobados dentro del triángulo formado por los tres puntos más extremos (los más puros). Los vectores asociados a dichos puntos constituyen un nuevo sistema de coordenadas con origen en el centroide de la nube de puntos, de forma que cualquier punto de la imagen puede expresarse como combinación lineal de los puntos más extremos, siendo estos puntos son los mejores candidatos para ser seleccionados como endmembers [13]. Como consecuencia de este fenómeno, el paso clave a la hora de aplicar el modelo lineal de mezcla consiste en identificar de forma correcta los elementos extremos de la nube de puntos N- dimensional (conviene destacar que la Figura 3.4 ofrece una simplificación reducida en un espacio de dos dimensiones mientras que el proceso de búsqueda de extremos, Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 17

18 en el caso de una imagen hiperespectral real, tiene lugar en un espacio con cientos de dimensiones, tantas como el número de bandas espectrales del sensor. En la literatura reciente se han propuesto numerosas aproximaciones al problema de identificación de endmembers en imágenes hiperespectrales. En el presente trabajo, nos centramos en una de las técnicas más sencillas y eficientes a la hora de su implementación paralela: el método Pixel Purity Index (PPI) [9], que se basa en la generación repetitiva de vectores unitarios con orientación aleatoria en la nube de puntos de forma que todos los puntos de la imagen hiperespectral se proyectan sobre cada vector unitario, identificando los puntos extremos en la dirección definida por dicho vector e incrementando un contador asociado a dichos puntos. Tras la ejecución de un número amplio de iteraciones, se obtiene como resultado una imagen de pureza, formada por los índices asociados a cada uno de los pixels de la imagen, a partir de la cual se extrae un conjunto final de endmembers utilizando técnicas de análisis y visualización interactiva Necesidad de paralelismo Conviene destacar que las técnicas de análisis hiperespectral anteriormente descritas se basan en la realización de operaciones matriciales que resultan muy costosas desde el punto de vista computacional [14]. Sin embargo, el carácter repetitivo de estas operaciones las hace altamente susceptibles de ser implementadas en diferentes tipos de arquitecturas paralelas, permitiendo así un incremento significativo de su rendimiento en términos computacionales y dotando a dichas técnicas de la capacidad de producir una respuesta en tiempo casi real. Esta tarea es clave para la explotación de dichas técnicas en aplicaciones que requieren una respuesta en tiempo casi real. Una ventaja a favor de la utilización de soluciones paralelas en análisis hiperspectral, es que estas operaciones suelen realizarse mediante repeticiones de un mismo procedimiento, lo cual nos lleva a pensar que puedan ser implementadas en diferentes tipos de arquitecturas [15-17], obteniendo un incremento significativo de su rendimiento en términos de cómputo. Tradicionalmente, las técnicas de computación cluster han sido ampliamente utilizadas en aplicaciones de análisis hiperspectral una vez que los datos han sido enviados a tierra. No obstante, las 18 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

19 características de este tipo de arquitecturas (ver Fig. 3.5) no se adaptan de forma óptima a los requerimientos de procesamiento a bordo y en tiempo real impuestos por algunas aplicaciones de análisis hiperespectral, tales como seguimiento de incendios en tiempo real, monitorización de vertidos químicos en aguas y atmósfera, etc. En este sentido, el uso de clusters en aplicaciones de análisis hiperespectral puede ser una alternativa interesante de cara al procesamiento de grandes repositorios de datos sin requerimientos de tiempo real; sin embargo, desde el punto de vista del coste global del sistema, de su calentamiento, consumo y posibilidad de instalación en un sensor real (payload), existen arquitecturas con mayores prestaciones desde el punto de vista de su utilización a bordo del sensor, tales como dispositivos hardware especializados de tipo FPGA y GPU. Figura 3.5: Configuración típica de un cluster de ordenadores. En el presente proyecto, proponemos abordar este requerimiento mediante arquitecturas multiprocesador de tipo GPU. Pensamos que esta aproximación resulta más económica y además está basada en un tipo de tecnología más sofisticado y adaptado a los requerimientos de procesamiento en tiempo casi real impuestos por las aplicaciones de análisis hiperespectral (la tarjeta GeForce 8800 GTX usada en este PFC lleva incorporados 128 procesadores de tipo stream, trabajando cada uno a 1.35 Ghz). En este sentido, la implementación eficiente de las técnicas de análisis hiperespectral propuestas en la presente memoria se lleva a cabo en dos generaciones de tarjetas GPU GeForce 8800 GTX y GeForce 8600 GT, gracias a la arquitectura CUDA integrada en las mismas. En el siguiente capítulo describimos en mayor Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 19

20 detalle la arquitectura CUDA y expondremos de forma más concreta las razones que nos han llevado a usar GPUs como alternativa de procesamiento paralelo de datos. 3. Programación de tarjetas gráficas El presente capítulo se organiza de la siguiente forma. En primer lugar, describimos el papel de las GPUs como elemento de procesamiento especializado para el procesamiento de datos científicos en paralelo. A continuación describimos CUDA como una herramienta eficaz para la programación de tarjetas gráficas en aplicaciones científicas de propósito general, destacando aquellos aspectos que consideramos más relevantes de cara a la presentación de implementaciones de algoritmos de análisis hiperespectral sobre GPUs utilizando CUDA, haciendo especial hincapié en las características concretas del modelo NVidia GeForce 8800 GTX que ha sido utilizado como referencia a la hora de realizar las nuevas implementaciones propuestas en este trabajo las cuales serán abordadas en el siguiente capítulo de la presente memoria. El capítulo concluye destacando algunos aspectos sobre el modelo de programación de tarjetas GPU de última generación utilizando CUDA, el cual sirve como preámbulo al siguiente capítulo en el que describimos la implementación del algoritmo PPI utilizando CUDA que se ha desarrollado en el presente trabajo La GPU como arquitectura de propósito general para el procesamiento de datos científicos Desde un tiempo a esta parte, las GPUs programables han evolucionado como un elemento con una gran carga de trabajo, como podemos apreciar en la Figura 3.1. Con múltiples núcleos dirigidos por un gran ancho de banda de memoria, hoy por hoy las GPUs ofrecen prestaciones muy elevadas para procesamiento gráfico y científico [19-22]. Antes de examinar en detalle la arquitectura de una arquitectura GPU GeForce 8800 GTX de NVidia ( consideramos relevante explicar como han funcionado las operaciones en un pipeline de una GPU clásica a lo largo de los años. No obstante, para entender este proceso, también debemos introducir los conceptos de vertex shaders y los píxel shaders. 20 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

21 Figura 3.1: Evolución en el número de operaciones en coma flotante por segundo para la CPU y la GPU Vertex shaders y píxel shaders Los shaders son pequeños programas que se encargan del procesamiento de vértices (vertex shaders) y de pixeles (píxel shaders). La principal ventaja es que, como su naturaleza lo indica, pueden ser programados por el desarrollador, otorgando una flexibilidad que hasta antes de la aparición de los shaders era algo impensable. Recursos como las operaciones condicionales o los saltos se utilizan de forma similar que en los lenguajes más conocidos. Sin los shaders, muchos de los efectos eran realizados en conjunto con la unidad de procesamiento central, disminuyendo en gran medida el rendimiento y limitando el avance a nivel gráfico de los mismos. Un vertex shader es una función que recibe como parámetro un vértice. Sólo trabaja con un vértice a la vez, y no puede eliminarlo, sólo transformarlo. Para ello, modifica propiedades del mismo para que repercutan en la geometría del objeto al que pertenece. Con esto se pueden lograr ciertos efectos específicos, como los que tienen que ver con la deformación en tiempo real de un elemento; por ejemplo, el movimiento de una ola. Donde toma una gran importancia es en el tratamiento de las superficies curvas. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 21

22 En cambio, un píxel shader básicamente especifica el color de un píxel. Este tratamiento individual de los píxeles permite que se realicen cálculos principalmente relacionados con la iluminación del elemento del cual forman parte en la escena, y en tiempo real. La incorporación de los píxel shaders y vertex shaders permite a los programadores una mayor libertad a la hora de diseñar gráficos en tres dimensiones, ya que puede tratarse a cada píxel y cada vértice por separado. De esta manera, los efectos especiales y de iluminación pueden crearse mucho más detalladamente, sucediendo lo mismo con la geometría de los objetos Secuencia o pipeline clásico de procesamiento en una GPU Cuando revisamos las arquitecturas hardware, el flujo de datos, y las operaciones pipeline, a menudo es bueno empezar por el nivel más alto, donde los datos llegan desde la CPU a la GPU, y el proceso se desarrolla hacia abajo a través de múltiples fases de procesamiento hasta que un pixel es dibujado definitivamente en la pantalla. Para situarnos, las GPUs han utilizado diseños pipeline tradicionales, como los que aparecen ilustrados en la Figura 3.2. Figura 3.2: Pipeline clásico de procesamiento para una GPU. 22 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

23 Después de que la GPU recibe los datos vertex (vértices) desde el host (CPU), la fase vertex se ejecuta en primer lugar. La función de fijado transforma la imagen y el hardware de luminosidad operado en esta fase se lleva a cabo; entonces los píxeles shaders programables, y el control de flujo dinámico de los modelos shaders entran en juego. El siguiente paso en el pipeline clásico es la configuración, donde los vértices son ensamblados dentro de primitivas como triángulos, líneas o puntos. Las primitivas son convertidas por la fase de rasterization en fragmentos de píxeles (o simplemente fragmentos), pero no son considerados píxeles completos en esta fase. Los fragmentos están sometidos a muchas otras operaciones como sombreado, Z-testing, la posible mezcla en el buffer frame, y el antialiasing. Los fragmentos son finalmente considerados píxeles cuando han sido escritos en el buffer frame. A continuación, la siguiente fase es la de píxel shader, que debería ser denominada técnicamente como fase fragment shader, pero utilizamos la notación estándar en la literatura [19-22] debido a su aceptación. En el pasado, los fragmentos sólo podían haber tenido valores de color aplicados de textura simple. Hoy en día, la capacidad de sombreado de un píxel programado de la GPU permite numerosos efectos de sombreado para ser aplicados mientras se trabaja de acuerdo con métodos complejos de multitextura. Específicamente, los fragmentos sombreados (con color y valores Z) desde esta fase píxel son enviados al ROP (Raster Operations). La fase ROP es donde se chequea el buffer Z para asegurar que sólo los fragmentos visibles son procesados rápidamente, y los fragmentos visibles, si son parcialmente transparentes, son mezclados con el buffer de frame existente, junto con los píxeles y aplicandoles antialiased. El píxel procesado final es enviado a la memoria buffer para ser escaneado y visualizado en el monitor [19] Evolución del uso de GPUs en aplicaciones científicas La principal razón que justifica la gran popularidad de las arquitecturas GPU en aplicaciones científicas es el hecho de que la GPU está especializada para cómputo intensivo, computación paralela elevada (exactamente sobre lo que trata el renderizado de gráficos) y por tanto se designan más transistores dedicados al procesamiento de datos, que a la recolección de datos y control de flujo. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 23

24 Más específicamente, la GPU está especialmente pensada para direccionar problemas que pueden ser expresados como computaciones de datos paralelos (el mismo programa es ejecutado en muchos elementos de datos en paralelo) con gran intensidad aritmética (el ratio de operaciones aritméticas respecto a operaciones de memoria). Como el mismo programa es ejecutado para cada elemento de datos, hay menos requisitos para un flujo de control sofisticado; y como es ejecutado en muchos elementos de datos y tiene gran intensidad aritmética, la latencia de acceso a memoria puede ser ocultada con cálculos, en vez de datos muy grandes de caché [20]. Hasta la fecha, sin embargo, a pesar de acceder a todo el poder de computación contenido en al GPU y usarlo eficientemente para aplicaciones científicas, seguía siendo difícil obtener las siguientes pautas: La GPU solamente podía ser programada a través de la API (Application Programming Interface) gráfica; esto provocaba que la curva de aprendizaje para un desarrollador principiante fuese muy elevada, ya que tenía que trabajar con una API inadecuada, que no estaba adaptada a la aplicación científica. La DRAM de la GPU podía ser leída de manera general (los programas de GPU pueden obtener elementos de datos de cualquier parte de la DRAM) pero no se podía escribir de manera general (los programas de GPU no pueden esparcir la información a cualquier parte de la DRAM), eliminando mucha de la flexibilidad de programación ya disponible en la CPU. Algunas aplicaciones tenían en problema del cuello de botella, debido al ancho de banda de la memoria DRAM, utilizando escasamente el poder computacional de la GPU. En este sentido, una de las principales motivaciones del presente PFC es demostrar que dichas limitaciones en la actualidad pueden superarse mediante la utilización de la arquitectura CUDA para procesamiento de datos científicos en la GPU. Dicho aspecto será abordado en detalle en el siguiente subapartado del presente capítulo de la memoria. 24 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

25 3.2. CUDA: Una nueva arquitectura para procesamiento de datos científicos en GPUs CUDA viene del inglés Compute Unified Device Architecture y es una nueva arquitectura hardware y software, diseñada para dar y manejar procesamientos en la GPU como un elemento de computación de datos paralelos sin la necesidad de mapearlos a una API de gráficos. Está disponible para las versiones GeForce 8 Series, Quadro FX 5600/4600, y Tesla. El mecanismo de multitarea del sistema operativo es responsable de manejar el acceso a la GPU mediante CUDA, y las aplicaciones gráficas funcionan de forma simultánea. A continuación describimos el pipeline unificado del que disponen las actuales GPUs de NVIDIA y que puede ser explotado de forma eficiente mediante CUDA, así como la arquitectura completa de la GeForce 8800 GTX, la GPU con mayores prestaciones considerada en este PFC. El apartado finaliza describiendo los diferentes modelos de programación en CUDA Pipeline unificado A partir del modelo de pipeline clásico, con sus flujos de datos empezando en lo más alto, donde los vértices con varios atributos, índices, comandos, y texturas son pasados a la GPU desde la CPU. Las fases de procesamiento mayores siguen una manera lineal segura incluyendo vertex shading, píxel shading, operaciones raster, (que son operaciones a través de las cuales un área espacial queda dividida en celdas regulares, en las que cada una de las cuales presentan unos atributos o valor, como pueden ser la altitud, reflectancia, etc.) y escritura de píxeles en el buffer frame. Con este pipeline unificado y la arquitectura shader, el diseño de la GPU GeForce 8800 reduce significativamente el número de fases del pipeline y cambia el flujo secuencial para estar más orientado a bucle. Las entradas son alimentadas en la parte alta del núcleo shader unificado, y las salidas son escritas en registros y entonces vuelven otra vez a la parte alta del núcleo shader para la próxima operación. Como resultado, en el diagrama GPU unificado generalizado que se miestra en la Figura 3.3, los flujos de datos bajan secuencialmente por el pipeline a Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 25

26 través de diferentes tipos shader. La figura de la derecha representa un núcleo shader unificado con uno o más procesadores shader unificados estandarizados. Figura 3.3: Pipeline clásico frente a pipeline unificado. Como puede apreciarse en la Figura 3.3, los datos vienen de la parte superior izquierda del diseño unificado (como vértices), y son llevados al núcleo shader para su procesamiento, y los resultados son enviados de vuelta a la parte superior del núcleo shader, donde son llevados otra vez, procesados otra vez, mandados de vuelta a la parte superior, y así hasta que todas las operaciones shader son ejecutadas y el fragmento de píxel se pasa al subsistema ROP [19] Arquitectura GeForce 88GTX A lo largo de la presente memoria hemos cubierto muchos de los puntos básicos de la programación de GPUs de NVidia, así que ahora podemos echar un vistazo a los aspectos específicos de la arquitectura GeForce 8800 GTX, la tarjeta más importante de las que estamos usando para realizar este PFC [19]. La siguiente Figura 3.4 describe la arquitectura hardware de dicha tarjeta. Como podemos apreciar en la figura, el bloque de interfaz del host incluye buffers para recibir comandos, datos vertex, y texturas enviadas a la GPU desde el controlador gráfico ejecutándose en la CPU. Lo siguiente, es el ensamblador de entrada, que encuentra datos vertex desde los buffers y los convierte a formato de coma flotante 32, mientras que también 26 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

27 genera varios índices que sirven de ayuda para llevar a cabo varias operaciones repetidas en los vértices y las primitivas, y para habilitar el instanciado. Figura 3.4: Arquitectura de la GPU GeForce 8800 GTX de NVidia. La GPU GeForce 8800 GTX incluye 128 procesadores de flujo (SPs) descritos en el diagrama, y cada SP es capaz de ser asignado a cualquier operación shader específica. Los datos pueden ser movidos rápidamente desde la salida de un procesador de flujo a la entrada de otro Modelo de programación CUDA Antes de profundizar en el modelo de programación empleado por CUDA, destacamos que la pila del software de CUDA se compone de varias capas, tal y como muestra la Figura 3.5. En concreto, dichas capas son un controlador de hardware, una API y su runtime, y dos librerías matemáticas de alto nivel para uso común, CUFFT y CUBLAS. El hardware ha sido diseñado para soportar controladores ligeros y capas runtime, dando como resultado una ejecución óptima. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 27

28 En este sentido, la API de CUDA es una extensión del lenguaje de programación C, lo cual hace que tenga una curva de aprendizaje mínima. Figura 3.5: Pila de CUDA. Por otra parte, CUDA ofrece un direccionamiento de carácter general para la memoria DRAM como ilustra la Figura 3.6. Este modelo de direccionamiento permite obtener mayor flexibilidad en la programación, en el sentido de que ofrece tanto la operación de reparto de datos como la de obtención de estos. Desde una perspectiva de programación, esto se traduce en la habilidad de leer y escribir datos en cualquier lugar de la DRAM, exactamente igual que en la CPU [20]. 28 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

29 Figura 3.6: Operaciones de lectura y escritura en CUDA. Por otra parte, CUDA ofrece una cache de datos paralelos (o memoria on-chip compartida) con un acceso de lectura y escritura general bastante rápido, decidiendo qué hilos se usan para compartir datos entre ellos. Como podemos ver en la Figura 3.7, las aplicaciones pueden tomar ventaja de esto por la minimización de sobrecarga y las idas y vueltas a DRAM, y por tanto llega a ser menos dependiente del ancho de banda de memoria en al DRAM. Figura 3.7: La memoria compartida ofrece datos cerrados a las ALUs Una vez descritos los aspectos introductorios anteriormente mencionados, procedemos a describir el modelo de programación de CUDA, el cual está basado en 3 aspectos clave: el coprocesador multihilo, los hilos para realizar el tratamiento de la información por lotes, y finalmente la implementación hardware en CUDA Coprocesador Multihilo Cuando programamos a través de CUDA, la GPU es usada por el desarrollador como un dispositivo especializado en cálculo, capaz de ejecutar un gran número de hilos en paralelo. La GPU opera como un coprocesador de la CPU principal, o host: en otras Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 29

30 palabras, datos paralelos, porciones de cálculo intensivas de aplicaciones ejecutándose en el host están descargados en el dispositivo GPU. De manera más precisa, una porción de una aplicación que es ejecutada muchas veces, pero independientemente en datos distintos, puede ser aislada en una función que se ejecuta en el mecanismo tantas veces como hilos distintos hay. Como dicha función es compilada, la instrucción obtenida a partir del device (en nuestro caso, la GPU) y el programa resultante, llamado kernel, se descargan en el device. Tanto el host como el device mantienen su propia DRAM, referidas como memoria del host y memoria del device respectivamente. Una puede copiar datos de una memoria a la otra a través de llamadas a una API optimizada, que usa el Acceso Directo a Memoria (DMA) del device [20] Hilos de tratamiento por lotes El tratamiento por lotes de los hilos que ejecuta el kernel está organizado como un grid de hilos de bloques, ilustrado en la Figura 3.8. Un bloque de hilos es un lote de hilos que pueden cooperar juntos compartiendo datos eficientemente a través de algunas memorias rápidas de compartición de datos y sincronizando sus ejecuciones para coordinar los accesos a memoria. De forma precisa, uno puede especificar puntos de sincronización en el kernel, donde los hilos en un bloque están suspendidos hasta que todos ellos alcancen el punto de sincronización. Cada hilo es identificado por su identificador de hilo (thread ID), que es el número de hilo con el bloque [20]. Hay un número límite como máximo de hilos que un bloque puede contener (512 hilos concretamente). Sin embargo, los bloques de misma dimensión y tamaño que ejecutan el mismo kernel pueden ser tratados por lotes de forma conjunta, en un grid de bloques, así que el número total de hilos puede ser lanzado en una única invocación del kernel es mucho más largo. Esto se debe al gasto de reducir la cooperación entre hilos, porque los hilos en diferentes bloques de hilos del mismo grid no pueden comunicarse ni sincronizarse con los de los demás. Este modelo permite a los kernels ejecutarse eficientemente sin recompilación en varios devices con diferentes capacidades paralelas: un device puede ejecutar todos los bloques de 30 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

31 un grid secuencialmente si tiene algunas capacidades, o en paralelo si tiene muchas, o normalmente una combinación de ambas [20]. Figura 3.8: Tratamiento por lotes de hilos de ejecución. Con respecto al modelo de momoria, conviene destacar que un hilo que se ejecuta en el device tiene sólo acceso a la DRAM del device y a la memoria on-chip a través de los espacios de memoria descritos en la Tabla 3.1. Los espacios de memoria global, constante y de textura pueden ser leídos o escritos por el host, y persisten a través del kernel lanzándolos con la misma aplicación. Estos espacios son optimizados por diferentes usos de memoria. La memoria de textura también ofrece diferentes modos de direccionamiento, así como un filtro de datos para algunos formatos específicos [20]. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 31

32 Tabla 3.1: Lecturas y escrituras en los diferentes tipos de memorias Implementación hardware y modelo de ejecución El dispositivo GPU es implementado como un conjunto de multiprocesadores como se puede ver en la Figura 3.9. Cada multiprocesador tiene una Instrucción Única (Single Instruction), y arquitectura de Datos Múltiples (Multiple Data architecture ó SIMD): en cada ciclo de reloj dado, cada procesador del multiprocesador ejecuta la misma instrucción, pero opera en datos distintos. Los espacios de memoria local y global son implementados como regiones de la memoria del device. Cada multiprocesador accede a la cache de textura mediante una unidad de textura que implementa los diferentes modos de direccionamiento y filtros de datos [20]. 32 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

33 Figura 3.8: Modelo hardware de la GPU. Con respecto al modelo de ejecución en la GPU, conviene destacar que un grid de bloques de hilos es ejecutado en el device ejecutando uno ó más bloques en cada multiprocesador, usando porciones de tiempo: cada bloque se corta en grupos SIMD de hilos llamados warps (tramas), cada uno de estos warps contiene el mismo número de hilos, llamado warp size (que es de 32 hilos), y es ejecutado por el multiprocesador en un modo SIMD; un programador de hilos selecciona periódicamente de un warp a otro, para maximizar el uso de los recursos de computación del multiprocesador. Una half-warp es o bien la primera o la segunda parte de un warp. La manera en que un bloque es dividido en warps es siempre la misma; cada warp contiene hilos consecutivos, incrementando los IDs de los hilos con el primer warp conteniendo el hilo 0. Un bloque es procesado solamente por un multiprocesador, así que el espacio de memoria compartida reside en la memoria on-chip compartida, llevando a unos accesos a memoria muy rápidos. Los registros del multiprocesador están localizados entre los hilos del bloque. Si el número de registros usados por hilo, multiplicado por el número de hilos en el bloque, es mayor que el número total de registros por multiprocesador, el bloque no puede se ejecutado y el correspondiente kernel fallaría al lanzarse. Por otra parte, varios bloques pueden ser procesados por el mismo multiprocesador concurrentemente, situando los registros del multiprocesador y la memoria compartida entre los bloques. La orden emitida de los bloques con el grid de bloques de hilos no está definida, y no hay un mecanismo de sincronización entre los bloques, así los hilos de dos bloques diferentes del mismo grid no pueden comunicarse de forma segura con los demás a través de la memoria global durante la ejecución del grid [20]. Finalmente, destacamos que el uso de múltiples GPUs, como las devices de CUDA, permiten que una aplicación se ejecute en un sistema multi-gpu solamente si las GPUs son del mismo tipo. Si el sistema está en el modo SLI quizás, sólo una GPU puede ser usada como una device de CUDA ya que todas las GPUs están fusionadas en los niveles más bajos en la pila del driver. El modo SLI necesita estar Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 33

34 apagado en el panel de control de CUDA para ser capaz de ver cada GPU como un device separado [20]. 34 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

35 4. Métodos El presente capítulo se organiza de la siguiente forma. En primer lugar describimos el algoritmo PPI de forma genérica. A continuación detallamos diferentes implementaciones de dicho algoritmo, incluyendo una versión serie para ejecución en CPUs monoprocesador y una versión paralela para ejecución en GPUs. Finalmente, comentamos algunos aspectos sobre la implementación del algoritmo en el software comercial ENVI, basados en nuestra interpretación de la versión del algoritmo disponible en dicho software comercial Algoritmo Pixel Purity Index (PPI) El algoritmo PPI [9] pertenece al conjunto de los métodos interactivos de extracción de endmembers y es el más representativo. Su objetivo es localizar los puntos espectralmente más puros de la imagen hiperespectral, basándose en la suposición de que los puntos más extremos del conjunto de puntos son los mejores candidatos para ser utilizados como endmembers. Los parámetros de entrada del algoritmo son el número de iteraciones a realizar y el valor umbral para seleccionar pixels puros. A grandes rasgos, el funcionamiento del algoritmo puede resumirse en los siguientes pasos: 1. En primer lugar, el algoritmo asigna un índice de pureza a todos los pixels de la imagen. El contador de cada punto se inicializa al valor Seguidamente, se genera un vector unitario aleatorio, que recibe el nombre de skewer o divisor. El objetivo de este vector es particionar el conjunto de puntos, como veremos a continuación. 3. El tercer paso consiste en proyectar todos los puntos de la imagen hiperespectral sobre el vector unitario antes generado, identificando los puntos extremos en la dirección definida por el vector unitario. El índice de pureza de los puntos extremos se incrementa en una unidad. 4. Los pasos 2-3 del algoritmo se repiten tantas veces como el usuario especifique en el parámetro de entrada, número de iteraciones. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 35

36 5. Tras la ejecución de un número amplio de iteraciones, se obtiene como resultado una imagen de pureza formada por los índices asociados a cada uno de los pixels de la imagen. 6. Utilizando el valor umbral especificado como parámetro, se seleccionan los puntos de la imagen cuyo índice de pureza asociado supera dicho valor umbral. Estos puntos son etiquetados como puros. La Figura 4.1 ilustra el procedimiento seguido hasta este punto, suponiendo que se trabaja en un espacio de dos dimensiones y que se realizan tres iteraciones y que se seleccionan como endmembers aquellos puntos que han sido seleccionados como extremos una o más veces. 7. Los pixels seleccionados se cargan en una herramienta interactiva disponible en el software ENVI y denominada -Dimensional Visualizer, la cual permite realizar diagramas de dispersión de los primeros autovectores obtenidos tras la aplicación de una transformación sobre los datos originales. Utilizando la herramienta anteriormente descrita, el usuario selecciona manualmente aquellos puntos o agrupaciones de puntos que aparecen como extremos en proyecciones sucesivas, identificando un conjunto final de endmembers. En el caso de seleccionar una agrupación de puntos, los endmembers se obtienen a partir del espectro promedio en cada una de las regiones seleccionadas. A partir de la descripción anteriormente mencionada, puede derivarse que el método PPI contiene etapas totalmente automatizadas, como la fase de generación de la imagen de pureza, pero es necesaria una etapa final, altamente interactiva, en la que el usuario selecciona manualmente los pixels que quiere utilizar como endmembers. El usuario no conoce a priori cuál es el número apropiado de endmembers a seleccionar, por lo que debe escoger el número de endmembers en base a su intuición. Este hecho pone de manifiesto la conveniencia de cierto conocimiento a priori sobre la imagen. Esta característica, unida a otras como la aleatoriedad en el proceso de generación de vectores unitarios (ver Figura 4.1), representan los principales inconvenientes de esta metodología [18]. Por otra parte, es importante destacar que el método PPI puede generar endmembers artificiales en caso de que el usuario del método seleccione conjuntos de puntos en el proceso interactivo de identificación de firmas espectrales extremas. 36 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

37 Pixel extremo Skewer 1 Skewer 2 Pixel extremo Skewer 3 Pixel extremo Pixel extremo Figura 4.1: Funcionamiento del algoritmo PPI en un espacio de dos dimensiones. A partir de la Figura 4.1, puede derivarse que el algoritmo PPI se basa en generar un gran número de vectores aleatorios (skewers), los cuales se multiplican escalarmente por cada píxel (vector) de la imagen original. Si el número de vectores generados es muy elevado, esta operación podría tardar varias decenas de minutos en realizarse a través de una computación estándar [18]. Por tanto, nuestra propuesta es implementar esta fase de proyecciones múltiples (la más costosa computacionalmente) en la GPU, de tal forma que cargaremos la imagen en memoria, le pasaremos los datos correspondientes a la GPU, y esta realizará el producto escalar en cada iteración del algoritmo, devolviéndonos los resultados oportunos. Incidiendo en la complejidad computacional de esta fase, la complejidad C de la misma en términos de operaciones MAC (multiplicación seguida de acumulación) puede expresarse como C = x K x D, donde D es el número de bandas, K el número de skewers, y es el número de bandas espectrales de la imagen original. Por ejemplo, procesando el algoritmo PPI en una imagen hiperespectral de satélite de unos 512 x 614 píxeles de 224 bandas con skewers, requiere calcular más de MACs, lo cual supone un gran tiempo de computación muy elevado para un microprocesador. Afortunadamente, la computación de todas las proyecciones es independiente y el algoritmo puede implementarse en paralelo de forma muy eficiente. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 37

38 Para concluir este apartado, describimos los pasos exactos que se han seguido en la implementación del algoritmo PPI en sus versiones CPU y GPU: 1. Generación de vectores aleatorios (skewers): en este procede a generar un largo número de vectores -dimensionales ( es el número de Bandas de la imagen hiperespectral) aleatorios. Para ello aplica un algoritmo de aleatoriedad basado en que a cada valor aleatorio generado, le vamos a aplicar su norma. En concreto, el cálculo realizado es el siguiente: norma _ it = k= 1 v( k) * v( k) siendo v (k) el valor en el vector generado aleatoriamente para la banda k. Una vez tenemos calculada la norma, dividimos cada valor del vector aleatorio por dicha norma, quedándonos: skewer _ it = skewer _ it / norma _ it 2. Realización del producto escalar (dot-product): este paso es fundamental a la hora de obtener el cálculo del índice de pureza de cada píxel o PPI. Gracias a dicho cálculo, obtendremos los valores de cada píxel, que después se tendrán en cuenta para calcular los extremos en cada iteración. Este producto escalar será llevado a cabo por cada píxel que forma parte de la imagen junto al skewer perteneciente a la iteración actual. La forma de realizar el producto escalar usada en este PFC es: es decir, dp( x) = k= 1 x( k) * skewer( k) si x= a, a, a,..., a } y skewer = b, b, b,..., b }, { { entonces: dp ( x) = a1 * b1 + a2 * b2 + a3 * b a * b donde x representa al píxel objeto del producto escalar. 38 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

39 3. Cálculo de los píxeles extremos: una vez tenemos calculado todos los productos de cada píxel, con el vector aleatorio generado específicamente para la iteración en la que se encuentra el algoritmo, entonces buscamos los extremos de la imagen. Los píxeles extremos, según el criterio que hemos seguido para realizar el PPI, son aquellos píxeles que producen el valor máximo y mínimo en su producto escalar, para esa iteración; luego si identificamos a E, como al conjunto formado por los píxeles extremos, y Pr como el conjunto de productos escalares de esa iteración, entonces un píxel x, es extremo cuando cumple: x E si y sólo si dp ( x) = MAX (Pr) dp ( x) = MI (Pr), es decir, cuando producto escalar de ese píxel es, o bien el máximo o bien el mínimo para la iteración it del algoritmo. Los pasos 2 y 3 serán repetidos tantas veces como iteraciones formen el algoritmo, sin embargo, los pasos 1 y 4 sólo serán realizados una vez, al principio y al final respectivamente. 4. Selección final de los endmembers: una vez tenemos escogidos todos los extremos, debemos eliminar aquellos píxeles que no superen un cierto valor umbral indicado en el algoritmo; es decir, todos los píxeles que hayan sido escogido un número menor de veces que dicho umbral, no serán tenidos en cuenta a la hora de formar parte de los extremos reales de la imagen. Si Er, es el conjunto de los extremos que superan dicho umbral, y que formarán la imagen resultado de aplicar el algoritmo PPI, y S es un conjunto que guarda el número de veces que un píxel a sido escogido como extremo a lo largo de la ejecución, lo anteriormente explicado es equivalente a la siguiente ecuación: Si x E entonces x Er si y sólo si S( x) umbral. Conviene destacar que esta última etapa (paso 4 del algoritmo) puede realizarse de múltiples formas y que en la herramienta ENVI este paso se realiza de forma supervisada. En el presente PFC, nuestro interés radica en acelerar los pasos 1-3 del algoritmo ya que la imagen PPI puede ser explotada de formas diversas (supervisada y automática) para extraer el conjunto final de endmembers. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 39

40 Supongamos, por ejemplo, que para una iteración determinada del algoritmo, los pares (mínimo, imin) y (máximo, imax) contienen respectivamente (125,36) y (230,63). Esto significa que hasta ahora, el valor de producto escalar más bajo ha sido producido por el píxel 36 y el mayor por el píxel 63. Si el producto escalar actual es igual a 90, entonces el par (125,36) es reemplazado por el par (90, píxel_actual) para esta iteración. Sin embargo, esto no garantiza que dicho píxel foma parte del conjunto final de píxeles extremos, ya que para producirse tal hecho, deberá ser escogido un número mayor o igual de veces que el umbral. Partiendo de la descripción del algoritmo PPI anteriormente descrita, a continuación describimos la implementación que se ha desarrollado para el algoritmo en versión GPU, finalizando con algunos aspectos relativos a la implementación en ENVI del algoritmo. Conviene destacar que, en la versión serie del algoritmo (no descrita) toda la carga de trabajo va a ser llevada única y exclusivamente por el procesador, mientras que la versión paralela descrita a continuación utiliza la GPU como coprocesador. Por razones ilustrativas, la Tabla 4.1 muestra el pseudo-código de la versión serie del algoritmo PPI implementada en el lenguaje C. // Inicialización Comprobar Fichero(); // ver si es correcto, si tiene valores aceptables ObtenerValorMaximo(); NormalizarImagen(); // Valores quedan en el rango [0,1] GenerarVectoresAleatorios(); //para el producto escalar InicializarVectores(); InicializarTimer(); // Empieza a contar el tiempo de procesamiento // PPI Para i desde 1 hasta Iteraciones hacer Inicio ProductoEscalar(); // para todos los píxeles MarcarExtremoMáximo(); MarcarExtremoMínimo(); CalculoRatio(); FinPara // Procesamiento de datos PararTimer(); MostrarTimer(); MostrarRatio(); MarcarExtremosUmbral(); // sólo serán extremos los píxeles >= umbral MostrarCuantosExtremos(); EscribirImagenPPI(); // Liberación de mamoria LiberarMemoriaResevada(); Tabla 4.1: Implementación serie del algoritmo PPI. 40 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

41 4.2. Implementación del algoritmo PPI en GPUs Como se ha comentado en el capítulo 2 de la presente memoria, las GPUs modernas implementan una generalización del proceso de renderizado (rendering pipeline). Los procesadores de vértices y de fragmentos son los elementos programables del pipeline, y los programas que ejecutan se llaman vertex y fragment shaders, respectivamente. La etapa de procesamiento de vértices realiza operaciones sobre el flujo de vértices enviados a la GPU. Los procesadores de vértices transforman cada uno de esos vértices en un vértice 2D en el espacio de proyección, y calculan la iluminación para determinar su color. En la actualidad, esta etapa es totalmente programable, lo cual permite realizar transformaciones personalizadas para así conseguir efectos especiales. Una vez transformados, los vértices se reensamblan formando triángulos y se rasterizan en un flujo de fragmentos. Estos fragmentos son las porciones discretas de la superficie del triángulo correspondientes a los píxels de la imagen representada. Aparte de identificar los fragmentos que constituyen el triángulo, la etapa de rasterización también interpola atributos almacenados en los vértices, tales como las coordenadas de texturas, y posteriormente almacena dichos valores como atributos de cada fragmento. Los procesadores de fragmentos calculan el color resultante utilizando operaciones aritméticas y de acceso a texturas. Con este propósito, la memoria de texturas se puede indexar con distintas coordenadas de texturas y los valores de textura se pueden obtener a partir de múltiples texturas. Para incrementar la eficiencia computacional, estos procesadores soportan instrucciones vectoriales cortas que operan sobre vectores de 4 componentes (canales Red/Green/Blue/Alpha) al estilo SIMD, e incluyen unidades de acceso a texturas que operan con una caché de texturas segmentada. Además, la latencia de los accesos a datos se oculta utilizando pre-búsqueda de texturas y transfiriendo bloques de datos 2D desde la memoria a la caché de texturas. Finalmente, los resultados obtenidos por el procesador de fragmentos se combinan con la información existente almacenada en la posición 2D asociada en el frame buffer, para producir el color final. Los procesadores de fragmentos son generalmente de mayor utilidad que los procesadores de vértices para implementar aplicaciones no relacionadas con gráficos (como es el caso de la aplicación que nos ocupa). Esto se debe a que su número es mayor, y también a su mejor rendimiento en términos de acceso a memoria. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 41

42 En cualquier caso, es importante destacar que el mapeo de aplicaciones sobre GPU requiere estructurar los cálculos según un modelo de flujos, en el que los núcleos se expresan como programas de fragmentos y los flujos de datos se expresan como texturas. Este paradigma de programación ha sido estudiado por diversos investigadores, que han adaptado un gran número de aplicaciones científicas a las características intrínsecas de las GPUs. Antes de describir la implementación del algoritmo PPI en GPUs, discutimos brevemente los mecanismos a la hora de mapear imágenes hiperespectrales en forma de texturas. Aunque el uso de una sola textura 3D representa la elección más natural y sencilla, las GPUs trabajan mejor con texturas bidimensionales, por lo que se optó por dividir cada imagen hiperespectral en una pila de texturas 2D, tal y como muestra la Figura 4.2 para un caso sencillo con 5 particiones. En caso de que la imagen hiperespectral supere la capacidad de memoria de la GPU, la división se efectúa teniendo en cuenta que la partición almacena píxels (vectores) completos, es decir, cada partición tiene toda la información espectral de una zona espacial localizada. Figura 4.2: Particionamiento de la imagen hiperespectral para su procesamiento. Teniendo en cuenta el esquema de particionamiento anteriormente descrito, a continuación se describe la implementación basada en flujos realizada para el algoritmo PPI. La implementación consta de una serie de pasos claramente diferenciados que iremos desglosando y detallando de forma individual a lo largo del presente apartado. 42 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

43 1. Inicialización. En esta etapa se crean todas las variables involucradas en la ejecución del algoritmo, así como reservas de memoria, divide la imagen en trozos (según el esquema descrito en la Figura 4.2) y los almacena como flujos en la memoria de la GPU. 2. Cálculo de proyecciones. En esta etapa se calcula el algoritmo PPI propiamente dicho en la GPU, en particular, la etapa en la que se efectúan las proyecciones de los skewers y los píxels de la imagen. La etapa de selección de endmembers final a partir de la imagen PPI no se ha implementado para su ejecución eficiente en la GPU, por lo que queda abierta a diferentes aproximaciones para la selección de endmembers (supervisadas y no supervisadas). 3. Liberación de memoria. Finalmente, en esta etapa se libera la memoria reservada durante el proceso y se finaliza la ejecución en la CPU. A continuación, describimos en mayor detalle técnico cada una de las tres partes de la implementación en GPU del algoritmo PPI, proporcionando ejemplos de codificación por razones de claridad Inicialización De forma previa a la descripción de la etapa de inicialización, destacamos algunas variables importantes que serán utilizadas por el algoritmo y cuyo valor será establecido en la etapa de incialización. Dichas variables son las siguientes: Dimensión de bloque X: esta variable indica el valor de la dimensión X (líneas) de cada bloque o partición de la imagen hiperespectral. Dimensión de bloque Y: esta variable indica el valor de la dimensión Y (muestras) de cada bloque o partición de la imagen hiperespectral. Variables device: son variables especiales que se necesitan para procesar los datos en la GPU. Cada variable host (CPU) requiere su homóloga device (GPU) siempre y cuando se requieran esos datos que inicialmente están en CPU para operar en le GPU. En el código se pueden diferenciar porque la nomenclatura de las variables host lleva una h en su nombre, y las de device una d. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 43

44 Conviene destacar que, por definiciones del fabricante, se recomienda que el tamaño total del bloque (número de hilos que contiene) sea siempre múltiplo del tamaño del warp (que es 32); y aun mejor se recomienda que sea múltiplo de 64, porque así el compilador y el organizador de hilos organizan las instrucciones de la manera más óptima posible para evitar conflictos con el banco de registros en memoria. Es por ello que en este proyecto se ha optado por que las dimensiones con las que trabaje la GPU sean X = 8 e Y = 8 para cada bloque. Es también importante destacar que, a lo largo de la implementación, se probaron otros valores, pero no supusieron una mejora de tiempo de ejecución. Una vez descrito el proceso de particionamiento de la imagen hiperespectral, procedemos a comentar los pasos involucrados en la etapa de inicialización. En primer lugar, es preciso incluir una serie de librerías: #include <cutil.h> #include <imagen_kernel.cu> La primera librería, cutil.h, es propia de CUDA y contiene instrucciones útiles para la búsqueda de ficheros, carga de imágenes, funciones para el timer, etc. Por su parte, la segunda librería, imagen_kernel.h, hace referencia al kernel implementado en la GPU, es decir, la función que comunicará a la CPU y a la GPU y que hará posible el intercambio de datos entre una y otra. La implementación GPU comienza con una llamada a la función: CUT_DEVICE_INIT(); Esta función es propia de CUDA, y pone en marcha la GPU y la prepara para recibir datos. Una vez realizado este proceso, el siguiente paso es cargar la imagen con la que queremos trabajar a través de otra función CUDA, perteneciente a la librería cutil.h: char* image_path = cutfindfilepath(image_filename,argv[0]); El siguiente paso consiste en definir las dimensiones para los bloques y el grid: 44 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

45 dim3 bloque(blockdimx, blockdimy,1); dim3 grid(idivup(lineas,bloque.x), idivup(muestras,bloque.y),1); Conviene destacar que dim3 es un tipo especial de datos CUDA; concretamente un vector de 3 datos de tipo unsigned int, usado para especificar dimensiones. A continuación, el siguiente paso relevante de la implementación consiste en reservar la memoria para ubicar la imagen en memoria: cudamalloc( (void**) &d_mat, Muestras*Lineas*Bandas*sizeof(float)); La función cudamalloc es la proporcionada por CUDA para la reserva de memoria de variables device, es decir, variables que después se van a usar para transferir datos de la memoria a la GPU. Es decir, al igual que malloc se usa en la CPU (host) para reservar memoria, la función enquivalente para reservar memoria en la GPU es cudamalloc. A continuación describimos el proceso para intercambiar información entre la CPU y la GPU. Para ello, se utilizan las siguientes líneas de código: cudamemcpy(d_mat, h_mat, Muestras*Lineas*Bandas*sizeof(float), cudamemcpyhosttodevice); Con la función cudamemcpy intercambiamos los datos entre la CPU y la GPU (e incluso entre variables del mismo tipo). La dirección de intercambio se realiza mediante el último parámetro. En el ejemplo podemos ver como se indica claramente que el intercambio es de CPU a GPU mediante el parámetro cudamemcpyhosttodevice. Conviene destacar, sin embargo, que cualquiera de las combinaciones es posible. Por último, antes de describir la parte del código relacionada con el procesamiento del algoritmo propiamente dicho, destacamos la utilización de una serie de funciones facilitadas para la creación y puesta en marcha de los timers, que servirán para contabilizar el tiempo transcurrido desde el inicio del algoritmo hasta que este haya calculado los extremos para así poder evaluar el tiempo empleado durante el proceso. Las funciones se utilizan de la siguiente forma: Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 45

46 cutcreatetimer(&timer); cutstarttimer(timer); Cálculo de proyecciones El primer paso en la implementación propiamente dicha del algoritmo PPI en la GPU es establecer las iteraciones que se van a realizar en el algoritmo. Para ello, es preciso realizar una llamada al kernel denominado CalculoEscalar, que se encarga de realizar todos los cálculos escalares a través de la GPU: CalculoEscalar<<<grid, bloque>>>(d_mat,d_vesc,d_aleat,i); Por razones ilustrativas, a continuación mostramos el código completo de dich kernel, que constituye el núcleo fundamental del algoritmo en la GPU: global void CalculoEscalar(float * Mat, float *vec_tot, float* aleat, int iter) { int i; float res; } //Calculo del id del hilo correspondiente int ix = blockdim.x * blockidx.x + threadidx.x; int iy = blockdim.y * blockidx.y + threadidx.y; int id = iy*lineas + ix //Si el id calculado tiene correspondencia con una posición de la //matriz, realizamos el producto escalar if(id >= 0 && id < Muestras*Lineas){ //Variable que guardará el resultado del producto escalar res = 0.0; //Hacemos el producto escalar. for(i = 0; i < Bandas; i++) res = res + (aleat[iter*bandas + i] * Mat[id*Bandas + i]); //Asignamos el resultado al pixel correspondiente vec_tot[id] = res; } 46 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

47 En el trozo de código mostrado anteriormente, podemos comprobar que lo primero que se realiza es calcular el identificador de hilo correspondiente al hilo que está ejecutando en ese momento dicha función, y que haremos corresponder con un píxel de la imagen. Este trozo de código será ejecutado por todos los hilos de la GPU. Es por ello que no observamos ningún bucle dentro del mismo (a excepción del de el cálculo escalar). Después sencillamente hacemos el producto escalar entre dicho píxel y el vector aleatorio generado para esa iteración, y copiamos el resultado en el vector de los productos escalares, usando otra vez el identificador del hilo calculado previamente, para asignarle la posición concreta. Una vez finalizado el proceso, volvemos a utilizar los timers para obtener el tiempo empleado en el proceso del cálculo de proyecciones: cutstoptimer(timer); printf("processing time: %f (ms)\n", cutgettimervalue(timer)); cutdeletetimer(timer); En primer lugar se calcula el tiempo empleado utlizando el timer; a continuación, se traduce el timer a milisegundos; y finalmente se elimina el timer ya que no volverá a ser utilizado Liberación de memoria La última parte de la implementación del algoritmo PPI en la GPU consiste en liberar la memoria. Mientras que en el código CPU se usa la sentencia free para liberar la memoria de los vectores reservados como tales, en la GPU los vectores reservados en memoria device se liberan mediante la sentencia cudafree: cudafree(d_aleat); Después de ver todo esto, podemos darnos cuenta de las similitudes existentes entre el código C y el CUDA, lo cual revela que CUDA permite reutilizar una gran parte del código C a la hora de desarrollar la implementación para la GPU. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 47

48 4.3. Implementación del algoritmo PPI en ENVI Para concluir este capítulo describimos la implementación del algoritmo PPI disponible en ENVI, la cual será empleada como referencia a la hora de validar la implementación GPU desarrollada con motivo del presente trabajo. La Figura 4.3 muestra un diagrama de flujo explicando los principales pasos involucrados en la versión implementada en ENVI del algoritmo PPI. ENVI s N-Dimensional visualizer Figura 4.3: Implementación del algoritmo PPI en ENVI. El primer aspecto destacable en cuanto al algoritmo PPI de ENVI es que dicho algoritmo realiza una etapa de reducción dimensional previa sobre la imagen original basada en la transformación MNF (Minimum oise Fraction), que proporciona una descripción detallada de la relación existente entre la cantidad de señal presente en la imagen y la cantidad de ruido. De este modo, la primera banda resultante de la transformación MNF es la que presenta mayor relación SNR. La segunda banda presenta mejor SNR que la tercera, y así sucesivamente. Una vez aplicado el proceso de identificación de píxels puros mediante generación de proyecciones aleatorias, el resultado del PPI es usado normalmente como entrada del visualizado de la herramienta -Dimensional Visualizer que permite seleccionar un conjunto de endmembers de forma supervisada. Es importante destacar que el usuario no conoce a priori cuál es el número apropiado de endmembers a seleccionar, por lo que debe escoger el número de endmembers en base a su intuición. Este hecho pone de manifiesto la conveniencia de cierto conocimiento a priori sobre la imagen. 48 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

49 Sí queremos ver este hecho de forma más detallada, podemos usar el Spectral Hourglass Wizard de ENVI, que nos guiará paso a paso a través del flujo de procesamiento, incluyendo al PPI, para encontrar y mapear los endmembers de la imagen espectral desde datos hiperespectrales o multiespectrales. Además, la version de PPI usada por ENVI, está basada en un método denominado Fast PPI, que carga los datos de la imagen en memoria y ejecuta los cálculos en memoria, acelerando mucho más el proceso, que con el método PPI basado en disco, pero requiere una cantidad de memoria adecuada para ello. Dicho método utiliza un subconjunto espacial y espectral o un array pequeño de datos (resolución de submuestras) para ayudar a adecuar los datos de la imagen en la memoria. ENVI nos informa de la cantidad de memoria necesaria para ejecutar el Fast PPI y nos avisa para continuar. Cuando usamos Fast PPI, también tenemos las opciones de crear un nuevo archivo de salida y añadirle la banda de salida existente. Al seleccionat archivos de entrada, podemos usar la opción ew Output Band la primera vez que ejecutamos el PPI. Una banda de salida conteniendo el número de veces que cada píxel fue seleccionado como extremo es creada y usada como entrada para el -Dimensional Visualizer de ENVI. Después de todo lo visto anteriormente, empezamos con el algoritmo. Lo primero es seleccionar el número de iteraciones. Este número valdrá para indicar el número de veces que los datos serán proyectados en el vector aleatorio. Cuantas más iteraciones ejecutemos, mejor será el resultado obtenido por Envi a la hora de encontrar los píxeles extremos. Debemos balancear el número de iteraciones con respecto al tiempo disponible, ya que cada iteración lleva una cantidad de tiempo asociada, dependiente del la CPU y la carga del sistema. Típicamente, miles de iteraciones son requeridas para el tratamiento de datos de imágenes hiperespectrales. El siguiente paso consiste en seleccionar el factor de umbral que queremos aplicar al PPI. Por ejemplo, un umbral de 2 marca todos los píxeles cuyo número de veces de selección como píxel extremo haya sido 2 (teniendo en cuenta tanto los mínimos como los máximos). Este umbral selecciona los píxeles en los finales del vector proyectado. El umbral debería ser aproximadamente 2 ó 3 veces el nivel de ruido en los datos. Por ejemplo, para datos TM, que típicamente tienen menos de 1 DN de ruido, un umbral de 2 ó 3 estaría bien. Cuando usamos datos MNF, que Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 49

50 normalizan el ruido, un DN es equivalente a una desviación estandar y, de nuevo, un umbral de 2 ó 3 funciona bien. Umbrales más grandes hacen que el PPI encuentre más píxeles extremos, con la desventaja de que estos serán menos propensos a ser seleccionados como endmembers. Para concluir el presente apartado, dedicado a describir la implementación del algoritmo PPI disponible en ENVI, mostramos un ejemplo de utilización de dicho algoritmo en el lenguaje de programación Interactive Data Language (IDL) en el que fue desarrollado ENVI. El motivo de incluir esta descripción es facilitar la comprensión de los parámetros involucrados en dicha implementación, los cuales coinciden con los empleados en las versiones en C y en CUDA del mismo algoritmo y que serán validados y comparados experimentalmente en el siguiente apartado de la presente memoria. Las variables utilizadas en el código IDL que hace uso de la función PPI_DOIT que contiene la implementación del algoritmo PPI en ENVI son las siguientes: DIMS: usa esta clave para especificar las dimensiones en que se ejecutan las operaciones. DIMS es un vector de 5 elementos de tipo long int con las siguientes definiciones: o DIMS[0]: No se usa para esta function, puesta a -1. o DIMS[1]: El píxel X inicial (el primer pixel es el 0). o DIMS[2]: El píxel X final. o DIMS[3]: El píxel Y inicial (el primer pixel es el 0). o DIMS[4]: El píxel Y final. FID: se usa para especificar el ID del archivo a abrir. Es el valor retornado desde la palabra reservada D_FID en el procedimiento ENVI_OPEN_FILE. FID es un long int con valor mayor que cero. Un ID no válido es especificado como -1. I _MEMORY: se usa para especificar que salida debe ser almacenada en memoria. Si no está puesto ningún valor, la salida se almacenará en disco. ITERATIO S: usada para especificar el número total de iteraciones a ejecutar. Si se está usando un PPI_DOIT como salida, entonces especifica el número de iteraciones adicional que se ejecutarán. 50 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

51 OUT_B AME: usado para especificar un vector de tipo string para el nombre de la banda de salida, si se desea. OUT_ AME: usado para especificar el nombre del archive de salida para los datos resultado. Si IN_MEMORY está puesto, esta opción no es necesaria. P_FID: usado para especificar el ID de una archive para un archive de salida previo desde el PPI_DOIT. Si no usa un archivo de un PPI_DOIT previo, entonces P_FID debe ser puesto a -1. POS: se usa para especificar un vector de 3 elementos de tipo long int de posiciones de bandas. Los elementos de POS son emparejados con elementos del vector FID. PREV_ITER: usado para poner el número de iteraciones previo ejecutado en los datos. Debe ser puesto a cero si los datos nos son reiniciados en un ciclo de procesamiento previo. PREV_DATA: se usa para especificar un vector de Total Pixel Counts previo. Este dato se alamcena en una archivo desde la ejecución previa. R_FID: se usa para especificar una variable llamada que contendrá el ID del archivo desde el dato procesado. Este archivo ID puede ser usado para acceder al dato procesado. THRESH: se usa para indicar el valor umbral del algoritmo. Teniendo en cuenta las variables anteriormente mencionadas, a continuación mostramos un sencillo ejemplo de uso de la función PPI_DOIT que permite analizar los parámetros de entrada y requerimientos del algoritmo PPI disponible en ENVI: envi, /restore_base_save_files envi_batch_init, log_file='batch.txt' envi_open_file, 'imagen.bsq', r_fid=fid if (fid eq -1) then envi_batch_exit envi_file_query, fid, ns=ns, nl=nl, nb=nb dims = [-1l, 0, ns-1, 0, nl-1] pos = lindgen(nb) out_name = 'testimg' envi_doit,'ppi_doit',fid=fid, pos=pos, dims=dims,p_fid=-1, iterations=10000, thresh=3.0, prev_iter=0, out_name=out_name, r_fid=r_fid envi_batch_exit Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 51

52 5. Análisis y discusión de resultados En este capítulo presentamos una evaluación experimental de las diferentes versiones del algoritmo PPI (implementado en C y en CUDA, y la versión disponible en ENVI) desde el punto de vista de su precisión a la hora de detectar los píxels puros y también desde el punto de vista de su rendimiento computacional. El apartado está organizado de la siguiente forma. En primer lugar, describimos las imágenes hiperespectrales simuladas y reales utilizadas en la validación experimental. A continuación, se describen las caacterísticas de las GPUs usadas para comparar los tiempos de ejecución del algoritmo paralelo. Finalmente, se realiza un exhaustivo análisis y discusión comparativa de los resultados obtenidos al aplicar el PPI en ENVI, su versión en C y su versión CUDA en dos generaciones de GPUs, discutiendo dichos resultados y analizando la validez de la implementación en GPU en base a la comparativa de la misma con respecto a las versiones en C y en ENVI Imágenes hiperespectrales utilizadas en el estudio Con vistas a validar la precisión de las diferentes versiones del algoritmo PPI en la tarea de identificar los píxels puros en imágenes hiperespectrales, hemos utilizado tanto imágenes sintéticas como imágenes reales. Las pruebas con imágenes sintéticas están orientadas a evaluar de forma preliminar el funcionamiento de la metodología propuesta, estudiando el ajuste de parámetros y su impacto en el resultado final obtenido. Por otra parte, el uso de imágenes reales permite establecer un estudio comparativo del algoritmo propuesto con respecto a otros ya existentes de amplia utilización por parte de la comunidad científica dedicada al análisis de imágenes multi-dimensionales. A continuación, describimos la batería de imágenes empleada en el estudio, distinguiendo entre imágenes sintéticas y reales Imágenes sintéticas Las imágenes sintéticas permiten adoptar una forma objetiva a la hora de evaluar el rendimiento de un algoritmo de análisis hiperespectral, ya que dichas imágenes se 52 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

53 generan de forma controlada y la información relativa al grado de pureza de cada píxel puede controlarse a priori. Describimos a continuación el proceso de generación de una imagen sintética mediante un sencillo ejemplo, detallando el proceso de selección de firmas espectrales, la forma en que se establece la asignación de abundancias y el esquema seguido para la generación de ruido. En el ejemplo que nos ocupa, las firmas empleadas en la construcción de la imagen simulada corresponden a una imagen obtenida por el sensor AVIRIS en 1997 sobre la región Jasper Ridge en California. La disponibilidad pública de esta imagen en unidades de reflectancia resulta muy atractiva con objeto de crear imágenes simuladas a partir de firmas espectrales reales. A continuación, se establece la abundancia de cada una de las referencias elegidas en cada pixel de la imagen, de forma que la contribución individual de cada firma se expresa mediante un conjunto de coeficientes de abundancia que cumplen las restricciones de no-negatividad y suma unitaria, propias del modelo lineal de mezcla. La última etapa en la simulación consiste en añadir ruido a la imagen simulada. Nuestro proceso de simulación de ruido en imágenes sintéticas se ha llevado a cabo utilizando un generador aleatorio de números entre 1 y 1. Estos valores siguen un modelo de distribución de probabilidad normal, con lo que su valor medio es 0 y su desviación estándar es 1. El ruido se añade a cada pixel de la imagen en una determinada proporción que determina la relación señal-ruido presente en la escena. Una vez descrito el proceso de generación de imágenes sintéticas, pasamos a describir las imágenes concretas que vamos a emplear en nuestro estudio. La primera imagen simulada tiene dimensiones 100x100 pixels, y viene caracterizada por una situación de mezcla entre componentes progresiva, a intervalos de abundancia muy cortos. Como resultado, los cambios en la abundancia en las regiones que componen esta imagen son muy sutiles. En total, hay 100 regiones de 1 pixel de ancho y 100 pixels de alto. La abundancia del componente suelo decrece de forma lineal de izquierda a derecha, mientras que la abundancia del componente vegetación crece de izquierda a derecha. La Figura 5.1 ilustra el proceso de construcción de esta imagen sintética, que proporciona un conjunto de datos muy apropiado para analizar el proceso de estimación de abundancias realizado por el algoritmo PPI. Este hecho se debe a la situación de mezcla particular que se representa en la imagen. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 53

54 R 1 R R 99 Asignación de abundancias Región R i Suelo Vegetación 1 (i / 100) i / 100 R Figura 5.1: Regiones y asignación de abundancias para la primera imagen sintética. Por otra parte, la Figura 5.2 muestra los mapas de abundancia empleados para la generación de la primera imagen sintética utilizada en los experimentos, que comprende mapas para dos endmembers simulados (vegetación y suelo). Conviene destacar que la relación SNR en la imagen simulada (tras el proceso de simulación de ruido) es de 110:1 (proporción de señal de 110 veces a 1 sobre el ruido) y el número de bandas es de 224 (correspondiente a un espectro real de AVIRIS) comprendidas entre 0.4 y 2.5 micrómetros, con una nueva banda aproximadamente cada 10 nanómetros. El tamaño total de la imagen es de 4.27 MB a) b) Figura 5.2: Mapas de abundancia empleados en la generación de la primera imagen sintética. a) Mapa de abundancia para el endmember suelo. b) Mapa de abundancia para el endmember vegetación. Finalmente, la Figura 5.3 muestra los mapas de abundancia empleados para la generación de la segunda imagen sintética utilizada en los experimentos, que 54 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

55 comprende mapas para cinco endmembers simulados (cuatro tipos de vegetación y suelo). De nuevo, la relación SNR en la imagen simulada (tras el proceso de simulación de ruido) es de 110:1 y el número de bandas es de 224, comprendidas entre 0.4 y 2.5 micrómetros. El tamaño total de la imagen es, de nuevo, de 4.27 MB. 100 r 1 r 2 r 1, r 2, r 5 r 1, r 5 r 2, r 5 r 1, r 3, r 5 r 2, r 4, r 5 r r 3, r 5 r 4, r 5 r 3, r 4, r 5 r 3 r a) 4 r 1 r 2 r 3 r 4 r b) c) d) e) f) 0.0 Figura 5.3: Segunda imagen sintética. a) Distribución en la imagen de los cinco píxels puros (endmembers), denotados como r 1, r 2, r 3, r 4 y r 5. b-f) Mapas de abundancia empleados en la generación de la segunda imagen sintética Imagen real La imagen real seleccionada para validar el algoritmo PPI en el presente trabajo fue obtenida por el sensor AVIRIS sobre la región Indian Pines, Indiana, en el año La imagen consta de 145x145 pixels de 17 metros, cada uno de los cuales contiene 220 valores de radiancia en el rango 0.4 a 2.5 µm. Los valores de la relación SNR en los diferentes canales del sensor AVIRIS en el año en que se tomó la imagen han sido mostrados con anterioridad en la Figura 2.3. Como puede apreciarse en dicha figura, esta imagen representa un caso de estudio en que el la relación SNR resulta desfavorable. La Figura 5.4 muestra una banda concreta de la imagen junto con sus clases de verdad terreno asociadas. Esta información ha sido hecha pública a la Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 55

56 comunidad científica ( Como puede apreciarse en la Figura 5.4, la mayor parte de la escena está constituida por cultivos agrícolas (soja y maíz), bosques y otros tipos de vegetación. Conviene destacar que, en imágenes reales no resulta tan sencillo realizar la estimación de los píxeles puros, ya que esta imagen está formada por píxels con resolución espacial de 17 metros, lo cual hace pensar que la mayor parte de los píxels en la escena serán píxels mezcla. En cualquier caso, consideramos interesante realizar un estudio preliminar de la posibilidad de detectar los píxels más puros presentes en la imagen real. Figura 5.5: Imagen hiperespectral real obtenida por AVIRIS sobre la región Indian Pines en Indiana, Estados Unidos, con las clases verdad-terreno superimpuestas Arquitecturas GPU empleadas en el estudio Las características de los dos modelos de GPUs empleados en el estudio (NVidia GeForce 8600 GT y NVidia GeForce 8800 GTX) aparecen comparadas en la Tabla 5.1. Como podemos observar, la GeForce 8800 GTX posee unas características mucho más elevadas que la 8600 GT, ya que esta última es una GPU de gama baja. Estas características serán decisivas en los resultados de nuestra aplicación, como podremos ver en la siguiente sección. Por otra parte, la Tabla 5.2 compara las características de las dos CPUs respectivamente utilizadas con cada tarjeta. Por razones ilustrativas, destacamos que la versión del software ENVI utilizada en los experimentos ha sido la 4.2. Finalmente, la versión del compilador utilizada para el desarrollo de los experimentos es el Microsoft Visual Studio.Net Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

57 GPU 8600 GT 8800 GTX Procesadores tipo "stream" Reloj central (MHz) Reloj de las unidades de sombreado (MHz) Reloj de la Memoria (MHz) Memoria 256MB GDDR3 768MB GDDR3 Interfaz de Memoria 128-bit 384-bit Ancho de banda de Memoria (GB/s) Tasa de relleno de texturas (miles de millones/s) Tabla 5.1: Comparativa de características de GPUs GeForce 8600 GT y 8800 GTX. CPU Core 2 Quad Core 2 Duo Nº de procesadores 4 2 Memoria RAM 2 GB 2 GB Frecuencia de CPU 2.40 GHz 2.40 GHz Tabla 5.2: Comparativa de características CPUs empleadas en los experimentos Estudio experimental El presente apartado se organiza de la siguiente forma. En un primer experimento, nos centramos en los resultados relativos a la precisión de las diferentes versiones del algoritmo PPI consideradas (ENVI, C y CUDA) a la hora de identificar los píxels puros en las imágenes simuladas. En un segundo experimento, analizamos la precisión de los algoritmos considerados a la hora de identificar los píxels puros en la imagen real. Finalmente, en un tercer experimento analizamos el rendimiento computacional de los algoritmos desarrollados en las diferentes arquitecturas CPU y GPU consideradas, estableciendo comparativas entre las versiones paralelas y serie en términos del rendimiento computacional y speedup entre dichas versiones. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 57

58 Primer experimento: análisis precisión (imágenes sintéticas) En este experimento analizamos la precisión obtenida en la tarea de detectar los píxels puros en las imágenes sintéticas por las tres versiones del algoritmo PPI, con vistas a evaluar si la versión en GPU (desarrollada en CUDA) proporciona resultados aceptables con respecto a las versiones C y ENVI. Con vistas a comparar de forma cuantitativa los resultados, utilizamos una medida de acierto que denominamos ratio de acierto. Esta medida está basada en que en las imágenes sintéticas conocemos a priori la ubicación de los píxels puros. Por ello, podemos cuantificar, para cada proyección aleatoria generada por una determinada versión del algoritmo PPI, si dicha proyección resulta en la selección de un píxel totalmente puro, en cuyo caso incrementamos un contador de acierto (inicializado al valor 0) en una unidad. En caso contrario, el contador permanece inalterado. Al final del proceso, el ratio de acierto viene dado por el cociente entre el valor del contador de acierto y el número de proyecciones realizadas. También hemos considerado un ratio de acierto alternativo que pretende evaluar el proceso de identificación de proyecciones de forma un poco más detallada. La idea es la siguiente: dado que en las imágenes sintéticas se conoce el grado de pureza de cada píxel, puesto que las abundancias a nivel píxel han sido generadas de forma controlada, en el caso de que una determinada proyección no proporcione un píxel totalmente puro, es posible estudiar el grado de pureza del píxel seleccionado. Por ejemplo, tomando como ejemplo la primera imagen simulada, si una proyección selecciona un píxel en la segunda columna situada desde la parte izquierda de la imagen, es claro que dicha proyección no ha proporcionado un píxel totalmente puro ya que dichos píxels se encuentran ubicados en la primera y última columnas de la imagen. Sin embargo, en este caso la proyección habría seleccionado un píxel casi puro, con una fracción de abundancia de 0.99 (sobre 1.0) para un endmember y 0.01 (sobre 1.0) para el otro, por lo que el resultado está muy cerca de lo que cabría esperar. No obstante, si una determinada proyección selecciona un píxel en la columna central de la misma imagen, en este caso podemos decir que la proyección ha dado como resultado un píxel mezcla, con fracción de abundancia de 0.5 (sobre 1.0) para un endmember y de 0.5 (sobre 1.0) para el otro. Por tanto, en este caso la proyección no resulta tan adecuada como en el caso anterior (segunda columna). 58 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

59 Con vistas a incorporar este aspecto en la evaluación cuantitativa de los algoritmos, proponemos la utilización de un ratio de acierto modificado en el que el contador de acierto no solamente se incrementa en una unidad, como era el caso en el ratio de acierto original, sino que puede incrementarse en fracciones de una unidad dependiendo del grado de pureza del píxel seleccionado en la proyección. Así, si el píxel seleccionado es totalmente puro (por ejemplo, un píxel en la columna situada más a la izquierda en la primera imagen simulada), el contador de acierto se incrementa en una unidad. Si el píxel seleccionado es totalmente mezcla (por ejemplo, un píxel en la columna situada en el centro de la primera imagen simulada), el contador de acierto no se incrementa. Finalmente, si el píxel seleccionado no es totalmente puro ni totalmente mezcla (por ejemplo, un píxel en la segunda columna situada desde la parte izquierda de la primera imagen simulada) el contador de pureza se incrementa de forma proporcional a la pureza del píxel, que se considera comprendida entre los dos casos extremos anteriormente mencionados (incremento en una unidad para un píxel puro e incremento en cero unidades para un píxel mezcla). De esta forma, podemos cuantificar de forma más precisa el funcionamiento del algoritmo sin restringir nuestro análisis a la selección de píxels exclusivamente puros. Teniendo en cuenta este esquema de validación, la Figura 5.6 muestra las imágenes de pureza (en escala de grises) proporcionadas para las versiones ENVI, C y CUDA del algoritmo PPI, para distinto número de proyecciones (1000 y 10000). Conviene destacar que las versiones C y CUDA siempre proporcionan exactamente los mismos resultados puesto que la versión CUDA se obtiene a partir de la versión C. Asimismo, sólo se muestran los resultados de la versión GPU GeForce 8800, ya que los resultados de las versiones ejecutadas en las CPUs y en la GeForce 8600 GT coinciden con los de dicha GPU. En la Figura 5.6, los píxels con mayor valor de intensidad han sido seleccionados un mayor número de veces, mientras que los píxels en negro no han sido nunca seleccionados. Como puede apreciarse, en ambos casos (versión ENVI y versión C/CUDA) la selección de píxels puros se concentra en las columnas primera y última de la imagen simulada, indicando que las diferentes versiones del algoritmo tienden a concentrar sus selecciones en las columnas que contienen los píxels puros de la imagen. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 59

60 Iteraciones Versión E VI Versión C/CUDA Figura 5.6: Imágenes con el índice de pureza calculado para cada píxel por las versiones ENVI, C (en las dos CPUs consideradas) y CUDA (en las dos GPUs consideradas) para la primera imagen simulada. Un aspecto destacable en relación a los resultados presentados en la Figura 5.6 es el hecho de que, como puede apreciarse, la selección de píxels en ambos casos no es idéntica. Esto se debe a que la versión ENVI utiliza un proceso de selección basado en una distribución de probabilidad a la hora de generar los vectores aleatorios que no es conocida (dado el carácter propietario del software) y también al hecho de que ENVI aplica un proceso (denominado Fast PPI) para incrementar el número de píxels que se seleccionan en cada proyección como puros. En la descripción original del algoritmo [9], los autores indican que para cada proyección el máximo de píxels etiquetados es de 2 (los píxels que resultan en los valores de proyección máxima y mínima). No obstante, en la versión Fast PPI de ENVI el número de píxels seleccionados depende de un valor umbral, lo cual hace que para un mismo número de proyecciones dicha versión seleccione muchos más candidatos. Este efecto se ilustra gráficamente en la Figura 5.7, en la que se muestran los píxels que han sido seleccionados al menos una vez por las versiones ENVI y C/GPU del algoritmo PPI. 60 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

61 Iteraciones Versión E VI Versión C/CUDA Figura 5.7: Imágenes indicando los píxels que han sido seleccionados al menos una vez como puros por las versiones ENVI, C (en las dos CPUs consideradas) y CUDA (en las dos GPUs consideradas) para la primera imagen simulada. Como puede apreciarse en la Figura 5.7, si bien la versión ENVI del algoritmo PPI resulta en un mayor número de píxels seleccionados para el mismo número de proyecciones, es claro que muchas de las selecciones se encuentran ubicadas en columnas centrales (y por tanto, menos puras) de la primera imagen simulada. Por otra parte, la versión C/GPU presenta resultados más centrados en las zonas izquierda y derecha de la imagen, lo cual sugiere que las proyecciones realizadas pueden ser más efectivas ya que solamente los píxels realmente extremos son seleccionados, mientras que en la versión ENVI no solamente los extremos, sino también aquellos píxels que están cercanos a los valores de proyección extremos (según un determinado valor umbral aplicado como parámetro de entrada) son marcados como extremos durante el proceso. Con vistas a ofrecer una medida cuantitativa acerca de la precisión en el proceso de selección de píxels puros, la Figura 5.8 muestra el ratio de acierto modificado para la versión GPU del algoritmo PPI con distintos números de iteraciones. Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 61

62 Ratio de Acierto PPI GPU en CS1_RAD_SNR110.bsq Ratio 1 0,8 0,6 0,4 0, Iteraciones Figura 5.8: Ratio de acierto modificado para la versión GPU del algoritmo PPI, aplicado sobre la primera imagen simulada, con distintos números de iteraciones. Como puede apreciarse en la Figura 5.8, el ratio de acierto para la versión GPU del algoritmo PPI es de aproximadamente 0.92 (sobre 1.0), manteniéndose estable para diferentes números de iteraciones. Este resultado indica que la precisión de la versión GPU del algoritmo PPI a la hora de seleccionar los píxels puros de la imagen es bastante alta. Aún teniendo presente que muchas proyecciones (por su carácter aleatorio) no pueden seleccionar los píxels más extremos, la mayor parte de dichas proyecciones consiguen seleccionar los píxels más puros disponibles. También es importante destacar que los ratios de acierto modificados para la versión ENVI no pueden ser obtenidos dado el carácter propietario del software, que impide analizar este hecho de forma cuantitativa dado que no se puede acceder al código del algoritmo. No obstante, los resultados mostrados visualmente en la Figura 5.7 nos permiten anticipar que la versión ENVI da como resultado muchas más selecciones en zonas de la imagen con alta presencia de píxels no puros, y por tanto pensamos que el ratio de acierto modificado de la versión ENVI puede ser más bajo que el valor de 0.92 (sobre 1.0) obtenido por la versión en GPU. A continuación, repetimos el proceso de evaluación para la segunda imagen simulada, teniendo en cuenta que esta imagen presenta un mayor grado de dificultad ya que el número de endmembers aumenta pero el número total de píxels puros disminuye. Mientras que en la primera imagen simulada había un total de 200 píxels puros, 100 de ellos ubicados en la primera columna y 100 de ellos en la última columna, en la segunda imagen simulada el número de píxels puros se limita a 5 (uno en cada esquina y uno en el centro) lo cual a priori reduce las posibilidades de 62 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

63 identificar dichos píxels con respecto al caso anterior, y más si tenemos en cuenta que el tamaño de las imágenes es exactamente igual (100x100 píxels) con lo que el ratio de píxels puros frente al total de píxels de la imagen es mucho menor para la segunda imagen simulada. Iteraciones Versión E VI Versión C/CUDA Figura 5.9: Imágenes con el índice de pureza calculado para cada píxel por las versiones ENVI, C (en las dos CPUs consideradas) y CUDA (en las dos GPUs consideradas) para la segunda imagen simulada. Teniendo en cuenta el esquema de validación aplicado para la primera imagen simulada, la Figura 5.9 muestra las imágenes de pureza (en escala de grises) proporcionadas para las versiones ENVI, C y CUDA del algoritmo PPI, para distinto número de proyecciones (1000 y 10000). De nuevo, las versiones C y CUDA proporcionan exactamente los mismos resultados. Asimismo, sólo se muestran los resultados de la versión GPU GeForce 8800, ya que los resultados de las versiones Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 63

64 ejecutadas en las CPUs y en la GeForce 8600 GT de nuevo coinciden con los de dicha GPU. Como puede apreciarse, en ambos casos (versión ENVI y versión C/CUDA) la selección de píxels puros se concentra en las esquinas y en el centro de la imagen simulada, indicando que las diferentes versiones del algoritmo tienden a concentrar sus selecciones alrededor de las ubicaciones que contienen los píxels puros de la imagen. Iteraciones Versión E VI Versión C/CUDA Figura 5.10: Imágenes indicando los píxels que han sido seleccionados al menos una vez como puros por las versiones ENVI, C (en las dos CPUs consideradas) y CUDA (en las dos GPUs consideradas) para la segunda imagen simulada. Ante la similitud aparente de los resultados mostrados en la Figura 5.9 y, al igual que en el experimento anterior, la Figura 5.10 muestra los píxels que han sido seleccionados al menos una vez por las versiones ENVI y C/GPU del algoritmo PPI en la segunda imagen simulada. De nuevo puede apreciarse en la Figura 5.10 que, si bien la versión ENVI del algoritmo PPI resulta en un mayor número de píxels seleccionados para el mismo número de proyecciones, es claro que muchas de las selecciones se encuentran ubicadas en zonas no cercanas a las esquinas y al centro (y por tanto, menos puras) de la segunda imagen simulada. Por otra parte, la versión 64 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

65 C/GPU presenta resultados más centrados en dichas zonas, lo cual de nuevo sugiere que las proyecciones realizadas pueden ser más efectivas. La Figura 5.11 muestra el ratio de acierto modificado para la versión GPU del algoritmo PPI con distintos números de iteraciones. Como puede apreciarse en la Figura 5.11, el ratio de acierto para la versión GPU del algoritmo PPI es de aproximadamente 0.99 (sobre 1.0), manteniéndose estable para diferentes números de iteraciones. Este resultado indica que la precisión de la versión GPU del algoritmo PPI a la hora de seleccionar los píxels puros de la segunda imagen simulada es muy elevada. De nuevo, los resultados mostrados visualmente en la Figura 5.10 nos permiten anticipar que la versión ENVI da como resultado muchas más selecciones en zonas de la imagen con alta presencia de píxels no puros, y por tanto pensamos que el ratio de acierto modificado de la versión ENVI puede ser más bajo que el valor de 0.99 (sobre 1.0) obtenido por la versión en GPU. Ratio de Acierto PPI GPU CS2_RAD_SNR110.bsq Ratio 1 0,8 0,6 0,4 0, Iteraciones Figura 5.11: Ratio de acierto modificado para la versión GPU del algoritmo PPI, aplicado sobre la segunda imagen simulada, con distintos números de iteraciones Segundo experimento: análisis precisión (imagen real) En este experimento, procuramos repetir los mismos pasos realizados para imágenes sintéticas. La Figura 5.12 muestra las imágenes de pureza (en escala de grises) proporcionadas para las versiones ENVI, C y CUDA del algoritmo PPI, para distinto número de proyecciones (1000 y 10000) obtenidas al aplicar el algoritmo sobre la imagen real de Indian Pines. De nuevo, las versiones C y CUDA proporcionan Proyecto Fin de Carrera de Ingeniería Informática Autor: Hugo María Vegas Carrasco 65

66 exactamente los mismos resultados y sólo se muestran los resultados de la versión GPU GeForce 8800, ya que los resultados de las versiones ejecutadas en las CPUs y en la GeForce 8600 GT de nuevo coinciden con los de dicha GPU. Como puede apreciarse, en ambos casos (versión ENVI y versión C/CUDA) la selección de píxels puros se concentra en una serie de zonas determinadas de la imagen. Si comparamos dichas zonas con la verdad terreno para la imagen Indian Pines, mostrada en la Figura 5.5, podemos apreciar que no existe correlación entre las zonas etiquetadas en la verdad terreno y la presencia de píxels puros. Es más, los píxels puros parecen concetrarse en determinadas zonas muy localizadas de la imangen. Este hecho puede deberse a la escasa presencia de píxels puros en la imagen, debido a la escasa cobertura del suelo de los cultivos agrícolas presentes en la imagen (en etapa muy temprana de crecimiento y con una cobertura aproximada del suelo del 5%). De este modo, los resultados extraídos permiten anticipar que las zonas puras de suelo han sido favorecidas durante el proceso de selección de extremos, y no existe una forma intuitiva de establecer una correlación entre las zonas seleccionadas por el algoritmo PPI y la información verdad terreno disponible a priori. Iteraciones Versión Envi Versión C/CUDA Figura 5.12: Imágenes con el índice de pureza calculado para cada píxel por las versiones ENVI, C (en las dos CPUs consideradas) y CUDA (en las dos GPUs consideradas) para la imagen real. 66 Proyecto Fin de Carrera Ingeniería Informática - Hugo María Vegas Carrasco

UNIVERSIDAD DE EXTREMADURA

UNIVERSIDAD DE EXTREMADURA UNIVERSIDAD DE EXTREMADURA Escuela Politécnica Ingeniería Informática Proyecto Fin de Carrera Desarrollo de algoritmos de análisis de imágenes hiperespectrales en tarjetas gráficas NVidia Sergio Sánchez

Más detalles

UNIVERSIDAD DE EXTREMADURA

UNIVERSIDAD DE EXTREMADURA UNIVERSIDAD DE EXTREMADURA Escuela Politécnica MÁSTER UNIVERSITARIO EN INICIACIÓN A LA INVESTIGACIÓN EN TECNOLOGÍA (MUIT) ESPECIALIDAD EN: TECNOLOGÍAS INFORMÁTICAS Y DE LAS COMUNICACIONES (TINC) MUIT-TINC

Más detalles

Introducción a OpenGL Shading Language (GLSL)

Introducción a OpenGL Shading Language (GLSL) a OpenGL Shading Language (GLSL) November 20, 2007 a OpenGL Shading Language (GLSL) Fixed Pipeline Programmable Pipeline Características de GLSL Por qué escribir un Shader? Vertex Processor Fragment Processor

Más detalles

1.1. Modelos de arquitecturas de cómputo: clásicas, segmentadas, de multiprocesamiento.

1.1. Modelos de arquitecturas de cómputo: clásicas, segmentadas, de multiprocesamiento. 1.1. Modelos de arquitecturas de cómputo: clásicas, segmentadas, de multiprocesamiento. Arquitecturas Clásicas. Estas arquitecturas se desarrollaron en las primeras computadoras electromecánicas y de tubos

Más detalles

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria 1.2. Jerarquía de niveles de un computador Qué es un computador? Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria Es un sistema tan complejo

Más detalles

1 INTRODUCCIÓN AL PROYECTO

1 INTRODUCCIÓN AL PROYECTO 1 INTRODUCCIÓN AL PROYECTO 1.1 Marco teórico Una de las innovaciones tecnológicas más sobresalientes es el microprocesador, el cual se ha desarrollado rápidamente a partir de su invención. Los procesadores

Más detalles

UNIVERSIDAD DE EXTREMADURA

UNIVERSIDAD DE EXTREMADURA UNIVERSIDAD DE EXTREMADURA Escuela Politécnica Ingeniería Informática Proyecto Fin de Carrera Compresión de imágenes hiperespectrales en tarjetas gráficas programables (GPUs) Enrique de la Fuente Milanés

Más detalles

En estas primeras líneas de la memoria se presenta un resumen del Trabajo de Fin de Máster realizado.

En estas primeras líneas de la memoria se presenta un resumen del Trabajo de Fin de Máster realizado. Índice de contenido 1. Introducción 9 1.1. Motivaciones... 11 1.2. Objetivos. 12 1.3. Estructura de la memoria 13 2. Resumen del estado del arte.. 15 3. Imágenes hiperspectrales. 19 3.1. Concepto de imagen

Más detalles

Arquitectura de un Controlador Electrónico de Procesos

Arquitectura de un Controlador Electrónico de Procesos Arquitectura de un Controlador Electrónico de Procesos Unidad Central de Procesamiento (CPU) La unidad central de procesamiento es el elemento más importante de un controlador electrónico de procesos.

Más detalles

Programación Concurrente y Paralela. Unidad 1 Introducción

Programación Concurrente y Paralela. Unidad 1 Introducción Programación Concurrente y Paralela Unidad 1 Introducción Contenido 1.1 Concepto de Concurrencia 1.2 Exclusión Mutua y Sincronización 1.3 Corrección en Sistemas Concurrentes 1.4 Consideraciones sobre el

Más detalles

CICLOS DEL PROCESADOR

CICLOS DEL PROCESADOR UNIDAD DE CONTROL CICLOS DEL PROCESADOR Qué es un ciclo de búsqueda? Para qué sirve estudiar los ciclos de instrucción de una CPU? Para comprender el funcionamiento de la ejecución de instrucciones del

Más detalles

INFORME MEMORIA CACHE Y MEMORIA VIRTUAL.

INFORME MEMORIA CACHE Y MEMORIA VIRTUAL. AIEP PROGRAMACIÓN COMPUTACIONAL FUNDAMENTOS DE PROGRAMACIÓN INFORME MEMORIA CACHE Y MEMORIA VIRTUAL. Por:Diego Menéndez Introducción. Ante la inmensa velocidad de los procesadores que a medida del tiempo

Más detalles

TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS.

TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS. 1 TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS. 1- Cuáles son las principales funciones de un sistema operativo? Los Sistemas Operativos tienen como objetivos o funciones principales lo siguiente; Comodidad;

Más detalles

ENTRADA-SALIDA. 2. Dispositivos de Carácter: Envía o recibe un flujo de caracteres No es direccionable, no tiene operación de búsqueda

ENTRADA-SALIDA. 2. Dispositivos de Carácter: Envía o recibe un flujo de caracteres No es direccionable, no tiene operación de búsqueda Tipos de Dispositivos ENTRADA-SALIDA 1. Dispositivos de Bloque: Almacena información en bloques de tamaño fijo (512b hasta 32Kb) Se puede leer o escribir un bloque en forma independiente 2. Dispositivos

Más detalles

Inside Kepler. I. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes ( )

Inside Kepler. I. Presentación de la arquitectura. Índice de contenidos [25 diapositivas] Kepler, Johannes ( ) Índice de contenidos [25 diapositivas] Inside Manuel Ujaldón Nvidia CUDA Fellow Dpto. Arquitectura de Computadores Universidad de Málaga 1. Presentación de la arquitectura [3 diapositivas] 2. Los cores

Más detalles

Programación Orientada a Objetos

Programación Orientada a Objetos Programación Orientada a Objetos PROGRAMACIÓN ORIENTADA A OBJETOS 1 Sesión No. 8 Nombre: El Modelo de diseño con UML Contextualización Los modelos que podemos crear con UML son varios, por lo que debemos

Más detalles

ARQUITECTURA DE VON NEUMANN Y HARVARD

ARQUITECTURA DE VON NEUMANN Y HARVARD ARQUITECTURA DE VON NEUMANN Y HARVARD ARQUITECTURA VON NEUMANN En esta arquitectura se observa que las computadoras utilizan el mismo dispositivo de almacenamiento para datos e instrucciones conectados

Más detalles

También denominada adaptador de vídeo, es uno de los componentes más básicos e importantes del ordenador, ya que nos va a permitir visualizar toda la

También denominada adaptador de vídeo, es uno de los componentes más básicos e importantes del ordenador, ya que nos va a permitir visualizar toda la Conrado Perea También denominada adaptador de vídeo, es uno de los componentes más básicos e importantes del ordenador, ya que nos va a permitir visualizar toda la información con la que se trabaja. Antiguamente

Más detalles

Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial

Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial Intel ha lanzado su procesador Xeon Phi en la Conferencia Internacional de Supercomputación de Alemania. El procesador

Más detalles

Tema V Generación de Código

Tema V Generación de Código Tema V Generación de Código Una vez que se ha realizado la partición HW/SW y conocemos las operaciones que se van a implementar por hardware y software, debemos abordar el proceso de estas implementaciones.

Más detalles

CDI Arquitecturas que soportan la concurrencia. granularidad

CDI Arquitecturas que soportan la concurrencia. granularidad granularidad Se suele distinguir concurrencia de grano fino es decir, se aprovecha de la ejecución de operaciones concurrentes a nivel del procesador (hardware) a grano grueso es decir, se aprovecha de

Más detalles

Arquitecturas GPU v. 2015

Arquitecturas GPU v. 2015 v. 2015 http://en.wikipedia.org/wiki/graphics_processing_unit http://en.wikipedia.org/wiki/stream_processing http://en.wikipedia.org/wiki/general-purpose_computing_on_graphics_processing_ units http://www.nvidia.com/object/what-is-gpu-computing.html

Más detalles

Modelo de aplicaciones CUDA

Modelo de aplicaciones CUDA Modelo de aplicaciones CUDA Utilización de GPGPUs: las placas gráficas se utilizan en el contexto de una CPU: host (CPU) + uno o varios device o GPUs Procesadores masivamente paralelos equipados con muchas

Más detalles

ELEMENTOS HARDWARE DEL ORDENADOR. Tarjeta gráfica

ELEMENTOS HARDWARE DEL ORDENADOR. Tarjeta gráfica ELEMENTOS HARDWARE DEL ORDENADOR Tarjeta gráfica Qué es? Tarjeta Gráfica 1. Interpreta los datos que le llegan del procesador, ordenándolos y calculando el valor de cada píxel, lo almacena en la memoria

Más detalles

Qué es un programa informático?

Qué es un programa informático? Qué es un programa informático? Un programa informático es una serie de comandos ejecutados por el equipo. Sin embargo, el equipo sólo es capaz de procesar elementos binarios, es decir, una serie de 0s

Más detalles

6. Enumere tres ventajas de los ULT frente a los KLT.

6. Enumere tres ventajas de los ULT frente a los KLT. 1 Tarea 3 Hilos 1. Cuales bloques de control de proceso deberían pertenecer a un bloque de control de hilo y cuáles a un bloque de control de proceso en un sistema multihilo? Para modelos monohilo deben

Más detalles

CÓMPUTO DE ALTO RENDIMIENTO EN MEMORIA COMPARTIDA Y PROCESADORES GRÁFICOS

CÓMPUTO DE ALTO RENDIMIENTO EN MEMORIA COMPARTIDA Y PROCESADORES GRÁFICOS CÓMPUTO DE ALTO RENDIMIENTO EN MEMORIA COMPARTIDA Y PROCESADORES GRÁFICOS Leopoldo N. Gaxiola, Juan J. Tapia Centro de Investigación y Desarrollo de Tecnología Digital Instituto Politécnico Nacional Avenida

Más detalles

Primeros pasos con CUDA. Clase 1

Primeros pasos con CUDA. Clase 1 Primeros pasos con CUDA Clase 1 Ejemplo: suma de vectores Comencemos con un ejemplo sencillo: suma de vectores. Sean A, B y C vectores de dimensión N, la suma se define como: C = A + B donde C i = A i

Más detalles

Taxonomía de las arquitecturas

Taxonomía de las arquitecturas Taxonomía de las arquitecturas 1 INTRODUCCIÓN 2 2 CLASIFICACIÓN DE FLYNN 3 2.1 SISD (SINGLE INSTRUCTION STREAM, SINGLE DATA STREAM) 3 2.2 SIMD (SINGLE INSTRUCTION STREAM, MULTIPLE DATA STREAM) 4 2.2.1

Más detalles

Con estas consideraciones, Flynn clasifica los sistemas en cuatro categorías:

Con estas consideraciones, Flynn clasifica los sistemas en cuatro categorías: Taxonomía de las arquitecturas 1 Introducción Introducción En este trabajo se explican en detalle las dos clasificaciones de computadores más conocidas en la actualidad. La primera clasificación, es la

Más detalles

cuevogenet Paralelización en CUDA de la Dinámica Evolutiva de Redes Génicas Dirigido por: Fernando Díaz del Río José Luis Guisado Lizar

cuevogenet Paralelización en CUDA de la Dinámica Evolutiva de Redes Génicas Dirigido por: Fernando Díaz del Río José Luis Guisado Lizar cuevogenet Paralelización en CUDA de la Dinámica Evolutiva de Redes Génicas Realizado por: Raúl García Calvo Dirigido por: Fernando Díaz del Río José Luis Guisado Lizar Objetivos Implementar un algoritmo

Más detalles

Evolución del software y su situación actual

Evolución del software y su situación actual Evolución del software y su situación actual El software es el conjunto de programas que permite emplear la PC, es decir, es el medio de comunicación con la computadora, el control de sus funciones y su

Más detalles

Estructura Interna de La PC. 1. Microprocesadores 2. I/O ( Entrada / Salida) 3. Memoria

Estructura Interna de La PC. 1. Microprocesadores 2. I/O ( Entrada / Salida) 3. Memoria Estructura Interna de La PC 1. Microprocesadores 2. I/O ( Entrada / Salida) 3. Memoria Estructura Interna de La PC Estructura Interna de La PC Estructura Interna de La PC Estructura Interna de La PC Estructura

Más detalles

Hoja de respuestas. Examen tipo A

Hoja de respuestas. Examen tipo A Hoja de respuestas. Examen tipo A Cuestiones 1. La memoria virtual nos permite: Emular la RAM mediante la utilización de los dispositivos de almacenamiento Tener una memoria de capacidad infinita en nuestro

Más detalles

Unidad 5 Unidad central de proceso

Unidad 5 Unidad central de proceso Unidad 5 Unidad central de proceso Objetivo El objetivo de esta unidad es que el alumno logre: entender el funcionamiento básico de la Unidad Central de Proceso (UCP), definir las componentes básicas de

Más detalles

Presentado por: Josué Andino Denis Flores Jorge Luis Pontón Diego Soria. Andino, Flores, Pontón, Soria 1

Presentado por: Josué Andino Denis Flores Jorge Luis Pontón Diego Soria. Andino, Flores, Pontón, Soria 1 Presentado por: Josué Andino Denis Flores Jorge Luis Pontón Diego Soria Andino, Flores, Pontón, Soria 1 Temario Objetivos Introducción Modelos y Terminología Estructura de Datos y Directrices de Lenguaje

Más detalles

Velocidades Típicas de transferencia en Dispositivos I/O

Velocidades Típicas de transferencia en Dispositivos I/O Entradas Salidas Velocidades Típicas de transferencia en Dispositivos I/O Entradas/Salidas: Problemas Amplia variedad de periféricos Entrega de diferentes cantidades de datos Diferentes velocidades Variedad

Más detalles

Tema 1: PROCESADORES SEGMENTADOS

Tema 1: PROCESADORES SEGMENTADOS Tema 1: PROCESADORES SEGMENTADOS Tema 1: PROCESADORES SEGMENTADOS 1.1. Procesadores RISC frente a procesadores CISC. 1.2. Clasificación de las arquitecturas paralelas. 1.3. Evaluación y mejora del rendimiento

Más detalles

Montaje y Reparación de Sistemas Microinformáticos

Montaje y Reparación de Sistemas Microinformáticos Montaje y Reparación de Sistemas s Es uno de los componentes más imprescindible del equipo informático. Al igual que el resto de tarjetas de expansión, la tarjeta gráfica se conecta al bus PCIe. Algunas

Más detalles

DEPARTAMENTO DE TECNOLOGÍA DE LOS COMPUTADORES Y DE LAS COMUNICACIONES

DEPARTAMENTO DE TECNOLOGÍA DE LOS COMPUTADORES Y DE LAS COMUNICACIONES DEPARTAMENTO DE TECNOLOGÍA DE LOS COMPUTADORES Y DE LAS COMUNICACIONES ESCUELA POLITÉCNICA DE CÁCERES Diseño e implementación de una cadena completa para desmezclado de imágenes hiperespectrales en tarjetas

Más detalles

UNIVERSIDAD DE EXTREMADURA

UNIVERSIDAD DE EXTREMADURA UNIVERSIDAD DE EXTREMADURA Escuela Politécnica Ingeniería Informática Proyecto Fin de Carrera Comparativa de nuevos algoritmos de extracción de endmembers en imágenes hiperespectrales utilizando información

Más detalles

Desarrollo personalizado de aplicaciones SIG 3D

Desarrollo personalizado de aplicaciones SIG 3D IV JORNADAS DE SIG LIBRE Desarrollo personalizado de aplicaciones SIG 3D M. de la Calle Alonso (1),D.Gómez-Deck (1),V. Olaya Ferrero (2) (1) IGO SOFTWARE. C/Santiago Caldera 4 Cáceres. mdelacalle@igosoftware.es

Más detalles

Programación de GPUs con CUDA

Programación de GPUs con CUDA Programación de GPUs con CUDA Alvaro Cuno 23/01/2010 1 Agenda GPUs Cuda Cuda + OpenGL 2 GPUs (Graphics Processing Units) 3 Supercomputadores Mapa de los 100 supercomputadores Sudamérica: posiciones 306

Más detalles

Tema 12: El sistema operativo y los procesos

Tema 12: El sistema operativo y los procesos Tema 12: El sistema operativo y los procesos Solicitado: Tarea 06 Arquitecturas de una computadora y el funcionamiento del software M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx

Más detalles

INTRODUCCIÓN Y MEDIDAS DE RENDIMIENTO MEDIDAS DE RENDIMIENTO

INTRODUCCIÓN Y MEDIDAS DE RENDIMIENTO MEDIDAS DE RENDIMIENTO Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

TEMA 1: Concepto de ordenador

TEMA 1: Concepto de ordenador TEMA 1: Concepto de ordenador 1.1 Introducción Los ordenadores necesitan para su funcionamiento programas. Sin un programa un ordenador es completamente inútil. Para escribir estos programas necesitamos

Más detalles

Parte I: El computador y el proceso de programación

Parte I: El computador y el proceso de programación Parte I: El computador y el proceso de programación 1.Introducción a los computadores y su programación 2. Introducción al análisis y diseño de algoritmos 3. Introducción al análisis y diseño de programas

Más detalles

ESTRUCTURA DE COMPUTADORES GUÍA DOCENTE

ESTRUCTURA DE COMPUTADORES GUÍA DOCENTE ESTRUCTURA DE COMPUTADORES GUÍA DOCENTE OBJETIVOS Y COMPETENCIAS Con la y los ejercicios del documento relativo a esta asignatura se pretenden adquirir las competencias básicas relacionadas con la informática,

Más detalles

PREGUNTAS INFORMÁTICA MONITOR UPB EXAMEN 1

PREGUNTAS INFORMÁTICA MONITOR UPB EXAMEN 1 PREGUNTAS INFORMÁTICA MONITOR UPB EXAMEN 1 1. Cuál de los siguientes componentes no forma parte del esquema general de un ordenador? A Memoria Principal B Disco Duro C Unidad de Control D Unidad Aritmético

Más detalles

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 1 Introducción

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 1 Introducción Computación de Propósito General en Unidades de Procesamiento Gráfico () P. Ezzatti, M. Pedemontey E. Dufrechou Clase 1 Introducción Contenido Un poco de historia El pipeline gráfico Tarjetas programables

Más detalles

CAPITULO III CONTROLADORES

CAPITULO III CONTROLADORES CAPITULO III CONTROLADORES 3.1 Controladores El controlador es el segundo elemento en un sistema de control automático, éste toma una señal de entrada y la compara con un valor establecido para obtener

Más detalles

PARADIGMA y LENGUAJES DE PROGRAMACIÓN

PARADIGMA y LENGUAJES DE PROGRAMACIÓN CATEDRA CARRERA: PARADIGMA y LENGUAJES DE PROGRAMACIÓN LICENCIATURA EN SISTEMAS DE INFORMACION FACULTAD DE CIENCIAS EXACTAS QUIMICAS Y NATURALES UNIVERSIDAD NACIONAL DE MISIONES Año 2017 2do Cuatrimestre

Más detalles

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute. Los problemas que se plantean en la vida diaria suelen ser resueltos mediante el uso de la capacidad intelectual y la habilidad manual del ser humano. La utilización de la computadora en la resolución

Más detalles

MULTIPROCESADORES TIPOS DE PARALELISMO

MULTIPROCESADORES TIPOS DE PARALELISMO Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Programación de Ordenadores

Programación de Ordenadores Programación de Ordenadores Ingeniería Química David Pelta Depto de Ciencias de la Computación e I.A. Universidad de Granada Índice Resolución de Problemas con Ordenadores Algoritmo Metodología de la programación

Más detalles

Tema 2: Conceptos básicos. Escuela Politécnica Superior Ingeniería Informática Universidad Autónoma de Madrid

Tema 2: Conceptos básicos. Escuela Politécnica Superior Ingeniería Informática Universidad Autónoma de Madrid Tema 2: Conceptos básicos Ingeniería Informática Universidad Autónoma de Madrid 1 O B J E T I V O S Introducción a la Informática Adquirir una visión global sobre la Informática y sus aplicaciones. Conocer

Más detalles

Tema: Microprocesadores

Tema: Microprocesadores Universidad Nacional de Ingeniería Arquitectura de Maquinas I Unidad I: Introducción a los Microprocesadores y Microcontroladores. Tema: Microprocesadores Arq. de Computadora I Ing. Carlos Ortega H. 1

Más detalles

Unidad 2: Taller de Cómputo. Estructura y Componentes de la Computadora UNIDAD DOS: INTRODUCCIÓN

Unidad 2: Taller de Cómputo. Estructura y Componentes de la Computadora UNIDAD DOS: INTRODUCCIÓN UNIDAD DOS: INTRODUCCIÓN Una computadora es una máquina electrónica diseñada para manipular y procesar información de acuerdo a un conjunto de ordenes o programas. para que esto sea posible se requiere

Más detalles

de Gran Canaria Centro de Tecnología Médica Programación Concurrente

de Gran Canaria Centro de Tecnología Médica  Programación Concurrente Universidad de Las Palmas de Gran Canaria Centro de Tecnología Médica http://www.ctm.ulpgc.es Tema 1: Introducción a la Escuela Técnica Superior de Ingenieros de Telecomunicación Conceptos Fundamentales

Más detalles

Regulación de nivel en un sistema de dos tanques

Regulación de nivel en un sistema de dos tanques Sistema de control de fluidos Regulación de nivel en un sistema de dos tanques Mediante un sencillo sistema de adquisición de datos se ha desarrollado una planta a escala para analizar problemas de tratamiento

Más detalles

SISTEMAS OPERATIVOS Arquitectura de computadores

SISTEMAS OPERATIVOS Arquitectura de computadores SISTEMAS OPERATIVOS Arquitectura de computadores Erwin Meza Vega emezav@unicauca.edu.co Esta presentación tiene por objetivo mostrar los conceptos generales de la arquitectura de los computadores, necesarios

Más detalles

Volume Rendering. Francisco Morillo y Ciro Durán. 30 de noviembre de 2005

Volume Rendering. Francisco Morillo y Ciro Durán. 30 de noviembre de 2005 30 de noviembre de 2005 1 2 3 Definición Proceso de Composición Interpolacion Trilinear Resultados 4 Definición Métodos para hacer TBVR Problemas en TBVR 5 Los shaders Ventajas y limitaciones de los shaders

Más detalles

ARQUITECTURA BÁSICA DEL ORDENADOR: Hardware y Software. IES Miguel de Cervantes de Sevilla

ARQUITECTURA BÁSICA DEL ORDENADOR: Hardware y Software. IES Miguel de Cervantes de Sevilla ARQUITECTURA BÁSICA DEL ORDENADOR: Hardware y Software. IES Miguel de Cervantes de Sevilla Índice de contenido 1.- Qué es un ordenador?...3 2.-Hardware básico de un ordenador:...3 3.-Software...4 3.1.-Software

Más detalles

Francisco Javier Hernández López

Francisco Javier Hernández López Francisco Javier Hernández López fcoj23@cimat.mx http://www.cimat.mx/~fcoj23 Ejecución de más de un cómputo (cálculo) al mismo tiempo o en paralelo, utilizando más de un procesador. Arquitecturas que hay

Más detalles

Introducción a LabVIEW FPGA. Juan Gil

Introducción a LabVIEW FPGA. Juan Gil Introducción a LabVIEW FPGA Juan Gil National Instruments Tecnología FPGA Bloques de Memoria Almacene conjuntos de datos o valores en RAM definida por el usuario Bloques de Lógica Configurables (CLBs)

Más detalles

Plataformas y sensores con fines Meteorológicos, Radar e Hiperespectrales Grupo 4

Plataformas y sensores con fines Meteorológicos, Radar e Hiperespectrales Grupo 4 Plataformas y sensores con fines Meteorológicos, Radar e Hiperespectrales Grupo 4 Vanessa Bentancur - Ciencias de la Atmósfera Katherine Lesparre - Agrimensura Andrea Barbieri - Tecnólogo en Cartografía

Más detalles

Sistemas Informáticos. Estructura Funcional

Sistemas Informáticos. Estructura Funcional Módulo: Fundamentos del Hardware Editorial: RA-MA Autores: Juan Carlos Moreno y Juan Serrano Sistemas Informáticos. Estructura Funcional TEMA 1 INDICE 1.1. Introducción a los Sistemas Informáticos 1.1.1.

Más detalles

En esta unidad vamos a hablar acerca de cómo los equipos utilizan las redes para trabajar juntos. Hay varios modelos ( que en algunos casos son

En esta unidad vamos a hablar acerca de cómo los equipos utilizan las redes para trabajar juntos. Hay varios modelos ( que en algunos casos son En esta unidad vamos a hablar acerca de cómo los equipos utilizan las redes para trabajar juntos. Hay varios modelos ( que en algunos casos son llamados arquitecturas ) que los ordenadores pueden seguir

Más detalles

Procesador. Daniel Rúa Madrid

Procesador. Daniel Rúa Madrid Procesador Daniel Rúa Madrid Procesador Sus funciones principales incluyen, la ejecución de las aplicaciones y la coordinación de los diferentes dispositivos que componen un equipo. Unidad Aritmético Lógica(ALU)

Más detalles

INTRODUCCIÓN A LA TELEDETECCIÓN CUANTITATIVA

INTRODUCCIÓN A LA TELEDETECCIÓN CUANTITATIVA INTRODUCCIÓN A LA TELEDETECCIÓN CUANTITATIVA Haydee Karszenbaum Veronica Barrazza haydeek@iafe.uba.ar Clase 1.3: Sistemas satelitales: características y ejemplos Teledetección cuantitativa Criterios para

Más detalles

2.- Con qué palabras inglesas se define la parte física del ordenador y cómo se llama la parte de programas, la que no se ve.

2.- Con qué palabras inglesas se define la parte física del ordenador y cómo se llama la parte de programas, la que no se ve. CUESTIONARIO TEMA 2 UNIDADES FUNCIONALES. 1.- Definición de ordenador. Máquina electrónica capaz de almacenar información y tratarla automáticamente mediante operaciones matemáticas y lógicas controladas

Más detalles

Análisis de mezclas espectrales

Análisis de mezclas espectrales Análisis de mezclas espectrales Apellidos, nombre Ruiz Fernández, Luis Ángel (laruiz@cgf.upv.es) Departamento Centro Ingeniería Cartográfica, Geodesia y Fotogrametría ETSI. Geodésica, Cartográfica y Topográfica

Más detalles

TRABAJO PRÁCTICO N 19 FOTOS AÉREAS IMÁGENES SATELITALES

TRABAJO PRÁCTICO N 19 FOTOS AÉREAS IMÁGENES SATELITALES TRABAJO PRÁCTICO N 19 FOTOS AÉREAS IMÁGENES SATELITALES FOTOGRAFÍAS AÉREAS Fotogramas: se emplean rollos de películas indeformables y cámaras especiales. Cada fotograma recubre la fotografía siguiente

Más detalles

Herramientas Informáticas I Hardware: Conceptos Básicos

Herramientas Informáticas I Hardware: Conceptos Básicos Herramientas Informáticas I Hardware: Conceptos Básicos Facultad de Ciencias Económicas y Jurídicas Universidad Nacional de La Pampa Hardware: Conceptos Unidad Central de Proceso. Hardware: (del inglés:

Más detalles

Tema III: Componentes de un Sistema Operativo

Tema III: Componentes de un Sistema Operativo Tema III: Componentes de un Sistema Operativo Concepto de proceso Jerarquía de memoria: Concepto de memoria cache Memoria virtual Partición Sistema de ficheros Sistema de entrada/salida: Driver y controladora

Más detalles

4.1 CONGRUENCIA ENTRE LOS OBJETIVOS DEL PLAN DE ESTUDIOS Y EL PERFIL DE EGRESO CON LAS LGAC:

4.1 CONGRUENCIA ENTRE LOS OBJETIVOS DEL PLAN DE ESTUDIOS Y EL PERFIL DE EGRESO CON LAS LGAC: 4.1 CONGRUENCIA ENTRE LOS OBJETIVOS DEL PLAN DE ESTUDIOS Y EL PERFIL DE EGRESO CON LAS LGAC: A continuación se muestran los objetivos así como los mapas funcionales según la línea de acentuación y la línea

Más detalles

Automatización de banco de ensayo de engranajes para el estudio de métodos de detección de estado

Automatización de banco de ensayo de engranajes para el estudio de métodos de detección de estado Automatización de banco de ensayo de engranajes para el estudio de métodos de detección de estado "La utilización de las herramientas software de NI ha permitido el desarrollo de un sistema de control

Más detalles

Contenidos. Arquitectura de ordenadores (fundamentos teóricos) Elementos de un ordenador. Periféricos

Contenidos. Arquitectura de ordenadores (fundamentos teóricos) Elementos de un ordenador. Periféricos Arquitectura de ordenadores (fundamentos teóricos) Representación de la información Estructura de un microprocesador Memorias Sistemas de E/S Elementos de un ordenador Microprocesador Placa base Chipset

Más detalles

Ahora vamos a hablar de la CPU, la Unidad Central de Procesamiento.

Ahora vamos a hablar de la CPU, la Unidad Central de Procesamiento. Ahora vamos a hablar de la CPU, la Unidad Central de Procesamiento. La CPU es el componente que ejecuta las instrucciones del programa alojado en la memoria del ordenador. Los procesadores están fabricados

Más detalles

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR Tema 1. Programación de un computador TEMA 1. CIÓN DE UN COMPUTADOR 1. CONCEPTO DE 2. LENGUAJES DE CIÓN 2.1. LENGUAJE MÁQUINA 2.2. LENGUAJE ENSAMBLADOR 2.3. LENGUAJE DE ALTO NIVEL 3. ALGORITMOS. REPRESENTACIÓN

Más detalles

I.T.S.C.S. Instituto tecnológico superior compu sur SYLLABUS DE ARQUITECTURA I REF: ARQUITECTURA DE HARDWARE

I.T.S.C.S. Instituto tecnológico superior compu sur SYLLABUS DE ARQUITECTURA I REF: ARQUITECTURA DE HARDWARE I.T.S.C.S. Instituto tecnológico superior compu sur SYLLABUS DE ARQUITECTURA I REF: ARQUITECTURA DE HARDWARE 1. FICHA TÉCNICA. 1.1. Nombre de la Carrera TECNOLOGIA ANALISIS DE SISTEMAS 1.2. Nombre de la

Más detalles

FUNCIONAMIENTO DEL ORDENADOR

FUNCIONAMIENTO DEL ORDENADOR FUNCIONAMIENTO DEL ORDENADOR COMPUTACIÓN E INFORMÁTICA Datos de entrada Dispositivos de Entrada ORDENADOR PROGRAMA Datos de salida Dispositivos de Salida LOS ORDENADORES FUNCIONAN CON PROGRAMAS Los ordenadores

Más detalles

Tecnologías, Organización y Microarquitectura

Tecnologías, Organización y Microarquitectura Septiembre 2012 Tecnología de Integración Nanotecnología Tecnología de Integración Imágenes obtenidas con TEM (Transmission Electron Microscope) de una cepa del virus de la influenza, y de un transistor

Más detalles

Sistemas de Computadoras

Sistemas de Computadoras Sistemas de Computadoras Índice Concepto de Computadora Estructura de la Computadora Funcionamiento de la Computadora Historia de las Computadoras Montando una Computadora Computadora Un sistema de cómputo

Más detalles

Arquitecturas GPU v. 2013

Arquitecturas GPU v. 2013 v. 2013 Stream Processing Similar al concepto de SIMD. Data stream procesado por kernel functions (pipelined) (no control) (local memory, no cache OJO). Data-centric model: adecuado para DSP o GPU (image,

Más detalles

Escuela Politécnica Ingeniería en Informática

Escuela Politécnica Ingeniería en Informática UNIVERSIDAD DE EXTREMADURA Escuela Politécnica Ingeniería en Informática OpenCL frente a CUDA para análisis de imágenes hiperespectrales diciembre, 2011 2 UNIVERSIDAD DE EXTREMADURA Escuela Politécnica

Más detalles

Área: INFORMÁTICA. Saber- Saber: Identificar DFD como herramienta para escribir los algoritmos de forma lógica.

Área: INFORMÁTICA. Saber- Saber: Identificar DFD como herramienta para escribir los algoritmos de forma lógica. Guía No: 2 Subdirección de Educación Departamento de Educación Contratada Colegio CAFAM Bellavista CED GUIA DE APRENDIZAJE Docente: Luz del Carmen Barrera Área: INFORMÁTICA Fecha: II BIMESTRE 2014 Grado:

Más detalles

En este video vamos a examinar los distintos tipos de ordenadores que podemos encontrar hoy en día.

En este video vamos a examinar los distintos tipos de ordenadores que podemos encontrar hoy en día. En este video vamos a examinar los distintos tipos de ordenadores que podemos encontrar hoy en día. Tenemos los supercomputadores son los más rápidos y más potentes. Están diseñados para tareas de cálculo,

Más detalles

Paralelismo en el procesador

Paralelismo en el procesador 2017 Paralelismo en el procesador ARQUITECTURA DE COMPUTADORAS ING. ELMER PADILLA AUTOR: GERARDO ROBERTO MÉNDEZ LARIOS - 20111013326 Ciudad universitaria, Tegucigalpa M.D.C., 04 de mayo del 2017. Contenido

Más detalles

J. Nicolás Bustos Pieper. Microprocesadores en. Microprocesadores para Comunicaciones Curso 2009/2010 5º E.T.S.I.T. - ULPGC

J. Nicolás Bustos Pieper. Microprocesadores en. Microprocesadores para Comunicaciones Curso 2009/2010 5º E.T.S.I.T. - ULPGC Microprocesadores en Consolas Microprocesadores para Comunicaciones Curso 2009/2010 5º E.T.S.I.T. - ULPGC 1 Índice Introducción... 3 Xbox 360... 3 PlayStation 3... 5 Wii... 7 Comparativa... 9 Referencias...10

Más detalles

El Microprocesador. Tecnología y Funcionamiento

El Microprocesador. Tecnología y Funcionamiento El Microprocesador Tecnología y Funcionamiento EL MICROPROCESADOR (I) El microprocesador aparece como un circuito integrado con una muy elevada escala de integración VHSI. El empleo de los microprocesadores

Más detalles

GUIA 24: REPERTORIO DE INSTRUCCIONES

GUIA 24: REPERTORIO DE INSTRUCCIONES Prof Sandro Costantini GUIA 24: INSTRUCCIONES Las instrucciones maquinas son las acciones elementales que puede ejecutar un computador Una acción compleja deberá codificarse como una secuencia de instrucciones

Más detalles

Guía para la documentación de proyectos de software

Guía para la documentación de proyectos de software Estructura y contenido Guía para la documentación de proyectos de software Organización de Computadoras Universidad Nacional del Sur 2017 1. Definiciones y especificación de requerimientos Los requerimientos/requisitos

Más detalles

ARQUITECTURA DE LA MEMORIA EN LOS DSPs

ARQUITECTURA DE LA MEMORIA EN LOS DSPs ARQUITECTURA DE LA MEMORIA EN LOS DSPs Xt Xt-1 Xt-2 Xt-(n-2) Xt-(n-1)..... D D D Co X C1 X Cn-2 Cn-1 X X +... + + Yt UN PROCESO TÍPICO EN EL PROCESAMIENTO DIGITAL DE SEÑALES, COMO PUEDA SER EL FILTRADO

Más detalles

Leapfrog Geo 3.1. Notas técnicas de la versión

Leapfrog Geo 3.1. Notas técnicas de la versión Página 1 Leapfrog Geo 3.1 Notas técnicas de la versión Este documento destaca las principales mejoras y nuevas funcionalidades de Leapfrog Geo 3.1. Por favor póngase en contacto con su equipo de soporte

Más detalles

Características Ventajas Desventajas Tipo de Núcleo Shell Gui. Para algunas cosas se debe de saber usar UNIX, muchos juegos no corren en Linux.

Características Ventajas Desventajas Tipo de Núcleo Shell Gui. Para algunas cosas se debe de saber usar UNIX, muchos juegos no corren en Linux. Nombre Sistema Operativo del Características Ventajas Desventajas Tipo de Núcleo Shell Gui Linux Unix Multitarea, multiusuario, redes y telecomunicaciones, internet, interconectividad, programación, portabilidad,

Más detalles

Tile64 Many-Core. vs. Intel Xeon Multi-Core

Tile64 Many-Core. vs. Intel Xeon Multi-Core Tile64 Many-Core vs. Intel Xeon Multi-Core Comparación del Rendimiento en Bioinformática Myriam Kurtz Francisco J. Esteban Pilar Hernández Juan Antonio Caballero Antonio Guevara Gabriel Dorado Sergio Gálvez

Más detalles

GUÍA DE APRENDIZAJE ARQUITECTURA DE COMPUTADORES

GUÍA DE APRENDIZAJE ARQUITECTURA DE COMPUTADORES GUÍA DE APRENDIZAJE ARQUITECTURA DE COMPUTADORES GRADO EN INGENIERIA DE COMPUTADORES Datos Descriptivos CENTRO RESPONSABLE: E.U. DE INFORMATICA OTROS CENTROS IMPLICADOS: CICLO: Grado sin atribuciones MÓDULO:

Más detalles

ARQUITECTURAS. Carlos Reveco D. IN73J Arquitectura, Diseño y Construcción de un Negocio con Apoyo TI.

ARQUITECTURAS. Carlos Reveco D. IN73J Arquitectura, Diseño y Construcción de un Negocio con Apoyo TI. ARQUITECTURAS 1 IN73J Arquitectura, Diseño y Construcción de un Negocio con Apoyo TI Carlos Reveco D. creveco@dcc.uchile.cl Arquitectura de una aplicación 2 Arquitectura: desarrolla un plan general del

Más detalles

Computadora y Sistema Operativo

Computadora y Sistema Operativo Computadora y Sistema Operativo Según la RAE (Real Academia de la lengua española), una computadora es una máquina electrónica, analógica o digital, dotada de una memoria de gran capacidad y de métodos

Más detalles