CÓMO APLICAR LA TECNOLOGÍA GPU A LOS SISTEMAS DE INFORMACIÓN GEOGRÁFICA PARA MEJORAR LOS ALGORITMOS DE RENDERIZACIÓN DE MAPAS

Documentos relacionados
ELEMENTOS HARDWARE DEL ORDENADOR. Tarjeta gráfica

Montaje y Reparación de Sistemas Microinformáticos

Intel lanza su procesador Caballero Medieval habilitado para Inteligencia Artificial

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU. Clase 0 Lanzamiento del Curso. Motivación

Tema 1 Introducción. David Vallejo Fernández. Curso 2007/2008. Escuela Superior de Informática

FUNCIONAMIENTO DEL ORDENADOR

Tema 2 Introducción a la Programación en C.

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU

Contenido GPU (I) Introducción Sombreadores. Operadores. Vértice Píxel Geometría. Textura Raster HDR

Programación de GPUs con CUDA

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

Tema 12. El Hardware de la Realidad Virtual

Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en base al alcance ofrecido por el compilador.

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

Lenguaje binario. Código ASCII. Medidas de la información

Lenguaje de Programación

1. Computadores y programación

Tema V Generación de Código

SISTEMAS DE DETECCIÓN DE INTRUSOS EN LA PLATAFORMA NETFPGA USANDO RECONOCIMIENTO DE EXPRESIONES REGULARES.

TEMA 1: Concepto de ordenador


Introducción a la Computación. Herramientas Informáticas. Omar Ernesto Cabrera Rosero Universidad de Nariño

0-31 : caracteres de control : carac. Comunes : especiales (flechas, símbolos) y particulares (ñ)

ENSAMBLE Y MANTENIMIENTO DE COMPUTADORES

Diseño arquitectónico 1ª edición (2002)

Arquitecturas GPU v. 2013

Tema: Microprocesadores

Seminario II: Introducción a la Computación GPU

EVOLUCION PROCESADORES AMD (ADVANCED MICRO DEVICES)

FLAG/C. Una API para computación matricial sobre GPUs. M. Jesús Zafont Alberto Martín Francisco Igual Enrique S. Quintana-Ortí

VOCABULARIO DEL HARDWARE. Docente Yeni Ávila

UNIDAD 1. COMPONENTES DEL COMPUTADOR

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Introducción a la arquitectura de computadores

Sesión VI: Desarrollo de aplicaciones en el entorno MATLAB

Diseño Web Avanzado con HTML5 y CSS3

º 5.3 ADAPTADORES DE VIDEO

Yeray Miranda Betancor Periféricos e interfaces

Unidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas

1.1 Definición del problema

Estudio de la Wii U: CPU y GPU. Michael Harry O'Gay García Microprocesadores para comunicaciones ULPGC

Introducción a la Operación de Computadoras Personales

ARQUITECTURA DE COMPUTADORAS II. Propósito del curso : Ingeniería Ingeniería en Sistemas. Hardware. Clave de la materia: 413

CAPITULO 1 INTRODUCCION AL PROYECTO

UNIVERSIDAD PEDAGÓGICA Y TECNOLÓGICA DE COLOMBIA FACULTAD DE CIENCIAS PROGRAMA DE MATEMÁTICAS PLAN DE ESTUDIOS

Algoritmos. Diagramas de Flujo. Informática IV. L. S. C. Heriberto Sánchez Costeira

Mención en Computación

TARJETA GRÁFICA. Conrado Perea

Aceleradores gráficos. Su impacto en el bus del sistema.

Gestionando sus Cotizaciones Eficientemente

Herramientas Informáticas I Software: Sistemas Operativos

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

1. DATOS e INFORMACIÓN.

GPUs. Comparación entre Nvidia y ATI. Raúl Rodríguez del Rosario

Un recorrido por la Web

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

INGENIERÍA DEL SOFTWARE

CONTROLES ELÉCTRICOS PRÁCTICA 6: PROGRAMACIÓN DE PLC UNIDAD 5 LIRA MARTÍNEZ MANUEL ALEJANDRO DOCENTE: PACHECO HIPÓLITO JAVIER

4.1 Conceptos Básicos de Matlab. Matlab es creado por The MathWorks, el cual es un idioma de alto rendimiento

MEMORIA RAM. Clase 4

EL ORDENADOR A. PERIFÉRICOS. B. UNIDAD CENTRAL. 1. HARDWARE Y SOFTWARE. 2. FUNCIONAMIENTO DE UN SISTEMA INFORMÁTICO 3. CONCEPTO DE SISTEMA INFORMÁTICO

Procesamiento de documentos XML.

Objetos de aprendizaje: Computadora

IFCD0210 Desarrollo de Aplicaciones con Tecnologías Web

UNIVERSIDAD DE GUADALAJARA

Píxel. Un píxel ( picture element ) es la menor unidad homogénea en color que forma parte de una. fotograma de video, gráfico)

Area Académica: Sistemas Computacionales. Tema: Elementos de diseño de memoria caché

una red de equipos no puede funcionar sin un sistema operativo de red

UNIDAD 1: CONCEPTOS BA SICOS DE BASE DE DATOS

Objetivos. Objetivos. Arquitectura de Computadores. R.Mitnik

GRADO EN INGENIERÍA INFORMÁTICA

Tema: Entorno a C# y Estructuras Secuenciales.

Introducción a Maxima: Haciendo Matemáticas con Software Libre (2 a Edición)

ENIAC, Primer computador electrónico y su panel de conexiones

Introducción. Universidad Nacional Tecnológica del Cono Sur de Lima JORGE AUGUSTO MARTEL TORRES 1

Servicio Nacional de Aprendizaje SENA. Regional Cundinamarca-Soacha. Programa Mantenimiento de Equipos de Cómputo. DOCUMENTO DE APOYO No.

Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Departamento de Computación Informe final de pasantía

- Si es así, cuales son los lenguajes y entornos libres comparables a un C/C++ con Anjuta-Glade/Visual Studio y buenas librerias?

Tutor: Ing. Eddie Galarza. Autores: Edison Xavier Sánchez Quevedo Edison Saúl Gallardo Calvopiña

Peppermint. David De Maya Merras. Pedro José Hernández López

Memoria de ejemplo para curso de L A TEX avanzado

GLOSARIO. que interactúan para analizar información espacial en mapas. forma y la localización de los objetos en el espacio.

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

Cristian Blanco

PROGRAMACIÓN DE AULA: OBJETIVOS CONTENIDOS MATERIALES y RECURSOS MODULO MATEMATICAS-TECNOLOGÍA

PROPUESTA DE INFORME TECNICO PREVIO DE EVALUACION DE SOFTWARE

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

1 Representación por superficies de polígonos

El pipeline de visualización es el conjunto de

Computación Gráfica = CG = Computer Graphics

Developing ASP.NET MVC 4 Web Applications

FUNDAMENTOS DE COMPUTACION INVESTIGACION PROCESADORES DIANA CARRIÓN DEL VALLE DOCENTE: JOHANNA NAVARRO ESPINOSA TRIMESTRE II

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

TEMA 2 Introducción a C# ANÁLISIS Y DESARROLLO DE APLICACIONES INFORMÁTICAS Curso 2010/2011

Tema IV El lenguaje de programación PHP Tipos de Datos

LÓGICA DE PROGRAMACIÓN

Multiplicación de Matrices en Sistemas cc-numa Multicore. Autor: Jesús Cámara Moreno Director: Domingo Giménez Cánovas

Nombre de la asignatura: Programación Básica. Créditos: Objetivo de aprendizaje

ESCUELA DE INFORMÁTICA

Curso Microsoft SharePoint Server 2010 Designing and Developing Applications (10232)

Transcripción:

CÓMO APLICAR LA TECNOLOGÍA GPU A LOS SISTEMAS DE INFORMACIÓN GEOGRÁFICA PARA MEJORAR LOS ALGORITMOS DE RENDERIZACIÓN DE MAPAS Sergio Jorrín Abellán Director SIG / GIS Director Geograma S.L. Castillo de Lantarón, 8 bajo 01007 Vitoria-Gasteiz (Alava) www.geograma.com Diciembre de 2008 Palabras clave: Sistema de Información Geográfica (SIG ó GIS), Unidad de Procesado de Gráficos (GPU), servidor de mapas, Interfaz de Programación de Aplicaciones (API). 1 Sumario Una GPU es un chip dedicado exclusivamente al procesamiento de gráficos, para aligerar la carga de trabajo del procesador central. Estos chips han sido especialmente diseñados para optimizar los algoritmos de cálculo gráfico, concretamente para mejora el rendimiento de videojuegos y o aplicaciones 3D interactivas. Esta tecnología es aplicable a los Sistemas de Información Geográfica, pudiendo por ejemplo, mejorar los algoritmos de renderización de los servidores de mapas. Este artículo tratará de exponer esta nueva tecnología, las posibilidades de aplicar esta tecnología a los Sistemas de Información Geográfica y las API s de programación existentes actualmente para poder desarrollar con esta tecnología, como por ejemplo. Tecnología NVIDIA CUDA. Es el único entorno basado en el lenguaje C que permite a los programadores escribir software para resolver problemas computacionales complejos en menos tiempo aprovechando la gran capacidad de procesamiento paralelo de las GPU multinúcleo. Miles de programadores están utilizando ya las herramientas gratuitas de desarrollo de CUDA (válidas para millones de GPU ya instaladas en el mercado) a fin de acelerar todo tipo de aplicaciones. Referencias [1] Tecnología NVIDIA CUDA. http://www.nvidia.es/object/cuda_what_is_es.html [2] General-Purpose Computation Using Graphics Hardware: http://www.gpgpu.org [3] Wikipedia

2 Qué es una GPU ó Unidad de procesamiento gráfico? Una GPU es un chip dedicado exclusivamente al procesamiento de gráficos. Las GPU son muy potentes y pueden incluso superar la frecuencia de reloj de una CPU antigua (más de 500MHz). Su potencia y desarrollo reciente se debe a dos factores diferentes. El primer factor es la alta especialización de las GPU, ya que al estar pensadas para desarrollar una sola tarea, es posible dedicar más silicio en su diseño para llevar a cabo esa tarea más eficientemente. Por ejemplo, las GPU actuales están optimizadas para cálculo con valores en coma flotante, predominantes en los gráficos 3D. Por otro lado, muchas aplicaciones gráficas conllevan un alto grado de paralelismo inherente, al ser sus unidades fundamentales de cálculo (vértices y píxeles) completamente independientes. Por tanto, es una buena estrategia usar la fuerza bruta en las GPU para completar más cálculos en el mismo tiempo. Los modelos actuales de GPU suelen tener una media docena de procesadores de vértices (que ejecutan vertex shaders), y hasta dos o tres veces más procesadores de fragmentos o píxeles (que ejecutan fragment shaders). De este modo, una frecuencia de reloj de unos 500-600MHz (el estándar hoy en día en las GPU de más potencia), muy baja en comparación con lo ofrecido por las CPU (3.8-4 GHz en los modelos más potentes pero no necesariamente más eficientes), se traduce en una potencia de cálculo mucho mayor gracias a su arquitectura en paralelo. 2.1 Vertex shaders Vertex Shader es una funcionalidad capaz de trabajar con la estructura de vértices de los modelos tridimensionales y con ello realizar operaciones matemáticas modificando estas variables y así definiendo colores, texturas e incidencia de la luz. Esto da libertad a los programadores para realizar diferentes efectos desde la deformación de un objeto hasta la recreación de las olas del mar. En caso de representaciones gráficas se basaría en los vértices de la malla dando un efecto más realista al resultado. Con lo que conlleva una rápida ejecución de la imagen puesto que se utiliza el hardware especifico, en este caso el de las tarjetas gráficas. Lo que en realidad pretende esta funcionalidad es adicionar a una malla de polígonos, elementos que se alojan en los vértices de dichos polígonos o simplemente modificarlos. Incluido en Direct3D y OpenGL, el Vertex Shader puede reproducir diferentes efectos realistas. El Vertex Shader ha evolucionado con el tiempo encontrándose en la actualidad en la versión 4.0 Para poder trabajar y programarlos se utilizan varios lenguajes, con diversos niveles de abstracción. Las tarjetas de video pueden ser programadas directamente a través de sus propias interfaces de lenguaje ensamblador, llamado para las GPUs ARB; sin embargo, la dificultad que esto conlleva y su poca portabilidad ha implicado el desarrollo de varios lenguajes que facilitan el proceso y "traducen" a la tarjeta de video las instrucciones. Microsoft ha desarrollado su alternativa en DirectX, llamada HLSL (High Level Shader Languages) que vendría a ser un lenguaje de alto nivel bastante más fácil de programar que el ARB, con el cual también es posible realizar dichas tareas. También está disponible, a través de OpenGL el lenguaje GLSL, menos evolucionado que el anterior pero se conserva como una alternativa libre con la cual es posible conseguir el manejo de pixel y vertex shaders. Nvidia ha desarrollado también una alternativa propia para resolver el mismo problema en su hardware, llamado Cg. 2.2 Fragment ó Pixel shaders Un pixel shader es un programa de sombreado, normalmente ejecutado en la unidad de procesamiento gráfico. En OpenGL se conoce como fragmento de sombreado (fragment shader). Un pixel shader sirve para manipular un píxel, por lo general aplica un efecto sobre la imagen, por ejemplo, realismo, bump mapping, sombras, explosiones y efectos. Se trata de una función gráfica que calcula los efectos sobre una base por pixel. Bump mapping es una técnica de gráficos computacionales 3D que consiste en dar un aspecto rugoso a las superficies de los objetos. Se emplea para dar un efecto de relieve en las superficies de los objeto. Los Píxel shaders están programados en los siguientes idiomas: ensamblador, Cg, GLS.

3 Arquitectura de la GPU Una GPU está altamente segmentada, lo que indica que posee gran cantidad de unidades funcionales. Estas unidades funcionales se pueden dividir principalmente en dos: aquéllas que procesan vértices, y aquéllas que procesan pixeles. Por tanto, se establecen el vértice y el pixel como las principales unidades que maneja la GPU. Adicionalmente, y no con menos importancia, se encuentra la memoria. Ésta destaca por su rapidez, y va a jugar un papel relevante a la hora de almacenar los resultados intermedios de las operaciones y las texturas que se utilicen. Este componente será analizado en profundidad más adelante. Inicialmente, a la GPU le llega la información de la CPU en forma de vértices. El primer tratamiento que reciben estos vértices se realiza en el vertex shader. Aquí se realizan transformaciones como la rotación de figuras. Tras esto, se define la parte de estos vértices que se va a ver (clipping), y los vértices se transforman en pixeles mediante el proceso de rasterización. Estas etapas no poseen una carga relevante para la GPU. Donde sí se encuentra el principal cuello de botella del chip gráfico es en el siguiente paso: el pixel shader. Aquí se realizan las transformaciones referentes a los pixeles, tales como la aplicación de texturas. Cuando se ha realizado todo esto, y antes de almacenar los pixeles en la caché, se aplican algunos efectos como el antialiasing, blending y el efecto niebla. Otras unidades funcionales llamadas ROP toman la información guardada en la caché y preparan los pixeles para su visualización. También pueden encargarse de aplicar algunos efectos. Tras esto, se almacena la salida en el frame buffer, un tipo de memoria temporal. Hoy en día las GPU utilizan un modelo unificado, esto es, procesamiento en paralelo. Los procesadores encargados de los vértices y los procesadores encargados de los pixeles, se fundieron bajo el nombre de Stream Processor, que aumenta la eficiencia al balancear las cargas de cada proceso (vértices y píxeles). En definitiva los procesadores que realizan el trabajo son los Shader Processor, Stream Procesor se refiere a todas las unidades dentro del procesador principal. El modelo de programación gráfica es el siguiente:

4 Programación de la GPU Al inicio, la programación de la GPU se realizaba con llamadas a servicios de interrupción de la BIOS. Tras esto, la programación de la GPU se empezó a hacer en el lenguaje ensamblador específico a cada modelo. Posteriormente, se situó un nivel más entre el hardware y el software, diseñando las API (Application Program Interface), que proporcionaban un lenguaje más homogéneo para los modelos existentes en el mercado. El primer API usado ampliamente fue estándar abierto OpenGL (Open Graphics Language), tras el cuál Microsoft desarrolló DirectX. Tras el desarrollo de APIs, se decidió crear un lenguaje más natural y cercano al programador, es decir, desarrollar un lenguaje de alto nivel para gráficos. Por ello, de OpenGL y DirectX surgieron las siguientes propuestas: El lenguaje estándar de alto nivel, asociado a la biblioteca OpenGL es el "OpenGL Shading Language" (GLSL), implementado en principio por todos los fabricantes. La empresa NVidia creó un lenguaje propietario llamado Cg (del inglés, "C for graphics"), con mejores resultados que GLSL en las pruebas de eficiencia. En colaboración con NVidia, Microsoft desarrolló su "High Level Shading Language", HLSL, prácticamente idéntico a Cg, pero con ciertas incompatibilidades menores. 5 Aplicaciones de propósito general La gran potencia de cálculo de las GPU se intenta aplicar a aplicaciones no relacionadas con los gráficos. Es lo que recientemente se viene a denominar GPGPU, o GPU de propósito general (General Purpose GPU, en sus siglas en inglés). La GPU es un nuevo motor de cálculo.

Actualmente Microsoft está desarrollando la nueva versión de su API Direct3D, concretamente la versión 11, a pesar de que la anterior versión, DirectX 10, es relativamente nueva. Esto es debido a la cantidad de novedades que están apareciendo últimamente en el mundo de las tarjetas gráficas. Cabe destacar que incluye la nueva tecnología de computación de shaders, que permitirá que la GPU no se aplique solamente a gráficos 3D. De esta forma los desarrolladores podrán aplicar las ventajas del procesamiento paralelo que permiten las tarjetas gráficas. El proyecto de computación distribuida Folding@home, creado por la Universidad de Stanford, ha dado soporte para utilizar la potencia computacional de la GPU, además de la CPU. Tests recientes hablan de que son posibles ganancias de rendimiento de hasta 40 veces una CPU Intel Pentium 4, aunque claro, todo esto depende de la GPU utilizada. Pese a que las ventajas del uso de la GPU para ciertas aplicaciones son evidentes, no faltan las críticas, generalmente referidas a la inconveniencia de usar un procesador para fines completamente diferentes a lo que se pensaba al diseñarlos. Un argumento común es la falta de continuidad de las arquitecturas usadas. Debido a la rápida evolución del hardware gráfico, implementaciones de algoritmos que funcionaban óptimamente en un modelo de GPU, dejan de hacerlo, o no lo hacen óptimamente en un modelo posterior. Otra crítica es la falta de precisión de los registros de coma flotante presentes en las GPU. Generalmente, se utilizan 2 o 4 bytes para representar un número real en una GPU, que en comparación con los 4, 8 o más usados en las CPU modernas, no es suficiente para muchas aplicaciones científicas. 6 Modelo de programación CUDA La tecnología NVIDIA CUDA es el único entorno de programación en C que aprovecha la gran capacidad de procesamiento de las GPU para resolver los problemas de cálculo más complejos y de mayor carga computacional. Las herramientas de desarrollo CUDA están formadas por tres componentes fundamentales para ayudar al programador a iniciarse en este lenguaje: 1. El último controlador CUDA 2. Un kit de herramientas completo 3. Ejemplos de código del SDK de CUDA 6.1 Herramientas de CUDA Arquitectura CUDA El Toolkit de CUDA es un entorno de desarrollo en lenguaje C diseñado para las GPU compatibles con la tecnología CUDA. El entorno de desarrollo CUDA incluye: El compilador de C nvcc

Librerías FFT y BLAS de CUDA para la GPU Analizador de rendimiento (Profiler) Depurador gdb para la GPU (versión alfa disponible en marzo de 2008) Controlador CUDA de tiempo de ejecución (ahora también disponible en el controlador de gráficos estándar de NVIDIA) Manual de programación CUDA 6.2 SDK para programación en CUDA El kit de desarrollo (SDK) proporciona ejemplos con código fuente para ayudar a los programadores a familiarizarse con CUDA. Ejemplos: Ordenación bitónica en paralelo Multiplicación de matrices Trasposición de matrices Análisis del rendimiento mediante temporizadores Suma de prefijos de arrays grandes (modelo Scan) en paralelo Convolución de imágenes DWT 1D mediante la transformada wavelet de Haar Ejemplos de interacción de gráficos OpenGL y Direct3D Ejemplos de uso de las librerías BLAS y FFT en CUDA Integración de código C y C++ para CPU-GPU Modelo binomial de valoración de opciones (BOPM) Valoración de opciones con el modelo de Black-Scholes Valoración de opciones mediante el método Montecarlo Mersenne Twister paralelo (generación de números aleatorios) Cálculo de histogramas en paralelo Supresión de ruido en las imágenes Filtro Sobel para detección de bordes Plug-in MATLAB de MathWorks 6.3 Aplicaciones GIS desarrolladas con CUDA Kit de desarrollo de SW CUDA Los datos manejados por los sistemas GIS cada vez son más abundantes y complejos, y a menudo implican el uso de muchos gigabytes de mapas interactivos, afirma Dimitri Rotow, jefe de producto de Manifold.net, que continúa diciendo: El mercado ejerce continua presión para que suministremos productos capaces de trabajar con todos estos datos de una forma rápida, eficiente y precisa. Ahora, gracias a CUDA, cálculos que antes tardaban 20 minutos, ahora se realizan en 30 segundos. Incluso cálculos que antes llevaban 30 o 40 segundos, ahora se hacen

en tiempo real. No es exagerado decir que, al menos en nuestro sector, la tecnología CUDA podría ser el logro más revolucionario en la informática desde la invención del microprocesador. Demo Manifold: http://www.manifold.net/video/nvidia_cuda_demo.wmv 7 Conclusiones El procesamiento masivamente paralelo posibilita la reducción drástica del tiempo de descubrimiento. Se trata de un nuevo paradigma de investigación que posibilitará la democratización de los superordenadores. Es una oportunidad que no se debe desaprovechar. La verdad es que llama a la acción, debemos aplicar este paradigma en nuestros proyectos de innovación. Concretamente, esta tecnología aplicada a los Sistemas de Información Geográfica (SIG ó GIS), permitirá optimizar los algoritmos de generación mapas, minimizará los tiempos de proceso de análisis complejos y optimizará los algoritmos: geocoding, routing, aplicados en los servicios basados en localización (LBS).