UNIVERSIDAD DE EXTREMADURA Escuela Politécnica

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

Download "UNIVERSIDAD DE EXTREMADURA Escuela Politécnica"

Transcripción

1 UNIVERSIDAD DE EXTREMADURA Escuela Politécnica MÁSTER UNIVERSITARIO EN COMPUTACIÓN GRID Y PARALELISMO Trabajo Fin de Máster Implementación paralela del algoritmo Pixel Purity Index para clúster de GPUs José Miguel Franco Valiente Septiembre, 2012

2 .

3 .

4 .

5 UNIVERSIDAD DE EXTREMADURA Escuela Politécnica MÁSTER UNIVERSITARIO EN COMPUTACIÓN GRID Y PARALELISMO Trabajo Fin de Máster Implementación paralela del algoritmo Pixel Purity Index para clúster de GPUs Autor: Fdo: Director: Fdo: José Miguel Franco Valiente Antonio J. Plaza Miguel Tribunal calificador Presidente: Fdo: Secretario: Fdo: Vocal: Fdo: CALIFICACIÓN FECHA

6 vi

7 Agradecimientos Quiero manifestar mi agradecimiento a todas las personas que, directa o indirectamente han contribuido al resultado de este trabajo. En especial: A María de los Ángeles, por su paciencia infinita, su gran ayuda y por sus ánimos recibidos durante la realización de este trabajo. A mi familia, por su apoyo incondicional y su confianza depositada en mi para poder llevar este trabajo a buen puerto. A Antonio Plaza y al grupo Hypercomp, por iniciarme en la línea de investigación en el análisis de datos hiperespectrales, por su buen trato recibido y su soporte y apoyo en las dudas que han surgido durante la realización de este trabajo. A CETA-CIEMAT, por permitirme el uso de sus recursos computacionales para la realización de este trabajo y especialmente a su personal por dedicarme su tiempo para resolver mis dudas y responder eficazmente a las incidencias detectadas. vii

8 viii

9 Resumen Desde hace unos años, el uso de las tarjetas gráficas (GPUs) para acelerar cálculos científicos se ha hecho muy popular, debido principalmente a la relación precio - rendimiento que se puede alcanzar con este tipo de dispositivos y al no necesitar éstos de grandes espacios ni instalaciones especiales para poder trabajar con ellos. Además, este tipo de dispositivos está siendo integrados en los grandes computadores, aumentando de manera notable sus capacidades de cómputo y permitiendo que arquitecturas híbridas de CPUs y GPUs aparezcan en los primeros puestos del ránking de supercomputadores Top500. Además, la aparición de los proveedores de computación en la nube o Cloud Computing como Amazon permite el acceso a cualquier usuario de a pie a recursos de computación de alto rendimiento, pagando solamente por el uso que se le dé a dichos recursos. Así pues, es posible configurar un clúster de computadores con CPUs de alto rendimiento y tarjetas GPU integradas en cuestión de segundos si se tiene un conocimiento básico de las APIs de los proveedores de cloud. En concreto, en la línea de investigación en el análisis de imágenes hiperespectrales para la observación remota de la Tierra, las GPUs están permitiendo disminuir el tiempo de procesamiento de este tipo de imágenes, algo fundamental debido al campo de aplicación de esta disciplina que comprende actividades como son la detección de incendios, detección de objetivos militares y el control de vertidos en la atmósfera o en aguas entre otras. Uno de los algoritmos más conocidos para la extracción de firmas espectrales puras o endmembers en imágenes multiespectrales o hiperespectrales es el algoritmo Pixel Purity Index o PPI. Este algoritmo es de gran relevancia debido a que las imágenes hiperespectrales capturadas por los sensores actuales de observación remota de la Tierra almacenan en cada píxel de resolución espacial una mezcla de sustancias puras. Esto quiere decir que un píxel representa una superficie, que suele ser mínimo del orden del metro cuadrado, donde puede aparecer vegetación, agua, edificaciones, etcétera. El algoritmo PPI se incluye en el paquete comercial ENVI, perteneciente a la compañía Exelis Visual Information Solutions. El núcleo de este trabajo reside en la implementación de una versión eficiente del algoritmo PPI para clúster de computadores cuyos nodos de cálculo integran tarjetas GPU (o clúster de GPUs). Para la implementación y ejecución de las pruebas se ha utilizado el clúster de GPUs de CETA- CIEMAT, localizado en Trujillo (Cáceres), que consta de 17 nodos de computación para el entorno de Test equipados con GPUs C1060 (S1070) de Nvidia y 32 nodos de computación para el entorno de Producción equipados con GPUs de la serie C2050 (S2050) y C2070 (S2070) de Nvidia. La implementación desarrollada de PPI se basa en las implementaciones de este algoritmo desarrolladas previamente para clúster de computadores y para tarjetas GPU. Por este motivo, este trabajo presenta un estudio comparativo de rendimiento entre las tres implementaciones paralelas comentadas. Asimismo, se presenta un estudio de las diferentes implementaciones llevadas a cabo en el marco de este trabajo con el fin de presentar la evolución del rendimiento desde la primera versión del algoritmo hasta la última, la cual incluye varias optimizaciones (entre ellas el uso de varias GPUs). Palabras clave Hiperespectral, Endmember, Pixel Purity Index, PPI, multigpu, ENVI. ix

10 x

11 Abstract In recent years, the use of graphic cards (GPUs) to accelerate scientific calculations has become very popular, mainly because of the price - performance ratio that can be achieved with these devices and because neither large spaces nor special facilities are required to work with them. In addition, these devices are being installed in supercomputers, resulting in a significant boost of their computing capabilities and allowing hybrid architectures of CPUs and GPUs appear at the top of the ranking Top500 of supercomputers. Moreover, the emergence of providers of computing resources or Cloud Computing such as Amazon allows any user to access to high performance computing resources, on a pay as you go service (paying only for the use made). Furthermore, it is possible to configure and use a computer cluster with highperformance CPU nodes and integrated GPU cards just in few minutes if you have basic knowledge of the APIs of cloud providers. It is precisely in the research on the analysis of hyperspectral imagery for remote sensing of Earth that GPUs are allowing to reduce the processing time of this kind of images, which is essential owing to the scope of this field which includes actions such as fire detection, military target detection and the control of waste in the atmosphere or water among others. One of the best known algorithms for extracting pure spectral signatures or endmembers in multispectral or hyperspectral images is the algorithm Pixel Purity Index or PPI. This algorithm is highly relevant because hyperspectral images captured by current sensors used in remote sensing store a mixture of pure substances in each pixel of the spatial resolution. This means that a pixel represents an area, usually of a size around a square metre, which may show vegetation, water, buildings and so on. The PPI algorithm is included in the retail software package ENVI, nowadays belonging to the company Exelis Visual Information Solutions. The core of this work lies in the implementation of an efficient version of the PPI algorithm for a computer cluster whose nodes have GPU cards (or GPU cluster). For its development and test the GPU cluster of CETA-CIEMAT has been used, being its present location the town of Trujillo (Cáceres). The afore mentioned infrastructure consists of 17 compute nodes for the Test environment equipped with C1060 GPUs (S1070) from Nvidia and 32 compute nodes for the Production environment equipped with C2050 series GPUs (S2050) and C2070 (S2070) also from Nvidia. Our implementation of PPI is based on previously developed versions of this algorithm for computer clusters and GPU cards. For this reason, a comparative study of performance of these three parallel implementations is made and discussed. Moreover, in the present paper, the different versions of the algorithm for a GPU cluster are compared to show how performance has evolved from the first to the final version, the latter including several optimizations such as the use of multiple GPUs. Keywords Hyperspectral, Endmember, Pixel Purity Index, PPI, multigpu, ENVI. xi

12 xii

13 Índice general 1. Motivaciones y objetivos Motivaciones Objetivos Organización del documento Antecedentes Análisis hiperespectral Concepto de imagen hiperespectral Sensores hiperespectrales Técnicas de análisis hiperespectral Pixel Purity Index (PPI) Orthogonal Subspace Projection (OSP) N-FINDR Necesidad de pararelismo Arquitecturas paralelas consideradas Procesamiento paralelo en clúster Message Passage Interface (MPI) Procesamiento paralelo en GPUs Nvidia TM CUDA Escritura de programas en CUDA El clúster de GPUs de CETA-CIEMAT Método Pixel Purity Index Implementaciones paralelas Implementación de PPI para un clúster de computadores Estrategias de particionamiento de datos hiperespectrales Detalle de la implementación Implementación paralela de PPI para GPUs Implementación paralela de PPI para un clúster de GPUs Resultados experimentales Descripción de las pruebas realizadas Parámetros del algoritmo PPI Entornos de pruebas Desarrollo de PPI para el clúster de GPUs Implementación sin optimizaciones Implementación Zero Copy Implementación con uso de memoria local Implementación con optimizaciones de compilación Implementación basada en memoria compartida Implementación multigpu Comparativa frente a otras implementaciones Conclusiones y trabajo futuro 73 xiii

14 xiv ÍNDICE GENERAL

15 Lista de tablas 2.1. Características de algunos sensores hiperespectrales ya en funcionamiento o que estarán disponibles a corto plazo Características de la imagen hiperespectral AVIRIS, capturada en 1995 sobre la región minera de Cuprite, En Nevada (Estados Unidos) Características de la imagen hiperespectral AVIRIS, capturada en 2008 sobre la región del lago St. Clair, en Michigan (Estados Unidos) Características de la imagen hiperespectral AVIRIS, capturada en 2009 sobre el Parque Nacional de Yellowstone, en Wyoming (Estados Unidos) Datos de ocupación de la GPU para la implementación MPI-CUDA sin optimizaciones del algoritmo PPI para el entorno de Test del clúster de CETA-CIEMAT Datos de ocupación de la GPU para la implementación MPI-CUDA sin optimizaciones del algoritmo PPI para el entorno de Producción del clúster de CETA-CIEMAT Resultados de ejecución (en sg.) de la implementación sin optimizaciones del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Resultados de ejecución (en sg.) de la implementación sin optimizaciones del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Resultados de ejecución (en sg.) de la implementación sin optimizaciones del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Datos de ocupación de la GPU para la implementación MPI-CUDA Zero Copy del algoritmo PPI para el entorno de Producción del clúster de CETA-CIEMAT Resultados de ejecución (en sg.) de la implementación Zero Copy del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Resultados de ejecución (en sg.) de la implementación Zero Copy del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Resultados de ejecución (en sg.) de la implementación Zero Copy del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Datos de ocupación de la GPU para la implementación MPI-CUDA local memory del algoritmo PPI para el entorno de Producción del clúster de CETA-CIEMAT Resultados de ejecución (en sg.) de la implementación local memory del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Resultados de ejecución (en sg.) de la implementación local memory del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Resultados de ejecución (en sg.) de la implementación local memory del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Datos de ocupación de la GPU para la implementación MPI-CUDA con optimizaciones de compilación del algoritmo PPI para el entorno de Producción del clúster de CETA- CIEMAT Resultados de ejecución (en sg.) de la implementación con optimizaciones de compilación del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Resultados de ejecución (en sg.) de la implementación con optimizaciones de compilación del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Resultados de ejecución (en sg.) de la implementación con optimizaciones de compilación del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Datos de ocupación de la GPU para la implementación MPI-CUDA basada en memoria compartida utilizados para el cálculo del tamaño del array a almacenar en dicho nivel de la jerarquía de memoria xv

16 xvi LISTA DE TABLAS Datos de ocupación de la GPU para la implementación MPI-CUDA basada en memoria compartida del algoritmo PPI para el entorno de Producción del clúster de CETA- CIEMAT Resultados de ejecución (en sg.) de la implementación basada en memoria compartida del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Resultados de ejecución (en sg.) de la implementación basada en memoria compartida del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Resultados de ejecución (en sg.) de la implementación basada en memoria compartida del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Datos de ocupación de la GPU para la implementación MPI-CUDA multigpu del algoritmo PPI para el entorno de Producción del clúster de CETA-CIEMAT Resultados de ejecución (en sg.) de la implementación multigpu del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Resultados de ejecución (en sg.) de la implementación multigpu del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Resultados de ejecución (en sg.) de la implementación multigpu del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Comparativa de resultados obtenidos para las versiones secuencial, clúster de computadores, GPUs y clúster de GPUs en el procesamiento de la imagen Cuprite Comparativa de resultados obtenidos para las versiones secuencial, clúster de computadores, GPUs y clúster de GPUs en el procesamiento de la imagen Lago St. Clair Comparativa de resultados obtenidos para las versiones secuencial, clúster de computadores, GPUs y clúster de GPUs en el procesamiento de la imagen Yellowstone... 71

17 Lista de figuras 2.1. Concepto de imagen hiperespectral Resultado de la toma de datos por parte de un sensor hiperespectral Tipos de píxeles en imágenes hiperespectrales Relación señal-ruido (SNR) en los diferentes canales de AVIRIS a lo largo de los últimos años (reproducido con permiso de Robert O. Green, investigador principal del proyecto AVIRIS) Representación de los modelos de mezcla en análisis hiperespectral: (a) Modelo de mezcla lineal (b) Modelo de mezcla no lineal Interpretación gráfica del modelo lineal de mezcla Representación gráfica del funcionamiento del algoritmo Orthogonal Subspace Projection (OSP) Representación gráfica del funcionamiento del algoritmo N-FINDR Supercomputador Columbia, localizado en el Ames Research Center de NASA, California (Estados Unidos) Esquema hardware de una GPU Arquitectura GPU frente a CPU Operaciones en coma flotante CPU frente a GPU Ancho de banda de memoria en GB/s de CPU frente a GPU Esquema del modelo de programación CUDA Esquema del modelo de memoria CUDA Supercomputador Tianhe-1A Clúster de GPUs MinoTauro del BSC Arquitectura del entorno HPC de CETA-CIEMAT Disposición de los elementos hardware del clúster Tesla de GPUs de CETA-CIEMAT Disposición de los elementos hardware del clúster Fermi de GPUs de CETA-CIEMAT Selección de los píxeles extremos para un conjunto de skewers en el algoritmo PPI Estrategias de particionamiento de imágenes hiperespectrales. (a) Particionamiento espectral. (b) Particionamiento espacial. (c) Particionamiento híbrido Particionamiento de datos en el algoritmo PPI Imagen real AVIRIS perteneciente a la región minera de Cuprite, en Nevada (Estados Unidos) Imagen real AVIRIS perteneciente la región del lago St. Clair, en Michigan (Estados Unidos) Imagen real AVIRIS perteneciente al Parque Nacional de Yellowstone, en Wyoming (Estados Unidos) Resultados visuales obtenidos de la ejecución del algoritmo PPI para las versiones de ENVI y clúster de GPUs sobre la imagen Cuprite Ejemplo de algunos de los minerales detectados en la imagen resultado de la ejecución de PPI sobre la imagen Cuprite Firmas espectrales de los minerales detectados en la imagen resultado de la ejecución de PPI para clúster de GPUs sobre la imagen Cuprite Resultados visuales obtenidos de la ejecución del algoritmo PPI para las versiones de ENVI y clúster de GPUs sobre la imagen Lago St. Clair xvii

18 xviii LISTA DE FIGURAS 6.8. Gráficas de la implementación sin optimizaciones del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Gráficas de la implementación sin optimizaciones del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Gráficas de la implementación sin optimizaciones del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Gráficas de la implementación Zero Copy del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Gráficas de la implementación Zero Copy del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Gráficas de la implementación Zero Copy del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Gráficas de la implementación local memory del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Gráficas de la implementación local memory del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Gráficas de la implementación local memory del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Gráficas de la implementación con optimizaciones de compilación del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Gráficas de la implementación con optimizaciones de compilación del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Gráficas de la implementación con optimizaciones de compilación del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Gráficas de la implementación basada en memoria compartida del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Gráficas de la implementación basada en memoria compartida del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Gráficas de la implementación basada en memoria compartida del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone) Gráficas de la implementación multigpu del algoritmo PPI para clúster de GPUs (Imagen: Cuprite) Gráficas de la implementación multigpu del algoritmo PPI para clúster de GPUs (Imagen: Lago St. Clair) Gráficas de la implementación multigpu del algoritmo PPI para clúster de GPUs (Imagen: Yellowstone)

19 Capítulo 1 Motivaciones y objetivos 1.1. Motivaciones El presente trabajo se enmarca dentro de las líneas de investigación del grupo de Computación Hiperespectral (HYPERCOMP), perteneciente al Departamento de Tecnología de Computadores y Comunicaciones de la Universidad de Extremadura, y está dedicado a la implementación eficiente de un algoritmo de procesamiento de imágenes hiperespectrales de la superficie terrestre para la extracción de referencias espectrales puras o endmembers, haciendo uso de un clúster de computadores cuyos nodos de cómputo están equipados con tarjetas GPU. El algoritmo implementado es el llamado Pixel Purity Index o PPI. Las aplicaciones de este algoritmo son numerosas, entre ellas destacan aplicaciones militares (detección de targets u objetivos), detección y monitorización de fuegos y agentes contaminantes en atmósfera y agua (agentes químicos o vertidos), agricultura de precisión y detección de minerales, entre otras aplicaciones. El algoritmo PPI es un algoritmo costoso computacionalmente hablando, debido a las iteraciones que debe realizar sobre los píxeles de la imagen hiperespectral a procesar. Esta característica provoca que los resultados de su ejecución se demoren demasiado en el tiempo, algo inadmisible dada la importancia de la respuesta temporal en las aplicaciones de dicho algoritmo. Además, la evolución de los sensores hiperespectrales provoca que el tamaño de las imágenes capturadas sea cada vez mayor, lo que también afecta al tiempo de ejecución del algoritmo. Este problema se puede generalizar a la mayoría de los algoritmos de análisis de imágenes multiespectrales o hiperespectrales. A día de hoy, el problema de la mejora del rendimiento de los algoritmos de análisis hiperespectral se ha abordado, según la literatura, optando por la paralelización de los algoritmos adaptada a diferentes infraestructuras de cómputo, como clústers de computadores, sistemas multiprocesador, tarjetas gráficas programables de propósito general (GPUs) y sistemas reconfigurables. Todas las alternativas presentan sus ventajas e inconvenientes, por lo que, de momento, no existe una solución que se adapte mejor a todos los problemas. La computación clúster presenta buenos resultados de rendimiento y se adapta adecuadamente al problema, especialmente para el tratamiento de datos almacenados en un repositorio de datos en tierra. El inconveniente reside en el procesamiento de datos en tiempo real, debido a que los datos deben ser comprimidos y enviados desde el elemento de captura hasta la localización del clúster, lo que penaliza la respuesta temporal. Además por razones más que evidentes, dado el elevado peso, consumo energético y de espacio no es posible realizar una instalación de este tipo on-board. Por otro lado, las implementaciones de los algoritmos de análisis hiperespectral orientadas a tarjetas GPU están a niveles del estado del arte, debido a que son dispositivos de reciente aparición y a su excelente relación precio - rendimiento. Trabajos recientemente publicados exponen rendimiento de ejecución muy cercanos al tiempo real. Por contra, actualmente las tarjetas GPU tienen un alto coste energético, por lo que de momento no son viables para su uso a bordo, pero dada su rápida evolución y la inversión en eficiencia energética de los fabricantes, es cada día más factible que lleguen a montarse junto a los dispositivos de captura. Por último, las sistemas reconfigurables son actualmente la implementación que menor coste energético lleva asociado y el menor peso asociado, lo que las hacen recomendables para su instalación a bordo. A día de hoy, se han consiguido buenos resultados para algunos algoritmos de procesamiento de imágenes hiperespectrales, pero tienen el inconveniente asociado de la limitación de recursos en arquitecturas tolerantes a la radiación y al menor rendimiento de los algoritmos implementados frente 1

20 2 CAPÍTULO 1. MOTIVACIONES Y OBJETIVOS a las soluciones anteriores. Actualmente, el uso de tarjetas GPU aplicado a la computación científica es un hecho, debido a su buen rendimiento, al bajo coste de adquisición y la aparición de entornos de programación que facilitan la explotación de este tipo de recursos. Tanto es así que los fabricantes están incluyendo este tipo de dispositivos en sus infraestructuras de clúster de computación, consiguiendo sistemas muy potentes que copan algunos de los puestos más altos del ranking de supercomputadores Top500. Este hecho, unido al reciente auge de la computación en la nube, mediante la cual un cienfífico o grupo de investigación puede tener acceso a recursos avanzados de supercomputación para su uso puntual a un precio razonable, hacen necesario la evaluación de rendimiento de este tipo de infraestructuras para su aplicación al análisis de imagen hiperespectral. Debido a esto, este trabajo tiene además como objetivo la elaboración de un estudio comparativo de rendimiento de varias implementaciones paralelas del algoritmo PPI, en sus versiones para clúster de computadores, GPU y clúster de GPUs. Esta última ha sido desarrollada especialmente para este trabajo y está orientada a su explotación en el clúster de GPUs de Centro Extremeño de Tecnologías Avanzadas (CETA), localizado en Trujillo (Cáceres). CETA es una subsede del Centro de Investigaciones Energéticas, Medioambientales y Tecnológicas (CIEMAT), un organismo público de investigación perteneciente al Ministerio de Economía y Competitividad del Gobierno de España Objetivos Como se ha comentado en el apartado anterior este trabajo tiene como principal objetivo la implementación eficiente del algoritmo de análisis de imagen hiperespectral PPI orientado a una arquitectura de clúster de computadores cuyos nodos de cálculo montan tarjetas GPUs. Para alcanzar este objetivo se presentan a continuación un conjunto de objetivos específicos a llevar a cabo para completar el objetivo final: 1. Realización de un estudio del algoritmo Pixel Purity Index en sus diferentes implementaciones, para identificar sus posibilidades de implementación para un clúster de GPUs. 2. Estudio del lenguaje de programación CUDA, de la librería MPI y de sus posibilidades de uso conjunto para llevar a cabo la implementación del algoritmo. 3. Implementación del algoritmo PPI paralelo para su ejecución en el clúster de GPUs de CETA- CIEMAT y optimización del tiempo de ejecución. 4. Realización de un estudio comparativo de rendimiento de las implementaciones paralelas del algoritmo PPI en sus versiones para clúster de computadores, GPUs y clúster de GPUs. El siguiente apartado describe la organización de este documento para facilitar el seguimiento del trabajo realizado para alcanzar estos ebjetivos Organización del documento El presente documento se organiza de la siguiente forma: 1. Motivaciones y objetivos El presente capítulo describe las motivaciones y objetivos del trabajo realizado. También se describe la organización general del documento. 2. Antecedentes En este capítulo se describen los conceptos fundamentales relacionados con el análisis de imágenes hiperespectrales, desde el concepto de imagen hiperespectral hasta los conceptos básicos relativos a la extracción de firmas espectrales puras. Además, este capítulo introduce los antecedentes relacionados con la aplicación de técnicas de computación paralela a problemas de análisis hiperespectral, describiendo la necesidad de pararalelismo y capacidad de procesamiento en tiempo real para determinados contextos de aplicación. 3. Arquitecturas paralelas consideradas En este apartado se describen las características de la arquitectura paralela considerada, el clúster de GPUs de CETA-CIEMAT, haciendo un repaso de los clúster de computadores y de las tarjetas gráficas programables (GPUs), que son la base de esta solución híbrida de cómputo, enumerando sus ventajas e incovenientes. Se presentan también las herramientas de programación utilizadas para el desarrollo de la implementación

21 1.3. ORGANIZACIÓN DEL DOCUMENTO 3 de PPI para el clúster de GPUs: la librería Message Passing Interface (MPI) y el entorno de desarrollo para Nvidia CUDA. 4. Método En este capítulo se describe y muestra la utilidad del algoritmo PPI para el análisis de imágenes hiperespectrales, así como su funcionamiento y filosofía. 5. Implementaciones paralelas Es esta sección se presentan las implementaciones paralelas del algoritmo PPI para clúster de computadores, tarjetas GPUs y clúster de GPUs (implementada en el marco de este trabajo) utilizadas para la realización del estudio comparativo de rendimiento que se describe en el capítulo posterior. 6. Resultados experimentales Este capítulo se divide en dos partes: la primera realiza un análisis comparativo de las diferentes evoluciones del algoritmo paralelo PPI para clúster de GPUs implementadas durante el desarrollo de este trabajo, y la segunda compara los resultados obtenidos de la versión de mejor rendimiento en el clúster de GPUs con las versiones de PPI para clúster de computadores y GPUs descritas en el capítulo anterior. 7. Conclusiones y trabajo futuro Este último capítulo está dedicado a la exposición de las conclusiones obtenidas tras la realización de este trabajo y a la exposición de una propuesta de trabajo futuro.

22 4 CAPÍTULO 1. MOTIVACIONES Y OBJETIVOS

23 Capítulo 2 Antecedentes En este capítulo se describen los conceptos fundamentales relacionados con el análisis de imágenes hiperespectrales. En primer lugar se describe el concepto de imagen hiperespectral, detallando sus particularidades y características. A continuación, se describen los sensores de adquisición de este tipo de imágenes, destacando el sensor utilizado para capturar las imágenes incluidas en este trabajo. Posteriormente, se da una visión general de las técnicas de extracción de firmas espectrales puras para finalizar exponiendo la necesidad de aplicar técnicas de computación paralela al análisis hiperespectral Análisis hiperespectral En este apartado se definen algunos conceptos básicos asociados al análisis de imágenes hiperespectrales de la superficie terrestre. Primeramente, se define el concepto de imagen hiperespectral, detallando particularidades y características propias de este tipo de imágenes de alta dimensionalidad para pasar a continuación a la descripción de los sensores de adquisición de este tipo de datos, haciendo hincapié en los utilizados en la captura de las imágenes usadas en este trabajo Concepto de imagen hiperespectral El análisis hiperespectral es una técnica avanzada de observación remota de la tierra caracterizada por la disponibilidad de imágenes con gran resolución en el dominio espectral (cientos o miles de bandas espectrales [14]). La evolución de las técnicas de análisis de datos hiperespectrales está marcada principalmente por la evolución de los dispositivos de captura y la instrumentación avanzada para la observación remota de la Tierra [38]. Los primeros sensores eran fundamentalmente de carácter espacial. Poco después aparecieron instrumentos capaces de medir singularidades en el espectro de la luz reflejada por los diferentes materiales presentes en el mundo real, utilizando varios canales espectrales, provocando la necesidad del desarrollo de técnicas de análisis hiperespectral [19]. Figura 2.1: Concepto de imagen hiperespectral Los sensores hiperespectrales actuales permiten la adquisición de imágenes digitales con un gran número de canales espectrales muy cercanos entre sí, obteniendo para cada porción de la escena o píxel una firma espectral característica para cada material [16]. Si se representa una imagen hiperespectral de forma gráfica, se obtendría un cubo cuyas dos primeras dimensiones, X e Y, corresponderían con 5

24 6 CAPÍTULO 2. ANTECEDENTES las coordenadas espaciales de un píxel determinado en la imagen, y la dimensión Z representaría la singularidad espectral de cada píxel según las diferentes longitudes de onda [9]. La figura 2.1 muestra una representación gráfica del concepto de imagen hiperespectral. Como se puede observar en la figura 2.1, las dimensiones espaciales de la imagen presentan los conceptos de línea y muestra, donde las líneas horizontales corresponderían a las líneas de la imagen hiperespectral y las verticales a las muestras. Además, se presenta el concepto de banda o canal, que representa la tercera dimensión de la imagen hiperespectral. Cada banda almacenará el valor capturado para cada longitud de onda de trabajo del sensor hiperespectral. Por lo tanto, cada píxel situado en la coordenada (x, y) es un vector de valores discretos, en el que cada elemento del vector corresponde a una de las longitudes de onda empleadas en el proceso de adquisición de la imagen. El resultado de la toma de datos sobre una determinada escena puede ser por lo tanto representado en forma de cubo, con dos dimensiones para representar la ubicación espacial de un píxel y una tercera que representa la singularidad espectral de cada píxel en diferentes longitudes de onda. Si denotamos una imagen hiperespectral como un cubo de datos F, se puede representar un píxel del imagen de coordenadas de resolución espacial (x, y) como F (x, y). La figura 2.2 ilustra el proceso de captura de una imagen hiperespectral de forma simplificada, tomando como dispositivo de ejemplo el sensor AVIRIS de NASA, que trabaja en un rango de logitudes de onda entre 400 y nm. Haciendo analogía con el procedimiento de toma de una foto con una cámara digital convencional, los sensores hiperespectrales son capaces de hacer fotos mucho más avanzadas, cuyos píxeles no solo almacenan los valores RGB, sino que además incluyen el resto de los valores espectrales en los que también trabaja el sensor (224 en total en el caso de AVIRIS). Con estos valores se obtiene una firma espectral característica que será utilizada en el proceso de análisis de la imagen [10]. Figura 2.2: Resultado de la toma de datos por parte de un sensor hiperespectral Como consecuencia del proceso de captura de imágenes por los sensores hiperespectrales, hay que destacar que en este tipo de imágenes es frecuente encontrar mezclas a nivel de subpíxel. Este hecho se debe principalmente a la insuficiente resolución espacial del sensor, normalmente del orden de varios metros cuadrados por píxel, para separar materiales espectralmente puros. Este fénomeno no es exclusivo de los sensores hiperespectrales, dado que ocurren de forma frencuente en la naturaleza y a todas las escalas [38, 21, 23, 29]. Consecuentemente podemos clasificar los píxeles de una imagen de forma general en dos grupos: Píxeles puros: aquellos en los que solo aparece un tipo de material (por ejemplo agua). Píxeles mezcla: aquellos en los que coexisten diferentes materiales a nivel de subpíxel (por ejemplo vegetación y suelo). La mayor parte de los píxeles de una imagen hiperespectral son píxeles mezcla frente a los píxeles puros, que pueden no existir en la propia imagen. La figura 2.3 muestra un ejemplo de adquisición de píxeles puros (a nivel macroscópico, es decir, si el tamaño del píxel de la imagen no es lo suficientemente grande para separar los diferentes materiales) y mezcla en imágenes hiperespectrales.

25 2.1. ANA LISIS HIPERESPECTRAL 7 Figura 2.3: Tipos de pı xeles en ima genes hiperespectrales Otros factores que influyen en la obtencio n de pı xeles mezcla son los efectos atmosfe ricos, los efectos de dispersio n mu ltiple debido a materiales que reflejan la luz de forma irregular (por ejemplo, algunos tipos de vegetacio n o algunos minerales, entre otros), por lo que dicho feno meno, y su caracterizacio n, es de gran intere s en el desarrollo de te cnicas de ana lisis de ima genes hiperespectrales. Para finalizar, comentar que un pı xel mezcla puede descomponerse en una coleccio n de espectros de pı xeles puros, denominados endmembers en la terminologı a y en un conjunto de valores o abundancias que indican la proporcio n o contribucio n individual de cada uno de los endmembers al valor espectral del pı xel mezcla. En los apartados siguientes se describen los modelos utilizados para describir esta situacio n denominada modelo de mezcla. Adema s se describen los sensores espectrales, haciendo hincapie en el sensor AVIRIS, utilizado para la adquisicio n de las ima genes consideradas en este trabajo Sensores hiperespectrales Hoy en dı a, existe un amplio abanico de sensores hiperespectrales para la observacio n remota de la Tierra. Segu n [26], se puede definir un sensor hiperespectral como un dispositivo capaz de medir la radiacio n reflejada en una gran cantidad de bandas muy estrechas. Este tipo de sensores son capaces de distinguir materiales, sustancias y objetos que los sensores multiespectrales no son capaces de distinguir. Para cada pı xel capturado se obtiene una firma espectral, que agrupa los valores de reflectancia obtenidos para cada longitud de onda de trabajo del sensor, lo que permite una caracterizacio n muy precisa de la superficie terrestre [19, 20].

26 8 CAPÍTULO 2. ANTECEDENTES Los sensores hiperespectrales pueden clasificarse según el modo en el que son transportados durante el procedimiento de captura de datos [19, 20]. Actualmente, la mayor parte son aerotransportados, como el Airborne Visible/Infrared Imaging Spectrometer (AVIRIS) de la NASA, utilizado para obtener las imágenes que apoyan este trabajo. Un ejemplo de sensor de satélite es el Hyperion, también de NASA y también son comunes los sensores de mano para muchos estudios de desarrollo y validación. AVIRIS es un sensor hiperespectral aerotransportado, con capacidades analíticas en las zonas visible e infrarroja del espectro [16]. Comenzó a funcionar en 1987, siendo el primer sistema de adquisición de imágenes capaz de obtener información en una gran cantidad de bandas espectrales estrechas y contiguas. AVIRIS puede obtener información espectral de 224 canales espectrales, que abarcan un rango de longitudes de onda entre 400 y nanómetros, con un ancho entre bandas muy pequeño, de aproximadamente 10 nanómetros. En 1989, AVIRIS pasó a ser un instrumento aerotransportado con el que se han obtenido imágenes de Estados Unidos, Canadá y Europa. Hasta el día de hoy, se han utilizado cuatro plataformas diferentes en las campañas de toma de datos [15]. En cuanto a las características propias del sensor hiperespectral de AVIRIS, se pueden destacar las siguientes: El sensor utiliza un explorador de barrido que permite obtener un total de 614 píxeles por cada oscilación. Posee un conjunto de espectrómetros que se pueden clasificar en dos grupos: Para la parte visible del espectro se utiliza el espectrómetro EFOS-A, que está compuesto por un array de 32 detectores lineales. Para la cobertura del infrarrojo se utilizan los espectrómetros EFOS-B, EFOS-C y EFOS-D, que están compuestos por arrays de 64 detectores lineales. Dispone de un sistema de calibración a bordo, el cual hace uso de una lámpara halógena de cuarzo que proporciona la radiación necesaria para comprobar el estado de los diferentes espectrómetros. La señal medida por cada detector se amplifica y codifica utilizando 12 bits. Esta señal se almacena en una memoria intermedia donde es sometida a una etapa de preprocesado, siendo registrada a continuación en una cinta de alta densidad de 10,4 GB a una velocidad de 20,4 MB/s. A lo largo de los años el sensor ha ido mejorando sus prestaciones en cuanto a la relación señalruido o signal to noise ratio (SNR). La figura 2.4 muestra una descripción de las prestaciones del sensor en cuanto a la relación SNR (para cada una de sus 224 bandas) a lo largo de los años en los que el sensor ha estado en funcionamiento [38]. Figura 2.4: Relación señal-ruido (SNR) en los diferentes canales de AVIRIS a lo largo de los últimos años (reproducido con permiso de Robert O. Green, investigador principal del proyecto AVIRIS)

27 2.2. TÉCNICAS DE ANÁLISIS HIPERESPECTRAL 9 Hyperion 1 EnMAP 2 HyspIRI 3 País Estados Unidos Alemania Estados Unidos Resolución espacial 30 m 30 m 60 m Resolución temporal 16 días 4 días 18 días Rango espectral nm nm nm Resolución espectral 10 nm 0,5-10 nm 10 nm Cobertura imágenes 7,7 km 30 km 120 km Cobertura terrestre Parcial Total Total Fecha lanzamiento Tiempo de vida previsto 10 años 6 años 6 años Tabla 2.1: Características de algunos sensores hiperespectrales ya en funcionamiento o que estarán disponibles a corto plazo A pesar de que AVIRIS puede considerarse como un sensor hiperespectral de referencia, existen otros sensores hiperespectrales de gran relevancia para la comunidad científica. La tabla 2.1 presenta algunas de las características de otros sensores ya en funcionamiento o de puesta en funcionamiento en breve Técnicas de análisis hiperespectral Como se comentaba en el apartado 2.1, la mayoría de las técnicas desarrolladas de análisis hiperespectral presuponen una mezcla a nivel de subpíxel y se debe principalmente a la insuficiente resolución espacial del sensor. Pero este fenómeno no es exclusivo del análisis hiperespectral, dado que ocurre de forma natural en el mundo real, a todas las escalas, por lo que el diseño de técnicas que sean capaces de modelarlo de forma adecuada resulta imprescindible. Dentro de las técnicas de análisis hiperespectral podemos distinguir dos grupos, según el modelo de mezcla que suponen: Modelo lineal: Asume que los elementos observados se relacionan de forma lineal durante el proceso de observación (ver figura 2.5 (a)). Modelo no lineal: Asume que los componentes se distribuyen de forma aleatoria, pudiendo producirse incluso defectos de dispersión múltiple durante el proceso de observación (ver figura 2.5 (b)). Figura 2.5: Representación de los modelos de mezcla en análisis hiperespectral: (a) Modelo de mezcla lineal (b) Modelo de mezcla no lineal En análisis hiperespectral, el modelo lineal de mezcla es el más utilizado, debido a su sencillez y generalidad. Su objetivo es encontrar los vectores más extremos, conocidos como componentes espectralmente puros, píxeles puros o endmembers, y utilizarlos para desmezclar el resto de píxeles de la imagen mediante algún modelo de mezcla (linear mixture model). En este modelo, cada píxel puede

28 10 CAPÍTULO 2. ANTECEDENTES expresarse como una combinación de las firmas espectrales asociadas a los endmembers. Así pues, es crucial saber identificar los endmembers adecuadamente. 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, tal y como se muestra en la figura 2.6). En ella puede apreciarse que todos los puntos de la imagen quedan englobados dentro del triángulo formado por los tres puntos más extremos (elementos espectralmente más puros). Los vectores asociados a estos 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 éstos seleccionados como mejores candidatos a ser endmember [6]. Figura 2.6: Interpretación gráfica del modelo lineal de mezcla Los algoritmos de extracción de firmas espectrales puras se pueden clasificar atendiendo a varios criterios como el enfoque (estadísticos y geométricos) y la hipótesis de partida (presencia o ausencia de endmembers), entre otros. Destacamos la clasificación según la información considerada, que agrupa a los algoritmos de extracción de endmembers en dos grupos: Algoritmos basados en la información espectral: Realizan la búsqueda de los píxeles más puros considerando solo la información espectral. Algoritmos basados en la información espectral y espacial: durante la búsqueda de los endmembers combinan el uso de la información espacial y espectral (generalmente mediante morfología matemática o crecimiento de regiones). El algoritmo paralelizado en el marco de este trabajo es el Pixel Purity Index o PPI. Este algoritmo se incluye dentro de los algoritmos basados en la información espectral. Otros algoritmos que pertenecen a este grupo atendiendo a la misma clasificación son el Orthogonal Subspace Projection (OSP) y el N-FINDR. Para conocer el funcionamiento de estos algoritmos se describen brevemente a continuación Pixel Purity Index (PPI) El algoritmo Pixel Purity Index o PPI [7] fue desarrollado por Boardman, Kruse y Green en 1993 y se basa en la generación repetitiva de vectores unitarios o skewers con orientación aleatoria en la nube de puntos que forman la imagen hiperespectral. Cada punto de la imagen hiperespectral se proyecta sobre cada skewer identificando los puntos extremos en la dirección definida por éste e incrementando un contador asociado a estos puntos. Tras la ejecución de un número de iteraciones determinado se obtiene una imagen de pureza formada por los valores de los contadores asociados a cada píxel de resolución espacial de la imagen. El conjunto final de endmembers se extrae a través de un proceso interactivo de análisis y visualización. Este algoritmo ha sido objeto de paralelización en el marco de este trabajo y se definirá con más detalle en el capítulo 4.

29 2.2. TÉCNICAS DE ANÁLISIS HIPERESPECTRAL Orthogonal Subspace Projection (OSP) El algoritmo Orthogonal Subspace Projection o OSP fue desarrollado por Harsanyi y Chang en 1994 [17] para encontrar firmas espectrales utilizando el concepto de proyecciones ortogonales [34]. El algoritmo hace uso del concepto de proyección ortogonal, que viene dado por la fórmula 2.1, donde U es una matriz de firmas espectrales, U T es la traspuesta de dicha matriz e I es la matriz identidad. P U = I U(U T U) 1U T (2.1) El proceso efectuado por el algoritmo puede resumirse en los siguientes pasos: 1. Seleccionar el vector más brillante de la imagen como píxel inicial (primer endmember). 2. Aplicar un operador de proyección ortogonal al resto de los píxeles de la imagen para identificar aquel que sea más ortogonal con respecto al primer píxel seleccionado (segundo endmember). 3. Aplicar de nuevo un operador de proyección ortogonal al resto de píxeles para identificar aquel que sea más ortogonal a los dos endmembers seleccionados previamente. 4. Repetir el proceso hasta que seleccionemos el número de endmembers deseado. Figura 2.7: Representación gráfica del funcionamiento del algoritmo Orthogonal Subspace Projection (OSP) N-FINDR El algoritmo N-FINDR fue desarrollado por Winter en 2003 y utiliza una técnica basada en identificar los endmembers como los vértices del simplex de mayor volumen que puede formarse en el conjunto de puntos. N-FINDR no trabaja con todo el cubo de datos sino con una simplificación del mismo a tantas bandas como endmembers se deseen encontrar. Para este tipo de reducciones se suele utilizar la técnica Principal Component Analysis o PCA [18] o Minimum Noise Fraction o MNF [41]. El único parámetro que tiene este algoritmo es el número de endmembers a identificar. El funcionamiento del algoritmo se describe en los siguientes pasos: 1. Aplicar una reducción dimensional empleando el algoritmo PCA, que ordena las bandas de la imagen en términos de la varianza, o el MNF, que ordena las bandas de la imagen en términos de el ratio señal/ruido. 2. Realizar una selección inicial de N endmembers de forma aleatoria. 3. Probar cada píxel de la imagen en la posición de cada posible endmember manteniendo aquellos reemplazamientos que resulten en un incremento del volumen contenido en el hiperpolígono formado por los endmembers. 4. Repetir el proceso hasta que no se produzcan reemplazamientos.

30 12 CAPÍTULO 2. ANTECEDENTES Figura 2.8: Representación gráfica del funcionamiento del algoritmo N-FINDR 2.3. Necesidad de pararelismo El proceso de captura de datos por los sensores hiperespectrales de observación remota de la Tierra produce enormes cantidades de datos de gran dimensionalidad que deben ser almacenados y tratados de forma eficiente. Instituciones como NASA o la Agencia Espacial Europea (ESA) producen del orden de Terabytes de datos hiperespectrales diariamente y la falta de infraestructuras dedicadas al procesamiento de estos datos está dando lugar a que una parte significativa de los mismos acabe siendo almacenada en una base de datos para su procesamiento en el futuro. Esto en ocasiones no se materializa debido al alto coste computacional que supone el almacenamiento, procesamiento y distribución de este tipo de imágenes de forma eficiente. Los algoritmos de análisis hiperespectral anteriormente descritos se basan en operaciones matriciales muy costosas desde el punto de vista computacional [32]. Sin embargo, el carácter repetitivo de estas operaciones las hace susceptibles a ser paralelizadas, con el fin de aumentar el rendimiento de los algoritmos y disminuir el tiempo de generación del resultado, algo esencial teniendo en cuenta los campos de aplicación del análisis hiperespectral como la detección de incendios, el control de vertidos a la atmósfera y el agua y la detección de objetivos militares, entre otros. Las técnicas de computación paralela han sido ampliamente aplicadas al procesamiento de imágenes de gran dimensionalidad, facilitando la obtención de tiempos muy reducidos y pudiendo utilizar diferentes tipos de arquitecturas [33, 39, 27]. Acualmente, debido a la facilidad de acceso a arquitecturas paralelas de bajo coste, como GPUs, y a los servicios de computación de altas prestaciones ofrecidos por los proveedores de Cloud Computing como Amazon, existe actualmente una comunidad de investigadores muy activa dedicada al desarrollo de algoritmos eficientes de procesamiento de imágenes hiperespectrales. Este trabajo tiene como principal objetivo la implementación de una versión del algoritmo PPI para clúster de GPUs, una arquitectura paralela resultado de la incorporación de la tarjetas GPUs a un clúster de computadores de memoria distribuida. El siguiente capítulo describe el uso de clúster de computadores y de GPUs para el procesamiento de imágenes hiperespectrales y describe en detalle la infraestructura utilizada para el desarrollo y la ejecución de las pruebas realizadas en el marco de este trabajo: el clúster de GPUs de CETA-CIEMAT.

31 Capítulo 3 Arquitecturas paralelas consideradas En este apartado se describen las características de la arquitectura paralela objetivo: el clúster de GPUs de CETA-CIEMAT, haciendo un repaso de los clúster de computadores y de las tarjetas gráficas programables (GPUs), que son la base de esta solución híbrida de cómputo, enumerando sus ventajas e incovenientes. Se presentan también las herramientas de programación utilizadas para el desarrollo de la implementación de PPI para el clúster de GPUs: la librería Message Passing Interface (MPI) y el entorno de desarrollo para GPUs Compute Unified Device Architecture (CUDA) de Nvidia Procesamiento paralelo en clúster Hoy en día todavía no se conoce el origen exacto del término computación clúster. Algunos estudios atribuyen dicho origen a las investigaciones realizadas por Amdhal [5], quien acuñó las bases del procesamiento paralelo con la denominada Ley de Amdhal, la cual permite determinar la mejora máxima que puede alcanzar un sistema cuando sólo una parte del mismo se mejora. Esta ley permite describir de forma matemática el factor de aceleración o speedup que se puede conseguir paralelizando un bloque de código en una determinada arquitectura. La fórmula 3.1 define el cálculo del speedup conseguido de una versión paralela de un cógido frente a su versión secuencial. T 1 es el tiempo de ejecución de código secuencial y T P el tiempo de la versión paralela. S = T 1 /T P (3.1) En la actualidad el término clúster de computadores o clúster se refiere habitualmente a una red de computadores (interconectados entre sí mediante una red de comunicación) que trabajan de forma conjunta como un único recurso computacional, abstrayendo al usuario de la infraestructura física de interconexión y siendo a ojos de éste una sola máquina con una capacidad de cómputo mayor a la habitual. Un ejemplo de clúster utilizado para el procesamiento de datos hiperespectrales es el supercomputador Columbia, localizado en el centro Ames Research Center (ARC) de NASA, en California (Estados Unidos). Consta de procesadores y conexión de red de baja latencia de tipo Infiniband. Otro ejemplo de clúster de computadores utilizado esporádicamente para el tratamiento de datos hiperespectrales es el Mare Nostrum, localizado en el Barcelona Supercomputing Center (BSC) en Barcelona (España). El Mare Nostrum también consta de núcleos de computación y conexión a red de baja latencia de tipo Myrinet (ver figura 3.1). Los clúster de computación han supuesto desde su aparición una revolución en el cálculo científico, principalmente por sus capacidades de procesamiento de grandes volúmenes de datos. Pueden estar compuestos por máquinas con la misma configuración hardware y de sistema operativo (clúster homogéneo), de diferente configuración hardware y sistemas operativos similares (clúster semi-homogéneo) o bien disponer de hardware de diferente rendimiento con distintos sistemas operativos (clúster heterogéneo). A continuación se enumeran algunas de las características genéricas ofrecidas por este tipo de infraestructuras: Alto rendimiento: Los clústers ofrecen un rendimiento superior, lo que los hace indicados para la resolución de problemas de mayor tamaño. La capacidad de cálculo de un clúster es 13

32 14 CAPÍTULO 3. ARQUITECTURAS PARALELAS CONSIDERADAS Figura 3.1: Supercomputador Columbia, localizado en el Ames Research Center de NASA, California (Estados Unidos) generalmente superior a la de un ordenador más caro que el conjunto de máquinas que componen el clúster [8]. Además, es relativamente sencillo incorporar nuevas máquinas a la red de computadores para aumentar la capacidad de cómputo y realizarlo de manera transparente al usuario. Alta disponibilidad: En un clúster, el fallo de uno de los equipos conectados a la red no supone la pérdida total del servicio. Al contar con múltiples nodos, en caso de error es relativamente fácil extraer el nodo con problemas de la red y reemplazarlo por otro, sin que afecte al funcionamiento del clúster. Coste: Generalmente, un clúster se compone de múltiples máquinas de medio-bajo coste, fabricados a gran escala y que utilizan sistemas operativos estándar. En general, la construcción de un clúster es sencilla y relativamente económica, especialmente en los clúster homogéneos. En el caso de los clústers heterogéneos, es posible incluso implementar algoritmos capaces de administrar la carga de cada nodo de acuerdo a las características del mismo [30, 31]. Por otro lado, los costes de mantenimiento de un clúster son altos, debido a la demanda energética de los nodos de cálculo, del propio hardware de interconexión y de los sistemas de refrigeración necesarios para su adecuado funcionamiento. Además, al estar basados en máquinas de bajo coste, por lo general es necesario disponer de un gran espacio físico para su instalación. La popularidad de uso que alcanzaron los clústers provocó la necesidad de definir una serie de librerías estándar que permitiesen a los usuarios y desarrolladores la utilización y control de este tipo de sistemas de una manera más o menos intuitiva y estándar, que permitiesen la mayor abstracción posible respecto al hardware de ejecución. Ejemplos de este tipo de librerías son Parallel Virtual Machine (PVM) [40] y Message Passage Interface (MPI) [24]. Ésta última es la librería utilizada mayoritariamente por los clústers actuales, por lo que se describe brevemente a continuación Message Passage Interface (MPI) Según [3], MPI es un estándar que define la sintaxis y la semántica de las funciones contenidas en una biblioteca de paso de mensajes diseñada para ser utilizada en programas que exploten la existencia de múltiples procesadores. Actualmente es el estándar de comunicación entre los nodos que ejecutan un determinado código en un sistema de memoria distribuida, como los clúster de computadores. MPI no consiste en una implementación de una librería, sino que se considera un protocolo de comunicación entre máquinas. Debido a esto, existen multitud de implementaciones o sabores desarrollados en diferentes lenguajes como C, C++, Fortran y ADA, entre otros. La principal ventaja de MPI sobre otras bibliotecas de paso de mensajes es que se asegura la portabilidad de los programas que hacen uso de la librería, siempre que no se haga uso de funciones específicas de una implementación. Además, las implementaciones de MPI están optimizadas para una infraestructura hardware específica (por

33 3.1. PROCESAMIENTO PARALELO EN CLÚSTER 15 ejemplo, una red de comunicaciones Infiniband), aumentando por consiguiente el rendimiento de las operaciones de comunicación para dicha infraestructura. Los mensajes en MPI están compuestos por el cuerpo, que contiene los datos que van a ser enviados, y su envoltura, que contiene el emisor y el receptor del mensaje. El cuerpo de un mensaje MPI está formado por tres partes: Buffer: Dirección del área de memoria donde se encuentran los datos a enviar o donde se almacenarán los datos recibidos. Tipo de dato: Corresponde al tipo de los datos que se envía. En los casos simples es un tipo primitivo, análogo a los tipos de cualquier lenguaje de programación como C. En los casos de aplicaciones avanzadas, puede ser incluso una estructura formada por varios tipos de datos. Contador: Es un número de secuencia, que junto con el tipo de datos, permite agrupar datos de un mismo tipo en un solo mensaje. MPI estandariza los tipos de datos primitivos, evitando que el desarrollador del código se preocupe por las diferencias que existan entre ellos cuando interaccionan varias plataformas. Los mensajes MPI contienen la fuente del mensaje, su destinatario, e información adicional que se necesite para la transmisión y entrega del mensaje. Esta información consta de un identificador o comunicador al que pertenecen los procesos fuente y destino y una etiqueta también llamada tag que sirve para identificar el mensaje entre el conjunto de mensajes que pueda recibir el proceso. El número de procesos requeridos para la ejecución del programa se asigna previamente, y no se crean procesos adicionales mientras dure la ejecución del mismo. A cada proceso se le asigna un identificador, accesible a través de la variable rank, en el rango {0... P 1} donde P es el número de procesos. A través del uso de rank se puede determinar qué proceso ejecuta una determinada porción de código. Esta variable contiene el identificador asignado a un proceso dentro del comunicador al que pertenece. Por otro lado, el comunicador engloba la colección de procesos que pueden enviarse mensajes entre sí. Existe un comunicador básico llamado MPI COMM WORLD (nombre de la macro en C) que agrupa todos los procesos activos durante la ejecución de una determinada aplicación. Las funciones que define MPI se pueden clasificar en tres grupos diferenciados: Funciones de inicialización, administración y finalización de las comunicaciones: Estas funciones permiten la inicialización y finalización de la biblioteca de mensajes, la obtención del número de procesos y el identificador del proceso (rank) dentro del comunicador. Son cuatro funciones que se utilizan en todo programa MPI, a saber: MPI Init: Inicializa la sesión MPI. Esta función debe utilizarse antes de cualquier otra llamada a una función MPI. MPI Comm size: Obtiene el número total de procesos que pertenece a un comunicador. MPI Comm rank: Obtiene el identificador del proceso o rank dentro del comunicador al que pertenece. MPI Finalize: Finaliza la sesión MPI. Esta función debe ser la última de la librería utilizada dentro de un programa MPI. Permite liberar la memoria utilizada por la librería. Funciones de transferencia de datos punto a punto MPI Send: Permite el envío de información desde un proceso a otro. Esta función es bloqueante, es decir, que el proceso que realiza la llamada se bloquea hasta que la operación de comunicación se complete. Este tipo de llamadas devuelve un código que indica el éxito o el fracaso de la operación. MPI Recv: Permite la recepción de información desde otro proceso. Es una operación bloqueante. MPI Isend: Versión de MPI Send no bloqueante. Las llamadas no bloqueantes deben finalizar explícitamente con llamadas como MPI Wait. MPI IRecv: Versión de MPI Recv no bloqueante. MPI Wait: Llamada bloqueante que finaliza cuando una operación de envío o recepción se completa.

34 16 CAPÍTULO 3. ARQUITECTURAS PARALELAS CONSIDERADAS MPI Test: Permite comprobar si una operación de envío o recepción ha finalizado. Tras comprobar el estado retorna. Funciones de transferencia a varios procesos: Estas funciones son conocidas como operaciones colectivas o grupales, ya que están orientadas a un grupo de procesos. Este tipo de funciones incluyen operaciones de difusión (broadcasting), reparto (scattering), recolección (gathering) y reducción (reduction). Las funciones más populares de este grupo son las siguientes: MPI Barrier: Permite realizar una operación de sincronización de procesos. Esta sincronización no conlleva ningún intercambio de información y suele emplearse para dar por finalizada una etapa del programa esperando a que todos los procesos finalicen sus tareas antes de comenzar la siguiente. MPI Bcast: Permite a un proceso enviar una copia de sus datos al resto de procesos dentro del grupo definido por su comunicador. En el caso del comunicador global (MPI COMM WORLD), se enviaría a todos los demás procesos. MPI Scatter: Es similar a la operación MPI Bcast, pero en este caso el dato a enviar se reparte de forma equitativa entre el resto de procesos. MPI Gather: Es la operación contraria a MPI Scatter. Permite a un proceso realizar una recolección de datos de un conjunto de procesos, agrupándolos en un área de memoria común. MPI Reduce: Permite la recolección de datos de un conjunto de procesos, con la singularidad de que se realiza una combinación de éstos (por ejemplo, una suma o un promedio) y se genere un resultado. La especificación actual de MPI es la 2.2 y fue aprobada por el MPI Forum en Septiembre del Aunque es la última especificación, todas las funciones descritas en este apartado pertenecen a la primera especificación, cuya última versión (1.3) fue aprobada en Julio de La segunda especificación consta mayoritariamente de funciones avanzadas de comunicación, por lo que actualmente existe un gran grupo de usuarios que todavía utilizan la primera versión al cubrir ésta sus necesidades. Como dato adicional, la tercera versión de la especificación está en proceso de borrador y se estima que se aprobará en aproximadamente un año (2013). Esta nueva especificación incluirá, por ejemplo, las versiones no bloqueantes de las operaciones colectivas. El MPI Forum ha publicado una web 1 donde se puede encontrar información del estado del borrador y de las discusiones sobre MPI 3.0. Para finalizar, hay que comentar que la mayoría de las funciones descritas en este apartado se han utilizado en las implementaciones del algoritmo PPI para clúster y clúster de GPUs implementadas en el marco de este trabajo. Se describirá su uso en detalle en el capítulo Procesamiento paralelo en GPUs Una Unidad de Procesamiento Gráfico o GPU es un coprocesador diseñado inicialmente para el procesamiento de gráficos principalmente cuya misión es liberar a la CPU en aplicaciones de uso intensivo de gráficos como juegos y otras aplicaciones 3D interactivas. Recientemente, estos dispositivos han dejado de ser considerados de uso exclusivo para procesamiento gráfico y están siendo utilizados para computación de propósito general propiciado principalmente por la aparición de herramientas y librerías que simplifican el desarrollo de programas que explotan las capacidades de cálculo de las GPUs. En la actualidad, existen dos fabricantes principales de tarjetas GPUs, a saber, Nvidia y AMD, pero es el primero el que está liderando el mercado de las GPUs aplicadas a la computación de altas prestaciones gracias al framework Compute Unified Device Architecture (CUDA), que facilita el desarrollo de aplicaciones que explotan las capacidades de cómputo de sus productos. Por este motivo cuando en este apartado se haga referencia a una GPU, se referirá a una GPU de Nvidia que soporte CUDA. Una GPU se compone de un conjunto de multiprocesadores que podrían clasificarse dentro de los de tipo SIMD (Single Instruction Multiple Data) [12]. Cada uno de los multiprocesadores que compone la GPU cuenta con los siguientes elementos de memoria (ver figura 3.2): Un conjunto de registros por procesador main page.php

35 3.2. PROCESAMIENTO PARALELO EN GPUS 17 Figura 3.2: Esquema hardware de una GPU Una memoria compartida o cache paralela, que es compartida por todos los procesadores. Una cache de constantes y otra de texturas, ambas de solo lectura. La diferencia fundamental entre una GPU y una CPU radica en que la primera invierte ma s transistores para el procesamiento de datos que para cache y control de flujo que la segunda, como puede verse en la figura 3.3. Esto significa que una GPU esta preparada especialmente para afrontar problemas que pueden resolverse de forma paralela, y necesita muy poco control de flujo ya que estos problemas se basan fundamentalmente en la ejecucio n de un mismo programa a cada elemento de un conjunto de datos. Cabe destacar que a medida que van evolucionando GPUs y CPUs, tanto la capacidad de procesamiento como el ancho de banda de las primeras crece de forma exponencial (ver figuras 3.4 y 3.5). Figura 3.3: Arquitectura GPU frente a CPU Aun ası, la comparacio n directa de rendimiento CPU y GPU no es del todo correcta dado que las mediciones se basan en la ejecucio n de benchmarks de programas especı ficos. Las GPUs, al ser un hardware especializado, no implementan operaciones ni instrucciones de propo sito general que implementan las CPUs y no esta n destinadas a sustituir a e stas en ningu n momento. En el siguiente apartado se describen las caracterı sticas fundamentales de Nvidia CUDA, utilizado para todos los desarrollos para GPU que se han realizado en el marco de este trabajo.

36 18 CAPÍTULO 3. ARQUITECTURAS PARALELAS CONSIDERADAS Figura 3.4: Operaciones en coma flotante CPU frente a GPU Figura 3.5: Ancho de banda de memoria en GB/s de CPU frente a GPU Nvidia TM CUDA CUDA son las siglas de Compute Unified Device Architecture y hace referencia tanto a un compilador como a un conjunto de herramientas de desarrollo creadas por Nvidia que permiten a los programadores usar una variación del lenguaje de programación C para aprovechar la potencia de computación masiva en paralelo de las GPUs de Nvidia para propósito general. CUDA presenta un nuevo modelo de programación en paralelo que permite resolver problemas complejos de forma más eficiente que si se tratase de una CPU. Una de las singularidades es que utiliza un modelo de computación paralela donde cada uno de los procesadores ejecuta un mismo bloque de código o kernel sobre diferentes datos en paralelo. CUDA consigue el paralelismo a través de tres elementos estructurados y anidados: hilos, bloques y grids. Los hilos se agrupan en bloques y los bloques en grids (ver figura 3.6). Un hilo o thread es la unidad más básica e indivisible de paralelismo en CUDA. Estos elementos son utilizados para ejecutar bloques de código organizados según el criterio del desarrollador, permitiendo elegir una configuración adecuada para maximizar el rendimiento. La GPU permite definir un solo grid para cada ejecución de un kernel, en el cual pueden definirse tantos bloques dentro del grid, e hilos dentro de cada bloque como se desee (teniendo en cuenta las limitaciones de la versión de la arquitectura). El número de hilos de un bloque será el mismo para la invocación de un kernel, pudiendo ser diferente para las siguientes invocaciones que vayan a ser ejecutadas. La configuración de grids y bloques se puede definir utilizando varias dimensiones, lo que permite afrontar problemas complejos de una manera más sencilla (por ejemplo, el procesamiento de un cubo de datos hiperespectrales). En cada multiprocesador de la GPU solamente puede ejecutarse un mismo bloque de código a la vez, y mientras éste no termine no podrá ejecutarse otro. Por lo tanto, es muy importante controlar qué hacen los hilos durante la ejecución y maximizar el número de hilos corriendo a la vez para obtener el mayor rendimiento posible. La diferencia de estos hilos frente a los de la CPU es que

37 3.2. PROCESAMIENTO PARALELO EN GPUS 19 Figura 3.6: Esquema del modelo de programación CUDA son extremadamente ligeros y operaciones como su creación y el cambio de contexto tienen un coste insignificante. Las GPUs pueden manejar miles de hilos frente a los procesadores convencionales, que solo pueden manejar unos pocos. Como cada hilo de un bloque ejecuta el mismo bloque de código, el identificador de éstos puede ser utilizado para realizar parte del control de flujo y para calcular la dirección de memoria de inicio de los datos a procesar. Éste es el motivo por el que CUDA facilita de manera notable la realización de cálculos vectoriales y matriciales, muy utilizados en los algoritmos de procesamiento de imágenes hiperespectrales. Otra característica de CUDA es que permite la compartición de datos entre los hilos de un mismo bloque para evitar cálculos redundantes y compartir accesos a memoria con el fin de aumentar el ancho de banda en dichos accesos. Estas características vienen dadas principalmente por el modelo de memoria. El modelo de memoria de CUDA (ver figura 3.7) define una jerarquía de memoria para el acceso a los datos. Siguiendo los elementos descritos en el modelo de programación, cada hilo posee su propia memoria privada, de tiempo de acceso muy rápido. Por otro lado, cada bloque tiene acceso a su propia memoria, que es compartida y está disponible para todos los hilos que componen el bloque. El tiempo de vida de la memoria de hilo y de bloque es el mismo que la del elemento en sí, es decir, cuando el elemento termine su ejecución ésta dejará de estar disponible. En el nivel más alto de la jerarquía se encuentra la memoria global, compartida entre todos lo hilos en ejecución en la GPU. Además, existen dos tipos de memoria adicionales de solo lectura: la memoria de texturas y la memoria de constantes. Estas dos memorias son globales a todos los hilos y están optimizadas para utilizarse con tipos de datos específicos. Estas tres memorias (global, constantes y texturas) tienen el mismo tiempo de vida que la aplicación que las invoca, perdurando entre diferentes invocaciones de kernels dentro de la misma ejecución de la aplicación. Destacar que desde la aparición de la gama de GPUs Fermi, se proporciona un nuevo nivel de memoria basado en cachés. Cada hilo, además de tener acceso a su memoria privada y a la memoria compartida de bloque, tiene acceso a una caché de nivel 1 (L1) con velocidad de acceso similar a la memoria compartida. De hecho, CUDA proporciona una función (cudafuncsetcacheconfig) que permite al desarrollador aumentar para cada kernel el tamaño de la memoria caché L1 en detrimento del tamaño de la memoria compartida o viceversa. Por otro lado también se implementa un segundo nivel de memoria caché (L2), de 768KB de tamaño para los chips de 512 cores, que cubre tanto la memoria global de la GPU como la memoria del sistema. Una de las características que presenta este sistema de caché L2 que no está presente en las CPUs es la inclusión de un conjunto de instrucciones de lectura-modificación-escritura de memoria que son atómicas y, por lo tanto, muy adecuadas para

38 20 CAPÍTULO 3. ARQUITECTURAS PARALELAS CONSIDERADAS Figura 3.7: Esquema del modelo de memoria CUDA gestionar el acceso a datos compartidos entre los diferentes bloques o incluso kernels. La finalidad principal de las cachés L1 y L2 es ayudar a mejorar el rendimiento de los accesos aleatorios a memoria Escritura de programas en CUDA Una característica importante del desarrollo de programas para GPUs es que tienen que desarrollarse en CUDA. Al ser una variación del lenguaje C no resulta especialmente complicado para un desarrollador con experiencia en este lenguaje. El desarrollo de programas en CUDA se realiza principalmente utilizando un lenguaje de alto nivel como C o C++ (se pueden utilizar otros ya que existen wrappers específicos para otros lenguajes) e implementando las funciones que se deseen ejecutar en la GPU utilizando las extensiones proporcionadas por CUDA. A continuación se describen los tipos de datos y funciones, variables predefinidas y funciones más comúnmente utilizadas en el desarrollo de estos programas. Declaración de funciones: device : Indica que una función será ejecutada por la GPU e invocada desde un kernel. global : Indica que una función será ejecutada por la GPU y será llamada por el código secuencial. Es el modificador utilizado en la declaración de un kernel. host : Indica que una función será ejecutada por la CPU y será llamada por el código secuencial. Es el modificador aplicado por omisión. Declaración de variables: device : La variable residirá en memoria global, siendo accesible por todos los threads de cualquier grid durante el tiempo de vida de la aplicación. constant : La variable residirá en memoria constante, siendo accesible por todos los threads de cualquier grid durante el tiempo de vida de la aplicación. Es de solo lectura. shared : La variable residirá en memoria compartida y será accesible por todos los hilos de un bloque durante el tiempo de vida del mismo. Variables predefinidas: dim3 griddim: Dimensiones de un grid. Un grid puede tener 3 dimensiones como máximo (x, y y z). En las GPUs actuales, el máximo valor para una dimensión es por lo que el número máximo de bloques en una grid será uint3 blockidx: Índice de un bloque dentro de un grid. Almacena los valores para las 3 dimensiones en los atributos x, y y z.

39 3.3. EL CLÚSTER DE GPUS DE CETA-CIEMAT 21 dim3 blockdim: Dimensiones de un bloque. Al igual que los grids, pueden tener hasta 3 dimensiones. Un bloque puede tener hilos como máximo (x y z 1024, z 64). uint3 threadidx: Índice de un hilo dentro de un bloque. Almacena los valores para las 3 dimensiones en los atributos x, y y z. int warpsize: Número de hilos en un warp. Un warp es un grupo de hilos paralelos que controla un multiprocesador de una GPU. Un warp tiene 32 hilos. Algunas funciones básicas: cudamalloc: Reserva memoria en la GPU. Es similar a la función malloc de C para la CPU. cudafree: Libera la memoria de la GPU reservada para una dirección de memoria dada. Es similar a la función free de C para la CPU. Si no se libera memoria entre ejecuciones de kernels el espacio permanece ocupado. cudamemcpy: Permite transferir memoria de manera bloqueante. Principalmente se utiliza para transferencias de host a GPU y viceversa, aunque se puede utilizar de host a host para, por ejemplo, copiar memoria a un área no paginable. cudamemcpyasync: Similar a la función cudamemcpy pero no es bloqueante. syncthreads: Sirve para establecer un punto de sincronización (barrera) entre los hilos de un bloque. La mayoría de estas funciones y variables se han utilizado en la implementación paralela del algoritmo PPI para clúster de GPUs desarrollada bajo el marco de este trabajo. En el apartado siguiente, se describe la infraestructura utilizada parar el desarrollo y la ejecución de las pruebas; el clúster de GPUs de CETA-CIEMAT El clúster de GPUs de CETA-CIEMAT Tras la introducción realizada en los apartados anteriores a computación clúster y GPU, en este apartado se describe una arquitectura de computación de reciente aparición que surge de la hibridación de ambas soluciones de cómputo: el clúster de GPUs. Un clúster de GPUs es el resultado de equipar cada nodo de cómputo de un clúster de computadores con una o varias GPU. Esta nueva arquitectura pretende aprovechar las altas capacidades de cómputo de las tarjetas GPU para incrementar el rendimiento global de una infraestructura de tipo clúster. La incorporación de este tipo de dispositivos es muy sencilla y puede realizarse sin que ello suponga una gran inversión económica, pudiendo incluso ser incorporadas a una infraestructura clúster ya existente. Tal es la potencia de cálculo alcanzada por este tipo de arquitectura de cómputo que ya copan algunas de las posiciones privilegiadas dentro del ránking de supercomputadores Top En el momento de la escritura de esta memoria, el primer clúster de GPUs que podemos encontrar es el Tianhe-1A (ver figura 3.8), en la posición 5, localizado en el National Supercomputing Center in Tianjin (China). En el momento de su puesta en marcha (Octubre de 2010) llegó a alcanzar el número 1 del Top500. Este supercomputador se compone de nodos de CPU y Nvidia Tesla M2050, llegando a alcanzar los 2,507 Petaflops. En la actualidad, se utiliza para simulación aérea y extracción de petróleo entre otros usos. En lo que a España respecta, el clúster de GPUs más potente que existe a día de hoy es MinoTauro (ver figura 3.9), ubicado actualmente en el Centro Nacional de Análisis Genómico (CNAG) de Barcelona y perteneciente al Barcelona Supercomputing Center (BSC). Está formado por 128 CPUs de seis núcleos y 64 tarjetas GPU Nvidia Tesla M2090. Actualmente es el supercomputador más eficiente de Europa. Otra instalación española a destacar es el clúster de GPUs del Centro Extremeño de Tecnologías Avanzadas (CETA), ubicado en Trujillo (Cáceres). El CETA es una subsede del Centro de Investigaciones Energéticas, Medioambientales y Tecnológicas (CIEMAT) dedicado a la investigación, desarrollo y servicio en tecnologías de la información y de las comunicaciones en beneficio de la ciencia, la industria y la sociedad en general, en los ámbitos extremeño, español, europeo y latinoamericano. CIEMAT es un Organismo Público de Investigación adscrito al Ministerio de Economía y Competitividad para la Fuente:

40 22 CAPÍTULO 3. ARQUITECTURAS PARALELAS CONSIDERADAS Figura 3.8: Supercomputador Tianhe-1A 3 Figura 3.9: Clúster de GPUs MinoTauro del BSC 4 investigación de excelencia en materias de energía y medio ambiente, así como en múltiples tecnologías de vanguardia y en algunas áreas de investigación básica. El clúster de GPUs de CETA se compone de dos subsclústers de GPUs (llamados comúnmente clúster Tesla y clúster Fermi), donde cada uno cuenta con GPUs pertenencientes a las generaciones Tesla y Fermi de NVIDIA. El clúster Tesla está compuesto de 17 nodos de cómputo y está destinado al desarrollo y pruebas de programas, así como para el aprendizaje de uso del clúster. Por otro lado, el clúster Fermi está compuesto de 32 nodos de cómputo y está dedicado a la producción científica. Ambos entornos usan una red de comunicaciones de tipo Infiniband. El clúster Tesla también es denominado entorno de Test y el clúster Fermi entorno de Producción. Las figuras 3.11 y 3.12 muestran en detalle los elementos del clúster y su disposición física. Cada nodo del clúster está compuesto del siguiente equipamiento: 2 x Quad Core Intel Xeon 2,26 GHz. 24 GB SDRAM DDR3 1333MHz ECC. 500 GB SATA. 2 Nvidia Tesla C1060 (mitad de un TESLA S1070), para los nodos del entorno de Test y 2 Nvidia Tesla C2050 (mitad de un S2050) o 2 Nvidia Tesla C2070 (mitad de un S2070) para los nodos del entorno de Producción. Para la gestión y planificación de los trabajos que se envían al clúster se utiliza el software Simple Linux Utility for Resource Management (SLURM). SLURM es un software de fuentes abiertas, tolerante a fallos y de alta escalabilidad orientado a clústers de computadores basados en Linux. Define un conjunto de colas o entornos que agrupan los recursos del clúster (ver figura 3.10), permitiendo la asignación de diferentes permisos y prioridades por cada entorno a los usuarios del clúster. 4 Fuente: id=44

41 3.3. EL CLÚSTER DE GPUS DE CETA-CIEMAT 23 Figura 3.10: Arquitectura del entorno HPC de CETA-CIEMAT (Imagen cedida por el Dr. Abel F. Paz, Responsable de Infraestructura de CETA-CIEMAT) El clúster de GPUS de CETA-CIEMAT es un clúster semi-homogéneo, ya que todos los nodos de cómputo funcionan con el mismo sistema operativo (CentoOS 6.2 de 64 bits). El espacio de almacenamiento de usuario está basado en el sistema de ficheros distribuido LUSTRE. Soporta el uso de MPI, utilizando el sabor MVAPICH 1.8 (implementación de MPI optimizada para redes Infiniband) y CUDA en su versión 4.1. Los usuarios acceden al clúster a través de una máquina de login (loginhpc.ceta-ciemat.es), que contiene una gran variedad de compiladores así como librerías de cálculo cienfífico. Desde este nodo se compilan los programas y se envían al clúster para su ejecución. Actualmente el clúster está siendo utilizado por diferentes grupos de investigación nacionales e internacionales de diferentes disciplinas como Genómica, Física de Altas Energías, Dinámica de Fluidos y Análisis de Imágenes Hiperespectrales, entre otras. En esta línea de investigación, hay que comentar

42 24 CAPÍTULO 3. ARQUITECTURAS PARALELAS CONSIDERADAS que el desarrollo y pruebas de las diferentes versiones paralelas del algoritmo PPI para clúster de GPUs se han llevado a cabo satisfactoriamente utilizando la infraestructura de CETA-CIEMAT. Figura 3.11: Disposición de los elementos hardware del clúster Tesla de GPUs de CETA-CIEMAT (Imagen cedida por el Dr. Abel F. Paz, Responsable de Infraestructura de CETA-CIEMAT)

43 3.3. EL CLÚSTER DE GPUS DE CETA-CIEMAT 25 Figura 3.12: Disposición de los elementos hardware del clúster Fermi de GPUs de CETA-CIEMAT (Imagen cedida por el Dr. Abel F. Paz, Responsable de Infraestructura de CETA-CIEMAT)

44 26 CAPÍTULO 3. ARQUITECTURAS PARALELAS CONSIDERADAS

45 Capítulo 4 Método En este capítulo se describe el algoritmo Pixel Purity Index también conocido como PPI. Este algoritmo es un conocido método de extracción de endmembers en imágenes hiperespectrales y multiespectrales. Este algoritmo ha sido seleccionado para este trabajo por su sencillez de implementación y su elevado coste computacional. En capítulos posteriores se describen las diferentes implementaciones paralelas para clúster de computadores, tarjetas GPU y clúster de GPUs utilizadas para el análisis de rendimiento Pixel Purity Index El algoritmo Pixel Purity Index o PPI es uno de los algoritmos de selección de píxeles puros o endmembers más conocidos. El algoritmo PPI [7] fue desarrollado por Boardman, Kruse y Green en 1993 y posteriormente fue incorporado al software ENVI de Exelis Visual Information Solutions (inicialmente desarrollado por Better Solutions Consulting, LLC). El algoritmo parte de la generación de un conjunto amplio de vectores aleatorios N-dimensionales llamados skewers. Cada punto de la imagen hiperespectral se proyecta en cada skewer y aquellos píxeles que correspondan a los extremos en la dirección de dicho skewer son selecionados como candidatos a firma espectral pura. Según crece el tamaño del conjunto de skewers, el número de píxeles seleccionados también aumenta y algunos de los píxeles seleccionados previamente vuelven a serlo. Finalizado el proceso para cada skewer, aquellos píxeles que han sido más veces seleccionados como candidatos, o dicho en otras palabras, aquellos con mayor índice de pureza, son considerados como firmas espectrales puras. PPI pertenece al conjunto de los métodos interactivos, es decir, que necesita intervención del usuario, y es el más representativo. Como se ha indicado anteriormente, su objetivo es localizar aquellos puntos de la imagen que son espectralmente más puros. Se basa en la suposición de que los puntos extremos del conjunto de píxeles son los mejores candidatos para ser utilizados como endmembers. Los parámetros del algoritmo son los siguientes: Una imagen multiespectral o hiperespectral a procesar. El número de iteraciones a realizar, esto es, el tamaño del conjunto de skewers a generar. Un valor umbral para seleccionar los píxeles puros. Los siguientes pasos describen el funcionamiento del algoritmo: 1. Inicialmente, el algoritmo asigna un índice de pureza a todos los píxeles de la imagen. El contador de selección de candidato como endmember se inicializa a 0 para cada píxel. 2. Posteriormente se genera un skewer o divisor. Es un vector unitario aleatorio cuyo objetivo es particionar el conjunto de píxeles de la imagen. 3. Una vez generado el skewer, se proyectan todos los píxeles de la imagen sobre éste, identificando los puntos extremos en la dirección definida por el vector unitario. El índice de pureza de los píxeles seleccionados se incrementa en 1. 27

46 28 CAPÍTULO 4. MÉTODO 4. Se repiten los pasos del punto 2 al punto 3 tantas veces como indique el parámetro de entrada número de iteraciones. 5. Una vez ejecutadas todas las iteraciones, se obtiene como resultado una imagen de pureza formada por los índices asociados a cada píxel de la imagen. Figura 4.1: Selección de los píxeles extremos para un conjunto de skewers en el algoritmo PPI 6. En este momento, se aplica el parámetro de entrada valor umbral, seleccionando aquellos píxeles de la imagen cuyo índice de pureza asociado es mayor que el valor umbral. Estos píxeles seleccionados son etiquetados como puros. La figura 4.1 muestra la selección de los píxeles extremos para un caso sencillo con tres skewers y seleccionando aquellos píxeles cuyo índice de pureza es mayor que Los píxeles seleccionados se cargan en una herramienta intereactiva llamada N-dimensional Visualizer, incluída en ENVI, la cual permite realizar diagramas de dispersión de los primeros autovectores obtenidos tras la aplicación de una reducción de dimensionalidad (transformación MNF) sobre los datos originales. 8. Finalmente, utilizando el N-dimensional Visualizer, el usuario escoge manualmente aquellos píxeles o grupos de píxeles de la imagen que aparecen como extremos en proyecciones sucesivas, identificando un subconjunto de ellos que se etiquetarán como endmembers. En el caso de seleccionar un grupo de píxeles, el valor del endmember se calculará a partir del espectro medio. Una descripción analítica del algoritmo se describe a continuación [28]. Las entradas se definirían como: Un cubo de datos multiespectral o hiperespectral con N dimensiones. El tamaño del conjunto de vectores aleatorios que se van a generar durante la ejecución K. Un valor umbral de corte t v, utilizado para seleccionar como endmembers aquellos píxeles que han sido seleccionados como extremos al menos t v veces durante la ejecución del algoritmo. Y los pasos del algoritmo quedarían de la siguiente manera: 1. Generación de skewers: Produce un conjunto de K vectores generados aleatoriamente {skewer j } K j=1 2. Proyecciones de los extremos : Para cada skewer j, toda la muestra de píxeles f i del conjunto de datos original F se proyecta sobre el skewer j mendiante el cálculo del producto escalar para encontrar los píxeles de muestra que son extremos (máximo y mínimo). De esta forma se obtiene un conjunto de extremos para el skewer j que se denota por S extrema (skewer j ). El producto escalar se calcula de la forma f i skewer j.

47 4.1. PIXEL PURITY INDEX 29 A pesar del hecho de que diferentes skewers skewer i y skewer j pueden generar conjuntos de extremos diferentes S extrema (skewer i ) y S extrema (skewer j ), es muy probable que una misma muestra de vectores aparezca en más de un conjunto de extremos. Para hacer frente a este situación se define la función l S (x) la cual denota la pertenencia de un elemento x para un conjunto particular S. Esta función se define por la función 4.1 l S (f i ) = { 1 si x S 0 si x / S 3. Cálculo de las puntuaciones PPI: Utilizando la función 4.2, se calcula la puntuación PPI asociada a un vector de la muestra f i (número de veces que un pixel dado ha sido seleccionado como extremo) (4.1) N P P I (f i ) = Σ K j=1i Sextrema(skewer) j (f i ) (4.2) La parte del algoritmo PPI que es más costosa computacionalmente hablando es la descrita en el paso 2 (Proyecciones de los extremos), pero es muy adecuada para ser paralelizada, ya que no hay dependencia de datos entre iteraciones. Por último, se ha de comentar que el algoritmo PPI contiene etapas totalmente automatizadas, como la fase de generación de la imagen de pureza, pero se hace necesaria una etapa interactiva final en la que el usuario debe seleccionar manualmente aquellos píxeles que quiere utilizar como endmembers. El usuario no conoce de antemano cuál es el número apropiado de endmembers a seleccionar, por lo que el conocimiento a priori de la imagen es muy conveniente. Este hecho y la aleatoriedad de la generación de los skewers representan los principales inconvenientes de esta metodología [22]. En el siguiente capítulo se describen las diferentes implementaciones paralelas del algoritmo PPI desarrolladas para un clúster de computadores, tarjetas GPUs y para clúster de computadores equipados con tarjetas GPUs.

48 30 CAPÍTULO 4. MÉTODO

49 Capítulo 5 Implementaciones paralelas En este capítulo se presentan las diferentes versiones de implementaciones paralelas desarrolladas para el algoritmo de extracción de firmas espectrales puras Pixel Purity Index descrito en el capítulo anterior. Primeramente se describe la implementación paralela desarrollada para un clúster de computadores con el fin de acelerar la versión secuencial de dicho algoritmo. Además, se describe el problema del particionamiento de datos y el paralelismo adoptado, presentando algunos ejemplos prácticos que permiten analizar los pasos seguidos en el proceso de paralelización. A continuación, se explica la versión paralela de PPI para GPUs, comentando las funciones que se ejecutan en el dispositivo o kernels desarrollados y el esquema de pararelismo adoptado. Para finalizar se presenta la implementación desarrollada para el clúster de GPUs de CETA-CIEMAT, un clúster de computadores que contiene dos tarjetas GPU por nodo de cómputo Implementación de PPI para un clúster de computadores En este apartado se analizan la implementación de PPI realizada para clúster de computadores, prestando especial atención al esquema de paralelismo utilizado y a la comunicación entre los nodos de cómputo. Además, debido a que los algoritmos de análisis hiperespectral para esta arquitectura paralela se basan generalmente en el reparto de los datos a procesar entre los nodos del clúster, se presentan las diferentes estrategias de particionamiento que pueden adoptarse, destacando sus ventajas e inconvenientes Estrategias de particionamiento de datos hiperespectrales El problema de particionamiento de datos hiperespectrales para procesamiento en paralelo se ha explorado en diferentes aproximaciones en la literatura reciente [26]. En la mayor parte de los casos, el particionamiento de datos está asociado a un patrón de algoritmo paralelo maestro-esclavo o masterworker, en la que un proceso, el maestro o master, se encarga de realizar el particionamiento de los datos hiperespectrales y repartirlos entre el resto, los esclavos o slaves, los cuales se encargan de procesarlos. Una vez que el esclavo finaliza su tarea, genera un resultado parcial que envía de vuelta al maestro. Cuando éste ha recopilado los datos parciales de cada uno de los esclavos, se encarga de procesarlos y combinarlos para generar un resultado global. Teniendo en cuenta este patrón de procesamiento, a continuación se describen tres tipos de particionamiento de datos considerados en el presente trabajo a la vez que se presentan sus ventajas e incovenientes. Para finalizar se justifica la elección de uno de los tipos propuestos como modelo base para el desarrollo de las implementaciones paralelas descritas a lo largo del capítulo. 1. Particionamiento espectral. Este tipo de particionamiento divide el cubo de datos hiperespectrales en subvolúmenes, cada uno de los cuales resulta de seccionar el cubo con planos paralelos al plano formado por los ejes X e Y, correspondientes a líneas y muestras respectivamente. Esto provoca que cada subvolumen contenga información de todos los píxeles de la imagen, de forma que la información espectral asociada a un mismo píxel puede encontrarse almacenada en dos o más procesos o nodos [ver figura 5.1 (a)]. Aplicando este tipo de particionamiento, el procesamiento de un único píxel de la imagen requiere la comunicación entre los procesos mencionados debido a que la información espectral se encuentra dispersa entre varios procesadores de la arquitectura. 31

50 32 CAPÍTULO 5. IMPLEMENTACIONES PARALELAS Figura 5.1: Estrategias de particionamiento de imágenes hiperespectrales. (a) Particionamiento espectral. (b) Particionamiento espacial. (c) Particionamiento híbrido. 2. Particionamiento espacial. Este tipo de particionamiento divide el cubo de datos hiperespectrales en bloques de píxeles, cada uno de los cuales resulta de seccionar el cubo con planos paralelos al plano formado por los ejes X y Z, correspondientes a líneas y bandas respectivamente. Esto provoca que cada bloque contenga toda la información espectral relativa a un subconjunto de píxeles de la imagen contiguos en el dominio espacial [ver figura 5.1 (b)]. Aplicando este tipo de particionamiento, el procesamiento de un único píxel de la imagen no requiere comunicación entre procesos debido a que todos los valores espectrales se encuentran localizados en un mismo procesador de la arquitectura. 3. Particionamiento híbrido. Este tipo de particionamiento resulta de aplicar conjuntamente los dos tipos de particionamiento anteriores: el cubo de datos hiperespectrales queda dividido en subvolúmenes, cada uno de ellos integrando una partición de la imagen en el dominio espacial y a su vez la información espectral asociada a un píxel de dicho subvolumen puede encontrarse dispersa en dos o más procesadores (ver figura 5.1 (c)). Dada las característidas del algoritmo PPI y para aprovechar su paralelismo inherente, se ha optado por un particionamiento de datos de tipo espacial, debido principalemente a los siguientes motivos: Primeramente, el particionamiento espacial se adapta de manera natural a la paralelización de los algoritmos de procesamiento basados en ventana deslizante, al almacenarse en una misma unidad de proceso todos los valores espectrales de píxeles contiguos en el dominio espacial. Otra razón fundamental para seleccionar este tipo de división de los datos espectrales viene dada por la forma de trabajar del algoritmo PPI. Tal y como se ha descrito en el capítulo anterior, el algoritmo calcula en cada iteración el valor de la proyección de cada píxel de la imagen sobre un vector unitario y aleatorio o skewer. El particionamiento espacial permite reducir sensiblemente las comunicaciones entre los diferentes procesos o nodos de la arquitectura al encontrarse almacenados todos los valores espectrales para un píxel dado en la misma unidad de proceso. El particionamiento espectral o híbrido involucra comunicaciones inter-proceso a nivel de píxel, incrementando significativamente el coste total asociado a las comunicaciones, lo que se traduce en un menor rendimiento en paralelo y en problemas de escalabilidad según aumenta el número de nodos de cálculo de la arquitectura. Para terminar, una razón fundamental para la selección del particionamiento espacial es la posibilidad de reutilizar el código y de mejorar la portabilidad de los algoritmos paralelos implementados a diferentes arquitecturas. En la mayor parte de las aplicaciones, es altamente deseable poder reutilizar los códigos serie a la hora de desarrollar versiones paralelas, debido principalmente a la complejidad de algunas técnicas de análisis. Por ello, el particionamiento espacial permite un paralelismo de grano fino al facilitar la aplicación de un algoritmo paralelo a diferentes porciones de datos que contienen toda la información espectral, permitiendo que la

51 5.1. IMPLEMENTACIÓN DE PPI PARA UN CLÚSTER DE COMPUTADORES 33 transformación del código serie a paralelo sea mucho más sencilla que aplicando otro de los tipos de particionamiento descritos anteriormente. En el siguiente apartado se explica la aplicación del particionamiento espacial como parte de la paralelización del algoritmo PPI Detalle de la implementación La implementación paralela del algoritmo PPI para clúster de computadores implementa el patrón maestro-esclavo de comunicación entre los procesos explicado anteriormente, paralelizando el procesamiento de la imagen entre los nodos esclavos para disminuir el tiempo de ejecución del algoritmo. El maestro realiza la división de la imagen aplicando un particionamiento de espacial de datos, de tal forma que todos los valores espectrales de los píxeles de cada fragmento asignado se encuentren en un mismo nodo esclavo y se evite establecer una comunicación con otro nodo, lo que penalizaría en el tiempo de ejecución. Los parámetros del algoritmo son los mismos que los de la versión secuencial descrita en el apartado 4.1: Una imagen hiperespectral de entrada F. El tamaño del conjunto de vectores unitarios aleatorios o skewers K a generar. La salida del algoritmo es una imagen resultado R que almacena en cada coordenada espacial R(x, y) el número de veces que dicho píxel ha sido seleccionado como posible endmember por el algoritmo. A continuación se expone paso por paso de esta versión paralela del algoritmo PPI: 1. El procesador maestro lee el fichero de cabecera en formato ENVI header format (HDR) que describe el fichero que contiene la imagen hiperespectral F. De este fichero obtiene la siguiente información: num bands: Número de bandas que contiene la imagen de entrada. num lines: Número de líneas que contiene la imagen de entrada para cada banda. num samples: Número de muestras (píxeles) por cada línea de la imagen de entrada. data type: Parámetro que identifica el tipo de representación. Están soportados los valores 1 (entero de 16 bits), 4 (coma flotante de 32 bits) y 5 (coma flotante 64 bits). byte order: Describe el orden de los bytes en los tipos de datos. 0 describe la codificación Least Significant Byte First o LSF (sistemas DEC y Microsoft) y 1 describe la codificación Most Significant Byte First o MSF (resto de sistemas - SUN, SGI, IBM, HP, etc.). Una vez leído el fichero de cabecera, el nodo maestro lee el fichero que contiene la imagen hiperespectral e intenta distribuirlos de forma balanceada entre los nodos esclavos (él mismo incluído). Para ello se calcula el resto de la división entre el número de líneas de la imagen (num lines) y el número de procesos (num processes) (ver fórmula 5.1). c = num lines % num processes (5.1) Si el resultado no es 0, se reparten las líneas entre los primeros c procesos. 2. El proceso maestro genera un número de vectores unitarios aleatorios del tamaño del parámetro de entrada s. Cada vector tendrá un tamaño del número de bandas num bandas de la imagen de entrada. Para la generación de los vectores aleatorios se utiliza el generador de números aleatorios Mersenne-Twister [25] distribuido en la librería GNU Scientific Library (GSL) [13]. El código 5.1 muestra cómo se generan los vectores aleatorios.

52 34 CAPÍTULO 5. IMPLEMENTACIONES PARALELAS gsl_rng *r; if (( r = gsl_rng_alloc ( gsl_rng_mt19937 )) == NULL ) { printf (" ERROR : Could not create random number generator \ n"); exit (1) ; } // Set seed gsl_rng_set (r, time ( NULL ) * getpid ()); for ( i = 0; i < num_skewers ; i ++) { for ( j = 0; j < num_bands ; j ++) { skewers_data [ i * num_bands + j] = gsl_rng_uniform_int (r, SHRT_MAX ); } } gsl_rng_free ( r); Código 5.1: Generación aleatoria de los skewers Una vez generado el conjunto de skewers, se realiza una operación de distribución o broadcast a todos los procesos esclavos para que tengan el conjunto de skewers generado. El código 5.2 muestra el código MPI utilizado para la distribución de los skewers. MPI_Bcast ( skewers_data, skewers_data_size, MPI_FLOAT, 0, MPI_COMM_WORLD ); Código 5.2: Broadcasting de los skewers 3. En este momento todos los procesos tienen los datos necesarios para ejecutar el algoritmo PPI localmente. El código del algoritmo es el mismo código que el código secuencial, pero utilizando como imagen fuente el bloque de la imagen recibido. Una vez que se ha ejecutado el algoritmo, el proceso envía de vuelta al proceso maestro el resultado parcial obtenido tras ejecutar el algoritmo PPI. El nodo maestro, una vez ejecutado el algoritmo PPI localmente (también actúa como esclavo) efectúa una operación de recolección de resultados (gathering). El cuadro de código 5.3 ejemplifica la función MPI utilizada para el envío del resultado al proceso maestro. MPI_Gather ( local_results, num_skewers * 6, MPI_FLOAT, gathered_results, num_skewers * 6, MPI_FLOAT, 0, MPI_COMM_WORLD ); Código 5.3: Recolección de los resultados locales 4. Una vez que el nodo maestro obtiene los resultados parciales de la ejecución del algoritmo en cada uno de los nodos esclavos se realiza el proceso de generación del resultado final del algoritmo. Para cada skewer se han de comparar los máximos y mínimos locales obtenidos para cada bloque de imagen distribuido. Se seleccionarán aquellos píxeles con el mayor p max (x, y) y menor valor p min (x, y). El nodo maestro generará finalmente una imagen resultado R de una sola banda y para cada máximo y mínimo obtenido incrementará en 1 el valor del píxel en la imagen resultado. Tras la ejecución del algoritmo, la imagen resultado contendrá para cada píxel el número de veces que ha sido seleccionado como endmember. En resumen, los pasos a seguidos en la ejecución de la implementación en paralelo del algoritmo PPI son los siguientes: 1. La imagen original se distribuye en particiones entre los diferentes procesadores. Cada procesador debe recibir un volumen de datos proporcional a sus características. 2. Un nodo (maestro) se encarga del reparto de la carga y de la recolección de los resultados parciales. 3. El resto de nodos (esclavos) ejecutan el algoritmo PPI en su versión secuencial para su bloque y el conjunto de skewers recibido. La figura 5.2 representa el proceso de particionamiento de datos para PPI de forma sencilla. Esta versión del algoritmo servirá de base para la implementación paralela del algoritmo PPI para el clúster de GPUs de CETA-CIEMAT. El cuerpo del algoritmo será el mismo, conservando el esquema de particionamiento de datos (espacial) y el patrón maestro-esclavo de comunicación entre nodos. La diferencia fundamental reside en la delegación de la ejecución del algoritmo PPI a la(s) GPU(s) de cada nodo de procesamiento. La versión del algoritmo PPI que se ejecutará se describe en el apartado siguiente.

53 5.2. IMPLEMENTACIÓN PARALELA DE PPI PARA GPUS 35 Figura 5.2: Particionamiento de datos en el algoritmo PPI 5.2. Implementación paralela de PPI para GPUs En este apartado se describe la implementación paralela del algoritmo PPI en su versión para GPU. Esta implementación sigue un patrón diferente a la de clústers presentada en el apartado anterior, debido principalmente a que la GPU es un sistema de memoria compartida y no es necesario invertir demasiado tiempo en la comunicación entre las unidades de procesamiento. En este sentido, se muestran los detalles de esta implementación, incluyendo fragmentos de código que describen las acciones más relevantes en cada paso. Cabe destacar que en esta implementación no se implementa un patrón de comunicación maestroesclavo al uso, dado que no existe un nodo de procesamiento que reparta los datos y recolecte y procese los resultados como en la implementación anterior. Se podría decir que en la implementación GPU es el proceso que se ejecuta en la CPU el que actúa de maestro, enviando a la GPU, que en este caso sería el esclavo, los datos para la ejecución del algoritmo. Tras su ejecución, la GPU devuelve los resultados parciales a la CPU para que ésta proceda a la generación del resultado final. Al igual que en la versión paralela de PPI para clústers, el algoritmo PPI para GPU tiene como entradas una imagen hiperespectra F y el tamaño del conjunto de skewers K a generar. A continuación se enumeran los pasos que realiza esta implementación del algoritmo: 1. El proceso de la CPU procede a la lectura de la imagen tal y como se realiza en la implementación para clústers de computadores. Tras la lectura del fichero la imagen hiperespectral se encuentra en una estructura en la memoria de la CPU y se han obtenido los datos relativos al número de bandas (num bands), número de líneas (num lines) y número de muestras (num samples). 2. La generación de los skewers se realiza de la misma manera que en la versión de clúster de computadores. Para la generación de los números aleatorios se utiliza la implementación del algoritmo de Mersenne-Twister que proporciona la librería GSL. Este paso se podría haber realizado en la GPU, utilizando la implementación de Mersenne-Twister para GPU que se porporciona en el CUDA SDK [2]. La justificación a no haberse utilizado dicha implementación se debe al hecho de poder reutilizar el mayor porcentaje de código posible de la implementación para clústers. 3. La imagen hiperespectral F se envía a la GPU para su almacenamiento en la memoria global. Hay que tener en cuenta que para imágenes de gran tamaño (>4GB) habría que realizar un particionamiento de la imagen antes de enviarla a la GPU. Esto es debido a que las GPUs actuales tienen una capacidad limitada de memoria dedicada (4GB para la C1060 y 6GB para la C2070) y se producen errores al intentar reservar un espacio de memoria tan grande con cudamalloc. Tras el envío de la imagen se procede al envío a la GPU del conjunto de skewers generados.

54 36 CAPÍTULO 5. IMPLEMENTACIONES PARALELAS cudamalloc (( void **) & d_image_chunk, ( chunk_size * num_samples * num_bands * sizeof ( float ))); cudamalloc (( void **) & d_skewers_data, ( num_skewers * num_bands * sizeof ( float ))); // host -> device copy cudamemcpy ( d_image_chunk, image_chunk, chunk_size * num_samples * num_bands * sizeof ( float ), cudamemcpyhosttodevice ); cudamemcpy ( d_skewers_data, skewers_data, num_skewers * num_bands * sizeof ( float ), cudamemcpyhosttodevice ); Código 5.4: Copia de la imagen hiperespectral a la memoria de la GPU El código 5.4 muestra las instrucciones CUDA para la copia de la imagen y del conjunto de skewers a la memoria global de la GPU. 4. Una vez que la GPU tiene los datos necesarios para ejecutar el algoritmo PPI, se procede a su ejecución. Para ello, cada hilo de la GPU ejecutará un fragmento de código o kernel que calculará las proyecciones de un skewer asignado a todos los píxeles de la imagen hiperespectral. El identificador del skewer asignado para cada hilo de ejecución vendrá dado por el código 5.5 y para su cálculo se utilizan los identificadores de bloque y de hilo dentro del bloque que proporciona la GPU. int idx = blockdim. x * blockidx. x + threadidx. x; while ( idx < num_skewers ) {... idx += num_skewers } Código 5.5: Cálculo de la selección de skewer para cada kernel Si el número de skewers es mayor al número total de hilos que se ejecutarán en la GPU, se calculará el número restante de skewers para seleccionar y los hilos con identificador más bajo ejecutarán de nuevo el kernel para el nuevo skewer. El código 5.6 muestra el código que ejecuta el cálculo del algoritmo PPI como kernel en la GPU. int idx = blockdim. x * blockidx. x + threadidx. x; while ( idx < num_skewers ) { float min = FLT_MAX ; float max = FLT_MIN ; float dot_product = 0.0; for ( int k = 0; k < num_lines ; k ++) { for ( int j = 0; j < num_samples ; j ++) { dot_product = dotproduct (& skewers [ idx ], & image [ k * num_samples * num_bands + j * num_bands ], num_bands ); if ( dot_product > max ) { max = dot_product ; local_results [ idx * 6 + 0] = k; // maxx local_results [ idx * 6 + 1] = j; // maxy local_results [ idx * 6 + 2] = dot_product ; } if ( dot_product < min ) { min = dot_product ; local_results [ idx * 6 + 3] = k; // minx local_results [ idx * 6 + 4] = j; // miny local_results [ idx * 6 + 5] = dot_product ; } } } idx += num_skewers } Código 5.6: Código del kernel que implementa el algoritmo PPI para GPU 5. Tras el cálculo de los resultados del algoritmo PPI en la GPU, se devuelve a la CPU una estructura que almacena por cada skewer los píxeles de la imagen hiperespectral con los valores máximo y mínimo de la proyección. La CPU realiza un procesado final para generar la imagen resultado R de una sola banda, cuyo valor para cada píxel es el número de veces que dicho píxel

55 5.3. IMPLEMENTACIÓN PARALELA DE PPI PARA UN CLÚSTER DE GPUS 37 ha sido seleccionado como candidato a endmember. Este proceso es el mismo que el realizado en la versión paralela del algoritmo para clústers. Resumiendo, los pasos seguidos para la ejecución del algoritmo paralelo PPI en su versión GPU son los siguientes: 1. La imagen original se distribuye en su totalidad a la GPU. 2. La GPU actúa como esclavo ejecutando el algoritmo de forma paralela, de forma que cada hilo de ejecución calcula la proyección de todos los píxeles de la imagen para un skewer dado. 3. Una vez finalizada la ejecución del algoritmo en la GPU, la CPU recibe los resultados y se procesan para generar la imagen resultado. Esta versión paralela del algoritmo servirá de base, junto con la versión para clúster de computadores para la implementación de PPI para el clúster de GPU de CETA-CIEMAT. El códido del kernel que se ejecuta en la GPU será el que se ejecute en cada GPU de cada uno de los nodos de cómputo del clúster de GPUs. El siguiente apartado describe en detalle esta implementación híbrida del algoritmo PPI Implementación paralela de PPI para un clúster de GPUs En los apartados anteriores hemos dado una visión detallada de las implementaciones paralelas del algoritmo PPI en sus versiones para clúster de computadores y para GPUs. Este apartado describe una implementación mixta para el clúster de GPUs de CETA-CIEMAT, descrito en el apartado 3.3 del capítulo 3. Recordemos que este clúster de computadores está compuesto por dos subclústers o entornos. Éstos son: Test: formado por 17 nodos de cálculo, 8 cores de CPU por nodo y 2 GPUs Nvidia Tesla C1060 (media S1070) por nodo. Producción: formado por 32 nodos de cálculo. Éstos se dividen en 16 nodos de cálculo, con 8 cores de CPU y 2 GPUs Nvidia Tesla C2050 (media S2050) por nodo y otros 16 compuestos por 12 cores de CPU y 2 GPUs Nvidia Tesla C2070 (media S2070). En esta versión del algoritmo PPI paralelo para clúster de GPUs se adopta el esquema de comunicación entre nodos maestro-esclavo implementado en la versión para clústers, con la particularidad de que no es la CPU de los nodos esclavos la que realiza la ejecución del algoritmo PPI localmente, sino que se delega la ejecución del algoritmo a la(s) GPU(s) del propio nodo. En este caso el código ejecutado en la GPU es el presentado en el apartado anterior. A continuación se enumeran los pasos de la ejecución del algoritmo para el clúster de GPUs: 1. Un nodo maestro se encarga de la lectura de la imagen hiperespectral de entrada F y del particionamiento de la misma, siguiendo el esquema de particionamiento espacial descrito en el apartado de este capítulo, y de repartir los bloques resultantes entre el resto de nodos. En este caso el nodo maestro también procesará un bloque de la imagen de entrada para que no quede ocioso durante la ejecución local del algoritmo por los esclavos. Tal y como se hace en la versión de clúster de computadores, el reparto de los bloques es balanceado, siendo todos los bloques de tamaño similar. En esta ocasión no se ha tenido en cuenta las capacidades de cómputo de los nodos de CPU a la hora de hacer el reparto de la imagen de entrada, pues para cada entorno del clúster de GPUs de CETA-CIEMAT puede afirmarse que es un clúster homogéneo, es decir, que todos los nodos de cálculo tienen la misma capacidad de cómputo. 2. El nodo maestro genera posteriormente los vectores unitarios aleatorios (skewers) y realiza una operación de broadcasting o reparto entre el resto de nodos para que cada uno de los nodos esclavos tenga los skewers localmente. 3. Una vez que los nodos esclavos han recibido el fragmento de la imagen hiperespectral de entrada a procesar y el conjunto de skewers, ambos se envían a la GPU para que ésta pueda ejecutar el algoritmo PPI. El código que se ejecutará en cada una de las GPUs es el implementado en la versión paralela para GPU y se muestra en el código 5.6 del apartado 5.2 del presente capítulo.

56 38 CAPÍTULO 5. IMPLEMENTACIONES PARALELAS 4. Una vez finalizada la ejecución del algoritmo los nodos esclavos reciben los resultados generados por la(s) GPU(s). Esta salida contiene, para cada skewer del conjunto de skewers, las coordenadas espaciales (x, y) de los píxeles cuyos valores de proyección a cada skewer son máximo o mínimo junto con sus valores del proyección calculados. Además, las coordenadas son relativas al tamaño del fragmento asignado de la imagen original, dado que el nodo esclavo desconoce la distribución de bloques realizada por el maestro al resto de nodos esclavos. Como ocurre en la implementación para clústers, el nodo maestro, una vez ejecutado el algoritmo PPI localmente vía su(s) GPU(s) asociada(s) (recordemos que éste también actúa como esclavo) efectúa una operación de recolección de resultados o gathering. El código 5.3 del apartado del presente capítulo muestra el código MPI utilizado para el envío del resultado al nodo maestro. 5. Para finalizar el nodo maestro procesa los resultados parciales recibidos de cada esclavo y selecciona para cada skewer aquellos píxeles con valor máximo y mínimo de entre los candidatos recibidos de cada nodo esclavo y se genera la imagen resultado R. Esta versión del algoritmo se ha implementado también en su versión multigpu. En este caso, cada nodo de procesamiento recibe el bloque completo de la imagen hiperespectral a procesar, y se dividen el número de skewers entre el número de GPUs de las que conste el nodo (en el caso del clúster de CETA-CIEMAT serían 2). En este caso no se ha realizado otro tipo de particionamiento de los datos de entrada para evitar la comunicación entre los nodos, que sí implican un coste significativo si se realiza de una GPU a otra. Finalmente la CPU de cada nodo recibe los resultados de cada GPU y los agrega para construir el resultado final que se enviará al nodo maestro.

57 Capítulo 6 Resultados experimentales En este capítulo se realiza un análisis de los resultados experimentales de las pruebas ejecutadas para las implementaciones del algoritmo PPI descritas en el capítulo anterior. En el primer apartado se presentan los parámetros de entrada para las pruebas realizadas en cada experimento y los entornos de pruebas. Seguidamente, se comenta la evolución de la implementación de PPI para clústers de GPUs, desde la versión inicial, que no tiene en cuenta el rendimiento, hasta la versión final, que utiliza dos tarjetas GPU simultáneamente para reducir el tiempo de ejecución de dicho algoritmo. Como cierre del capítulo, se realiza una comparativa entre las implementaciones secuencial, para clúster de computadores, GPUs y clúster de GPUs, analizando los resultados de cada implementación para las métricas obtenidas Descripción de las pruebas realizadas Este apartado presenta las pruebas realizadas a las diferentes implementaciones desarrolladas del algoritmo PPI dentro del marco de este trabajo. Primeramente se muestran los parámetros de entrada del algoritmo para todas las versiones desarrolladas y seguidamente se describen los entornos de ejecución de las pruebas realizadas. Para finalizar, se presentan las diferentes configuraciones adicionales necesarias para cada evolución concreta del algoritmo Parámetros del algoritmo PPI En el capítulo 4 se describe en detalle el algoritmo PPI por lo que esta sección se centrará en la enumeración de los parámetros que dicho algoritmo tienen como entrada. A saber: 1. Una imagen hiperespectral F. 2. El número de iteraciones del algoritmo o tamaño de vectores aleatorios o skewers a generar K. 3. Un valor de umbral de corte t v, utilizado para seleccionar aquellos píxeles de la imagen con un índice de pureza mayor que valor del umbral. Cabe comentar que para todas las pruebas se va a seleccionar un valor de umbral igual a 1. Esto quiere decir que todos los píxeles con índice de pureza 1, es decir, que hayan sido seleccionados al menos una sola vez como candidatos a endmember, aparecerán en la imagen resultado de la ejecución del algoritmo R. De importancia es saber también que en todas las pruebas ejecutadas se han utilizado imágenes reales obtenidas por el sensor AVIRIS, operado por el Jet Propulsion Laboratory de NASA y disponibles de manera abierta en su página web 1. Se han realizado pruebas con un total de tres imágenes de diferente tamaño que ha permitido analizar el rendimiento del algoritmo acorde al tamaño de los datos de entrada: la primera de pequeño tamaño (decenas de MBs), la segunda de un tamaño mediano (cientos de MBs) y una tercera de gran tamaño (varios GBs). Se ha considerado relevante el tamaño de la imagen hiperespectral dado que los sensores de observación remota están en continua evolución, alcanzando progresivamente resoluciones espaciales mayores y trabajando en un mayor número de bandas espectrales. 1 locator/ 39

58 40 CAPÍTULO 6. RESULTADOS EXPERIMENTALES La primera imagen (ver figura 6.1) fue adquirida por el sensor AVIRIS en 1995 sobre la región denominada Cuprite, en el estado de Nevada, Estados Unidos. Es una imagen ampliamente utilizada en la literatura y se caracteriza porque se manifiestan singularidades que permiten discriminar entre una amplia gama de minerales calizos. La tabla 6.1 resume las características de la imagen de Cuprite. Número de líneas 350 Número de muestras 350 Número de bandas 188 Tipo de archivo ENVI Standard (BIP) Orden de bytes LSF Tipo de dato Entero 16 bits Tamaño Aprox. 44 MB Tabla 6.1: Características de la imagen hiperespectral AVIRIS, capturada en 1995 sobre la región minera de Cuprite, En Nevada (Estados Unidos) Figura 6.1: Imagen real AVIRIS perteneciente a la región minera de Cuprite, en Nevada (Estados Unidos) La segunda imagen utilizada fue tomada también por el sensor AVIRIS en 2008 (ver figura 6.2). Corresponde al Lago St. Clair, en Michigan (Estados Unidos), en su frontera con Canadá. Esta imagen ha sido seleccionada por la presencia de zonas de agua, vegetación y zonas habitadas. La tabla 6.2 resume las características de dicha imagen. Número de líneas 738 Número de muestras 703 Número de bandas 224 Tipo de archivo ENVI Standard (BIP) Orden de bytes MSF Tipo de dato Entero 16 bits Tamaño Aprox. 222 MB Tabla 6.2: Características de la imagen hiperespectral AVIRIS, capturada en 2008 sobre la región del lago St. Clair, en Michigan (Estados Unidos) La tercera imagen, también capturada por el sensor AVIRIS, pertenece al Parque Nacional de Yellowstone, en el estado de Wyoming (Estados Unidos) y data del año Esta imagen ha sido seleccionada por su gran tamaño (aprox. 4 GB). La tabla 6.3 resume las características de dicha imagen. El segundo parámetro de entrada del algoritmo es el tamaño de conjunto de skewers K. Para la realización de las pruebas se ha seleccionado un valor de K igual a , partiendo de la configuración

59 6.1. DESCRIPCIÓN DE LAS PRUEBAS REALIZADAS 41 Figura 6.2: Imagen real AVIRIS perteneciente la región del lago St. Clair, en Michigan (Estados Unidos) Número de líneas Número de muestras 777 Número de bandas 224 Tipo de archivo ENVI Standard (BIP) Orden de bytes MSF Tipo de dato Entero 16 bits Tamaño Aprox. 3,8 GB Tabla 6.3: Características de la imagen hiperespectral AVIRIS, capturada en 2009 sobre el Parque Nacional de Yellowstone, en Wyoming (Estados Unidos) del algoritmo encontrada en anteriores trabajos seleccionados [35]. Básicamente dicho valor de K hace que encaje perfectamente con la configuración de ejecución del código que se lanzará en las GPUs y que se detallará más adelante. El uso de este valor del tamaño del conjunto de skewers junto con la imagen AVIRIS Cuprite nos permitirá comparar los resultados de rendimiento obtenidos por la implementación del algoritmo PPI para clúster de GPUs con resultados publicados anteriormente de las versiones secuencial y GPU[35, 36]. Continuando con la descripción de los parámetros de entrada de las diferentes implementaciones de PPI, adicionalmente existen parámetros específicos dependientes de la arquitectura utilizada. Estos parámetros se listan a continuación: Número de nodos: Número de nodos de cómputo en los que se ejecutará en algoritmo. Este parámetro es necesario para las implementaciones para clúster y clúster de GPUs. Para las pruebas este valor variará de 1 a 15 nodos. Número de bloques: Corresponde a la cantidad de bloques de GPU a utilizar. El cálculo del número de bloques sigue la fórmula 6.1, de tal forma que cada hilo de la GPU ejecute una iteración del algoritmo. Dependiendo de la implementación de PPI y de la arquitectura (Tesla o Fermi), este número variará entre 30 y 60 para alcanzar la máxima ocupación de la GPU y así maximizar el rendimiento. N o de bloques = Tamaño del conjunto de skewers (K) / N o de hilos por bloque (6.1) Este parámetro es específico de las implementaciones que utilizan GPUs.

60 42 CAPÍTULO 6. RESULTADOS EXPERIMENTALES Figura 6.3: Imagen real AVIRIS perteneciente al Parque Nacional de Yellowstone, en Wyoming (Estados Unidos) Número de hilos por bloque: Este parámetro hace referencia al número de hilos por bloque de GPU. Se configura también de cara a maximizar la ocupación de la GPU y así maximizar su rendimiento. En arquitecturas Tesla, como por ejemplo la del modelo C1060 Nvidia, el límite está en 512 hilos por bloque. En arquitectura Fermi y posteriores, como las C2050 y C2070 de Nvidia, este número se incrementa hasta En nuestras pruebas variará de 256 a 512, según la implementación de algoritmo. En el siguiente apartado se describen las pruebas realizadas a las diferentes implementaciones desarrolladas del algoritmo PPI para clúster de GPUs.

61 6.2. DESARROLLO DE PPI PARA EL CLÚSTER DE GPUS Entornos de pruebas Tras la descripción de los parámetros de las diferentes implementaciones del algoritmo PPI sujetas a estudio, se procede a la exposición de los entornos de ejecución de las pruebas realizadas. Como se viene indicando a lo largo de esta memoria, los resultados que se presentan en este documento se han obtenido utilizando el clúster de GPUs de CETA-CIEMAT, cuya arquitectura y composición se describieron en detalle en el capítulo 3. Recordemos, no obstante, que el clúster de GPUs de CETA-CIEMAT se divide en dos entornos de ejecución de trabajos: Entorno de Test: Este entorno consta de 17 nodos de cómputo, cada uno de ellos equipado con 2 GPUs Nvidia C1060 (S1070). Este entorno está destinado al aprendizaje del envío de trabajos del clúster y las para pruebas de versiones paralelas de algoritmos en desarrollo. Entorno de Producción: Este entorno consta de 32 nodos de cómputo destinados a la producción científica. Este entorno consta de 16 nodos de cómputo equipados cada uno con 2 GPUs Nvidia C2050 (S2050) y otros 16 nodos equipados con 2 GPUs Nvidia C2070 (S2070) por nodo. Estos 32 nodos se pueden utilizar de forma conjunta o separada por nodos 2050 y Tal y como se comenta en el apartado anterior, se han realizado pruebas con configuraciones para cada entorno (Test y Producción) desde 1 a 15 nodos. El principal motivo por el que no se han realizado pruebas con un mayor número de nodos ha sido el de no acaparar el uso del clúster. Dentro de las pruebas lanzadas para cada configuración de ejecución del algoritmo se miden los siguientes tiempos: Image Retrieval Time (IRT): Tiempo de recuperación de la imagen de entrada. Skewers Generation Time (SKT): Tiempo de generación de los vectores aleatorios. Broadcasting Time (BT): Tiempo de diseminación del conjunto de skewers a los nodos esclavos. Scatter Time (ScT): Tiempo de reparto de fragmentos de la imagen de entrada entre los nodos esclavos. Computing Time (CT): Tiempo de ejecución del algoritmo en cada nodo de cálculo. Este tiempo incluye el tiempo de copiado de los datos de entradas a la GPU, el tiempo de ejecución del algoritmo en la GPU y el tiempo de recolección de los resultados. Gathering Time (GT): Tiempo de recolección de los resultados parciales de cada nodo esclavo. Post-Processing Time (PPT): Tiempo de procesamiento de los resultados parciales y de generación del resultado final del algoritmo. Total Time (TT): Tiempo total de ejecución del algoritmo Desarrollo de PPI para el clúster de GPUs Esta sección está destinada a la descripción de la evolución del desarrollo de la implementación paralela del algoritmo PPI parar clúster de GPUs. En total se han realizado seis implementaciones, desde la versión inicial, que no cuenta con ninguna optimización, hasta la versión final que hace uso de varias tarjetas GPU simultáneamente Implementación sin optimizaciones La primera implementación de PPI para el clúster de GPU se desarrolló con la premisa principal de tener una versión del algoritmo funcionando en un clúster de GPUs, sin tener en cuenta ninguna configuración orientada a reducir el tiempo de ejecución del algoritmo. Tal y como se comenta en el apartado 5.3 del capítulo 5, esta implementación parte de las implementaciones para clúster de computadores y de GPU existentes anteriormente. De la primera se ha mantenido el esquema de comunicación entre los nodos de procesamiento. Existe un proceso maestro,

62 44 CAPÍTULO 6. RESULTADOS EXPERIMENTALES que se encarga de la lectura de la imagen hiperespectral de entrada y de calcular el reparto balanceado de la misma entre el resto de nodos. El proceso maestro también se encarga de la generación de los skewers, que posteriormente también reparte. Una vez que cada nodo tiene los datos de entrada necesarios (fragmento de la imagen y conjunto de skewers), procede a la ejecución del algoritmo PPI localmente. Cuando el algoritmo se ha ejecutado en cada nodo, el proceso maestro recolecta los resultados parciales obtenidos por cada uno de ellos, elaborando la salida final del algoritmo. Por otro lado, la versión para GPU aporta el core del algoritmo para su ejecución en una GPU a las que tiene acceso. Cada proceso esclavo delega la ejecución del algoritmo a la GPU, quien recibe los datos de entrada, ejecuta su trabajo y devuelve los resultados para que sean enviados posteriormente al nodo maestro. El código 6.1 muestra el fragmento de código fuente que se ejecuta en la GPU. Este fragmento de código será el que evolucione entre las diferentes versiones posteriores del algoritmo, con vistas a reducir el tiempo de ejecución. int idx = blockdim. x * blockidx. x + threadidx. x; while ( idx < num_skewers ) { float min = FLT_MAX ; float max = FLT_MIN ; float dot_product = 0.0; for ( int k = 0; k < num_lines ; k ++) { for ( int j = 0; j < num_samples ; j ++) { dot_product = dotproduct (& skewers [ idx * num_bands ], & image [ k * num_samples * num_bands + j * num_bands ], num_bands ); if ( dot_product > max ) { max = dot_product ; local_results [ idx * 6 + 0] = k; // maxx local_results [ idx * 6 + 1] = j; // maxy local_results [ idx * 6 + 2] = dot_product ; } if ( dot_product < min ) { min = dot_product ; local_results [ idx * 6 + 3] = k; // minx local_results [ idx * 6 + 4] = j; // miny local_results [ idx * 6 + 5] = dot_product ; } } } idx += num_skewers } Código 6.1: Código del kernel del algoritmo PPI para la implementación sin optimizaciones Este código o kernel es ejecutado por cada hilo de la GPU. La configuración de lanzamiento es de 30 bloques con 512 hilos de ejecución en cada uno con lo que se consiguen = hilos de ejecución, uno para cada skewer. La tabla 6.4 muestra la ocupación de configuración de la GPU para una tarjeta versión 1.3, como las Nvidia C1060 del entorno de Test del clúster de CETA-CIEMAT. En este caso la ocupación de la tarjeta es del 100 %. Por lo general, una mayor ocupación conlleva una mejora del rendimiento del algoritmo, aunque no en todos los casos. Con esta misma configuración de bloques e hilos se obtiene en una tarjeta 2.0, como las Nvidia C2050 y C2070 del entorno de Producción del clúster de CETA-CIEMAT, una ocupación del 67 % (ver tabla 6.5). Este dato para esta versión no es relevante, dado que en esta ocasión no está orientada a la obtención del mayor rendimiento. Dato que mejorará en las sucesivas versiones orientadas a la reducción del tiempo de ejecución del algoritmo. Hilos por bloque 512 Registros por hilo 11 Memoria compartida por bloque (bytes) 56 Ocupación de cada multiprocesador 100 % Tabla 6.4: Datos de ocupación de la GPU para la implementación MPI-CUDA sin optimizaciones del algoritmo PPI para el entorno de Test del clúster de CETA-CIEMAT Una vez que se ha descrito la implementación desarrollada, se pasará a realizar una comparativa entre los resultados obtenidos por la versión del algoritmo PPI para clúster de GPUs y los resultados obtenidos por el software comercial ENVI. Dicha comparativa surge con el ánimo de comprobar si

63 6.2. DESARROLLO DE PPI PARA EL CLÚSTER DE GPUS 45 Hilos por bloque 512 Registros por hilo 23 Memoria compartida por bloque (bytes) 0 Ocupación de cada multiprocesador 67 % Tabla 6.5: Datos de ocupación de la GPU para la implementación MPI-CUDA sin optimizaciones del algoritmo PPI para el entorno de Producción del clúster de CETA-CIEMAT esta versión del algoritmo PPI para clúster de GPUs se puede aplicar a la práctica diaria del análisis de imágenes hiperespectrales. Como se comentó en el capítulo 4, el algoritmo PPI pertenece al conjunto de métodos interactivos, dado que se hace necesaria una etapa interactiva final en la que el usuario debe seleccionar manualmente aquellos píxeles que quiere utilizar como firmas espectrales puras o endmembers y, consecuentemente, el conocimiento a priori que éste tenga de la imagen resultará muy útil. Para comprobar la efectividad del algoritmo se utilizará la imagen capturada por el sensor AVIRIS sobre la región minera de Cuprite, en el estado de Nevada (Estados Unidos). Esta imagen se caracteriza porque en ella se manifiestan singularidades que permiten discriminar entre una amplia gama de minerales de tipo calizo. Una forma adecuada y bastante ilustrativa de comprobar la efectividad de una versión de PPI es comprobar visualmente los resultados obtenidos de la ejecución de dicho algoritmo con los resultados que ofrece ENVI para un caso de aplicación real como la detección de minerales. Respecto a la implementación de PPI que integra ENVI, cabe destacar que ésta aplica un proceso denominado Fast Pixel Purity Index [11] que permite incrementar el número de píxeles que se seleccionan en cada proyección como candidatos a firma espectral pura. Esta singularidad la hace diferente de la especificación establecida por la versión inicial del algoritmo [7] que indica que solamente se seleccionan aquellos píxeles cuya proyección es máxima o mínima sobre el vector aleatorio. A continuación se muestran los resultados del algoritmo PPI obtenidos tras ejecutar las implementaciones para clúster de GPUs y ENVI (ver figura 6.4). (a) Resultados ENVI (b) Resultados clúster de GPUs Figura 6.4: Resultados visuales obtenidos de la ejecución del algoritmo PPI para las versiones de ENVI y clúster de GPUs sobre la imagen Cuprite A la vista de estos resultados, cabe destacar que ambas imágenes son muy similares, presentando regiones de candidatos a firmas espectrales puras en coordenadas espaciales casi coincidentes, lo cual permite afirmar que ambas versiones son comparables y que es posible encontrar el mismo conjunto de firmas espectrales puras. Dado que los resultados son prácticamente los mismos, podemos afirmar que la versión del algoritmo PPI para clúster de GPUs es válida para su uso en la práctica diaria del análisis de imágenes hiperespectrales. Por otro lado y a modo de ejemplo, La figura 6.5 presenta algunos de los minerales que se pueden detectar en la imagen resultado de la ejecución del algoritmo

64 46 CAPÍTULO 6. RESULTADOS EXPERIMENTALES para la imagen de Cuprite. El cuadrado verde señala la localización de la Kaolinita, la situación de la Alunita se destaca en azul y en naranja se ubica la Calcita, presentándose en la figura 6.6 la firma espectral de dichos minerales. (a) Resultados ENVI (b) Resultados clúster de GPUs Figura 6.5: Ejemplo de algunos de los minerales detectados en la imagen resultado de la ejecución de PPI sobre la imagen Cuprite (a) Kaolinita (verde) (b) Alunita (azul) (c) Calcita (naranja) Figura 6.6: Firmas espectrales de los minerales detectados en la imagen resultado de la ejecución de PPI para clúster de GPUs sobre la imagen Cuprite Para continuar con el estudio de la efectividad del algoritmo PPI presentado en esta sección, se presentan además los resultados obtenidos de la ejecución del algoritmo para la imagen del Lago St. Clair. Al contrario que en el caso anterior, esta imagen ha sido seleccionada aleatoriamente de entre las publicadas por el Jet Propulsion Laboratory de NASA principalmente por su tamaño y por la presencia de agua, vegetación y edificaciones entre otros elementos, y no ha sido tan estudiada en la literatura reciente como la imagen de Cuprite. La figura 6.7 muestra los resultados obtenidos por la ejecución del algoritmo PPI en sus versiones para clúster de GPUs y ENVI. En esta ocasión, se puede comprobar visualizando los resultados que ENVI ha seleccionado un mayor número de píxeles como candidatos a endmember que la versión para clúster de GPUs, debido principalmente a la implementación Fast PPI, que selecciona un número mayor de píxeles en cada iteración. Aun así, ambas imágenes son muy similares, seleccionando píxeles en coordenadas casi coincidentes, tal y como ocurría con los resultados de la imagen anterior. En dicha figura se han resaltado algunas zonas con presencia de agua (en azul), bancos de arena (en naranja) y vegetación (en verde). Cabe comentar que no nos es posible presentar con mayor detalle estos resultados por el desconocimiento de la imagen al no contar con datos de verdad-terreno. Con respecto a las pruebas con la imagen de mayor tamaño, correspondiente a Yellowstone, no se ha podido realizar una ejecución de PPI con el software ENVI porque dicha imagen provoca un error de ejecución y, por consiguiente, no se puede realizar la comparación visual de los resultados al no contar con una de las imágenes necesarias para dicho fin.

65 6.2. DESARROLLO DE PPI PARA EL CLÚSTER DE GPUS 47 (a) Resultados ENVI (b) Resultados clúster de GPUs Figura 6.7: Resultados visuales obtenidos de la ejecución del algoritmo PPI para las versiones de ENVI y clúster de GPUs sobre la imagen Lago St. Clair Para finalizar con el análisis de la efectividad del algoritmo, y a modo de conclusión, se puede afirmar que la implementación del algoritmo PPI para clúster de GPUs es una buena alternativa a las implementaciones existentes como la incluida en ENVI, fundamentado tras haberse comprobado que puede ser utilizada en casos reales de análisis de imágenes hiperespectrales. Dejando a un lado la efectividad del algoritmo, se pasa al estudio del rendimiento que ofrece. A continuación se presentan las mediciones de tiempo y las gráficas asociadas de los resultados obtenidos de la ejecución del algoritmo en el entorno de Producción de CETA-CIEMAT. En cada gráfica se representa la evolución del tiempo de ejecución del algoritmo en cada nodo (CT) y el tiempo total del algoritmo (TT) y para ejecuciones de 1 a 16 nodos para con las tres imágenes de entrada: Cuprite, Lago St. Clair y Yellowstone. La tabla 6.6 muestra el promedio de los resultados medidos en segundos para cada configuración de número de nodos de cálculo y la imagen de entrada Cuprite. La gráfica 6.8a representa la evolución del tiempo de ejecución del algoritmo en cada nodo (CT) y el tiempo total del algoritmo (TT) para cada configuración. IRT SKT BT ScT CT GT PPT TT 0, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Tabla 6.6: Resultados de ejecución (en sg.) de la implementación sin optimizaciones del algoritmo PPI para clúster de GPUs (Imagen: Cuprite)

ING. YURI RODRIGUEZ ALVA

ING. YURI RODRIGUEZ ALVA Historia y evolución de las Aplicaciones. Acerca de Cloud Computing o Computación para la Nube. Tipos de Aplicaciones para la Nube. Ventajas y desventajas de Cloud Computing Uso y Aplicaciones de Cloud

Más detalles

www.gtbi.net soluciones en Fotogrametría Digital El software de análisis más potente basado en objetos de datos geoespaciales. Fotogrametría Digital

www.gtbi.net soluciones en Fotogrametría Digital El software de análisis más potente basado en objetos de datos geoespaciales. Fotogrametría Digital soluciones en Fotogrametría Digital El software de análisis más potente basado en objetos de datos geoespaciales. Fotogrametría Digital www.gtbi.net LA MANERA DE ENTENDER EL MUNDO ESTÁ CAMBIANDO El usuario

Más detalles

Introducción a las redes de computadores

Introducción a las redes de computadores Introducción a las redes de computadores Contenido Descripción general 1 Beneficios de las redes 2 Papel de los equipos en una red 3 Tipos de redes 5 Sistemas operativos de red 7 Introducción a las redes

Más detalles

GPU IMPLEMENTATIONS OF SCHEDULING HEURISTICS FOR HETEROGENEOUS COMPUTING ENVIRONMENTS

GPU IMPLEMENTATIONS OF SCHEDULING HEURISTICS FOR HETEROGENEOUS COMPUTING ENVIRONMENTS GPU IMPLEMENTATIONS OF SCHEDULING HEURISTICS FOR HETEROGENEOUS COMPUTING ENVIRONMENTS MAURO CANABÉ SERGIO NESMACHNOW Centro de Cálculo, Facultad de Ingeniería Universidad de la República, Uruguay GPU IMPLEMENTATIONS

Más detalles

Análisis de aplicación: Virtual Machine Manager

Análisis de aplicación: Virtual Machine Manager Análisis de aplicación: Virtual Machine Manager Este documento ha sido elaborado por el Centro de Apoyo Tecnológico a Emprendedores bilib, www.bilib.es Copyright 2011, Junta de Comunidades de Castilla

Más detalles

Sistemas de Información Geográficos (SIG o GIS)

Sistemas de Información Geográficos (SIG o GIS) Sistemas de Información Geográficos (SIG o GIS) 1) Qué es un SIG GIS? 2) Para qué sirven? 3) Tipos de datos 4) Cómo trabaja? 5) Modelos de datos, Diseño Conceptual 6) GeoDataase (GD) 7) Cómo evaluamos

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

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología La metodología para el desarrollo de software es un modo sistemático de realizar, gestionar y administrar un proyecto

Más detalles

Servicios avanzados de supercomputación para la ciència y la ingeniería

Servicios avanzados de supercomputación para la ciència y la ingeniería Servicios avanzados de supercomputación para la ciència y la ingeniería Servicios avanzados de supercomputación para la ciència y la ingeniería HPCNow! provee a sus clientes de la tecnología y soluciones

Más detalles

Gnu-LinEx. Aplicaciones del Software Libre en Computación de Altas Prestaciones. Sé legal... copia LinEx

Gnu-LinEx. Aplicaciones del Software Libre en Computación de Altas Prestaciones. Sé legal... copia LinEx Gnu-LinEx Aplicaciones del Software Libre en Computación de Altas Prestaciones Sé legal... copia LinEx Antonio Plaza Miguel Departamento Tecnología Computadores Universidad de Extremadura E-mail: aplaza@unex.es

Más detalles

Gestión de la Configuración

Gestión de la Configuración Gestión de la ÍNDICE DESCRIPCIÓN Y OBJETIVOS... 1 ESTUDIO DE VIABILIDAD DEL SISTEMA... 2 ACTIVIDAD EVS-GC 1: DEFINICIÓN DE LOS REQUISITOS DE GESTIÓN DE CONFIGURACIÓN... 2 Tarea EVS-GC 1.1: Definición de

Más detalles

LAS GRANDES EMPRESAS DEL IEF ABREN SUS REDES INTERNACIONALES AL RESTO DE COMPAÑÍAS FAMILIARES, PARA QUE SE LANCEN A EXPORTAR EN MEJORES CONDICIONES

LAS GRANDES EMPRESAS DEL IEF ABREN SUS REDES INTERNACIONALES AL RESTO DE COMPAÑÍAS FAMILIARES, PARA QUE SE LANCEN A EXPORTAR EN MEJORES CONDICIONES Podrán beneficiarse hasta 1.100 compañías de las organizaciones territoriales vinculadas al Instituto de la Empresa Familiar LAS GRANDES EMPRESAS DEL IEF ABREN SUS REDES INTERNACIONALES AL RESTO DE COMPAÑÍAS

Más detalles

No se requiere que los discos sean del mismo tamaño ya que el objetivo es solamente adjuntar discos.

No se requiere que los discos sean del mismo tamaño ya que el objetivo es solamente adjuntar discos. RAIDS MODO LINEAL Es un tipo de raid que muestra lógicamente un disco pero se compone de 2 o más discos. Solamente llena el disco 0 y cuando este está lleno sigue con el disco 1 y así sucesivamente. Este

Más detalles

"Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios

Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios "Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios Miguel Alfonso Flores Sánchez 1, Fernando Sandoya Sanchez 2 Resumen En el presente artículo se

Más detalles

Evaluación del rendimiento de procesadores Intel Nehalem. Modelos x7550, x5670 y x5570

Evaluación del rendimiento de procesadores Intel Nehalem. Modelos x7550, x5670 y x5570 Evaluación del rendimiento de procesadores Intel Nehalem. Modelos x7550, x5670 y x5570 Juan Carlos Fernández Rodríguez. Área de HPC. Centro Informático Científico de Andalucía (CICA) Junta de Andalucía

Más detalles

LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN

LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN Tabla de Contenidos LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN... 1 Tabla de Contenidos... 1 General... 2 Uso de los Lineamientos Estándares...

Más detalles

Curso: Arquitectura Empresarial basado en TOGAF

Curso: Arquitectura Empresarial basado en TOGAF Metodología para desarrollo de Arquitecturas (ADM) El ADM TOGAF es el resultado de las contribuciones continuas de un gran número de practicantes de arquitectura. Este describe un método para el desarrollo

Más detalles

EL MODELO DE DATOS RASTER

EL MODELO DE DATOS RASTER EL MODELO DE DATOS RASTER El modelo de datos raster, como señala Bosque (1992), es el modelo de datos complementario al modelo vectorial presentado anteriormente. Tiene como principal característica el

Más detalles

CAPÍTUL07 SISTEMAS DE FILOSOFÍA HÍBRIDA EN BIOMEDICINA. Alejandro Pazos, Nieves Pedreira, Ana B. Porto, María D. López-Seijo

CAPÍTUL07 SISTEMAS DE FILOSOFÍA HÍBRIDA EN BIOMEDICINA. Alejandro Pazos, Nieves Pedreira, Ana B. Porto, María D. López-Seijo CAPÍTUL07 SISTEMAS DE FILOSOFÍA HÍBRIDA EN BIOMEDICINA Alejandro Pazos, Nieves Pedreira, Ana B. Porto, María D. López-Seijo Laboratorio de Redes de Neuronas Artificiales y Sistemas Adaptativos Universidade

Más detalles

Capítulo IV. Manejo de Problemas

Capítulo IV. Manejo de Problemas Manejo de Problemas Manejo de problemas Tabla de contenido 1.- En qué consiste el manejo de problemas?...57 1.1.- Ventajas...58 1.2.- Barreras...59 2.- Actividades...59 2.1.- Control de problemas...60

Más detalles

Tipos de instalaciones

Tipos de instalaciones Tipos de instalaciones Existen este infinidad de configuraciones, pero como técnicos debemos referirnos a las normalizadas por la NTE, la cual diferencia cinco tipos basados en número de circuitos y programas,

Más detalles

Metodología básica de gestión de proyectos. Octubre de 2003

Metodología básica de gestión de proyectos. Octubre de 2003 Metodología básica de gestión de proyectos Octubre de 2003 Dentro de la metodología utilizada en la gestión de proyectos el desarrollo de éstos se estructura en tres fases diferenciadas: Fase de Éjecución

Más detalles

1.1 EL ESTUDIO TÉCNICO

1.1 EL ESTUDIO TÉCNICO 1.1 EL ESTUDIO TÉCNICO 1.1.1 Definición Un estudio técnico permite proponer y analizar las diferentes opciones tecnológicas para producir los bienes o servicios que se requieren, lo que además admite verificar

Más detalles

SISTEMAS Y MANUALES DE LA CALIDAD

SISTEMAS Y MANUALES DE LA CALIDAD SISTEMAS Y MANUALES DE LA CALIDAD NORMATIVAS SOBRE SISTEMAS DE CALIDAD Introducción La experiencia de algunos sectores industriales que por las características particulares de sus productos tenían necesidad

Más detalles

K2BIM Plan de Investigación - Comparación de herramientas para la parametrización asistida de ERP Versión 1.2

K2BIM Plan de Investigación - Comparación de herramientas para la parametrización asistida de ERP Versión 1.2 K2BIM Plan de Investigación - Comparación de herramientas para la parametrización asistida de ERP Versión 1.2 Historia de revisiones Fecha VersiónDescripción Autor 08/10/2009 1.0 Creación del documento.

Más detalles

Soporte Técnico de Software HP

Soporte Técnico de Software HP Soporte Técnico de Software HP Servicios Tecnológicos HP Servicios contractuales Datos técnicos El Soporte Técnico de Software HP ofrece servicios integrales de soporte remoto de para los productos de

Más detalles

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 INTRODUCCIÓN El elemento hardware de un sistema básico de proceso de datos se puede estructurar en tres partes claramente diferenciadas en cuanto a sus funciones:

Más detalles

Capítulo 5: METODOLOGÍA APLICABLE A LAS NORMAS NE AI

Capítulo 5: METODOLOGÍA APLICABLE A LAS NORMAS NE AI Capítulo 5: METODOLOGÍA APLICABLE A LAS NORMAS NE AI La segunda fase del NIPE corresponde con la adecuación de las intervenciones de enfermería del sistema de clasificación N.I.C. (Nursing Intervention

Más detalles

Autenticación Centralizada

Autenticación Centralizada Autenticación Centralizada Ing. Carlos Rojas Castro Herramientas de Gestión de Redes Introducción En el mundo actual, pero en especial las organizaciones actuales, los usuarios deben dar pruebas de quiénes

Más detalles

DE VIDA PARA EL DESARROLLO DE SISTEMAS

DE VIDA PARA EL DESARROLLO DE SISTEMAS MÉTODO DEL CICLO DE VIDA PARA EL DESARROLLO DE SISTEMAS 1. METODO DEL CICLO DE VIDA PARA EL DESARROLLO DE SISTEMAS CICLO DE VIDA CLÁSICO DEL DESARROLLO DE SISTEMAS. El desarrollo de Sistemas, un proceso

Más detalles

Electrónica Digital II

Electrónica Digital II Electrónica Digital II M. C. Felipe Santiago Espinosa Aplicaciones de los FPLDs Octubre / 2014 Aplicaciones de los FPLDs Los primeros FPLDs se usaron para hacer partes de diseños que no correspondían a

Más detalles

T E S I S. para la obtención del GRADO DE DOCTOR INGENIERO. por. F. Hernández Abad

T E S I S. para la obtención del GRADO DE DOCTOR INGENIERO. por. F. Hernández Abad UPB ETSIIT T E S I S para la obtención del GRADO DE DOCTOR INGENIERO por F. Hernández Abad Ingeniero Industrial Junio 1985 2 1. INTRODUCCIÓN 1.1 Motivos que han conducido a la elección de esta tesis 9

Más detalles

Novedades en Q-flow 3.02

Novedades en Q-flow 3.02 Novedades en Q-flow 3.02 Introducción Uno de los objetivos principales de Q-flow 3.02 es adecuarse a las necesidades de grandes organizaciones. Por eso Q-flow 3.02 tiene una versión Enterprise que incluye

Más detalles

de la empresa Al finalizar la unidad, el alumno:

de la empresa Al finalizar la unidad, el alumno: de la empresa Al finalizar la unidad, el alumno: Identificará el concepto de rentabilidad. Identificará cómo afecta a una empresa la rentabilidad. Evaluará la rentabilidad de una empresa, mediante la aplicación

Más detalles

Capítulo 5. Cliente-Servidor.

Capítulo 5. Cliente-Servidor. Capítulo 5. Cliente-Servidor. 5.1 Introducción En este capítulo hablaremos acerca de la arquitectura Cliente-Servidor, ya que para nuestra aplicación utilizamos ésta arquitectura al convertir en un servidor

Más detalles

INSTITUTO TECNOLÓGICO DE COSTA RICA. Caso #09 - Chrysler. Administración de la Función de la Información

INSTITUTO TECNOLÓGICO DE COSTA RICA. Caso #09 - Chrysler. Administración de la Función de la Información INSTITUTO TECNOLÓGICO DE COSTA RICA Caso #09 - Chrysler Administración de la Función de la Información Álvaro Navarro Barquero 200944186 Alejandro Rodríguez Jiménez 200924533 09/05/2012 Contenido I Situación

Más detalles

FUNDAMENTOS DE COMPUTACIÓN PARA CIENTÍFICOS. CNCA Abril 2013

FUNDAMENTOS DE COMPUTACIÓN PARA CIENTÍFICOS. CNCA Abril 2013 FUNDAMENTOS DE COMPUTACIÓN PARA CIENTÍFICOS CNCA Abril 2013 6. COMPUTACIÓN DE ALTO RENDIMIENTO Ricardo Román DEFINICIÓN High Performance Computing - Computación de Alto Rendimiento Técnicas, investigación

Más detalles

Estrategia de Cómputo en la Nube. Servicios en la Nube

Estrategia de Cómputo en la Nube. Servicios en la Nube Estrategia de Cómputo en la Nube Servicios en la Nube Computación para la Nube? Tecnología informática por la que se proporcionan software y servicios a través de la Internet. El nombre Cloud Computing

Más detalles

Contenidos. INFORME ENCUESTA TELEFÓNICA. Curso 2009 10

Contenidos. INFORME ENCUESTA TELEFÓNICA. Curso 2009 10 ENCUESTA DE OPINIÓN DEL ALUMNADO SOBRE LA ACTUACIÓN DOCENTE DEL PROFESORADO UNIVERSIDAD DE SEVILLA Curso 2009-2010 ENCUESTA TELEFÓNICA Contenidos Introducción.... 4 El Cuestionario... 5 El muestreo...

Más detalles

Mantenimiento de Sistemas de Información

Mantenimiento de Sistemas de Información de Sistemas de Información ÍNDICE DESCRIPCIÓN Y OBJETIVOS... 1 ACTIVIDAD MSI 1: REGISTRO DE LA PETICIÓN...4 Tarea MSI 1.1: Registro de la Petición... 4 Tarea MSI 1.2: Asignación de la Petición... 5 ACTIVIDAD

Más detalles

SÍNTESIS Y PERSPECTIVAS

SÍNTESIS Y PERSPECTIVAS SÍNTESIS Y PERSPECTIVAS Los invitamos a observar, a identificar problemas, pero al mismo tiempo a buscar oportunidades de mejoras en sus empresas. REVISIÓN DE CONCEPTOS. Esta es la última clase del curso.

Más detalles

PROCEDIMIENTO ESPECÍFICO. Código G083-01 Edición 0

PROCEDIMIENTO ESPECÍFICO. Código G083-01 Edición 0 Índice 1. TABLA RESUMEN... 2 2. OBJETO... 2 3. ALCANCE... 2 4. RESPONSABILIDADES... 3 5. ENTRADAS... 3 6. SALIDAS... 3 7. PROCESOS RELACIONADOS... 3 8. DIAGRAMA DE FLUJO... 4 9. DESARROLLO... 5 9.1. DEFINICIÓN...

Más detalles

CURSO: APACHE SPARK CAPÍTULO 2: INTRODUCCIÓN A APACHE SPARK. www.formacionhadoop.com

CURSO: APACHE SPARK CAPÍTULO 2: INTRODUCCIÓN A APACHE SPARK. www.formacionhadoop.com CURSO: APACHE SPARK CAPÍTULO 2: INTRODUCCIÓN A APACHE SPARK www.formacionhadoop.com Índice 1 Qué es Big Data? 2 Problemas con los sistemas tradicionales 3 Qué es Spark? 3.1 Procesamiento de datos distribuido

Más detalles

CLASIFICACION DE LAS COMPUTADORAS

CLASIFICACION DE LAS COMPUTADORAS CLASIFICACION DE LAS COMPUTADORAS Tipos de Computadoras Dentro de la evolución de las computadoras, han surgido diferentes equipos con diferentes tamaños y características según su tipo de labor. Los computadores

Más detalles

PCLabs. Práctica de Ingeniería del Software I Curso 2008/09. Descripción del problema

PCLabs. Práctica de Ingeniería del Software I Curso 2008/09. Descripción del problema PCLabs Práctica de Ingeniería del Software I Curso 2008/09 Descripción del problema Introducción... 1 Organización de la empresa... 1 Gestión del almacén... 2 Gestión de pedidos de clientes... 3 Gestión

Más detalles

4. Programación Paralela

4. Programación Paralela 4. Programación Paralela La necesidad que surge para resolver problemas que requieren tiempo elevado de cómputo origina lo que hoy se conoce como computación paralela. Mediante el uso concurrente de varios

Más detalles

Sistema Inteligente de Exploración

Sistema Inteligente de Exploración Observatorio Municipal de Estadística Sistema Inteligente de Exploración Capítulos 1. Consideraciones iniciales y requerimientos... 2 2. Navegación... 3 3. Consulta de indicadores... 5 3.1. Elaboración

Más detalles

1.1. Introducción y conceptos básicos

1.1. Introducción y conceptos básicos Tema 1 Variables estadísticas Contenido 1.1. Introducción y conceptos básicos.................. 1 1.2. Tipos de variables estadísticas................... 2 1.3. Distribuciones de frecuencias....................

Más detalles

SCOP++ Lidar. Metodología de filtrado

SCOP++ Lidar. Metodología de filtrado SCOP++ Lidar. Metodología de filtrado 1 Contenido 1 Estrategia de filtrado y clasificación... 4 Eliminate Building Step (eliminación de edificios)... 5 Thin Out Step (reducción de densidad del fichero

Más detalles

Cuándo y qué virtualizar? Cuándo y qué virtualizar? 1

Cuándo y qué virtualizar? Cuándo y qué virtualizar? 1 Cuándo y qué virtualizar? Cuándo y qué virtualizar? 1 Por qué surge la virtualización? En proyectos de infraestructuras informáticas muchos responsables de IT se sienten más confortables con diseños basados

Más detalles

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia.

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia. DISCOS RAID Raid: redundant array of independent disks, quiere decir conjunto redundante de discos independientes. Es un sistema de almacenamiento de datos que utiliza varias unidades físicas para guardar

Más detalles

Desarrollo de un cluster computacional para la compilación de. algoritmos en paralelo en el Observatorio Astronómico.

Desarrollo de un cluster computacional para la compilación de. algoritmos en paralelo en el Observatorio Astronómico. Desarrollo de un cluster computacional para la compilación de algoritmos en paralelo en el Observatorio Astronómico. John Jairo Parra Pérez Resumen Este artículo muestra cómo funciona la supercomputación

Más detalles

Introducción En los años 60 s y 70 s cuando se comenzaron a utilizar recursos de tecnología de información, no existía la computación personal, sino que en grandes centros de cómputo se realizaban todas

Más detalles

App para realizar consultas al Sistema de Información Estadística de Castilla y León

App para realizar consultas al Sistema de Información Estadística de Castilla y León App para realizar consultas al Sistema de Información Estadística de Castilla y León Jesús M. Rodríguez Rodríguez rodrodje@jcyl.es Dirección General de Presupuestos y Estadística Consejería de Hacienda

Más detalles

Diseño orientado al flujo de datos

Diseño orientado al flujo de datos Diseño orientado al flujo de datos Recordemos que el diseño es una actividad que consta de una serie de pasos, en los que partiendo de la especificación del sistema (de los propios requerimientos), obtenemos

Más detalles

Clusters frente a GPUs para Detección Automática de Objetivos en Imágenes Hiperespectrales de la Superficie Terrestre

Clusters frente a GPUs para Detección Automática de Objetivos en Imágenes Hiperespectrales de la Superficie Terrestre Clusters frente a GPUs para Detección Automática de Objetivos en Imágenes Hiperespectrales de la Superficie Terrestre Abel Paz Grupo Computación Hiperespectral (HYPERCOMP) Dept. Tecnología de Computadores

Más detalles

PLAN DE EMPRESA ESTRUCTURA. 1. Resumen ejecutivo. 2. Descripción del producto y valor distintivo. 3. Mercado potencial. 4. Competencia.

PLAN DE EMPRESA ESTRUCTURA. 1. Resumen ejecutivo. 2. Descripción del producto y valor distintivo. 3. Mercado potencial. 4. Competencia. PLAN DE EMPRESA El Plan de Empresa es el documento que identifica una oportunidad de negocio o describe un proyecto puesto ya en marcha, con el propósito de examinar su viabilidad técnica, económica y

Más detalles

ANALIZANDO GRAFICADORES

ANALIZANDO GRAFICADORES ANALIZANDO GRAFICADORES María del Carmen Pérez E.N.S.P.A, Avellaneda. Prov. de Buenos Aires Instituto Superior del Profesorado "Dr. Joaquín V. González" Buenos Aires (Argentina) INTRODUCCIÓN En muchos

Más detalles

Modelos de Help Desk

Modelos de Help Desk biblioteca foro helpdesk Mejores prácticas Modelos de Help Desk HUGO VILLADA FHD / BIBLIOTECA / MEJORES PRÁCTICAS Pág. 02 Modelos de Help Desk Composición de la demanda En el ambiente informático los problemas

Más detalles

Análisis de aplicación: TightVNC

Análisis de aplicación: TightVNC Análisis de aplicación: TightVNC Este documento ha sido elaborado por el Centro de Apoyo Tecnológico a Emprendedores bilib, www.bilib.es Copyright 2011, Junta de Comunidades de Castilla La Mancha. Este

Más detalles

Modelos de Ciclo de Vida de Desarrollo de Software en el Contexto de la Industria Colombiana de Software

Modelos de Ciclo de Vida de Desarrollo de Software en el Contexto de la Industria Colombiana de Software Modelos de Ciclo de Vida de Desarrollo de Software en el Contexto de la Industria Colombiana de Software Hugo F. Arboleda Jiménez. MSc. Docente-Investigador, Facultad de Ingenierías, Universidad de San

Más detalles

Capítulo 12: Indexación y asociación

Capítulo 12: Indexación y asociación Capítulo 12: Indexación y asociación Conceptos básicos Índices ordenados Archivos de índice de árbol B+ Archivos de índice de árbol B Asociación estática Asociación dinámica Comparación entre indexación

Más detalles

Día 5-6-2012 17:00h Lugar: Obra Social Ibercaja, Sala De actos, Rambla Ferran 38, 3º, Lleida

Día 5-6-2012 17:00h Lugar: Obra Social Ibercaja, Sala De actos, Rambla Ferran 38, 3º, Lleida Resumen de la conferencia Día 5-6-2012 17:00h Lugar: Obra Social Ibercaja, Sala De actos, Rambla Ferran 38, 3º, Lleida Ponente: Luis Muñiz Socio Director de Sisconges & Estrategia y experto en Sistemas

Más detalles

CAPITULO I. Introducción. En la actualidad, las empresas están tomando un papel activo en cuanto al uso de sistemas y

CAPITULO I. Introducción. En la actualidad, las empresas están tomando un papel activo en cuanto al uso de sistemas y CAPITULO I Introducción 1.1 Introducción En la actualidad, las empresas están tomando un papel activo en cuanto al uso de sistemas y redes computacionales. La tecnología ha ido evolucionando constantemente

Más detalles

4.4.1 Servicio de Prevención Propio.

4.4.1 Servicio de Prevención Propio. 1 Si se trata de una empresa entre 250 y 500 trabajadores que desarrolla actividades incluidas en el Anexo I del Reglamento de los Servicios de Prevención, o de una empresa de más de 500 trabajadores con

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación II MODELOS y HERRAMIENTAS UML 1 1 Modelado de casos de uso (I) Un caso de uso es una técnica de modelado usada para describir lo que debería hacer

Más detalles

PCGeek. Descripción del problema

PCGeek. Descripción del problema PCGeek Descripción del problema Ejercicio de Ingeniería del Software I Ejercicio de Ingeniería del Software I Página 1 de 9 1 Introducción... 3 1.1 Organización de la empresa... 3 2 Gestión del almacén...

Más detalles

Enginyeria del Software III

Enginyeria del Software III Enginyeria del Software III Sessió 3. L estàndard ISO/IEC 15504 Antònia Mas Pichaco 1 Introducción El proyecto SPICE representa el mayor marco de colaboración internacional establecido con la finalidad

Más detalles

La Pirámide de Solución de TriActive TRICENTER

La Pirámide de Solución de TriActive TRICENTER Información sobre el Producto de TriActive: Página 1 Documento Informativo La Administración de Sistemas Hecha Simple La Pirámide de Solución de TriActive TRICENTER Información sobre las Soluciones de

Más detalles

Monitoreo de condiciones meteorológicas en Baja California Sur. Luis M. Farfán (farfan@cicese.mx) CICESE, Unidad La Paz, B.C.S.

Monitoreo de condiciones meteorológicas en Baja California Sur. Luis M. Farfán (farfan@cicese.mx) CICESE, Unidad La Paz, B.C.S. 1 Monitoreo de condiciones meteorológicas en Baja California Sur Luis M. Farfán (farfan@cicese.mx) CICESE, Unidad La Paz, B.C.S. Las condiciones meteorológicas del tiempo representan el estado de la atmósfera

Más detalles

DIRECTRICES Y ORIENTACIONES GENERALES PARA LAS PRUEBAS DE ACCESO A LA UNIVERSIDAD

DIRECTRICES Y ORIENTACIONES GENERALES PARA LAS PRUEBAS DE ACCESO A LA UNIVERSIDAD Curso Asignatura 2014/2015 MATEMÁTICAS II 1º Comentarios acerca del programa del segundo curso del Bachillerato, en relación con la Prueba de Acceso a la Universidad La siguiente relación de objetivos,

Más detalles

Tipos de computadoras

Tipos de computadoras Tipos de computadoras Tú necesitas saber la estructura física que posee cada computadora Los componentes esenciales de una computadora Qué vas a aprender en este módulo: Las distintas clasificaciones bajo

Más detalles

Software de Simulación aplicado a entornos de e-learning

Software de Simulación aplicado a entornos de e-learning Software de Simulación aplicado a entornos de e-learning 2009 Laboratorio de Investigación de Software Universidad Tecnológica Nacional Facultad Regional Córdoba Titulo del Proyecto Software de Simulación

Más detalles

La presente tesis pretende que los estudiantes observen la teoría de las acciones de control

La presente tesis pretende que los estudiantes observen la teoría de las acciones de control CAPÍTULO V. CONCLUSIONES. La presente tesis pretende que los estudiantes observen la teoría de las acciones de control de forma virtual al mismo tiempo analicen físicamente los sistemas electrónicos cuando

Más detalles

PROPÓSITO... 2 DETERMINANTES PARA UNA BUENA EXPERIENCIA DE USO...

PROPÓSITO... 2 DETERMINANTES PARA UNA BUENA EXPERIENCIA DE USO... Tabla de Contenido PROPÓSITO... 2 DETERMINANTES PARA UNA BUENA EXPERIENCIA DE USO... 2 1. LA PRESENCIA DE INFORMACIÓN Y AYUDA ÚTIL PARA COMPLETAR LOS TRÁMITES EN LÍNEA.... 2 2. LA DISPONIBILIDAD DE DIVERSOS

Más detalles

MEDICION DEL TRABAJO

MEDICION DEL TRABAJO MEDICION DEL TRABAJO Habíamos dicho al comenzar el curso que habían 4 técnicas que permiten realizar una medición del trabajo 1 Técnicas Directas: - Estudio de tiempos con cronómetro - Muestreo del trabajo

Más detalles

Elementos requeridos para crearlos (ejemplo: el compilador)

Elementos requeridos para crearlos (ejemplo: el compilador) Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción

Más detalles

Resumen de la Tesina. Autor: Adrià Batet López. Tutor: Víctor Pascual Ayats

Resumen de la Tesina. Autor: Adrià Batet López. Tutor: Víctor Pascual Ayats Inventario y geolocalización de las actividades comerciales en las plantas bajas de los edificios de L Hospitalet de Llobregat. Aplicación web de recursos para el ciudadano. Resumen de la Tesina. Autor:

Más detalles

SEWERIN. Pre Localización De Fugas de Agua

SEWERIN. Pre Localización De Fugas de Agua SEWERIN Pre Localización De Fugas de Agua Ventajas del sistema La Pre localización de fugas de agua consiste en la escucha de la red en varios puntos. Para ello se utilizan loggers que graban sus sonidos

Más detalles

BÚSQUEDA DE CERO INCIDENCIAS: IMPLANTACION DE UN SISTEMA DE GESTIÓN ERP.

BÚSQUEDA DE CERO INCIDENCIAS: IMPLANTACION DE UN SISTEMA DE GESTIÓN ERP. BÚSQUEDA DE CERO INCIDENCIAS: IMPLANTACION DE UN SISTEMA DE GESTIÓN ERP. 1. Identificación y Breve descripción de su empresa Actividad: Larmario s. l. se dedica al diseño, fabricación a medida, distribución

Más detalles

UNIVERSIDAD DE EXTREMADURA. Escuela Politécnica Ingeniería Informática. Proyecto Fin de Carrera

UNIVERSIDAD DE EXTREMADURA. Escuela Politécnica Ingeniería Informática. Proyecto Fin de Carrera UNIVERSIDAD DE EXTREMADURA Escuela Politécnica Ingeniería Informática Proyecto Fin de Carrera Aplicación de la Tecnología Grid al Tratamiento de Imágenes Hiperespectrales Fermín Ayuso Márquez Víctor Manuel

Más detalles

Operación 8 Claves para la ISO 9001-2015

Operación 8 Claves para la ISO 9001-2015 Operación 8Claves para la ISO 9001-2015 BLOQUE 8: Operación A grandes rasgos, se puede decir que este bloque se corresponde con el capítulo 7 de la antigua norma ISO 9001:2008 de Realización del Producto,

Más detalles

Decisión: Indican puntos en que se toman decisiones: sí o no, o se verifica una actividad del flujo grama.

Decisión: Indican puntos en que se toman decisiones: sí o no, o se verifica una actividad del flujo grama. Diagrama de Flujo La presentación gráfica de un sistema es una forma ampliamente utilizada como herramienta de análisis, ya que permite identificar aspectos relevantes de una manera rápida y simple. El

Más detalles

UBICACIÓN DE LA PLANTA

UBICACIÓN DE LA PLANTA SECCIÓN II UBICACIÓN DE LA PLANTA La adecuada ubicación de la planta industrial, es tan importante para su éxito posterior, como lo es la elección del proceso mismo, y por lo tanto para lograr esto, se

Más detalles

revista transparencia transparencia y... 3.3. UNIVERSIDADES

revista transparencia transparencia y... 3.3. UNIVERSIDADES revista transparencia transparencia y... 3.3. UNIVERSIDADES 35 revista transparencia Mónica López del Consuelo Documentalista Open Data Universidad de Granada 3.3.1. El filtro básico de la transparencia.

Más detalles

Software de Control de Visitas ALCANCE TÉCNICO

Software de Control de Visitas ALCANCE TÉCNICO ALCANCE TÉCNICO ALCANCE TÉCNICO 1. PRESENTACIÓN: El Sistema de Visitas propone dar solución al Control de visitas, permitiendo administrar en forma rápida y fácil el ingreso y salida de personal externo

Más detalles

Para lograr una verdadera administración eficaz de toda la información relevante de una compañía, y que de esta manera nada de lo que suceda en el

Para lograr una verdadera administración eficaz de toda la información relevante de una compañía, y que de esta manera nada de lo que suceda en el Para lograr una verdadera administración eficaz de toda la información relevante de una compañía, y que de esta manera nada de lo que suceda en el seno de la empresa quede librado al azar, es fundamental

Más detalles

Tecnología IP para videovigilancia... Los últimos avances han hecho posible conectar cámaras directamente a una red de ordenadores basada en el

Tecnología IP para videovigilancia... Los últimos avances han hecho posible conectar cámaras directamente a una red de ordenadores basada en el para videovigilancia....... Los últimos avances han hecho posible conectar cámaras directamente a una red de ordenadores basada en el protocolo IP. La tecnología de las cámaras de red permite al usuario

Más detalles

ÍNDICE DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ

ÍNDICE DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ ELECTRÓNICA DIGITAL DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ IES TRINIDAD ARROYO DPTO. DE ELECTRÓNICA ÍNDICE ÍNDICE... 1 1. LIMITACIONES DE LOS CONTADORES ASÍNCRONOS... 2 2. CONTADORES SÍNCRONOS...

Más detalles

INSTALACIÓN, OPERACIÓN Y PROGRAMACIÓN DE EQUIPOS Y SISTEMAS TELEFÓNICOS

INSTALACIÓN, OPERACIÓN Y PROGRAMACIÓN DE EQUIPOS Y SISTEMAS TELEFÓNICOS 09-06-2015 1 Descripción y funcionamiento de una central PABX 09-06-2015 2 Un PBX o PABX (siglas en inglés de Private Branch Exchange y Private Automatic Branch Exchange para PABX), la cual es la red telefónica

Más detalles

Análisis de aplicación: Cortafuegos de la distribución clearos

Análisis de aplicación: Cortafuegos de la distribución clearos Análisis de aplicación: Cortafuegos de la distribución clearos Este documento ha sido elaborado por el Centro de Apoyo Tecnológico a Emprendedores bilib, www.bilib.es Copyright 2011, Junta de Comunidades

Más detalles

Metodologías de diseño de hardware

Metodologías de diseño de hardware Capítulo 2 Metodologías de diseño de hardware Las metodologías de diseño de hardware denominadas Top-Down, basadas en la utilización de lenguajes de descripción de hardware, han posibilitado la reducción

Más detalles

CAPITULO IV. HERRAMIENTAS DE CÓDIGO ABIERTO

CAPITULO IV. HERRAMIENTAS DE CÓDIGO ABIERTO CAPITULO IV. HERRAMIENTAS DE CÓDIGO ABIERTO En la actualidad la mayoría de las grandes empresas cuentan con un sin número de servicios que ofrecen a sus trabajadores y clientes. Muchos de estos servicios

Más detalles

Colección de Tesis Digitales Universidad de las Américas Puebla. Morales Salcedo, Raúl

Colección de Tesis Digitales Universidad de las Américas Puebla. Morales Salcedo, Raúl 1 Colección de Tesis Digitales Universidad de las Américas Puebla Morales Salcedo, Raúl En este último capitulo se hace un recuento de los logros alcanzados durante la elaboración de este proyecto de tesis,

Más detalles

Capítulo III. Manejo de Incidentes

Capítulo III. Manejo de Incidentes Manejo de Incidentes Manejo de Incidentes Tabla de contenido 1.- En qué consiste el manejo de incidentes?...45 1.1.- Ventajas...47 1.2.- Barreras...47 2.- Requerimientos...48 3.- Clasificación de los incidentes...48

Más detalles

5.- ANÁLISIS DE RIESGO

5.- ANÁLISIS DE RIESGO 5.- ANÁLISIS DE RIESGO El módulo de Análisis de Riesgo se caracteriza por desarrollar una herramienta formativa para la gestión, que permite al usuario identificar, analizar y cuantificar el riesgo de

Más detalles

Soluciones para entornos HPC

Soluciones para entornos HPC Dr.. IT Manager / Project Leader @ CETA-Ciemat abelfrancisco.paz@ciemat.es V Jornadas de Supercomputación y Avances en Tecnología INDICE 1 2 3 4 HPC Qué? Cómo?..................... Computación (GPGPU,

Más detalles

http://www.statum.biz http://www.statum.info http://www.statum.org

http://www.statum.biz http://www.statum.info http://www.statum.org ApiaMonitor Monitor de Infraestructura BPMS Por: Ing. Manuel Cabanelas Product Manager de Apia Manuel.Cabanelas@statum.biz http://www.statum.biz http://www.statum.info http://www.statum.org Abstract A

Más detalles

Grado en Ingeniería Informática

Grado en Ingeniería Informática Grado en Ingeniería Informática Competencias Generales y trasversales De acuerdo con la resolución del Consejo de Universidades de fecha 3 de marzo de 2009, para obtener este título de grado en ingeniería

Más detalles

LA LOGÍSTICA COMO FUENTE DE VENTAJAS COMPETITIVAS

LA LOGÍSTICA COMO FUENTE DE VENTAJAS COMPETITIVAS LA LOGÍSTICA COMO FUENTE DE VENTAJAS COMPETITIVAS Los clientes compran un servicio basandose en el valor que reciben en comparacion con el coste en el que incurren. Por, lo tanto, el objetivo a largo plazo

Más detalles