Segmentación espacial tridimensional en hardware para el GPU Theia

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

Download "Segmentación espacial tridimensional en hardware para el GPU Theia"

Transcripción

1 Universidad de Costa Rica Facultad de Ingeniería Escuela de Ingeniería Eléctrica Segmentación espacial tridimensional en hardware para el GPU Theia Por: Enrique José Sáurez Apuy (A95872) Ciudad Universitaria Rodrigo Facio, Costa Rica Julio de 2013

2

3 Segmentación espacial tridimensional en hardware para el GPU Theia Por: Enrique José Sáurez Apuy (A95872) IE-0499 Proyecto eléctrico Aprobado por el Tribunal: Ing Diego Valverde Garro Profesor guía Ing. Randolph Steinvorth Fernández, Ph.D. Profesor lector Ing. Francisco Siles Canales, M.Sc. Profesor lector

4

5 Resumen GPU Theia es una unidad de procesamiento gráfico (GPU) implementada y diseñada por el profesor Diego Valverde Garro, bajo el esquema de hardware abierto. El presente proyecto se enfocó en la investigación, análisis y comparación de las estructuras de segmentación espacial tridimensional para las arquitecturas del tipo GPU. Esta investigación se realizó con el fin de obtener una estructura de segmentación espacial que permitiese mejorar el rendimiento de generación de imágenes con el GPU Theia, esto mediante el aprovechamiento de la coherencia espacial, dado que se reduce la cantidad de intersecciones de rayo con primitivas necesarias para completar el algoritmo de ray-casting. Para ello, se realizó una investigación bibliográfica, y a partir de la teoría obtenida se realizó un análisis algorítmico y se simuló el comportamiento de las estructuras con escenas reales utilizando mallas de triángulos. Se modeló las estructuras de octrees, kd-trees, bvh y uniform grid, dado que estas representan los esquemas más comunmente utilizados en el área de gráficos por computador y en la generación de imágenes a partir de modelos tridimensionales. A partir de los datos obtenidos de los análisis de los algoritmos se diseñó una arquitectura para la generación de la estructura kd-tree en Hardware. Se eligió como estructura base el kd-tree dado que fue la que generó mejores resultados globales en la mayoría de las pruebas. Donde a pesar de tener un costo de construcción superior a las demás opciones, al realizar las intersecciones de rayos, se obtuvo una mejora de hasta más de 1300 veces, con respecto a la implementación actual del GPU Theia. La principal métrica que se utilizó fue la cantidad de operaciones básicas ejecutadas por iteración en la simulación. Se diseñó una máquina de estados que permite generar el kd-tree partiendo únicamente de un arreglo de primitivas o triángulos. Además, se definió las modificaciones necesarias a la arquitectura del GPU Theia, para su acople y correcto funcionamiento con esta máquina de estados, así como las modulos adicionales y de procesamiento requeridos para que el sistema sea funcional. v

6

7 Índice general Índice de figuras Índice de cuadros Nomenclatura viii x xi 1 Introducción Descripción General Justificación Alcance del proyecto Objetivos Metodología Antecedentes Unidad de Procesamiento de Gráficos (GPU) Formación de imagenes Segmentación Espacial Desarrollo y Análisis Comparación de algoritmos Definición de la arquitectura Construcción del árbol Algoritmo de intersección Resumen de la arquitectura y el hardware necesario Conclusiones y recomendaciones Conclusiones Recomendaciones Bibliografía 89 A Apéndice 95 A.1 Pseudocódigo B Anexos 111 B.1 Tablas de resultados vii

8 Índice de figuras 2.1 Diagrama de bloques del GPU Theia Diagrama de bloques del GPU Theia Scan Conversion (Rasterización) Creación de rayos Escena Volumen envolvente (esfera) Jerarquía de volúmenes envolventes Mallas uniformes Árbol BSP Heurística de área de superficie Primer división en kd-tree 2D Ejemplo de un kd-tree (2D) utilizando la mediana espacial Ejemplo de un kd-tree (3D) utilizando SAH Recorrido del rayo en 2 nodos Ejemplo de un árbol octario Demostración gráfica de la pelota Puntos de vista Comparación de estructuras: Bola Comparación de estructuras: Bola, solo mejores estructuras Tetera Tetera: Vista Tetera: Vista Tetera: Vista Tetera: Vista Comparación de estructuras: Tetera Comparación de estructuras: TEtera, solo mejores estructuras Vista Frontal: CSIE NTU Vista Trasera: CSIE NTU Vista Variada: CSIE NTU Vista Superior: CSIE NTU Comparación de estructuras: Edificio Comparación de estructuras: Edificio, solo mejores estructuras Nuevo CSIE NTU Vista Inferior: Nuevo CSIE NTU viii

9 3.20 Vista Lateral: Nuevo CSIE NTU Vista Superior: Nuevo CSIE NTU Vista Frontal: Nuevo CSIE NTU Comparación de estructuras: Nuevo Edificio Comparación de estructuras: Nuevo Edificio, solo mejores estructuras Máquina de estados para la construcción del árbol Diagrama de la arquitectura del constructor del kd-tree ix

10 Índice de cuadros 3.1 Promedio de costo: Bola Resumen de costo de la intesección y la simulación: Bola Promedio de costos: tetera Resumen de costo de la intesección y la simulación: tetera Resumen de costos promedio: edificio Resumen de costo de la intesección y la simulación: edificio Resumen de costos promedio: nuevo edificio Resumen de costo de la intesección y la simulación: nuevo Edificio 66 B.1 BVH: Bola B.2 Kd-Tree: Bola B.3 Octree: Bola B.4 Uniform Grid: Bola B.5 Sin estructura: Bola B.6 Sin estructura: Tetera B.7 Uniform Grid: Tetera B.8 Octree: Tetera B.9 Kd-Tree: Tetera B.10 BVH: Tetera B.11 Sin Estructuras: Edificio B.12 Octree: Edificio B.13 Uniform Grid: Edificio B.14 BVH: Edificio B.15 Kd-tree: Edificio B.16 Sin Estructuras: Nuevo Edificio B.17 Octree: Nuevo Edificio B.18 Uniform Grid: Nuevo Edificio B.19 BVH: Nuevo Edificio B.20 Kd-tree: Nuevo Edificio x

11 Nomenclatura 2D AABB BBox BSP BV BVH CAD CP CTRL EXE GPU IO LUT MCU MEM OMEM RAM rbsp SAH SMT Dos dimensiones Hexaedro con planos alineados a los ejes (Axis aligned bounding box) Hexaedro envolvente (Bounding Box) Partición binaria espacial (binary spatial partition) Volumenes envolventes (bounding volumes) Jerarquía de volumenes envolventes (bounding volume hierarchies) Diseño asistido por computador (computer-aided design) Procesador de control (control processor unit) Unidad de control en el procesador vectorial (control) Unidad de ejecución en el procesador vectorial (execution) Unidad de procesamiento gráfica (graphics processor unit) Unidad de entrada/salida en el procesador vectorial (Input/Output) Tabla de consulta o busqueda (lookup table) Unidad de Control de Memoria (memory control unit) Unidad de memoria en el procesador vectorial (memory) Memoria de salida (output memory). Memoria de acceso aleatorio (random access memory) Partición espacial binaria restringida (Restricted Binary Spatial Partition) Heurísticas de área de superficie (Surface Area Heuristic) Multi-hilo simultaneo (simultaneous multithreading) xi

12 TMEM Memoria de texturas (texture memory) µp Microprocesador VP Procesador vectorial (vector processing units) xii

13 1 Introducción 1.1 Descripción General El GPU (unidad de procesamiento de gráficos, por sus siglas en inglés) Theia es un µp multi-núcleo y multi-hilo de código abierto utilizado para generar una imagen renderizada mediante el método de Ray-casting. Actualmente se pueden utilizar 2, 4, 8 y 16 núcleos trabajando independientemente para generar las imagenes, pero se puede expandir a más núcleos.(valverde, 2012). Para realizar el algoritmo de Ray-casting se parte de una escena tridimensional (3D), la cual se puede definir como una serie de primitivas que permiten modelar matemáticamente los distintos objetos que desean ser observados, y se realiza un análisis de intersección de rayos para proyectarlos en una imagen de dos dimensiones (2D), este proceso conocido como renderización (Comninos, 2006). En el caso del proyecto Theia se utiliza como primitiva el triángulo, siendo esta una de las representaciones más comunes en gráficos por computador. Los triángulos se unen por sus vértices para formar mallas y así conformar el modelo tridimensional y asemejarlo lo más posible al objeto real.(washington, 2000) Uno de los aspectos que puede afectar considerablemente el tiempo de ejecución de la renderización de una escena, es la velocidad a la cual se puede recorrer esta malla de triángulos. El modelo de Theia actualmente recorre el enrejado utilizando un algoritmo ingenuo. Este algoritmo recorre cada uno de los triángulos sin importar si estos afectan o no el análisis de la escena que se está haciendo. Este proceso se puede mejorar considerablemente si se utiliza un esquema diferente de segmentación y recorrido de las primitivas. Los esquemas de segmentación tridimensional son una parte medular de los sistemas de graficación por trazado de rayos (el caso de Theia), los cuales se pueden aplicar como solución al problema antes citado. Estos esquemas crean una subdivisión espacial de una escena tridimensional, con lo cual se reduce el tiempo requerido para realizar los análisis de intersección de rayos (que permiten realizar las proyecciones a 2D) dado que se crea una estructura que permite recorrer los objetos en la escena de manera más eficiente (Foley et al., 1993). Actualmente el GPU Theia no cuenta con un sistema de segmentación tridimensional, afectando esto negativamente su rendimiento. En el presente proyecto se propone una descripción arquitectónica de los módulos dedicados a la partición tridimensional. 1

14 2 1 Introducción 1.2 Justificación En los últimos veinte años, el área de los gráficos por computador ha evolucionado desde un nicho netamente teórico o académico hasta convertirse en un negocio de gran tamaño e importancia. (Wald, 2004). En el ámbito de electrónica del consumidor ha llegado hasta el punto en que es inconcebible que cualquier dispositivo electrónico que tenga que interactuar con humanos no tenga una interfaz gráfica amigable y atractiva. Pero, estas características han ido más allá de este mercado, y han incursionado en el mundo empresarial, donde ahora también se les solicita a los productores de equipo electrónico utilizar gráficos en la presentación de la información, donde antes se utilizaba comandos en terminal, y pantallas monocromáticas. El campo de los gráficos por computador abarca diferentes áreas de la industria, educación, gobierno y del negocio. Entre las cuales se pueden destacar las siguientes: interfaces de usuario, cartografía, medicina, diseño asistido por computadores (CAD, por sus siglas en inglés), sistemas multimedia, simulaciones, realidad virtual, etc. (Foley et al., 1993) La generación de imagenes por computador es ahora un requisito, donde antes fue un valor agregado, ahora forman parte de la vida normal del usuario. Este medio de interacción ha cambiado la forma en que se trabaja con el computador, obteniéndose en muchos casos un proceso más fácil y eficiente. Esto se ve reflejado en entornos tan sencillos como servicio al cliente hasta llegar a la medicina, donde se requiere equipo preciso y exacto en la representación de información y modelos. Las mismas empresas y corporaciones han explotado esta necesidad en la sociedad, hasta en aparatos que en su definición realmente no necesitan ser capaces de reproducir y crear gráficos en tres dimensiones. Esto con el objetivo de agregar más líneas a las especificaciones técnicas. Aunado a lo expresado anteriormente genera una necesidad de tener hardware especializado al procesamiento de gráficos, más específicamente lo que sería un GPU, dado que de no ser lo suficientemente rápido o eficiente, va a crear dispositivos que en lugar de mejorar la calidad de vida del usuario, van a crear molestias en el mismo o pueden hasta en casos muy críticos hacer que sistemas fallen o se tomen malas decisiones. Existen múltiples formas de incrementar el rendimiento y reducir el tiempo de ejecución de los procesos dentro de un GPU. Para el caso del GPU Theia, uno de los puntos críticos en la generación de las imagenes es iterar sobre las primitivas que modelan la escena tridimensional. Al proyectar el color de cada pixel en la pantalla se requiere procesar toda la lista de primitivas, por lo que de existir un método que permitiera reducir la cantidad de primitivas visitadas por cada pixel, se disminuiría considerablemente el tiempo de ejecución, lo que mejoraría el rendimiento general del sistema.

15 1.3. Alcance del proyecto Alcance del proyecto El presente proyecto se limitó a la descripción arquitectónica de módulos de procesamiento adicionales. Para la definición de los módulos se tomó en cuenta únicamente aspectos de rendimiento, en términos de la duración de la renderización de una escena, y la capacidad de este modelo de acoplarse a la estructura del GPU Theia. No se tomaron en cuenta aspectos de consumo de potencia, área, ni ningún aspecto físico que limitase su funcionamiento. Además por las características de Theia, se limitará el uso de las estructuras para escenas estáticas, es decir, donde las primitivas no van a cambiar de posición. Con lo cual no es necesario actualizar las estructuras luego de haber sido creadas. 1.4 Objetivos Objetivo general Proponer una descripción arquitectónica de módulos de procesamiento adicionales dedicados a la segmentación espacial tridimensional, los cuales se agregarán al esquema actual del proyecto GPU Theia, con el fin de acelerar la generación de imagenes tridimensionales. Objetivos específicos Para el desarrollo de este proyecto se establecieron los siguientes objetivos: Investigar las estructuras de datos y algoritmos comúnmente utilizadas en la generación de particiones tridimensionales en el área de gráficos por computadora. Proponer una descripción arquitectónica de módulos de procesamiento adicionales para la segmentación tridimensional, con el fin de minimizar el espacio de búsqueda para las operaciones de intersección entre los rayos y las primitivas de la escena. La propuesta se tiene que acoplar, con pocas modificaciones, al esquema actual del GPU Theia. Comparar el desempeño actual del sistema de intersección de rayos y primitivas contra el esquema propuesto. 1.5 Metodología El desarrollo del trabajo incluyó los siguientes pasos y procedimientos, listados en secuencia:

16 4 1 Introducción 1. Se realizó una investigación bibliográfica del estado de la cuestión en el área de la segmentación espacial tridimensional, en lo que respecta al procesamiento de gráficos. Se enfocó en distintos medios bibliográficos, principalmente en artículos (tanto técnicos como de conferencias) y en tesis de grado y de posgrado. 2. A partir de la información obtenida en la primera sección se procedió a definir los parámetros deseados a nivel global para el circuito de segmentación espacial tridimensional. Estos parámetros incluyeron aspectos tales como factibilidad de implementación y apego a las necesidades del sistema (GPU Theia). Además se definieron aspectos específicos cuantizables que permitieran comparar las distintas estructuras de datos. 3. A partir de la investigación y de los parámetros definidos se escogió un grupo de todas las estructuras investigadas, las cuales se ajustan a las características inherentes del GPU Theia. Este grupo de estructuras fue simulado y comparado en la manera especificada durante el segundo paso de la metodología. Las simulaciones se hicieron en un lenguaje de alto nivel. C++ para modelar el rendimiento de las estructuras, y python para desplegar ciertos valores de estos resultados de manera gráfica. 4. A partir de los resultados se procedió a elegir la mejor arquitectura, tomando en cuenta los pesos de cada aspecto específico definido durante la investigación bibliográfica y por el conocimiento del GPU Theia dado por las especificaciones técnicas del mismo.

17 2 Antecedentes 2.1 Unidad de Procesamiento de Gráficos (GPU) La definición original de un GPU (Unidad de gráficos por computador, por sus siglas en inglés) es un hardware dedicado, que es responsable de transformar datos en una imagen de dos dimensiones (2D) formado por pixeles. (Dinh, 2008) Pero, en los últimos años sus usos se han ampliado para realizar procesos de propósito general en computación. Estos cambios se deben a la evolución de los GPUs en los aspectos de: programabilidad, precisión y rendimiento. (Harris, 2005). Actualmente estos cambios han permitido que los GPU puedan ser coprocesadores en un sistema de procesamiento heterogéneo, es decir, donde las cargas de procesamiento se distribuyen en distintas módulos que no es solo el procesador, siendo en este caso uno de los módulos de procesamiento el GPU. (Hennessy y Patterson, 2012) Es necesario dentro del contexto del presente proyecto comprender las distintas secciones de la arquitectura Theia y así lograr definir con exactitud las posiciones dentro del esquema Theia en las cuales se van a introducir nuevos módulos de lógica. Además, es necesario entender el proceso de generación de imagenes para determinar cómo afecta realmente agregar un proceso de segmentación tridimensional dentro del algoritmo de renderización. A continuación se explican estos dos tópicos. Arquitectura del GPU Theia La arquitectura del GPU theia se puede definir como un GPU de código abierto, enfocado a procesamiento vectorial. Theia posee múltiples hilos de hardware, siendo un µp multi-núcleo con ejecución fuera de orden. (Valverde, 2011) Para comprender a cabalidad la explicación dada anteriormente es necesario definir una serie de términos: Código abierto: se define como aquel hardware o software que puede ser distribuido y desarrollado libremente.(princeton, 2013) Procesamiento Vectorial: las arquitecturas vectoriales se caracterizan por operar sobre grupos de elementos de datos dispersos en una memoria, colocarlos en registros largos y secuenciales. Una instrucción única opera 5

18 6 2 Antecedentes sobre vectores de datos, que resulta en docenas de operación registroregistro en elementos de datos independientes. (Hennessy y Patterson, 2012) Múltiples hilos: se conoce en inglés como multi-threading. Hennessy y Patterson (2012) lo expone como un método para reducir el tiempo en que el procesador esta estático a causa de accesos a memoria lentos. Se crean hilos de ejecución, donde cada hilo se puede definir como la secuencia más pequeñas de instrucciones que se puede manejar de manera independiente, y estos se intercalan en ejecución para ocultar la latencia del sistema en el acceso a memoria. Ejecución fuera de orden: son aquellos procesadores que pueden alterar el orden de ejecución de las instrucciones en comparación con el establecido en el código de la aplicación (por la distribución lógica en memoria). Se utiliza con el fin de superar dependencias y riesgos de hardware (hardware hazard), y reducir el tiempo en que la máquina esta estática (stall). (Hennessy y Patterson, 2012) Es importante destacar que la arquitectura de Theia varía respecto al esquema comúnmente aceptado de un GPU, dado que es un híbrido entre un procesador vectorial y un GPU, lo cual se va observar con mayor detalle más adelante en la presente sección. Por ejemplo si se compara un procesador SIMD (single-instruction multiple-data), el cual permite emitir una única instrucción que opera sobre datos distintos y a partir del cual se conforman los GPU y la configuración de Theia, se presenta que los primeros tienen varios contadores de programas, no tienen un procesador de control, sino un planificador de hilos SIMD, y otro grupo de variaciones. Estas diferencias hacen que el GPU Theia presente un enfoque distinto al tradicional, lo cual crea un espacio para realizar distintos tipos de pruebas y verificaciones útiles en el ambiente académico. El diagrama de bloques del GPU Theia se puede observar en la figura 2.1, donde se resaltan los siguientes módulos principales: Memoria del sistema. Unidad de control de memoria (MCU). Procesador de control (CP). Procesador vectorial (VP). Memoria de Texturas (TMEM). Memoria de Salida (OMEM).

19 2.1. Unidad de Procesamiento de Gráficos (GPU) 7 Figura 2.1: Diagrama de bloques del GPU Theia Obtenida de Valverde (2012) A continuación se procederá a explicar qué son cada una y cual es su uso dentro de la arquitectura Theia. Las siguientes definiciones y especificaciones se obtuvieron de Valverde (2012), en el texto Theia architecture specification, que es la descripción oficial del hardware Theia. Memoria del sistema Es la memoria principal del sistema y es externa al GPU en sí. Su estructura básica es una memoria de acceso aleatorio (RAM) que se utiliza como contenedor para almacenar distintas características de la escena como son las texturas, los códigos, la geometría, las primitivas, etc. Desde la perspectiva del GPU esta memoria es de solo lectura, manejada únicamente por la MCU (que se explicará más adelante).

20 8 2 Antecedentes Unidad de control de memoria (MCU) La MCU es la unidad de control que se encarga de manejar las lecturas hacia la memoria principal, estos accesos son solicitados por el CP. De existir más de una solicitud desde el CP esta es almacenada en una cola. Esta unidad no puede escribir dentro de la memoria externa. Procesador de control (CP) El CP es un procesador en-orden (in-order) con un pipeline de tres etapas. El CP es una unidad programable sencilla que permite controlar, a partir de subrutinas, la distribución de trabajo en el GPU, así como la asignación de recursos. Esto crea un ambiente muy flexible para definir distintos algoritmos de distribución de carga, dependiendo del tipo de acción que esté realizando el GPU Theia. Además que permite realizar modificaciones y optimizaciones al sistema sin la necesidad de alterar el hardware del GPU. Este módulo es responsable de controlar y monitorear las acciones que se están ejecutando. Más específicamente se puede enumerar las siguientes acciones: 1. Controlar los accesos a la memoria del sistema, el CP envía una señal asincrónica al MCU, el cual copia tanto datos como instrucciones a una o más unidades de procesamiento vectorial (VP). Los bits se copian ya sea a la memoria de Texturas o a las memorias internas de cada VP. Luego de enviar la señal, el CP puede continuar realizando otras instrucciones, aunque el MCU no haya terminado la transferencia de información. 2. Enviar solicitudes de acción a uno o más VP utilizando un bus especial para ellos. La señal más importante es la señal de inicio y de suspensión de ejecución en los VP. Una característica adicional que existe es la de mensajería (mail-boxing), la cual permite enviar información entre el CP y los VPs durante la ejecución de código. Procesador Vectorial (VP) Los VPs son procesadores vectoriales multi-hilo y fuera de orden con hardware especializado en aritmética de punto fijo y otros circuito enfocados en acelerar operaciones 3D. Se encarga de realizar las operaciones lógico-aritméticas, donde cada instrucción comúnmente se ejecuta en un ciclo de reloj. Cada VP combina las características de un procesador vectorial con las de un procesador multi-hilo fuera-de-orden (out-of-order). Los VP tienen paralelismo a nivel de datos y paralelismo a nivel de instrucciones.

21 2.1. Unidad de Procesamiento de Gráficos (GPU) 9 El paralelismo a nivel de datos se produce teniendo tres líneas de datos separadas. El paralelismo a nivel de instrucciones se obtiene a partir de una unidad de emisión en-orden (in-order) con pipeline y de una unidad de ejecución fuera-de-orden (out-of-order). Para implementar la ejecución fuera-deorden se utiliza el algoritmo de Tomasulo, el cual se sale del contexto del presente proyecto, pero se puede hacer referencia a Tomasulo (1967) para una descripción del mismo. Como se menciono anteriormente, el procesamiento vectorial se caracteriza por las operaciones vectoriales, donde cada instrucción puede operar sobre vectores de datos. Los elementos son traídos de memoria consecutivamente por la unidad de ejecución de la misma manera que en un pipeline. Cada VP tiene registros de gran tamaño donde se puede garantizar que los datos puedan ser colocados en posiciones de memoria consecutivas, para así reducir ciertos tiempos de acceso. Un procesador vectorial canónico estaría limitado por dependencias y riesgos de hardware. Las dependencias, en este contexto, ocurre cuando un vector de datos depende de otro vector, con lo cual no se puede realizar la operación deseada, hasta que se obtenga el resultado del vector anterior. Los riesgos de hardware son aquellas situaciones en que no hay suficientes unidades de ejecución para ejecutar todas las instrucciones, por lo cual se realiza una detención (stall) de la ejecución de las siguientes instrucciones del procesador. Para superar estas dos limitantes los procesadores vectoriales son combinados en una ejecución fuera de orden, y esta es una de las características novedosas respecto a otros sistemas GPU comúnmente utilizados. Además se utiliza encadenamiento de datos (chaining) para los vectores de operaciones, el cual es un proceso donde se puede enviar los resultados de un VP como una entrada en una operación a un VP distinto. Se utiliza a su vez múltiples hilos de ejecución utilizando multi-hilo simultaneo (SMT), para mayor información acerca de este hacer referencia al texto de Hennessy y Patterson (2012). En la figura 2.2 se observa el diagrama de flujos del procesador vectorial (VP), el cual se encuentra separado en cuatro secciones fundamentales: unidad de control (CTRL), interfaz de entrada/salida (IO), memoria (MEM) y unidad de ejecución (EXE). La CTRL es la encargada de manejar los comandos provenientes del CP y garantiza que reaccione de la manera correspondiente. La IO es un sistema de comunicación basado en el protocolo abierto Wishbone y permite controlar el flujo de información hacia o desde el VP. Además incluye un modulo de mensajería (mailbox) equivalente al definido dentro del CP. La MEM incluye una RAM para almacenar las instrucciones que tiene que ejecutar el VP, así como el bloque de registros de usos múltiples.

22 10 2 Antecedentes Figura 2.2: Diagrama de bloques del GPU Theia Obtenida de Valverde (2012) El bloque más complicado dentro del VP es la EXE (también conocido como VP-core), el cual se encarga de realizar todas las operaciones dentro del VP. Es un procesador en sí mismo, dado que se conforma por: una memoria de instrucción, una unidad de emisión (issue unit), una unidad de modificación de fuente (SMU), una serie de unidades aritmético-lógicas y un grupo de registros. La unidad de emisión de la EXE se encarga de escoger la unidad aritméticológico correspondiente, de estar libre, pero de haber un riesgo estructural la EXE se detiene (stall) hasta que se libere la unidad deseada. Las unidades lógico-aritméticas que tiene disponible cada EXE son: Dos unidades de suma. Una unidad de división. Una unidad de raíz cuadrada (implementada mediante una LUT). Una unidad lógica (aquella que realiza operaciones binarias, tales como O, Y, NO, etc.) Una unidad de entrada/salida (I/O) Este es el módulo más importante dentro de todo el GPU Theia.

23 2.2. Formación de imagenes 11 Memoria de Textura (TM) La memoria de textura (TM) es una memoria externa al GPU, de la cual los VP pueden leer la información de texturas. Desde la perspectiva tanto del GPU y los VP es una memoria de solo lectura (read-only). Esta memoria es implementada como una serie de RAM intercaladas dividida en bancos de memoria. El acceso a esta memoria es mediante una interconexión del tipo crossbar. La duración de las lecturas a la memoria de textura depende de la congestión en el crossbar de la TM. Memoria de salida (OM) Es una memoria con un ancho de palabra de 32 bit, que fue diseñada para tener como contenidos los colores de los pixeles en RGB, es decir, 8 bits de color rojo, 8 bits de color verde, 8 bits de color azul y 8 bits de trasparencia. Siendo esta una de las representaciones más conocidas en la representación de imagenes como pixeles. La OM puede ser accesada por cualquiera de los hilos de ejecución de los VP como una memoria de solo escritura, siendo la duración de este proceso un ciclo de reloj. 2.2 Formación de imagenes Pipeline para generación de imagenes Actualmente cada computador tiene un pipeline de gráficos 3D con una gran capacidad. Es un subsistema especial de software/hardware que se encarga de dibujar eficientemente primitivas 3D en perspectiva. Comúnmente estos sistemas están optimizados para procesar triángulos 3D con vértices comunes. Las operaciones básicas en este pipeline son mapear vértices 3D a una imagen en 2D y sombrear los triángulos de manera que parezca lo más realistas posible, y en la posición correcta. (Shirley y Marschner, 2009) Según Dinh (2008) la generación de imagenes se puede separar en un pipeline de tres etapas: 1. Etapa de Aplicación. 2. Etapa geométrica. 3. Etapa de rasterización. Durand y Cutler (2003a) discierne en la cantidad de etapas requeridas para modelar el pipeline de gráficos, donde este lo representa mediante siete etapas.

24 12 2 Antecedentes Pero, en general, la única diferencia es en realidad que las sub-etapas de Dinh son separadas para hacer énfasis en ciertas etapas. A continuación se procede a explicar el proceso según Dinh, pero haciendo contraste con lo expuesto por Durand y Cutler. No es necesario el conocimiento de la etapa de aplicación para el desarrollo del presente proyecto por lo que se iniciará a partir de la etapa geométrica. Lo único que se requiere saber es que como entrada a la siguiente etapa se recibe un modelo geométrico, el cual define los objetos, superficies y la geometría de la fuente de luz, un modelo de luz, el cual modela las propiedades de luz del objeto y las interacciones con este, un punto de vista y la malla de pixeles a la cual va a ser mapeado. Etapa geométrica Esta etapa es equivalente a la de transformación e iluminación de Durand y Cutler. Para realizar los análisis en esta etapa, una posibilidad es utilizar sistemas coordenados en cuatro dimensiones, conocidas como sistemas homogéneos, para simplificar las transformaciones y las operaciones. Esto último presenta la sección de transformación de la etapa geométrica. A su vez para realizar las transformaciones se utilizan sistemas baricéntricos, donde cada objeto tiene su propio sistema coordenado, es decir, el posicionamiento del origen es variable, facilitando así las transformaciones de traslación, rotación y escalamiento. En la sección de iluminación, se utilizan los vectores normales en las superficies en combinación con la posición de la cámara y los puntos de iluminación para generar las propiedades de luz de cada uno de los vértices y superficies en la escena. La siguiente sección es realizar una transformación al espacio de visión, siendo este el mismo nombre que utiliza Durand y Cutler para su descripción. Esta sección lo que hace es mapear del espacio de la escena al espacio de la visión. Además las posiciones de visión son transformadas a la dirección original y orientadas según algún eje. Una posibilidad es transformar la escena de manera que la cámara quede en el origen del espacio. A partir de alinear los ejes coordenados, se procede a definir un volumen de visión, el cual permite analizar que objetos tienen que ser renderizados (siguiente etapa). Ya conociendo los objetos que afectan el actual punto de visión se procede a ensamblarlos en las primitivas, que para el manejo del presente proyecto son triángulos. Luego se realiza una normalización, donde todas las primitivas se colocan dentro de un cubo de tamaño unitario, escalándose las primitivas de manera correspondiente. Esto con el fin de facilitar la transformación a 2D (proyección al espacio de la pantalla, según Durand y Cutler), siendo este el último paso de la etapa geométrica.

25 2.2. Formación de imagenes 13 Figura 2.3: Scan Conversion (Rasterización) Obtenida de Durand y Cutler (2003a) Etapa de rasterización En esta etapa se recorre la imagen en 2D para convertirlos en pixeles, esto se realiza definiendo posibles candidatos, conocidos como fragmentos, donde además se procede a interpolar valores tales como: color, profundidad, etc. Esto se debe a que si el fragmento no es un vértice en sí mismo, es necesario interpolar los valores a partir de los tres vértices del triángulo del cual este punto forma parte. En la figura 2.3, se puede observar una imagen durante el proceso de rasterización, donde todavía no se ha asignado un color específico a cada pixel, pero intuitivamente a partir del porcentaje de color en el pixel, se pude definir el color de cada uno. Este proceso en un computador es más complicado y necesita algoritmos tal como el de Bressenham para líneas y círculos. En la última sección cada pixel recuerda cual es el objeto más cercano (prueba de visibilidad según Durand y Cutler), dado que este es el que va a tener un mayor aporte en los colores y la transparencia del pixel. Existen muchas pruebas para verificar visibilidad, que no se van a explicar en el presente texto. En esta etapa también se toman en cuentan texturas, colores y efectos adicionales de luz que se quieran agregar.

26 14 2 Antecedentes Ray-casting Realizar la renderización de una escena es una de las secciones básicos de los gráficos por computador tal y como se observo en la sección 2.2, esta es la etapa en que se toman los componentes u objetos de una escena en 3D para producir imagenes en 2D que muestra los objetos desde un punto de vista dado. Normalmente se tomará como entrada en esta etapa un grupo de objetos y la salida será un arreglo de píxeles. Shirley y Marschner (2009). Existen dos métodos básicos, dependiendo como se considera el efecto de cada objeto en el pixel: Renderización por orden de objeto se analiza el efecto de cada objeto independiente, y se analiza cada uno de los pixeles que este modifica o define en la imagen. Renderización por orden de imagen es el inverso al anterior, donde se analiza cada pixel por separado y por cada uno se busca todos los objetos que alteran sus valores. Ya conociendo las aclaraciones anteriores, es posible definir lo que es el Ray Casting, este es un algoritmo para realizar el rendering de escenas 3D, utilizando un método de orden por imagenes. Para comprender este algoritmo se puede utilizar un pseudocódigo simple presentado por Durand y Cutler (2003b), agregando una última línea para completar el funcionamiento del algoritmo: 1: for all pixeles do 2: Construya un rayo desde el ojo. 3: for all objetos en la escena do 4: if Hay interseccion then 5: if Objeto es más cercano que la interseccion anterior then 6: Almacene el objeto como el mas cercano 7: end if 8: end if 9: end for 10: end for En la línea 1 del pseudo-código se define que las operaciones subsiguientes se realizarán sobre cada uno de los pixeles, esta afirmación va de acuerdo a la definición de una renderización por orden de imagen. En la línea 2 se construye un rayo desde el ojo, que en la terminología utilizada hasta la presente sección haría referencia al punto de vista, desde el cual se va a hacer la renderización. En gráficos por computador, la construcción del rayo es una abstracción matemática, es decir, se define como una función que modela el rayo con inicio en el punto de visión, pasando por el pixel de la

27 2.2. Formación de imagenes 15 Figura 2.4: Creación de rayos Obtenida de Humphreys (2004) actual iteración. Esta función es expresada en forma paramétrica por Shirley y Marschner (2009) de la forma observada en la ecuación (2.1) p(t) = e + t(s e), (2.1) donde e, es el punto de origen del rayo, y (s e) es la dirección del rayo. Es importante destacar que para términos del presente proyecto e, sería el punto de vista de la escena y s sería el pixel correspondiente a la presente iteración, esto de utilizar sistema coordenado adecuado. Esto se puede demostrar fácilmente dado que al ser una representación paramétrica de 3 dimensiones (x, y, z) cada una de las dimensiones representa una recta en la variable independiente t, donde el punto de inicio de cada recta es el componente correspondiente del punto de vista, dado que de este punto se envían todos los rayos, y el otro valor a definir es la pendiente. Suponiendo que la variable independiente esté normalizada (que del tiempo 0 al 1, avance del punto de vista al pixel correspondiente), la pendiente se define como la diferencia entre un punto que sea parte de la recta y el inicio, el punto que resulta ideal para modelar todos los rayos es un punto en el arreglo de pixeles, dado que al ser una renderización por orden de imagen, todos los rayos pasan siempre por algún pixel. Por lo que en cada iteración utilizando la ecuación (2.1) se crea el rayo correspondiente al pixel actual. Una explicación gráfica de la generación del

28 16 2 Antecedentes rayo se puede observar en la figura 2.4 Las tres líneas siguientes conforman un bloque funcional, por lo que se procede a explicarlas en conjunto. En la línea 3 indica que para el rayo creado anteriormente se va a realizar un análisis sobre cada uno de los objetos de la escena, en la línea 4 se verifica la intersección del rayo con el presente objeto, y de existir, en la línea 5 se comprueba si este objeto es más cercano a cualquier otro que ya haya sido analizado con anterioridad, y se actualiza este valor de cumplirse con la condición. De los tres pasos anteriores se podría considerar innecesario tener que analizar cada uno de los objetos, dado que no todos los objetos van a tener una intersección con el rayo. Existen gran cantidad de investigaciones enfocadas en disminuir esta sección del pseudocódigo, las cuales se van a exponer en la sección 2.3 y donde se va explicar más profundamente las justificaciones de los mismos. Se puede hacer un análisis intuitivo de la reducción de procesamiento, suponiendo que los objetos no se encuentran alineados al rayo enviado, tal y como se muestra en la figura 2.5, existe una baja probabilidad de que el rayo atraviese todos los objetos, por ejemplo en la figura 2.5 cada rayo interseca únicamente a uno de los objetos. Se intenta definir algún tipo de parámetro que permita descartar de antemano ciertos objetos, de los cuales se tiene certeza no van a definir el color del presente pixel, con lo cual se disminuye la cantidad de iteraciones del lazo interno del pseudo-código. Este es el bloque del ray- Casting en la cual se va a enfocar el presente proyecto, con el fin de reducir el tiempo de las iteraciones del GPU Theia. Por último, en la línea 6, a partir del objeto encontrado (de existir) se obtiene la normal respecto a su superficie, y en conjunto con las superficies de iluminación de la escena, se obtiene el color que define el pixel de la actual iteración. De manera iterativa (o paralela, como se hace en los GPU) se repiten los pasos anteriores para cada uno de los pixeles de la pantalla. 2.3 Segmentación Espacial Doyle et al. (2012) expone que uno de los métodos más efectivos para acelerar los algoritmos de ray tracing (ray casting, para el caso de Theia) son las estructuras de segmentación espacial, y pone como ejemplos los kd-trees y los Bounding Volume Hierarchies (BVH), los cuales se van a exponer en las secciones subsiguientes. Como se presento en la sección 2.2 y como se resume en Woop et al. (2005) se requieren de este tipo de estructuras de indexación espacial para encontrar el subgrupo respectivo de primitivas que realmente van a afectar el cálculo del presente pixel, siendo en este caso la primitiva triángulos. Se busca reducir

29 2.3. Segmentación Espacial 17 Figura 2.5: Escena Obtenida de Humphreys (2004)

30 18 2 Antecedentes tanto el tiempo requerido para obtener triángulo, como la cantidad de primitivas que se requieren analizar para hacer la renderización de la escena, dado que las operaciones de intersección de primitivas, pueden llegar a consumir muchos recursos dentro del GPU. En las siguientes subsecciones se presentan las estructuras de datos más comúnmente utilizadas para almacenar las primitivas en los algoritmos de ray-casting y ray-tracing, que para la etapa de recorrido son equivalentes. Los cuales van a ser el punto de partido teórico para la implementación de los módulos que se exponen como soluciones a los objetivos del presente proyecto. Bounding Volume (BV) El objetivo de cualquiera de las estructuras de datos presentadas en esta sección es reducir el espacio de búsqueda en el marco de la escena, o de acelerar el proceso de búsqueda. La estructura de datos conocida como volumen delimitante o envolvente (BV, por sus siglas en inglés Bounding Volume) parte de la premisa de que hay objetos que son más demandantes, a nivel de recursos, al ejecutar un análisis de intersección con un rayo.(havran, 2000) Por lo que se propone envolver todos los objetos en una escena por poliedros con una forma más sencilla de analizar, y que dada la homogeneidad de los nuevos contenedores se puede optimizar el algoritmo de recorrido y de intersección. Rubin y Whitted (1980) propone encerrar los objetos con paralelepípedos y con esferas, dado que para ambos tipos de estructuras existen ecuaciones matemáticas explícitas, que permiten obtener rápidamente la intersección. De existir una intersección con el volumen envolvente es muy probable que exista una intersección con el objeto interno. Un ejemplo de una envolvente se muestra en la figura 2.6, donde la envolvente es una esfera y el objeto en sí es un paralelepípedo, pero el objeto podría ser un poliedro más complicado, no tiene ninguna limitante. Otra forma de definir la envolvente es utilizando un algoritmo conocido como convex Hull, donde se delimita a todos los puntos que forman la escena con el poliedro de menor tamaño, al cual se le pueden agregar limitantes, para mantener una estructura sencilla de intersecar. Pero, tal y como lo expresa Stürzlinger (2007) es de poco uso, dado que se requiere mucho espacio para su almacenamiento y no existe un algoritmo eficiente de intersección para los mismos. Se tiene que buscar un balance entre las dos principales propiedades buscadas: 1. Debe existir una alta probabilidad de que si interseca el volumen envolvente, también interseque el objeto en sí. Esto puede llegar a ser complicado en objetos cóncavos. Esta propiedad se puede solucionar op-

31 2.3. Segmentación Espacial 19 Figura 2.6: Volumen envolvente (esfera) Obtenida de Chang et al. (2010) timizando el volumen del objeto. A menor volumen menor probabilidad de fallo. 2. Se debe mantener la complejidad de la intersección entre el rayo y el volumen envolvente bajo. La idea básica detrás de esta estructura, es realizar primero una prueba sencilla a los contenedores, antes de realizar una prueba más exhaustiva al objeto en sí. (Stürzlinger, 2007) El beneficio de este método es que facilita descartar los objetos que no aplican en la generación del pixel que se está analizando. Esto se debe a que si un rayo no interseca a la envolvente, no puede intersecar al objeto que esta contiene, con lo que se reduce considerablemente el tiempo al no tener que analizar el objeto en sí. A pesar de esta modificación no se logra reducir la cantidad de objetos que se están procesando, dado que existe todavía la necesidad de iterar sobre todas las envolventes en la escena. Una posible optimización de este código se presenta en la jerarquía de volúmenes envolventes que se presenta en la sección siguiente. Bounding Volume Hierarchies (BVH) Havran (2000) presenta la extensión natural de los BV, conocidas como jerarquías de volúmenes envolventes (BVH, por sus siglas en inglés), los cuales toman como base los BV, pero agregan una jerarquía de árboles. La justificación del uso de estas jerarquías se debe a la coherencia inherente tanto a la imagen y al objeto. Donde la coherencia se utiliza para describir hasta que punto una escena o imagen es localmente constante. (Weghorst et

32 20 2 Antecedentes Figura 2.7: Jerarquía de volúmenes envolventes Obtenida de wikipedia.org al., 1984). Existe un tipo especial de coherencia enfocada al objeto, donde las características constantes hacen referencias a la relación entre el objeto y el medio en el que se encuentra modelado. Rubin y Whitted (1980) presentó una jerarquía de volúmenes, en la cual los primeros niveles de los árboles representan subespacios ortogonales alineados a los ejes, y el último nivel representa el volumen envolvente final que es un paralelepípedo con orientación no restringida. Lo cual permite que en cada paso en que se recorre el árbol, las comparaciones sean con cajas con formas sencillas, lo cual reduce el tiempo de recorrido. Clark (1976) propuso a su vez una versión similar, en la cual cada nivel de la jerarquía consiste en volúmenes envolventes lo cuales envuelven los niveles inferiores, donde las hojas si contienen a los objetos completos, y no a los volúmenes envolventes. Según Weghorst et al. (1984) se pueden agrupar grupos de objetos, que por estar muy cercanos uno con el otro se pueden juntar en un mismo BV. Además se crean cúmulos (clusters) de otros cúmulos, que hacen referencia a los niveles superiores del árbol. Una estructura de este tipo permite superar una de las barreras que se presentaron en los BV, y es que ya no es necesario investigar cada uno de los objetos en la escena, dado que se inicia en el nodo raíz del árbol y luego desciende recursivamente en la jerarquía, solo en las ramas donde hay intersección. Un ejemplo se observa en la figura 2.7. En cada uno de los cúmulos (clusters) solo tienen que agruparse objetos que están espacialmente cerca. Además se tiene que tomar en cuenta la altura del árbol, dado que si hay demasiados nodos internos se pierde el objetivo de los BVH de acelerar el proceso de renderización. Weghorst et al. (1984) afirma que la asignación de la agrupación o definición de un objeto es básicamente la utilizada durante el proceso de modelo. Con la única diferencia que los cúmulos (clusters) son removidos de la jerarquía. Esta asignación es suficiente para mejorar el tiempo de ejecución. Rubin

33 2.3. Segmentación Espacial 21 y Whitted (1980) presenta una segunda posibilidad para automatizar el proceso de creación de las jerarquías, y es utilizar un histograma tridimensional, eligiendo los picos como cúmulos, dado que estos representan la coherencia del objeto. En general, esta estructura está considerada entre las más veloces y con menor consumo de memoria, al hacer referencia a cada primitiva una única vez. (Dammertz y Keller, 2008) Pero, existe una limitante en escenas vacías y con triángulos que no se encuentran alineados a los ejes que definen los volúmenes envolentes, dado que crean espacio vacío en el volumen, creando muchos aciertos de rayos en el volumen, que no los son con el objeto inscrito. Para solucionarlo Dammertz y Keller (2008) presenta una solución interesante de subdivisión de triángulos, para acomodarlos mejor a la geometría de la escena y de los BV. Para encontrar referencias más específicas para la formación y recorrido de la estructura se pueden utilizar los documentos de (Wald et al., 2007), (Goldsmith, 1987), (Smits, 2005), (Guttman, 1984), (Chen y Liu, 2007) y (Kay y Kajiya, 1986). La diferencia entre cada uno de estos autores es el tipo de volumen que utiliza para envolver los objetos, la estructura del árbol con la cual se almacenan los BV y la forma en que se realiza el recorrido de las estructuras. Pero, es importante destacar que es necesario construirlos de abajo para arriba y orientado a objetos. Una configuración que representa un gran avance es la presentada por Wald (2007), donde utiliza heurísticas de área de superficie (SAH, por sus siglas en inglés), los cuales dependiendo del área de cada volumen y el costo de recorrer cada unos, se toma la decisión acerca de la posición en que se subdivide el volumen. Esta representación puede ser utilizada hasta en sistemas dinámicos (escenas cambiantes), pero esto se sale del contexto del proyecto y de la condición actual del proyecto Theia. Uniform Grids Havran et al. (1998) expone que este fue uno de los primero métodos creados para realizar subdivisiones espaciales. Este algoritmo subdivide la escena en celdas de igual tamaño sin importar la distribución de los objetos en la escena. Es una generalización de los pixeles a 3D. A cada celda se le asigna una lista de los objetos que la intersecan. Esta estructura fue descrita por primera vez por Fujimoto (1986). Un ejemplo de esta estructura se observa en la figura 2.8 Thrane y Simonsen (2005) expone que el método utilizado para intersecar un rayo con la maya, es caminar sobre las celdas en el orden en que estas son perforadas. En cada celda visitada se analizan los triángulos que esta tenga asociados. Cuando se encuentra una intersección se finaliza el proceso, dado que este es la primitiva que va a definir el color, al ser el que está más cerca del

34 22 2 Antecedentes Figura 2.8: Mallas uniformes Obtenida de Doggett (2011) punto de vista. Havran (2000) afirma que este método es similar al algoritmo de dibujo de líneas conocido como Bresenham extendido a 3D, pero para el caso de Uniform Grids es conocido como 3D-DDA, el nombre viene del inglés digital differential analyzer (DDA). Existen dos limitantes principales que se presentan al usar esta estructura: Dado que la malla uniforme es creada sin importar si existen objetos dentro de las celdas, se necesita una gran cantidad de espacio para almacenar la estructura. El rayo al recorrer la estructura va a pasar por muchas celdas vacías antes de realizar una intersección con algún objeto. Este tipo de estructura es de suma utilidad si la escena es homogénea, es decir, si los objetos están distribuidos de manera equidistante, con formas similares. Pero, no es recomendable para objetos distribuidos de manera no equilibrada en el espacio. (Sung y Shirley, 1994) Esto se debe principalmente a que la cantidad de memoria necesitada depende de la densidad de objetos y no del total de objetos.

35 2.3. Segmentación Espacial 23 Cleary y Wyvill (1988) realiza un análisis para demostrar cuantas subdivisiones por eje generan un arreglo óptimo para recorrerlo. Para ello definen el valor dado en la ecuación 2.2 y la ecuación 2.3. k. = d celda 3 N, (2.2) t min. = const 3 N, (2.3) donde N es la cantidad de objetos y d celda representa la densidad de la celda. El valor de k determina la cantidad de subdivisiones y el valor de t min determina el tiempo total mínimo por rayo. A este método se le conoce como método homogéneo, porque no toma en cuenta la forma de la escena. (Havran, 2000) Normalmente se busca obtener una malla lo más cúbica posible, por lo cual se presentó otro método, que Havran (2000) definió como el método Woo. El cual lo que hace es una normalización utilizando el valor del lado más largo de la escena (ya sea x, y ó z) y un método similar al homogéneo. Se definen tres variables, y la subdivisión en cada uno de los ejes. Todo se muestra en la ecuación 2.5 c = MAX(x, y, z), n r = N d celda, u = 3 d celda n r (2.4) x N x = MAX(1, u c ), N y y = MAX(1, u c ), N z z = MAX(1, ), (2.5) u c Amanatides y Woo (1987) presenta un algoritmo que mejora el recorrido de este tipo de estructura, dado que no se enfoca en el movimiento en un solo eje, como el algoritmo expuesto anteriormente, sino que puede utilizar cualquiera de los tres ejes como base para definir el movimiento en las cajas. Además agrega un método para evitar intersección con el mismo objeto en varias celdas, siendo este un suceso común dado que un objeto puede llegar a estar en varias celdas al mismo tiempo. En general, los beneficios de esta estructura es que es fácil de construir y de mantener (para el caso de sistemas dinámicos). Pero, puede llegar a consumir mucho espacio de memoria y la definición de la cantidad de celdas no es siempre certera y óptima. Binary Spatial Partition (BSP) Havran et al. (1998) expone que esta clase de árbol es análogo a los árboles de búsqueda binaria, pero siendo este una extensión a un sistema en 3D. El proceso de creación de la estructura es recursivo, subdividiendo de manera sucesiva la escena en dos partes. El plano con el cual se subdivide la escena no tiene ninguna restricción, es decir, puede tener un vector normal en cualquier dirección. Existe muchas técnicas para definir la dirección de los planos, muchas de

36 24 2 Antecedentes estos métodos agregan restricciones a las direcciones de los planos, creándose por ejemplo los rbsp y los kd-trees que van a ser expuestos en las siguientes subsecciones. Las tres variaciones principales de esta estructura son: alineados a polígono, alineado a ejes y no alineados. La diferencia radica en la forma en que se define el plano que separa la escena. Fuchs et al. (1980) presenta como solución al problema de superficies escondidas en gráficos por computador los BPS alineados a polígonos, pero la misma estructura puede ser aplicada a los algoritmos de Ray-Casting. La definición del plano se obtiene a partir de algún polígono de la escena (triángulo, para los efectos del presente proyecto), y se dirige en la misma dirección del polígono, es decir, se expande los bordes del triangulo hasta que parta la escena en dos secciones. Los triángulos se separan en dos subgrupos, dependiendo si se encuentran a la derecha (lado positivo según Fuchs et al. (1980)) o a la izquierda (lado negativo según Fuchs et al. (1980)). Las divisiones sucesivas de los subgrupos (positivos y negativos) van generando un árbol binario. Las divisiones finalizan hasta que solo haya subgrupos vacíos. Akenine-Möller et al. (2008) expresa que los BSP alineados a polígonos son particularmente útiles para la renderización estática o geometría rígida en un orden exacto. Fue utilizado en varios video juegos como Doom y Quake. Además agrega que cuando un triángulo es intersecado por alguno de los planos, este es dividido en dos polígonos, aumentando el consumo de memoria. Se recomienda a su vez crear árboles balanceados, dado que de otra manera el recorrido del árbol es muy ineficiente. Uno de los defectos de los BSP alineados a polígonos expuestos anteriormente, es que la elección de los triángulos es aleatoria. Una forma de solucionar esto es eligiendo el triángulo que subdivide menos triángulos. En general este tipo de BSP no es utilizado para el algoritmo de Ray-Tracing. Sung y Shirley (1994) presenta una comparación de esta estructura ante los expuestos anteriormente (Uniforms Gris y BVH), donde se demuestra que una correcta representación utilizando el algoritmo de Arvo (Arvo, 1988) es superior en al menos un 10 %. Sung y Shirley (1994) a su vez presenta una posible implementación del árbol realizando una subdivisión mediante un plano en la media espacial. Se calcula la media de todos los objetos en la presente iteración recursiva del algoritmo, y a partir de este valor se crea el plano en dirección de la misma. Un BSP alineado a ejes, es aquel en que los planos siempre son perpendiculares a los ejes, y dadas estas características son conocidos como BSP ortogonales o BSP rectilíneos. Una definición de estos árboles para un grupo S de primitivas es dada por Havran (2000): Cada nodo v en el árbol BSP está asociado a una caja envolvente (alineada con los ejes) AB(v), la cual se conoce como una celda. Cada nodo interior v del árbol es asignado un plano

37 2.3. Segmentación Espacial 25 Figura 2.9: Árbol BSP Obtenida de Havran (2000) divisor H v que subdivide a AB(v) en dos celdas. Si se toma a H v + como el subespacio positivo y Hv como el espacio negativo. Con lo cual se obtiene que los hijos de v son AB(v) Hv y AB(v) H v +. El subárbol izquierdo de v es un árbol BSP con un grupo de objetos Sv = s Hv φ sɛs v con el subárbol derecho definido de manera similar. Cada hoja del nodo v E puede contener una lista de objetos S v E que interseca a la caja envolvente AV (V E ) asociada a v E, cuando la hoja contiene al menos un objeto, se le conoce como una hoja completa, de lo contrario se conoce como una hoja vacía. Un ejemplo de esta topología en 2D se observa en la figura 2.9. Es importante destacar que esta es la misma definición que la de un kd-tree. Esto se debe a que un kd-tree es un caso especial de un BSP. Un BSP no alineado es la versión más general de los BSP, dado que los planos no tienen ninguna restricción en su definición. Lo cual tal y como expone Ize et al. (2008) permite adecuar la estructura a la geometría de la escena. Esta es la menos difundida de las tres versiones del BSP, dado que en general, tiende a ser más complicada. La intersección de planos, en los no alineados, necesita utilizar producto punto y división, en comparación con la alineada a ejes que solo necesita resta y multiplicación. Donde la exactitud por punto flotante, hace que el recorrido puede hacer que el algoritmo tienda a ser inestable. Además dado que hay más posibilidades de posibles planos, la evaluación del mejor plano es más laboriosa. Todos estos argumentos son desmentidos por Ize et al. (2008), al realizar modificaciones al algoritmo comúnmente utilizado de BSP. Pero, para el caso de la estructura de Theia la unidad de división no es lo suficientemente precisa para mantener estabilidad en el algoritmo, por lo que no se ahondará más en este tipo de estructura. Además que tiene un consumo mayor de memoria. (Kammaje y Mora, 2007) Una posibilidad para mejorar la construcción de un BSP es utilizar heurís-

38 26 2 Antecedentes Figura 2.10: Heurística de área de superficie Obtenida de Havran et al. (1998) ticas con base en una función de costo. Havran et al. (1998) propone minimizar una función de costo que tome en cuenta la relación entre las áreas superficiales del volumen original y los dos volúmenes hijos de este. El costo toma en cuenta la probabilidad de que un rayo acierte a un objeto contenido en otro depende de las superficies de los volúmenes. La probabilidad viene dada por la ecuación 2.6 P r(b A) = S B S A = 2(x B y B + x B z B + y B z B ) 2(x A y A + x A z A + y A z A ), (2.6) donde los valores con subíndices A hacen referencia al nodo padre, y los B al nodo hijo, esto se observa con mayor claridad en la figura 2.10 La ecuación 2.6 hace referencia a la probabilidad condicional y expresa un valor estimado en el tiempo requerido para recorrer el BSP. Para generar el BSP, se utiliza la función de costo 2.7 en todos los posibles planos candidatos, y se escoge el que presente el menor costo, lo que va a mejorar las iteraciones sobre el árbol. En la ecuación 2.7 lo que se hace es obtener un valor total de costo del nodo padre y de los dos hijos. donde: C nuevo = C P + C I + C D = T P + S I S n I j=1 T j + S D S n D k=1 T k + T T, (2.7) T T T P es el tiempo de duración de un paso en el recorrido es el tiempo de duración en un nodo padre.

39 2.3. Segmentación Espacial 27 T j, T k S S D S I n I, n D es el tiempo de intersección entre el j-ésimo y el k-ésimo objeto. es el área de superficie del nodo dividido. es el área de superficie del nodo derecho. es el área de superficie del nodo izquierdo. es el número de objetos pertenecientes a la subcelda I y a la subcelda D, respectivamente. Havran et al. (1997) presenta todas las posibilidades en las cuales un rayo puede atravesar un nodo, a su vez presentando varias formas eficientes de recorrer el árbol. Kd-Trees Estas estructuras fueron presentadas por primeras vez por Bentley y Friedman (1979) y por Bentley (1975) como parte de una investigación para generar árboles binarios multidimensionales de búsqueda asociativa y búsqueda de rangos. A partir de estos estudios y de otros relacionados con superficies escondidas Fussel y Suramanian (1988) presenta una representación de los mismos para segmentación espacial en 3D (x, y y z). La elección de esta estructura se debe a que el movimiento del rayo en la escena es más que una búsqueda (como es definida en un árbol de búsqueda binario), es en realidad una búsqueda de rango, donde se trata de verificar por cuales nodos el rayo se propaga. (Wald, 2004) Con lo cual se presenta que un kd-tree, según Bentley, es una generalización en 3D de los árboles de búsqueda binarios, donde se divide de manera sucesiva (recursiva) la escena en dos secciones hasta que se llegue a una condición de parada, para así facilitar el recorrido de los objetos. Además de que permite reducir la cantidad de objetos analizados. En el texto de Fussel y Suramanian (1988) presenta las condiciones necesarias para la adopción de estos árboles y que sean capaces de soportar de manera eficiente el algoritmo de ray-tracing. A partir de estas consideraciones, se propone inicialmente utilizar planos ortogonales a los tres ejes cartesianos (x, y y z), dado que esto reduce considerablemente la intersección de rayos, dado que en los nodos internos (niveles superiores del árbol), la intersección se da con cubos, que tienen una forma explícita y cerrada de análisis. Además que la construcción ingenua de la estructura se facilita considerablemente. Esta restricción hace a su vez que los kd-trees sean menos flexibles para adaptarse a la escena, pero aún así, son más flexibles que las mallas uniformes y que los octrees (que se analizarán en la siguiente sección).

40 28 2 Antecedentes A partir de lo expuesto anteriormente, la definición de un kd-tree es la misma que la descrita en la sección anterior para BSP alineados a los ejes. Esto se debe a que los kd-trees son un tipo especial de BSP, que se encuentra alineado a los ejes, comúnmente los cartesianos. Wald (2004) indica que ninguna de las denominaciones utilizadas para este tipo de estructura es completamente correcta, dado que los kd-trees hacen referencia a árboles multidimensionales, es decir, pueden ser más de 3D. En el presente proyecto y por ser la nomenclatura utilizada en la mayoría de los textos se utilizará kd-tree para denominar a los BSP alineados a los ejes. Dado que en esencia un kd-tree es un bsp, muchas de las características expuestas anteriormente se mantienen. Fussel y Suramanian (1988) presentaron inicialmente dos consideraciones básicas, que todavía se aplican a los kd-trees modernos para definir el plano a dividir. El cuál es el factor que va incidir en mayor manera en el tiempo de la construcción, y posteriormente en la duración del recorrido (traversal) de la estructura. La cantidad de objetos en los dos subespacios luego de una división tienen que tratar de mantenerse iguales. El número de objetos que se comparten entre subespacios (que fueron intersecados por el plano de división) tiene que mantenerse al mínimo. Aunque se hayan limitado los planos a ser paralelos con los ejes, siguen existiendo infinita cantidad de posibles planos, dado que los valores del eje no son discretos. Wald y Havran (2006) hace una recopilación de los algoritmos existentes para definir los posibles candidatos para los planos, y así la forma en que se podrían comparar. Además propone como construirlos con una complejidad de O(N log(n)). Los tres métodos más conocidos para la generación de los planos son el método ingenuo, en el cual se utiliza la media espacial, el siguiente método es basado en costos, conocido como heurística de área de superficie (SAH), y por último se utiliza la mediana espacial. En el método de la media espacial, el eje en el cual se va a dividir se escoge por rondas (round-robin), es decir, en la primer división se escoge el eje X, en la segunda ronda el eje Y, en la tercer ronda se escoge el eje Z, y así sucesivamente. El plano se coloca en el valor medio de los límites del nodo en el eje correspondiente, o lo que es equivalente, 1 2 (V min,eje + V max,eje ). Las subdivisiones se continúan hasta que se alcance alguno de dos límites, el primero sería que haya una cantidad x de objetos por hoja, o que la profundidad del árbol haya superado un umbral pre-establecido. El problema de este tipo de división se puede observar en la figura 2.11, donde se observa que en la primer división de la escena 2D, los nodos van a quedar desbalanceados, dado que la mayoría de los triángulos se encuentran en el nodo derecho.

41 2.3. Segmentación Espacial 29 Figura 2.11: Primer división en kd-tree 2D Obtenida de Doggett (2011) En el método de la mediana espacial (comúnmente utilizado para la representación con nube de puntos, no para primitivas) se busca entre todos los objetos del nodo, la mediana, y en esta posición se coloca el plano. Dependiendo de la técnica que se utilice se puede escoger el eje de la misma manera que la media espacial (round robin) o se puede escoger el lado más largo. Para obtener estructuras con formas lo más cercanas a cubos. Se puede observar un ejemplo en 2D en la figura Por último el método SAH, en términos generales, evalúa una función de costo en todos los posibles planos, y permite elegir el que genere un valor menor. Pero, es necesario limitar la cantidad de planos a evaluar, dado que inicialmente son infinitos. Por lo que se han presentado diferentes técnicas para disminuir la cantidad de planos, entre los cuales se pueden citar Wald y Havran (2006), MacDonald y Booth (1990), Wu y Chen (2009), Havran et al. (1998), Zhou et al. (2008), Wald (2004), Goldsmith (1987), entre otros. Una de las opciones mayormente aceptadas para definir cuáles son las posiciones que generan mínimos o al menos resultados aceptables es en los límites de los triángulos, con lo cual es necesario evaluar 6n posiciones en total, donde n es la cantidad de triángulos en la escena. MacDonald y Booth (1990) presenta otro criterio para la definición de los posibles planos, en el cual se define que los planos están entre la mediana de objetos y la mediana espacial. Para el SAH existen tres criterios de terminación: cantidad de primitivas en el nodo, profundidad del árbol y cuando se tiene un valor de costo inferior

42 30 2 Antecedentes Figura 2.12: Ejemplo de un kd-tree (2D) utilizando la mediana espacial Obtenida de a un umbral. Un ejemplo de este tipo de método se observa en la figura SAH va a mejorar considerablemente el rendimiento del sistema, y aún teniendo la restricción de los límites de los triángulos, se obtiene un 30 % a un 50 % de ventaja en rendimiento sobre el método de la división en el medio de la escena. En la sección del BSP se presentó una función de costo que es válida también para los kd-trees. Para recorrer la estructura (traversal), el algoritmo básico fue presentado por Arvo (1988) y Sung y Shirley (1994). Este algoritmo utiliza tres distancias a, b y s (donde el signo es relevante). La distancia a hace referencia a la distancia al plano de entrada, b es la distancia al plano de salida y s es la distancia al plano de división. Además se define dos nodos, el cercano y el lejano. El nodo cercano es el hijo que esta del mismo lado que el punto de vista u origen. Por lo que si el valor de s es negativo (el rayo no interseca el plano de división) y si s > b, es decir la distancia al plano es mayor que la distancia al plano de salida, entonces se conoce que el rayo solo recorre el nodo cercano. Si s < a (el punto de entrada está más lejos que la superficie de división) solo se analiza el nodo lejano. Por último si a < s < b entonces se hace un traversal de ambos nodos, tal y como se ve en la figura 2.14, donde el rayo para su análisis se separa en dos secciones, y se aplica de nuevo todos los cálculos de a, s y b, pero para el subnodo. La anterior es un algoritmo de traversal específico. Pero en general, Thrane

43 2.3. Segmentación Espacial 31 Figura 2.13: Ejemplo de un kd-tree (3D) utilizando SAH Obtenido de y Simonsen (2005) lo presenta como: Dado un nodo kd-tree N, recorrer el subárbol con nodo raíz N se procede de la siguiente manera. Si N es una hoja entonces se prueban todos los triángulos para intersección y se devuelve el más cercano de existir. Si N es un nodo interno entonces se determina cual de los dos nodos es intersecado primero por el rayo y se llama recursivamente dentro del nodo hasta que se analicen todas las hojas pertinentes. Si la intersección es encontrada entonces se devuelve el valor más cercano. De lo contrario se llama recursivamente al hijo del lado lejano del plano de división. Siendo en este caso los nodos cercano y lejano la definición dada anteriormente por Sung y Shirley (1994). De esta manera siempre se analizan las hojas de la manera en que el rayo es atravesado, con lo que al momento de intersecar un objeto se puede finalizar el recorrido, dado que el algoritmo se ha completado, y se ha encontrado el objeto más cercano. Havran et al. (1997) presentó otro algoritmo, en el cual se comparan coordenadas en lugar de distancias. Esto se puede hacer dado que todos los planos del árbol son ortogonales. Havran et al. (1997) demuestra que su algoritmo es superior, y además demuestra su correctitud. Popov et al. (2007) presento otro algoritmo que esta optimizado para sistemas paralelos (GPU), donde a su vez es iterativo sin pila. Foley y Sugerman (2005) presenta otra solución optimizada para GPU.Horn et al. (2007) expande este trabajo y lo mejora para que el algoritmo pase de ser multi-pass a ser single-pass. En los últimos

44 32 2 Antecedentes Figura 2.14: Recorrido del rayo en 2 nodos. Obtenido de Wald (2004) años el enfoque para mejorar el algoritmo de traversal, ha sido optimizarlo para su funcionamiento en GPU. Una explicación más general de los kd-trees se presenta en Hurley et al. (2002) y se adecua correctamente a las condiciones actuales en la temática. Como una referencia para el resto del proyecto, Havran (2000) en su tesis de doctorado propone que actualmente la mejor estructura para escenas estáticas son los kd-trees. Siendo esta una de las principales referencias en el área. Además esta tesis trae un contenido más profundo tanto para la construcción y el traversal de la estructura. Restricted Binary Spatial Partition (rbsp) Una de las principales variaciones de los árboles BSP son los árboles de partición espacial restringidos (rbsp por sus siglas en inglés). Por lo que la mayoría de la teoría expuesta para los BSP es aplicable a los rbsp. Los rbsp podrían categorizarse como un paso intermedio entre la clasificación de alineados a los ejes y no-alineados. Uno de los primeros trabajos enfocados a este tipo de estructura fue presentado por Kammaje y Mora (2007) y define al rbsp como un árbol binario de partición de espacio (BSP) en el cual se restringen los planos de división a un grupo de planos los cuales se determinan antes de la construcción del árbol, pero estos no están alineados a los ejes y pueden ser más que tres posibles

45 2.3. Segmentación Espacial 33 planos. Esta estructura busca a su vez disminuir el costo de intersección, el cual está dada por la ecuación 2.8 T = b B + i I, (2.8) donde T es el costo total de la intersección, b es el número de veces que el volumen envolvente es intersecado, B es el costo de intersecar el volumen envolvente, i es el número de veces que el objeto es intersecado, e I es el costo de intersecar el objeto. El rbsp busca optimizar el valor de T, variando los valores de B y de i. A priori de la construcción, se definen los vectores normales a los planos que se van a utilizar, si estos vectores son normales a los ejes, entonces se obtiene un kd-tree. Con lo cual se puede expresar que un kd-tree es un caso especial de los rbsp. La justificación que Kammaje y Mora (2007) presenta es la relación que existe en área vacía y el numero de intersecciones y recorrido de nodos. Dado que un rbsp construido con un número mayor de posibles ejes, va a tender a tener menor área vacía. La estructura utilizada para la representación de cada nodo se compone de los siguientes elementos(kammaje y Mora, 2007): 1. Puntero a los hijos (32 bits) 2. Posición del plano divisor (14 bits) 3. Booleano que indique si es una rama (1 bit) 4. Índice del plano (16 bits) 5. Un bit para alinear a 64 bits. Dado que esta estructura tiene un alto grado de similitud con los kd-trees, muchas de las optimizaciones creadas para estos árboles pueden ser utilizadas en los rbsp. Otra característica importante es que los planos son definidos antes de iniciar la construcción, con lo cual se puede ahorrar espacio, dado que para definir el plano con el cual se va a dividir el presente nodo, basta con utilizar un índice, y no es necesario definir completamente el plano como se haría en un BSP. Cada uno de los nodos que se conforman van a ser poliedros convexos, con caras convexas. Si la cantidad de planos divisores es denominada c, entonces la cantidad máxima de caras de estos poliedros es de 2c. Dada esta característica utilizar heurísticas de área de superficie (las mismas que en un kd-tree) es más complicado, dado que calcular el área es menos directo por todas las posibles

46 34 2 Antecedentes superficies de las caras del poliedro, así como calcular la cantidad de triángulos dentro de un nodo. Para la determinación de los planos se pueden utilizar los mismos algoritmos presentados en kd-tres: heurística de la mediana del espacio y heurística del área de superficie. La primera se mantiene igual a la descrita anteriormente, a diferencia de la SAH la cual requiere ciertas adaptaciones para ser viable en los rbsp. El primer paso es definir la función de costo para la intersección del SAH. Con lo cual se presenta la ecuación 2.9 Costo = T C+ IC/SA(N odop adre) (SA(N odoizquierdo) T riangulosizquierda + SA(N ododerecho) T riangulosderecha), (2.9) donde NodoIzquierdo es el nodo izquierdo creado a partir de la subdvisión, y el NodoDerecho es el otro nodo creado. TriangulosIzquierda son la cantidad de triángulos que quedaron en el nodo NodoIzquierdo, de igual manera TriangulosDerecha son la cantidad de triángulos que quedaron en el otro nodo. IC es el costo de intersección de un triángulo, y TC es el costo de recorrido de un nodo. Esta es la ecuación que se busca minimizar cuando se utiliza el SAH. El recorrido de este tipo de estructura es similar al kd-tree, excepto que la cantidad de planos puede llegar a ser mayor a 6. Kammaje y Mora (2007) presenta una solución en la cual se toma en cuenta consideraciones de coherencia espacial, en la cual varios rayos pueden tener el mismo plano de entrada y salida. Para la definición de los planos, se utiliza un grupo de puntos espaciados uniformemente sobre una esfera a partir de la relación dorada, para obtener la mayor cobertura posible. Budge et al. (2008) presentó una aceleración a este algoritmo, en el cual utiliza k-dops, que permiten definir la posición de los planos, definiendo la cantidad de planos a utilizar. Octrees Un árbol octario (comúnmente conocido como Octree) es una división espacial 3D similar a los quadtree en 2D. La construcción de este tipo de árboles también es recursiva, de manera similar a un BSP, excepto que al subdividir un nodo, este es dividido en ocho secciones en lugar de dos, todas del mismo tamaño. Este tipo de estructura toma en cuenta la distribución espacial de la escena, por lo que dependiendo de la densidad de objetos en algún nodo, la subdivisión va a continuar en profundidades superiores. Esta subdivisión continua hasta que se llegue a una profundidad máxima preestablecida o la

47 2.3. Segmentación Espacial 35 Figura 2.15: Ejemplo de un árbol octario Obtenida de cantidad de objetos por nodo es inferior a un umbral definido. Un ejemplo de este tipo de estructuras se observa en la figura 2.15 El primer documento que aplicaba los octrees como método de subdivisión para ray tracing fue el de Glassner (1984), en este Glassner expone la razones por las cuales utilizar una estructura como el Octree es válida. Glassner atribuye a que son una estructura estudiada y comprendida a cabalidad, y que al igual como se expuso anteriormente en los BSP y en los BV permite reducir la cantidad de objetos intersecados, facilitando a su vez su intersección, usando una subdivisión adaptativa. Glassner (1984) presenta una forma de representar este tipo de estructuras. Inicialmente expone que cada vez que un nodo se divide, este herede su nombre como un prefijo a sus 8 hijos, y así sucesivamente. Además propone almacenar los nodos en un esquema de hashes. Se plantea relacionar el nombre de un nodo a un pequeño número que luego tenga una lista enlazada que relacione a todos los números que van a este nodo, iniciando desde algún punto en la tabla. Además los números que se asignan a los hijos van de 1 a 8, en lugar de 0 a 7, para evitar confundir el nodo padre 0 con el nodo hijo 00. En el cuadro del hash va a almacenarse únicamente la posición del hijo 0, dado que se debe hacer un almacenamiento (allocate) de memoria suficientemente grande para contener los 8 hijos continuos. De darse esta condición la búsqueda de un nodo es sumamente fácil, dado que se verifica el centro del nodo en las tres dimensiones, y dependiendo si es superior o inferior al centro

48 36 2 Antecedentes del nodo (padre) vamos a saber la posición del nodo hijo que se está buscando. A partir de lo expuesto anteriormente la estructura de datos contiene las siguientes secciones: 1. Una bandera que indique si el nodo esta subdividido (booleano) variables con el centro del nodo (3D) e información del tamaño (pueden ser omitidos). 3. Un puntero con la lista de objetos (puede señalar a la primer posición del arreglo de objetos, y esta es finalizado con un valor inválido, -1). 4. El nombre del nodo. (Un entero) Además de la estructura expuesta, Gu y Wei (2008) presenta otra posibilidad para la estructura de datos la cual contiene: nodo padre, nodos hijos (8), propiedades, contador, posición espacial y un booleano sort. En términos generales es muy similar al esquema propuesto por Glassner, pero este esquema permite reducir el espacio utilizado, al tener la posibilidad de unir nodos que estén vacios en un único nodo, y cambiar el valor de contador, para definir cuando nodos fueron los que se unieron. Realizando este pequeño cambio se reduce el consumo de memoria a un 62.5 %. Madeira (2010) expone las formas principales de representación y construcción de octrees, entre las cuales se pueden destacar: por punteros, lineales (estructura-estática), hashed, branch-on-need y en texturas. El algoritmo de recorrido (traversal) es más complicado que el expuesto en las estructuras anteriores. Por coherencia espacial un rayo va a visitar como máximo 4 de los 8 hijos de un nodo, y el orden en que se visitan estos cuatro nodos va a influenciar de manera considerable el tiempo de ejecución. Con lo cual un aspecto a optimizar es la eficiencia y la robustez del algoritmo para determinar el orden de recorrido de los hijos. Existen dos tipos de algoritmos de traversal: Bottom-Up (abajo hacia arriba) : este fue el algoritmo presentado inicialmente por Glassner, empieza por el primer nodo intersecado por el rayo, y luego utiliza un proceso de búsqueda de vecinos, para conocer cuál es el siguiente nodo a investigar. Top-Down (arriba hacia abajo) : similar a los algoritmos de traversal de BVH y BSP. Se inicia en el nodo raíz y de manera recursiva desciende en los nodos que tiene una intersección con el rayo. Revelles et al. (2000) presenta una optimización del algoritmo de traversal, utilizando un algoritmo paramétrico del tipo Top-Down. Esta implementación

49 2.3. Segmentación Espacial 37 se basa en optimizaciones realizadas a algoritmos de traversal para BSP. Lo que sugiere Revelles et al. (2000) es que se puede almacenar parámetros durante la incursión en el árbol que nos van a permitir escoger el siguiente nodo a analizar, sin tener que utilizar el algoritmo de búsqueda de vecinos. Los análisis que realizó Revelles et al. (2000) demuestran que son más eficientes que las representaciones de BSP, si el octree se encuentra lleno. Una de las desventajas que presentan estas estructuras es la de un gran consumo de memoria, en escenas vacías, dado que al ser una estructura más regular que el BSP, igual se van a tener que hacer la subdivisión de hijos, consumiéndose mucho espacio. Aún en escenas normales solo entre el 5 % y el 40 % de la información es útil o visible. (Gu y Wei, 2008) Otro defecto que tiene es que son caros (a nivel de recursos) de reconstruir, por lo que no se recomienda para escenas dinámicas, solo para escenas estáticas. Existen varios tipos de optimizaciones para las estructuras de los octrees. Lim y Shin (2005) presenta los Hierarchical Min-Max Octree, los cuales proveen una estructura que espacialmente es similar a los octrees, pero mejorando la actualización de la estructura, sin la necesidad de iniciarla desde cero. Una adaptación para su uso en GPU es presentada por Barboza y Clua (2011), donde se adecua la estructura para su uso en paralelo, así como su recorrido (traversal).

50

51 3 Desarrollo y Análisis 3.1 Comparación de algoritmos De los algoritmos descritos en la sección 2 se procedió a analizar con mayor profundidad los siguientes cuatro algoritmos: BVH Octree kd-trees Uniform Grid En la sección 2 se expusieron tres algoritmos que no se encuentran contenidos en la anterior lista. Las razones por las cuales no se tomaron en consideración para esta etapa del proyecto se enumeran a continuación: BV: la razón por la cual no se incluyó dentro del análisis esta estructura es bastante sencilla, dado que los BVH son la evolución del presente algoritmo, con un rendimiento superior, y con mayores ventajas, como se expuso en la sección 2, y al estar estos dentro del análisis, no es necesario incluir los BV. BSP: como fue adelantado en la sección 2, estos algoritmos tienen problemas de convergencia, por imprecisiones en los cálculos de divisiones. Para el caso del gpu Theia, la unidad de división que tiene esta es en punto fijo, por lo que cualquier cálculo de divisiones puede fácilmente llegar a superar la resolución de los cálculos, con lo cual haciendo que el algoritmo no converja, es decir, no se obtengan resultados correctos. rbsp: las razones son similares al BSP y aunado a esto se incluye las pocas referencias bibliográficas que existen para los mismos, que se pueden reducir a las citadas en la sección 2. Para poder comparar correctamente ambos algoritmos se procedió mediantes dos métodos distintos. Primero se hizo un análisis algorítmico para obtener un aproximado del valor de la complejidad de las algoritmos, tanto para el algoritmo de construcción de las estructuras, como para el algoritmo de recorrido (traversal). Además, se procedió a simular los algoritmos ante 39

52 40 3 Desarrollo y Análisis pruebas reales con distintas mallas de triángulos, y en estas simulaciones se contaron la cantidad de instrucciones base que fueron ejecutadas (se ahondará más en este término en las secciones subsiguientes), y a partir de los valores obtenidos en la simulación se puede proceder a elegir un algoritmo y proponer un descripción arquitectónica del algoritmo. Se utiliza únicamente este valor para la selección del algoritmo, dado que por la forma en que se estructuran los algoritmos elegidos, todos estos son implementables a nivel de hardware (con distintos niveles de complejidad), y además como se verá más adelante los valores obtenidos en el análisis algorítmico definen las cotas superiores e inferiores, pero no el caso típico. El caso típico se va a reflejar de manera directa en las simulaciones (benchmarks), y va a ser una representación de la forma en que se va a comportar el algoritmo en situaciones reales, y dado que lo que se busca es optimizar el tiempo de ejecución en casos reales del GPU, este es el mejor valor de comparación. El análisis algorítmico es únicamente para conocer las cotas del algoritmo y analizar si el peor caso es aceptable para su uso. Análisis Algorítmico Antes de iniciar el análisis, es importante definir las instrucciones y funciones que se tomarán como fundamentales o base. Estas hacen referencia a instrucciones que harán que el contador aumente en un valor unitario en el caso del método de benchmarking. Para el caso del análisis algorítmico hacen referencia al modelo de computación, y son las operaciones que se van a ejecutar en una unidad de tiempo (ciclo de reloj). Por lo que es necesario conocer la arquitectura del GPU y las posibles implementaciones de hardware adicional para hacer una decisión correcta de estos valores. Para el presente proyecto se tomarán como base las siguientes operaciones/instrucciones: Suma, resta y multiplicación hay una unidad interna (ALU) que puede obtener el resultado de una suma, resta y multiplicación en un ciclo de reloj. Inverso: para la implementación correcta de algunos de los algoritmos tanto de recorrido (traversal) y de construcción es necesario obtener el inverso del vector director de los rayos. Por lo que va a ser necesario implementar una unidad dentro de los procesadores vectoriales para que calculen el inverso de estos. (Esta unidad, ya se encuentra incluido dentro de los planes de las futuras versiones de Theia). log 2 : para la implementación correcta de los kd-trees se requiere utilizar un log 2 para calcular la máxima profundidad del árbol, pero redondeado

53 3.1. Comparación de algoritmos 41 al entero más cercano. Esto se puede hacer fácilmente con una LUT (Look up table), y un comparador de rangos, la tabla no va a ser muy grande dado que es el log 2 de la cantidad de triángulos, no a superar los (McGuire, 2011), siendo el resultado del logaritmo en base 2 de este valor 26, con lo cual tomando un margen de error de unos cuantos bits y para utilizar un tamaño de tabla con base 2, el cuadro tendría unicamente 32 entradas, con lo cual esta implementación puede tener resultados en un ciclo de reloj. Operaciones lógicas: como operaciones lógicas se consideran las operaciones: NOR, AND, OR, NAND, XOR, NXOR, desplazamientos, comparaciones, etc. Todas estas tienen una unidad dedicada dentro de Theia, con lo cual se puede suponer que tienen un tiempo de ejecución igual a 1 ciclo de reloj, en realidad por el pipeline no es del todo cierto, pero para la presente sección se van a considerar como ejecución en una unidad de tiempo, cuando la etapa de ejecución del pipeline tiene duración de un ciclo de reloj. Accesos a memoria: se supone que los accesos a memoria tienen una duración de uno, al igual que las escrituras. Raíz cúbica: esta función se utiliza dentro de la estructura uniform grid para calcular la cantidad de voxels que se van a utilizar en la subdivisión de la escena, dado que su valor no tiene que ser muy preciso al ser una heurística. Además de la misma manera que el log 2, el tamaño máximo aproximado de su entrada es de 26 bits. Entonces los posibles resultados están dentro del rango [0, 407], entonces se podría implementar de manera similar a la sugerida en el log 2, solamente que en este caso la memoria tendría un tamaño de 408 posiciones. Techo: en las diversas estructuras y algoritmos utilizados en el presente proyecto, es muy común el uso de una función de redondeo al entero superior más cercano (dado que los valores son siempre positivos, es en realidad una función techo), esto para obtener el resultado ya sea la profundidad (depth) del árbol o la cantidad de subdivisiones. Pila (stack): de la misma manera que el acceso a memoria anteriormente descrito, se va a suponer que se tiene una pila, donde las funciones de apilar y desapilar, duran un ciclo de reloj, el tamaño de esta pila en la mayoría de los casos se puede limitar a 64 posiciones, con lo cual esta suposición es válida. Otras consideraciones importantes, se va a suponer que el algoritmo de ordenamiento (sorting) que va a ser usado para el algoritmo de kd-tree tiene

54 42 3 Desarrollo y Análisis una cota superior de Θ(n log(n)), pero dado que se está haciendo la implementación en un µp MIMD, en realidad esto podría considerarse una sobreestimación, dado que una implementación sencilla paralela del merge sort puede obtener una cota superior de Θ(log(n)) (Cormen et al., 2009), y con una implementación más complicada puede llegar a ser hasta Θ( ), donde n en n lg 2 (n) este caso sería la cantidad de triángulos. Dado que lo que se ordena es una serie de planos, y existen 2 por triángulo. De la misma manera el algoritmo de nth element que se utiliza dentro del bvh, tiene una complejidad típica de O(n), suponiendo un algoritmo no paralelizado. El algoritmo en realidad es conocido como un algoritmo de selección, el cual de ser paralelizado puede mejorarse su complejidad para que tenga un valor de O(log(n)), con una cantidad de procesadores o hilos de n/log(n). (Han, 2007). Por lo que para hacer una análisis que permita ser lo más general posible, se mantendrá la cota en O(n), siendo este el caso común en el algoritmo serial, y así también es establecido en el std library de C++. (cplusplus, 2013) Dado que en esta sección lo que se busca es tener un valor de referencia (aproximación), para obtener cierta intuición acerca de la complejidad y el tiempo de ejecución de los algoritmos, se harán ciertas suposiciones razonables al principio de cada análisis, para dar un poco de contexto al mismo, y para delimitar los cálculos. Dado que de lo contrario habría que hacer análisis probabilísticos acerca de las posibles configuraciones de los triángulos en las escenas, complicando el entendimiento del mismo. Además el funcionamiento real del algoritmo se va a obtener más certeramente en la sección 3.1 de benchmarking. Con las anteriores anotaciones ya es posible hacer un análisis algorítmico teórico de cada uno de los cuatro algoritmos propuestos. Los pseudocódigos en las siguientes subsecciones hacen referencia al apéndice A.1. Uniform Grid Creación de la estructura Partiendo del pseudocódigo de Uniform Grid mostrado en el pseudocódigo A.1.5 en el apéndice A.1. Se deduce la complejidad de la creación de la estructura, para ello se hacen las siguientes suposiciones: En el peor caso se divide la escena en 64 divisiones por eje, esto está establecido en el algoritmo en la línea 11. Al ser el algoritmo lineal, lo único necesario es sumar el costo de cada instrucción, según lo estipulado en la sección anterior. Y los valores dentro del primer lazo se multiplican por n, y por cada lazo interno se

55 3.1. Comparación de algoritmos 43 multiplican por 64, que hace referencia a la cantidad de divisiones por voxels, siendo esta una sobreestimación, dado que es imposible que haya un triángulo en todos las subdivisiones, o lo que es equivalente en todos los voxels. Luego de realizar todo este procedimiento se obtiene un valor aproximado de O(n) = n + 47, con lo cual se obtiene un complejidad de O(n). Con lo cual la creación de esta estructura siempre va a ser lineal respecto a la cantidad de triángulos en la escena. Lo cual se ve reflejado bastante bien en la sección de benchmarking, dado que es el que obtiene el mejor resultado en la cantidad de operaciones requeridas para crear la estructura. Es importante destacar que en la primeras tres líneas hay una iteración sobre todos los triángulos, la cota inferior siempre va a ser también Ω(n) con lo cual se deduce que el algoritmo tiene una complejidad de Θ(n) Recorrido de la estructura (traversal) Analizando el pseudocódigo A.1.6 se sabe que un rayo va a recorrer en el peor de los casos una cantidad equivalente a la subdivisión más grande de la escena, que como se mostro en la creación de la estructura, este va a tener un valor de 64, si este recorre el arreglo de esquina a esquina (opuestas en el cubo). Además es posible que todos los triángulos hayan quedado en el voxel de la esquina opuesta (dado que la estructura no se adapta a la coherencia espacial del sistema), y que no exista un hit con ninguno de estos triángulos. Con lo cual podría ocurrir que se tengan que analizar todos los triángulos, más el recargo (overhead) de recorrer los 63 voxels anteriores. Realizando estos cálculos se obtiene que la cota superior del algoritmo es de n, con lo cual se obtiene un O(n). En el mejor caso el rayo no interseca las fronteras de la escena (primer condicional), con lo cual se obtiene un valor de 12, o lo que es equivalente un Ω(n 0 ). Con lo cual no existe un valor de Θ para este algoritmo. Ya habiendo definido las cotas superiores e inferiores, es importante destacar el funcionamiento del algoritmo. Suponiendo que exista una separación homogénea dentro de todos los voxels de triángulos, por ejemplo n/64 3. En cada voxel se analizaría cada uno de estos triángulos, y de encontrarse un hit dentro de este voxel, se saldría de la iteración. Por lo cual en cada iteración se sumaría el overhead del cálculo de la posición del siguiente voxel, y se analizaría todos los triángulos en el voxel. Se sabe que al encontrar un hit, no es necesario analizar más voxels dado que el recorrido en la malla es igual al movimiento real del rayo, por lo que de encontrarse un hit, se sabe que este es el triángulo que realmente interseca al rayo de primero. Pero, si es necesario analizar todos

56 44 3 Desarrollo y Análisis los triángulos en este voxel. Dado que no hay certeza que uno u otro este de primero dentro de cada voxel. Octree Creación de la estructura Se analizará el octree utilizando el pseudocódigo A.1.9. Para este algoritmo se supondrá que existe una separación homogénea de triángulos dentro de la escena, es decir, en la primer subdivisión de la estructura se supondrá que hay n/8 de triángulos en cada subsección, y así consecutivamente. Este es un caso que terminaría generando una estructura similar al uniform grid, pero probablemente con menor cantidad de subdivisiones. Una característica particular de este algoritmo es que se acopla a la distribución espacial de los triángulos, por lo que si inicialmente no existe esta división homogénea, se hará mayor cantidad de divisiones donde haya mayor acumulación de triángulos, con lo cual se va a balancear el mismo, y se podrá asemejar a la división homogénea a partir de cierta profundidad del árbol. Partiendo de esta subdivisión homogénea, y realizando un conteo de operaciones del pseudocódigo se puede llegar a obtener la función de recursión T (n) = 8 T (n/8)+40 n+112. Donde utilizando el teorema maestro, conociendo que a=8, b=8 y f(n) = 40 n se puede deducir que la cota superior (para este caso específico) es de O(n log(n)). (Cormen et al., 2009). Para esto además se supuso que los triángulos solo traslapaban un único octante al finalizar toda la construcción. Para obtener la cota inferior basta con observar las primeras 3 líneas del pseudocódigo, donde se observa que se itera sobre todos los triángulos de la escena, para obtener las frontera de la misma, por lo que se sabe que la cota inferior es ω(n). Para poder analizar el peor caso de este algoritmo, es necesario notar que los triángulos pueden existir en más de un subespacio al mismo tiempo (al ser tridimensionales y no puntos). Por lo que haciendo una pequeña sobreestimación, un triángulo podría estar aproximadamente en la mitad de los voxels, esto se debe a que después de la primera iteración un triángulo en algunos voxels se va a asemejar más a un cuadrilátero, dado que lo traslapa completamente, con lo cual si todos los triángulos en la escena son del tamaño de las fronteras de la misma (un caso degenerado, que va a ser poco común), en cada iteración la recursión solo va a dividir la cantidad de triángulos en dos. Con lo cual se obtiene la función de recursión sería T (n) = 8 T (n/2) + 40 n Donde utilizando el teorema maestro, conociendo que a=8, b=2 y f(n) = 40 n + 112, y aplicando el segundo caso, se obtiene que o(n 3 ). Con lo cual ya se obtiene que la cota superior del algoritmo

57 3.1. Comparación de algoritmos 45 es o(n 3 ), es una cota laxa, dado que se hizo una sobreestimación de la división de los triángulos en la recursión. A pesar de tener esta cota tan alta, el caso común será mucho menor, y esto se ve reflejado en la sección 3.1 de benchmarking, donde se asemeja al caso ideal de subdivisión homogénea. Recorrido del árbol (Traversal) Utilizando el pseudocódigo A.1.10, el mejor caso del algoritmo ocurre cuando el rayo no interseca las fronteras de la escena, para esta verificación se requieren 52 operaciones, con lo cual es lineal respecto a la cantidad de triángulos, es decir Ω(n 0 ). En esta estructura se maneja un vector de booleanos, el cual contiene si un triángulo ya fue analizado, para evitar iterar más de una vez sobre cada triángulo (en caso de que ocurra la escena degenerada descrita en la creación de la estructura), con lo cual se sabe que en el peor caso O(n), con una constante multiplicativa bastante alta, dado el overhead de recorrer todos los hijos y verificar esta bandera. El caso común, el rayo va a intersecar a lo más 4 de los octantes de la escena, y suponiendo una distribución homogénea, se van a intersecar solo la mitad de los triángulos multiplicado por el overhead de aproximadamente 52 por cada escena que el rayo no interseca, es decir, va a seguir siendo lineal respecto a la cantidad de triángulos. El beneficio global de este algoritmo es poder evitar el espacio vacío o no intersecado de manera rápida y sencilla, y con una probabilidad alta de iterar sobre menos triángulos. Este algoritmo se puede mejorar implementando un método similar al expuesto en Arvo (1988), donde se acomodan los octantes a visitar de la manera en que se moviliza el rayo físicamente, con lo cual de encontrar una intersección se puede salir de la función con la solución. Pero, en el presente proyecto no fue utilizado, con lo cual el caso general siempre va a ser lineal con respecto a la cantidad de triángulos, pero con un caso común con una constante multiplicativa mucho mejor que de no usar una estructura, y una complejidad constante para rayos que no intersecan en la escena (completamente opuesto a no usar estructura, en la cual de cualquier forma se itera sobre todos los triángulos).

58 46 3 Desarrollo y Análisis BVH Generación de la jerarquía Primero se procede a analizar el pseudocódigo A.1.11, con el cual haciendo un conteo de operaciones se obtiene que la complejidad de este es igual a n + complejidad(recursivebuild) + complejidad(f lattent ree). Donde complejidad(recursivebuild), hace referencia a la complejidad del pseudocódigo A.1.12, y complejidad(f lattent ree) hace referencia a la complejidad del pseudocódigo A Ahora se procede a analizar la complejidad del código de construcción del árbol en sí, es decir, la complejidad del pseudocódigo A Con lo cual inicialmente se supone en que cada iteración, la cantidad de triángulos que se separa en partes iguales en la llamada de la creación de los hijos. Hay que recordar que la jerarquía que se crea es un árbol binario, donde cada hoja contiene un único triángulo con su volumen envolvente (un AABB). En el caso en que se subdivida el árbol en secciones iguales, se va a obtener un árbol binario balanceado, siendo este el mejor caso posible. Además se supone que todos los centroides de los BBox de los triángulos en la escena son distintos, dado que esto crea un caso degenerado. A partir del pseudocódigo A.1.12 se obtiene la ecuación de recursión 3.1, T (n) = { 32 si n=1 2T ( n 2 ) + 32 n si n>1. (3.1) Con lo cual aplicando el teorema maestro se obtiene que, con a=2, b=2 y f(n) = 32 n+20731, aplicando el caso número 2, se obtiene que la complejidad de este caso es de Θ(n log(n)), para este caso se obtienen n-1 nodos internos y n nodos hoja, tal y como los expresa la teoría. El peor caso ocurre cuando se subdivide sucesivamente el árbol en un grupo de tamaño 1 y un grupo de tamaño n-1, que es cuando se crea un árbol desbalanceado. Y que no existan centroides alineados, dado que esto reduce la cantidad de iteraciones (pero empeora el tiempo de traversal), en este caso se obtiene que la función se puede analizar como iterativa, dado que se separa en dos secciones, en una se llama a la función con un valor de n igual a uno, y en la otra se llama la función con un valor de n-1, esto sigue ocurriendo hasta que el segundo llamado de función es igual a 1. Esto genera la ecuación de complejidad 3.2, T (n) = 33n + n i=2 (59 i ) = 59 2 n n (3.2) 2

59 3.1. Comparación de algoritmos 47 Con lo cual se obtiene que la cota superior de este algoritmo es de O(n 2 ). Con lo cual ya se obtuvieron tanto la cota superior como la inferior del algoritmo de construcción recursiva del árbol. Es importante anotar que este es un caso muy poco común, dado que la heurística de sah no va a permitir que ocurra, pero igual muestra una limitante superior bastante precisa, en general este algoritmo se va comportar monotónicamente igual, dado que siempre genera n nodos hoja y n-1 nodos internos. Lo que diferencia es la cantidad de triángulos que se tienen que analizar en cada iteración, en el mejor caso siempre se analiza la mitad de la iteración anterior, en cambio en el peor caso se analiza n-1 triángulos en comparación con n en la iteración anterior. Ahora solo se requiere analizar el algoritmo para linealizar el árbol en memoria. El cual se puede observar en el pseudocódigo A Donde se puede obtener la ecuación de recursión 3.3, suponiendo el caso ideal de un árbol balanceado T (n) = { 6 si n=1 2T ( n 2 ) + 32 si n>1, (3.3) con lo cual aplicando el método maestro, con a = 2, b = 2 y f(n) = 32, se obtiene aplicando el caso 1 que este algoritmo tiene una complejidad de Θ(n). En el peor caso el árbol está completamente desbalanceado obteniéndose la ecuación 3.4, T (n) = 32n + n 32 = 64n. (3.4) Con lo cual efectivamente la complejidad de flattentree es Θ(n), dado que esta es menor que la de RecursiveBuild, la cota de la construcción completa del árbol es igual a la de RecursiveBuild. i=1 Recorrido de la jerarquía (traversal) Se analiza el pseudocódigo A En el mejor caso el rayo no interseca el bounding box del nodo[0], con lo cual se obtiene un valor de complejidad de 64, con lo cual, se obtiene que la cota inferior del algoritmo es de Ω(n 0 ). Esta estructura está conformada (cuando no hay aparición de casos extraños, tales como triángulos en el cual el centroide del bbox se encuentra en la misma posición) por n-1 nodos internos, y n nodos hojas (los cuales contienen los triángulos). Por lo que el peor caso será cuando se recorran todos los nodos internos, y según la probabilidad de distribución de rayos y de triángulos la escena, una cantidad específica de nodos hoja. Pero dado que la suma de ambos siempre va a seguir siendo lineal respecto a la cantidad de nodos. Entonces se obtiene una cota superior, dada en la ecuación 3.5

60 48 3 Desarrollo y Análisis f(n) = O(n). (3.5) Donde f(n) define la función de recorrido del árbol. Es importante destacar, que este análisis es posible realizar de esta manera sencilla dado que todas las operaciones dentro de un análisis de nodo, ya sea interno o hoja, va a ser constante (aunque puede llegar a ser una constante grande, tal como la intersección del bbox y el triángulo), con lo cual con contar la cantidad de veces que se itera sobre los nodos (que es proporcional a la cantidad de triángulos) se obtiene el resultado. Con lo cual ya se tiene acotada superior e inferiormente la función de recorrido. Pero, como se observará en la sección 3.1, en el caso común se comportará siempre mejor que la cota superior. La cual es solo la limitante teórica del algoritmo. KD-Tree Construcción de la estructura Primero se requiere analizar el pseudocódigo A.1.15, el cual va a tener una complejidad con un valor de n + Complejidad(BuildT ree), donde Complejidad (BuildT ree) va a ser igual a la complejidad del pseudocódigo A Pero, antes de proceder a analizar el pseudocódigo A.1.16, se requiere analizar primero el pseudocódigo A.1.17 el cual inicializa las ramas del árbol, el cual al ser lineal con solo un bucle, se puede obtener los resultados directamente de contar las operaciones. El mejor caso ocurre cuando la cantidad de primitivas es cero (np==0), con lo cual la complejidad del algoritmo es Ω(n 0 ) = 5, en el peor caso se entra al último condicional, con lo cual O(n) = 7 + n. Ya conociendo las cotas de este algoritmo se procede a analizar buildtree, y suponiendo que nunca se tiene que reservar mas espacio que el ya existente. Además se supone que se subdivide la escena en dos, en cada iteración. Se obtiene la ecuación de recursión 3.6 T (n) = { 4 + initleaf si n<16 2T ( n 2 ) n + 6 n log(n) si n>16, (3.6) Para cualquiera de los dos casos del initleaf, se obtiene que la recursión converge a una complejidad de Θ(n log 2 (n)). Se obtiene esta complejidad a causa del ordenamiento que se encuentra intrínseco al algoritmo. Pero esto fue suponiendo una profundidad ilimitada, para el presente algoritmo la profundidad del árbol está limitada a la ecuación 3.10 (una función

61 3.1. Comparación de algoritmos 49 empírica). Con lo cual el peor caso ocurre cuando el árbol se llena completamente, para hacer el análisis se supone que la cantidad de triángulos por nodo hoja es homogénea (n/(2 D 1 )), siendo D la profundidad del árbol. Además se supone que en cada división se separa en dos grupos equivalentes de triángulos en cada creación de un nodo interno. Con lo cual se obtiene que la complejidad total es definida por la ecuación 3.7. n cantidadn odoshoja costocreacionn odohoja ( 2 D 1 + D 1 i=1 i CreacionNodosInternos( n ), (3.7) 2i 1 donde el valor adentro de costocreaciónnodohoja y de creaciónnodosinternos, hace referencia a la cantidad de triángulos que va a encontrarse dentro de este en cada iteración. A partir del pseudocódigo A.1.16, se puede obtener el valor de estos dos que se observan en la ecuación 3.8, { costocreacinnodohoja = 4 + initileaf = 11 + n costocreacinnodointerno = n + n log(n). (3.8) Con lo cual sustituyendo la ecuación 3.8 en la ecuación 3.7, se obtiene lo observado en la ecuación 3.9, D 1 (2 D 1 ) (11 + (n/(2 D 1 )) + i ( i=1 n 2 i 1 + n n log( )) = 2i 1 2i D (D 2 (13 2 D + n log(2)) + D (13 2 D + n (log(8) 286) n ( 572 (2 D 1)+2 D+2 log(2) log(16))+( D+2 D+1 2) n log(n)). (3.9) Al sustituir en la ecuación 3.9, el valor conocido de la ecuación 3.10 D = log 2 (cantidadt riangulos), (3.10) se obtiene la función f(n) mostrada en la ecuación 3.11, f(n) = 1408 n n log(n) n log 2 (n) log(n) n 0.3 log(n) n , (3.11) el cual nos da la cota superior del algoritmo de O(n 1.3 ).

62 50 3 Desarrollo y Análisis Este análisis es una simplificación del verdadero análisis de complejidad, dado que al suponerse que los triángulos se separaran de manera homogénea, se pierden de vista muchos casos, dado que la heurística de SAH, va a generar divisiones bastante variadas con lo cual la cantidad de triángulos a iterar en cada nodo interno no va a mantener esta tendencia. Pero, este análisis genera un primer adentro acerca de los posibles resultados de la sección 3.1. En general, el análisis realizado es un valor aproximado de las tendencias del algoritmo, que como se observa va a tener un valor superior a cualquiera de los algoritmos de construcción antes vistos, dado que el caso base es superior a los demás. Intersección con la estructura (traversal) Este es el algoritmo que se observa en el pseudocódigo A.1.18, de donde en las primeras tres líneas resulta evidente que el mejor caso es cuando el rayo no interseca la estructura (miss) con lo cual la complejidad es constante con un valor de Ω(n 0 ) = 53. El análisis del peor caso se complica dado que se utiliza una heurística de superficie de área (sah), con lo cual se reduce las apariciones de casos extremos, dado que la función de costo balancea ciertas características del árbol a partir de la probabilidad y costo del recorrido (traversal) del rayo. Con lo cual el cálculo de la complejidad involucraría un análisis de probabilidad de intersección tanto del bbox como de los triángulos, lo cual va en contra de la idea de la presente subsección, que busca dar una percepción (noción) del tiempo de ejecución del algoritmo, y no un análisis profundo de los tiempos exactos de complejidad. Pero, se puede dar una aproximación de la cota superior, dado que el árbol va a tener una profundidad (depth), definida en el momento de generación de árbol, y que viene dado por la ecuación log 2 (cantidadt riangulos), si no es enviado como parámetro. Con lo cual la cantidad de nodos en el árbol es un valor definido dado por log 2 (cantidadt riangulos) 1 i=0 2 i = 256 cantidadt riangulos 1,3 1, el cual va a ser constante, aunque podría generar un overhead muy alto. Con lo cual haciendo una suposición de que se distribuye homogéneamente la cantidad de triángulos, y que es un árbol completo (balanceado) con la máxima profundidad. Al analizar todos los nodos del árbol se obtiene la complejidad relajada de la ecuación 3.12 profundidad 2 o( i=0 2 i profundidad 1 i=0 2 i totalt riangulos 1 profundidad 1 2 i=0 2 ) i = o(128 n 1,3 1 + n) = o(n 1.3 ), (3.12)

63 3.1. Comparación de algoritmos 51 dado que se conoce que todas las operaciones son constantes, lo que se hace es obtener el total que se obtendría de iterar primero sobre todos los nodos internos, y luego sobre todas los nodos hoja, conteniendo un valor promedio de triángulos, que al final va a ser equivalente sobre todos los triángulos del sistema. Pero, por las características del modelo físico del rayo se sabe que este no va a iterar sobre todos los nodos del sistema, por lo que esta es una sobreestimación tal y como lo muestra la notación de o-pequeña. En la sección 3.1 se demostrará que es una cota bastante holgada, dado que el rendimiento del sistema normalmente es mucho menor que una complejidad de O(n), casi tendiendo a ser constante. Esto ocurre como consecuencia del uso del SAH, y de la forma en que se crea el kd-tree y se adecua a las características espaciales de la escena. Además, el porcentaje de misses respecto a hits es muy alto lo cual generará que la asíntota sea más constante. Benchmarking Benchmarking, es un término en inglés, comúnmente utilizado de esta manera también en la literatura en español, y hace referencia a la acción de ejecutar un programa de computador, un grupo de programas o otras operaciones con el fin de obtener un valor relativo del rendimiento del programa en sí, o del computador.(bouckaert et al., 2011) Para el presente proyecto, benchmarking va a ser la simulación de las estructuras mediante mallas de triángulos tridimensionales, de forma que se asemejan a escenas reales (que se expondrán más adelante), donde se contarán la cantidad de operaciones básicas (explicadas en la subsección de análisis algorítmico), para así comparar su desempeño tanto a nivel de la construcción de la estructura, como en el recorrido de la misma. Estructuras a utilizar Para la simulación se utilizaron cuatro escenas en formato.tri, el cual hace referencia a la representación explícita de la escena como un grupo de triángulos, donde este formato define los tres vértices del triángulo para cada uno de estos. En cada escena se procede a simular distintas vistas, con distintos tamaños de resolución, con puntos de origen variados. A continuación se presentan las escenas, y ejemplos gráficos de la simulaciones realizadas. Los ejemplos se obtuvieron de Taiwan (2005). Por el enfoque de la simulación no se tomaron en cuenta los colores de los triángulos, dado que estos no aportan mayor información al costo de la intersección de los triángulos.

64 52 3 Desarrollo y Análisis Figura 3.1: Demostración gráfica de la pelota Pelota (Ball) Es una escena básica que contiene 120 triángulos, y que asemeja una pelota, la escena básica se observa en la figura 3.1. La cual fue obtenida de de Taiwan (2005) Dado que es un objeto simétrico respecto a todos los ejes, no se van hacer rotaciones sino que se van a hacer análisis en distintos enfoques, a distintas distancias tanto de la malla de resolución y el punto de vista. Haciendo referencia a la figura 2.4, se va alterar la posición del punto e y el arreglo de pixeles respecto a la figura. Un ejemplo de esto se observa en la figura 3.2, donde se varía tanto la posición del plano Z, con los siguientes valores: 200, 210, 250, 300 y 350. Los puntos 1 y 2 en la figura 3.2 hacen referencia a los puntos de vista e, donde estos valores también se alteran para cambiar la forma en que se generan los rayos. Para esta simulación el punto e va a estar a una distancia de 100, 50, 20, 10 y 1 respecto al plano Z. Para generar los rayos se creó una clase en C++, donde se indican las dos esquinas superiores y la esquina inferior derecha, y la resolución en el

65 3.1. Comparación de algoritmos 53 Figura 3.2: Puntos de vista plano horizontal (el cual es relativo a las esquinas especificadas) y en el plano vertical. El sistema genera un rayo que pasa en el valor intermedio de cada pixel en la matriz definida por estos tres puntos. Al alterar la posición del plano, la distancia del punto de vista y la resolución de la matriz, se van a obtener múltiples casos que modelarán de manera más realista el comportamiento de la estructura ante distintas escenas. El plano se colocó en distintas posiciones no centradas respecto al a esfera, excepto para la primera iteración. En la primera posición la malla se encuentra centrada respecto al centroide de la esfera, y la matriz de pixeles cubre completamente a la esfera. Esto se hizo con el fin de poder intersecar rayos con toda la estructura, luego se procedió a disminuir el tamaño de la matriz para enfocarse en secciones específicas de la escena, que tuvieran distinta cantidad de densidades de triángulos. Se escogió un octante de la escena y se analizó. Luego este octante se separó en cuatro caras, y se analizo cada una de estas. En la primera iteración se generaron rayos, en la segunda posición del plano se generaron rayos y en las otras 4 posiciones rayos, donde en cada posiciones se alteró la posición relativa en z en 5 posiciones distintas, y en cada posición se utilizaron 5 posiciones relativas del punto de vista.

66 54 3 Desarrollo y Análisis Cuadro 3.1: Promedio de costo: Bola Costo Estructura Construcción Hit Miss Intersección con la escena Total Sin estructura Octree BVH Uniform Grid Kd-tree A partir de estas posiciones se obtienen los totales de instrucciones en cada iteración. En los cuadros B.1, B.2, B.3, B.4 y B.5, se pueden obtener los resultados totales de cada iteración de las simulación para las estructuras: BVH, Kd-tree, Octree, Uniform Grid y sin estructura, respectivamente. En la última iteración se realizo una simulación de control, no utilizando ninguna estructura, con lo cual se interseca cada rayo con todos los objetos en la escena. En esta simulación se asume que la construcción es nula, dado que no se usa estructura. La información de todos estos cuadros esta resumidos en el cuadro 3.1, y en el cuadro 3.2. El cuadro 3.1 es la tabulación de los promedios de toda la simulación. El espacio de hit es el costo promedio de todos los aciertos (hits) de la escena, el fallos (misses) es el promedio de todos los miss que ocurrieron durante la simulación. La columna de Intersección con la escena, es el promedio de las iteraciones, es decir, es el equivalente al total de una sola posición. En el cuadro 3.2 se observan los totales absolutos de la simulación, estos datos permiten obtener un mejor entendimiento acerca de cómo es atenuado el recargo (overhead) de la creación del árbol conforme aumentan la cantidad de rayos e intersecciones. En estas simulaciones se supusieron resoluciones de pantallas bastante reducidas, dado que los objetos eran pequeños, pero en general suponiendo una pantalla con una resolución 1600x1200 pixeles, se van a generar aproximadamente un total de rayos de , en la simulación de la bola el total de rayos emitidos son de , con lo cual es el equivalente a hacer 5 análisis en distintas posiciones sobre la misma estructura. Es importante destacar que la construcción de la estructura solo se hace una vez por simulación, dado que la escena no cambia. Una forma más sencilla de observar la mejora en los tiempos de ejecución

67 3.1. Comparación de algoritmos 55 Cuadro 3.2: Resumen de costo de la intesección y la simulación: Bola Costo Estructura Total de intersecciones Total de la simulación Sin estructura Octree BVH Uniform Grid Kd-tree Figura 3.3: Comparación de estructuras: Bola Creación de la estructura Intersección de rayos Instrucciones Sin estructura BVH Octree Kd-tree Estructuras Uniform Grid es con el gráfico de barras observado en la figura 3.3, donde se grafican los resultados del cuadro 3.1, con lo cual se observa que en el mejor caso (kd-tree) es un 5 % del total de instrucciones de lo que es el sistema sin estructura, con lo cual existe una aceleración (speedup) de 22 veces. Dado que la diferencia entre el sistema sin estructura y uno con estructura es tan abismal, es necesario realizar otra grafica, para realmente lograr comparar las mejores tres estructuras (kd-tree, uniform-grid y bvh), lo cual se observa en la figura 3.4, en este caso lo que se hace es graficar los resultados

68 56 3 Desarrollo y Análisis Figura 3.4: Comparación de estructuras: Bola, solo mejores estructuras Instrucciones Creación de la estructura Intersección de rayos BVH Kd-tree Uniform Grid Instrucciones BVH Kd-tree Uniform Grid Estructuras Estructuras del cuadro 3.2, donde resulta evidente que luego de superar el overhead de la creación. Con lo cual para esta escena, se obtiene un mejor rendimiento con la estructura del kd-tree. Aunque tenga un tiempo de construcción de hasta 11 veces con respecto a las otras estructuras. Lo cual va de acuerdo a los cálculos de complejidad realizados con anterioridad. En la figura 3.4 en el grafico de la izquierda se comparan los tiempos totales de simulación, y en la derecha los tiempos totales de una sola iteración de la simulación. Tetera (Pot) La segunda escena de prueba es una malla de 640 triángulos que asemeja la forma de una tetera, la cual fue obtenida de de Taiwan (2005) con el nombre de pot, tetera en su nombre en inglés. Una simulación del objetos se puede observar en la figura 3.5. Se hizó un análisis similar al de la pelota, pero dado que este no es simétrico, se realizaron cálculos de intersección en distintas orientaciones del objeto para obtener distintos resultados y asemejar las condiciones a situaciones reales, donde los puntos de vista no van siempre con la tetera centrada en el punto de vista, ni alineada con los ejes. En las figuras 3.6, 3.7, 3.8 y 3.9, se observan los cuatros distintos puntos de vista que se utilizaron en el proyecto, donde en cada uno se utilizaron 6 puntos distintos de origen de los rayos. Para la figura 3.6 se generaron rayos, para la figura 3.7 se generaron rayos, para la figura 3.8 se generaron rayos y por último en la

69 3.1. Comparación de algoritmos 57 Figura 3.5: Tetera figura 3.9 se usaron rayos, estos para cada iteración. Por lo que en general se va a tener un buen promedio para los recorridos (traversals) de los rayos dentro de la estructura. De manera similar a lo calculado en la sección de la bola, se realiza la simulación, y los resultados se encuentran tabuladas en los cuadros B.6, B.7, B.8, B.9 y B.10. Estos resultados se encuentran resumidos en el cuadro 3.3, donde se muestran los resultados promedio de todas las iteraciones de la simulación. En el cuadro 3.4 se observa los valores totales obtenidos de la simulación, con lo cual ya se vislumbra cuales son los mejores algoritmos en la representación de la presente escena. En la figura 3.10 se observa la comparación entre todas las escenas, comparativamente el tiempo total de simulación del kd-tree es un 1 % del tiempo de la simulación sin utilizar una estructura. En la figura 3.11 se observa la cantidad de instrucciones ejecutadas para las tres estructuras principales, en la gráfica de la izquierda se observa los cálculos para una única iteración (con los valores promedios) y en la derecha se observa los totales de la simulación. Resulta evidente como el costo de la creación de una estructura compleja, se ve compensado por la reducción en el promedio

70 58 3 Desarrollo y Análisis Figura 3.6: Tetera: Vista 1 Figura 3.7: Tetera: Vista 2 Figura 3.8: Tetera: Vista 3 Figura 3.9: Tetera: Vista 4 Cuadro 3.3: Promedio de costos: tetera Costo Estructura Construcción Hit Miss Intersección con la escena Total Sin estructura Octree Uniform Grid BVH Kd-tree

71 3.1. Comparación de algoritmos 59 Cuadro 3.4: Resumen de costo de la intesección y la simulación: tetera Costo Estructura Total de intersecciones Total de la simulación Sin estructura Octree Uniform Grid BVH Kd-tree Figura 3.10: Comparación de estructuras: Tetera Creación de la estructura Intersección de rayos Instrucciones Sin estructura BVH Octree Kd-tree Estructuras Uniform Grid

72 60 3 Desarrollo y Análisis Figura 3.11: Comparación de estructuras: TEtera, solo mejores estructuras Creación de la estructura 10 7 Intersección de rayos 10 9 Instrucciones BVH Kd-tree Uniform Grid Instrucciones BVH Kd-tree Uniform Grid Estructuras Estructuras del costo del hit y el miss. Obteniéndose resultados similares a la bola, donde la mejor estructura es el kd-tree. Dadas las cantidades antes definidas de rayos por iteraciones, los resultados, pueden ser una sobreestimación del costo para el kd-tree, dado que este va a mejorar comparativamente a las otras estructuras donde se amortigua el costo de la construcción. Edificio (Building) Esta es la tercera escena que se simuló, siendo esta una estructura bastante más compleja que las anteriores y hace referencia al edificio de ciencias de la computación e ingeniería eléctrica de la Universidad Nacional de Taiwán, con un total de 5273 triángulos. La vista frontal de la malla de triángulos se puede observar en la figura 3.12 Para la simulación del edificio se escogieron 4 distintas vistas: vista frontal, vista superior, vista trasera y una vista con una orientación no alineada a todos los ejes. La vista frontal se puede observar en la figura 3.12, la trasera se observa en la figura La figura 3.15 hace referencia a la vista superior del edificio. La última vista que fue simulada es la mostrada en la figura Es importante destacar que en cada una de estas posiciones, se simularon 6 posiciones distintas relativas al plano de los pixeles, a distancias de 1, 5, 10, 20, 50 y 100. De estas vistas se obtuvieron los resultados mostrados en los cuadros B.11, B.12, B.13, B.14 y B.15. Los datos de estas tablas se resumen a los datos mostrados en el cuadro 3.5 y 3.6, donde se despliega el costo total de la con-

73 3.1. Comparación de algoritmos 61 Figura 3.12: Vista Frontal: CSIE NTU Figura 3.13: Vista Trasera: CSIE NTU Figura 3.14: Vista Variada: CSIE NTU Figura 3.15: Vista Superior: CSIE NTU strucción del árbol, el promedio de los rayos en la presente simulación, el costo total de cada simulación y el costo total de todo el proceso incluyendo la construcción. Esto para obtener una referencia del porcentaje del total que es la estructura, o lo que es equivalente el overhead que induce la construcción de la jerarquía. En la figura 3.16 se observa una comparación de barras entre todas las estructuras (incluido el total sin estructura), para tener una relación relativa entre las mismas. Tal y como se observa en esta misma gráfica, el tiempo sin estructura es 528 veces del tiempo utilizando para hacer el análisis con el kdtree. Con lo cual ya se justifica de gran medida la utilización de alguna de estructuras de segmentación espacial tridimensional. En las figura 3.17 se da un caso interesante donde para el promedio de una única iteración, al ser el sistema bastante homogéneo y tener triángulos justo en las fronteras del bbox se favorece al uniform grid, y esto se observa

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

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON)

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON) 3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON) 3.1.1 Introducción Este método proporciona un soporte para el diseño creativo de productos de software, inclusive a escala industrial.

Más detalles

CAPÍTULO I. Sistemas de Control Distribuido (SCD).

CAPÍTULO I. Sistemas de Control Distribuido (SCD). 1.1 Sistemas de Control. Un sistema es un ente cuya función es la de recibir acciones externas llamadas variables de entrada que a su vez provocan una o varias reacciones como respuesta llamadas variables

Más detalles

Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software.

Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software. ARQUITECTURA DE LAS COMPUTADORAS QUE ES UNA COMPUTADORA (UN ORDENADOR)? Existen numerosas definiciones de una computadora, entre ellas las siguientes: 1) Una computadora es un dispositivo capaz de realizar

Más detalles

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de cualquier modelo en el software Algor. La preparación de un modelo,

Más detalles

Clase 20: Arquitectura Von Neuman

Clase 20: Arquitectura Von Neuman http://computacion.cs.cinvestav.mx/~efranco @efranco_escom efranco.docencia@gmail.com Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Arquitectura de una computadora Elementos básicos de una

Más detalles

Fundamentos del diseño 3ª edición (2002)

Fundamentos del diseño 3ª edición (2002) Unidades temáticas de Ingeniería del Software Fundamentos del diseño 3ª edición (2002) Facultad de Informática necesidad del diseño Las actividades de diseño afectan al éxito de la realización del software

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

7. Conclusiones. 7.1 Resultados

7. Conclusiones. 7.1 Resultados 7. Conclusiones Una de las preguntas iniciales de este proyecto fue : Cuál es la importancia de resolver problemas NP-Completos?. Puede concluirse que el PAV como problema NP- Completo permite comprobar

Más detalles

El pipeline gráfico Figura 3.1

El pipeline gráfico Figura 3.1 El pipeline gráfico Para llevar a cabo una representación virtual de un ambiente tridimensional, se realiza un modelado del escenario. Dicho modelo incluye la representación geométrica de los objetos presentes,

Más detalles

1. Descripción y objetivos

1. Descripción y objetivos Pruebas 1 1. Descripción y objetivos Las pruebas son prácticas a realizar en diversos momentos de la vida del sistema de información para verificar: El correcto funcionamiento de los componentes del sistema.

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

UNIVERSIDAD DE SALAMANCA

UNIVERSIDAD DE SALAMANCA UNIVERSIDAD DE SALAMANCA FACULTAD DE CIENCIAS INGENIERÍA TÉCNICA EN INFORMÁTICA DE SISTEMAS Resumen del trabajo práctico realizado para la superación de la asignatura Proyecto Fin de Carrera. TÍTULO SISTEMA

Más detalles

Figura 1. Símbolo que representa una ALU. El sentido y la funcionalidad de las señales de la ALU de la Figura 1 es el siguiente:

Figura 1. Símbolo que representa una ALU. El sentido y la funcionalidad de las señales de la ALU de la Figura 1 es el siguiente: Departamento de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Antioquia Arquitectura de Computadores y Laboratorio ISI355 (2011 2) Práctica No. 1 Diseño e implementación de una unidad aritmético

Más detalles

Roberto Quejido Cañamero

Roberto Quejido Cañamero Crear un documento de texto con todas las preguntas y respuestas del tema. Tiene que aparecer en él todos los contenidos del tema. 1. Explica qué son los modos de presentación en Writer, cuáles hay y cómo

Más detalles

SISTEMA DE ESPECIICACION DE REQUERIMIENTOS

SISTEMA DE ESPECIICACION DE REQUERIMIENTOS SISTEMA DE ESPECIICACION DE REQUERIMIENTOS Presentado por: Jefferson Peña Cristian Álvarez Cristian Alzate 10 CONTENIDO 1. INTRODUCCIÓN 1.1. PROPÓSITO 1.2. AMBITO DEL SISTEMA 1.3. DEFINICIONES, ACRÓNIMOS

Más detalles

CAPITULO 4 JUSTIFICACION DEL ESTUDIO. En este capítulo se presenta la justificación del estudio, supuestos y limitaciones de

CAPITULO 4 JUSTIFICACION DEL ESTUDIO. En este capítulo se presenta la justificación del estudio, supuestos y limitaciones de CAPITULO 4 JUSTIFICACION DEL ESTUDIO En este capítulo se presenta la justificación del estudio, supuestos y limitaciones de estudios previos y los alcances que justifican el presente estudio. 4.1. Justificació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

Workflows? Sí, cuántos quiere?

Workflows? Sí, cuántos quiere? Workflows? Sí, cuántos quiere? 12.11.2006 Servicios Profesionales Danysoft Son notables los beneficios que una organización puede obtener gracias al soporte de procesos de negocios que requieran la intervención

Más detalles

Capitulo V Administración de memoria

Capitulo V Administración de memoria Capitulo V Administración de memoria Introducción. Una de las tareas más importantes y complejas de un sistema operativo es la gestión de memoria. La gestión de memoria implica tratar la memoria principal

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

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE PRUEBAS DE SOFTWARE La prueba del software es un elemento crítico para la garantía de la calidad del software. El objetivo de la etapa de pruebas es garantizar la calidad del producto desarrollado. Además,

Más detalles

Guías _SGO. Gestione administradores, usuarios y grupos de su empresa. Sistema de Gestión Online

Guías _SGO. Gestione administradores, usuarios y grupos de su empresa. Sistema de Gestión Online Guías _SGO Gestione administradores, usuarios y grupos de su empresa Sistema de Gestión Online Índice General 1. Parámetros Generales... 4 1.1 Qué es?... 4 1.2 Consumo por Cuentas... 6 1.3 Días Feriados...

Más detalles

Plan de estudios ISTQB: Nivel Fundamentos

Plan de estudios ISTQB: Nivel Fundamentos Plan de estudios ISTQB: Nivel Fundamentos Temario 1. INTRODUCCIÓN 2. FUNDAMENTOS DE PRUEBAS 3. PRUEBAS A TRAVÉS DEL CICLO DE VIDA DEL 4. TÉCNICAS ESTÁTICAS 5. TÉCNICAS DE DISEÑO DE PRUEBAS 6. GESTIÓN DE

Más detalles

TEMA 2: Representación de la Información en las computadoras

TEMA 2: Representación de la Información en las computadoras TEMA 2: Representación de la Información en las computadoras Introducción Una computadora es una máquina que procesa información y ejecuta programas. Para que la computadora ejecute un programa, es necesario

Más detalles

UNIDADES DE ALMACENAMIENTO DE DATOS

UNIDADES DE ALMACENAMIENTO DE DATOS 1.2 MATÉMATICAS DE REDES 1.2.1 REPRESENTACIÓN BINARIA DE DATOS Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS. Los computadores sólo

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

Presentación de Pyramid Data Warehouse

Presentación de Pyramid Data Warehouse Presentación de Pyramid Data Warehouse Pyramid Data Warehouse tiene hoy una larga historia, desde 1994 tiempo en el que su primera versión fue liberada, hasta la actual versión 8.00. El incontable tiempo

Más detalles

CRONO SISTEMA DE CONTROL DE PRESENCIA. Software abierto. Distintas opciones para realizar las picadas. Web personal para cada usuario

CRONO SISTEMA DE CONTROL DE PRESENCIA. Software abierto. Distintas opciones para realizar las picadas. Web personal para cada usuario Software abierto Distintas opciones para realizar las picadas Web personal para cada usuario Gestión de incidencias Informes individuales y colectivos CRONO SISTEMA DE CONTROL DE PRESENCIA Qué es Crono?

Más detalles

Capítulo 2 Silueta. Figura 2.1 Tetera capturada por la cámara con la silueta resaltada

Capítulo 2 Silueta. Figura 2.1 Tetera capturada por la cámara con la silueta resaltada Capítulo 2 Silueta 2.1 Silueta La silueta de un objeto es muy importante porque es lo que nos da las pistas visuales de cómo es que está formado, nos dice dónde están sus límites y ayuda a diferenciar

Más detalles

REGISTRO DE PEDIDOS DE CLIENTES MÓDULO DE TOMA DE PEDIDOS E INTEGRACIÓN CON ERP

REGISTRO DE PEDIDOS DE CLIENTES MÓDULO DE TOMA DE PEDIDOS E INTEGRACIÓN CON ERP REGISTRO DE PEDIDOS DE CLIENTES MÓDULO DE TOMA DE PEDIDOS E INTEGRACIÓN CON ERP Visual Sale posee módulos especializados para el método de ventas transaccional, donde el pedido de parte de un nuevo cliente

Más detalles

TEMA 4.- EL SUBSISTEMA DE PRODUCCIÓN.

TEMA 4.- EL SUBSISTEMA DE PRODUCCIÓN. TEMA 4.- EL SUBSISTEMA DE PRODUCCIÓN. 1. Concepto y elementos del subsistema de producción. 2. Clases de procesos productivos 3. Objetivos y decisiones en la administración de la producción Concepto y

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

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

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

Charlas para la Gestión del Mantenimiento Fernando Espinosa Fuentes

Charlas para la Gestión del Mantenimiento Fernando Espinosa Fuentes Charlas para la Gestión del Mantenimiento Fernando Espinosa Fuentes Conseguir una alta eficiencia de los activos es un reto importante ya que tiene un impacto significativo sobre los beneficios. Afecta

Más detalles

Ingeniería de Software. Pruebas

Ingeniería de Software. Pruebas Ingeniería de Software Pruebas Niveles de prueba Pruebas unitarias Niveles Pruebas de integración Pruebas de sistema Pruebas de aceptación Alpha Beta Niveles de pruebas Pruebas unitarias Se enfocan en

Más detalles

Estadística con Excel Informática 4º ESO ESTADÍSTICA CON EXCEL

Estadística con Excel Informática 4º ESO ESTADÍSTICA CON EXCEL 1. Introducción ESTADÍSTICA CO EXCEL La estadística es la rama de las matemáticas que se dedica al análisis e interpretación de series de datos, generando unos resultados que se utilizan básicamente en

Más detalles

Programación Gráfica. Conceptos Básicos

Programación Gráfica. Conceptos Básicos 2013 1 Procesamiento de Imágenes. Es el campo que trata con métodos, técnicas, y algoritmos para manipulación, realce e interpretación de imágenes. Graficación por Computadora. Es la disciplina concerniente

Más detalles

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS 4 ARQUITECTURA DE DISTRIBUCIÓN DE DATOS Contenido: Arquitectura de Distribución de Datos 4.1. Transparencia 4.1.1 Transparencia de Localización 4.1.2 Transparencia de Fragmentación 4.1.3 Transparencia

Más detalles

6. VECTORES Y COORDENADAS

6. VECTORES Y COORDENADAS 6. VECTORES Y COORDENADAS Página 1 Traslaciones. Vectores Sistema de referencia. Coordenadas. Punto medio de un segmento Ecuaciones de rectas. Paralelismo. Distancias Página 2 1. TRASLACIONES. VECTORES

Más detalles

INTRODUCCION A LA PROGRAMACION DE PLC

INTRODUCCION A LA PROGRAMACION DE PLC INTRODUCCION A LA PROGRAMACION DE PLC Esta guía se utilizará para estudiar la estructura general de programación de um PLC Instrucciones y Programas Una instrucción u orden de trabajo consta de dos partes

Más detalles

LECCIÓN 8: CIRCUITOS Y ALGORITMOS DE MULTIPLICACIÓN DE ENTEROS

LECCIÓN 8: CIRCUITOS Y ALGORITMOS DE MULTIPLICACIÓN DE ENTEROS ESTRUCTURA DE COMPUTADORES Pag. 8.1 LECCIÓN 8: CIRCUITOS Y ALGORITMOS DE MULTIPLICACIÓN DE ENTEROS 1. Circuitos de multiplicación La operación de multiplicar es mas compleja que la suma y por tanto se

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

Operación de Microsoft Excel

Operación de Microsoft Excel Representación gráfica de datos Generalidades Excel puede crear gráficos a partir de datos previamente seleccionados en una hoja de cálculo. El usuario puede incrustar un gráfico en una hoja de cálculo,

Más detalles

Operación Microsoft Access 97

Operación Microsoft Access 97 Trabajar con Controles Características de los controles Un control es un objeto gráfico, como por ejemplo un cuadro de texto, un botón de comando o un rectángulo que se coloca en un formulario o informe

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

Introducción a la Firma Electrónica en MIDAS

Introducción a la Firma Electrónica en MIDAS Introducción a la Firma Electrónica en MIDAS Firma Digital Introducción. El Módulo para la Integración de Documentos y Acceso a los Sistemas(MIDAS) emplea la firma digital como método de aseguramiento

Más detalles

Conmutación. Conmutación telefónica. Justificación y definición.

Conmutación. Conmutación telefónica. Justificación y definición. telefónica Justificación y definición de circuitos de mensajes de paquetes Comparación de las técnicas de conmutación Justificación y definición. Si se atiende a las arquitecturas y técnicas utilizadas

Más detalles

Primer avance de proyecto de software para la gestión de inscripciones en cursos

Primer avance de proyecto de software para la gestión de inscripciones en cursos Primer avance de proyecto de software para la gestión de inscripciones en cursos 1. Introducción Andrés Felipe Bustamante García, Carolina Sarmiento González En este documento se presentan los resultados

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

UNIVERSIDAD TECNOLOGICA DE PEREIRA FACULTAD DE INGENIERIAS

UNIVERSIDAD TECNOLOGICA DE PEREIRA FACULTAD DE INGENIERIAS Asignatura Código COMPUTACION GRAFICA IS623 Créditos 3 Intensidad semanal 4 Requisitos CB223 IS453 Las posibilidades gráficas del computador se han convertido en el principal motivo de que ésta sea la

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

Estructuras de datos: Proyecto 2

Estructuras de datos: Proyecto 2 Estructuras de datos: Proyecto 2 28 de mayo de 2013 Instrucciones Enviar las soluciones por email a los ayudantes, con copia a la profesora. Plazo de entrega: 16 de junio (durante todo el día). Se debe

Más detalles

2 EL DOCUMENTO DE ESPECIFICACIONES

2 EL DOCUMENTO DE ESPECIFICACIONES Ingeniería Informática Tecnología de la Programación TEMA 1 Documentación de programas. 1 LA DOCUMENTACIÓN DE PROGRAMAS En la ejecución de un proyecto informático o un programa software se deben de seguir

Más detalles

Capítulo 5 Programación del algoritmo en LabVIEW

Capítulo 5 Programación del algoritmo en LabVIEW Programación del algoritmo en LabVIEW En este capítulo se describen las funciones que se emplearon para implementar el control PID wavenet en LabVIEW. El algoritmo wavenet fue implementado en LabVIEW para

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

La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx

La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx Resumen Se dan algunas definiciones básicas relacionadas con la divisibilidad

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

Apoyo para la preparación de los estudios de Ingeniería y Arquitectura Física (Preparación a la Universidad) Unidad 4: Vectores

Apoyo para la preparación de los estudios de Ingeniería y Arquitectura Física (Preparación a la Universidad) Unidad 4: Vectores Apoyo para la preparación de los estudios de Ingeniería y Arquitectura Física (Preparación a la Universidad) Unidad 4: Vectores Universidad Politécnica de Madrid 5 de marzo de 2010 2 4.1. Planificación

Más detalles

Universidad acional Experimental Del Táchira Decanato de Docencia Departamento de Ingeniería en Informática

Universidad acional Experimental Del Táchira Decanato de Docencia Departamento de Ingeniería en Informática Universidad acional Experimental Del Táchira Decanato de Docencia Departamento de Ingeniería en Informática Metodología Evolutiva Incremental Mediante Prototipo y Técnicas Orientada a Objeto (MEI/P-OO)

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

Base de datos en Excel

Base de datos en Excel Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de

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

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas: SISTEMAS DISTRIBUIDOS DE REDES 1. SISTEMAS DISTRIBUIDOS Introducción y generalidades La computación desde sus inicios ha sufrido muchos cambios, desde los grandes equipos que permitían realizar tareas

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

I.E.S. ANDRÉS DE VANDELVIRA DEPARTAMENTO DE TECNOLOGÍA SISTEMAS DE REPRESENTACIÓN GRÁFICA: PERSPECTIVA. J.Garrigós

I.E.S. ANDRÉS DE VANDELVIRA DEPARTAMENTO DE TECNOLOGÍA SISTEMAS DE REPRESENTACIÓN GRÁFICA: PERSPECTIVA. J.Garrigós I.E.S. ANDRÉS DE VANDELVIRA DEPARTAMENTO DE TECNOLOGÍA J.Garrigós I.E.S. ANDRÉS DE VANDELVIRA DEPARTAMENTO DE TECNOLOGÍA 1 1.INTRODUCCIÓN Los sistemas de representación en perspectiva, tienen como objetivo

Más detalles

ACTIVIDADES TEMA 1. EL LENGUAJE DE LOS ORDENADORES. 4º E.S.O- SOLUCIONES.

ACTIVIDADES TEMA 1. EL LENGUAJE DE LOS ORDENADORES. 4º E.S.O- SOLUCIONES. 1.- a) Explica qué es un bit de información. Qué es el lenguaje binario? Bit es la abreviatura de Binary digit. (Dígito binario). Un bit es un dígito del lenguaje binario que es el lenguaje universal usado

Más detalles

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual Introducción Algunas de las personas que trabajan con SGBD relacionales parecen preguntarse porqué deberían preocuparse del diseño de las bases de datos que utilizan. Después de todo, la mayoría de los

Más detalles

Base de datos II Facultad de Ingeniería. Escuela de computación.

Base de datos II Facultad de Ingeniería. Escuela de computación. Base de datos II Facultad de Ingeniería. Escuela de computación. Introducción Este manual ha sido elaborado para orientar al estudiante de Bases de datos II en el desarrollo de sus prácticas de laboratorios,

Más detalles

IV. Implantación del sistema.

IV. Implantación del sistema. IV. Implantación del sistema. Para hablar sobre el proceso de desarrollo del sistema de Recuperación de Información Visual propuesto, empezaremos hablando del hardware utilizado, las herramientas de software

Más detalles

TRABAJO DE INVESTIGACIÓN

TRABAJO DE INVESTIGACIÓN Facultad de Arquitectura Urbanismo y Geografía TRABAJO DE INVESTIGACIÓN PROGR AM AS MODELADO Y/O ANIMACIÓN 3D A u t o C A D ASIGNATURA: TICs DOCENTES: Arqtos. Juan Pablo Klempau y Eduardo Moraga ALUMNOS:

Más detalles

Capítulo 2. Técnicas de procesamiento digital de imágenes y reconocimiento de patrones.

Capítulo 2. Técnicas de procesamiento digital de imágenes y reconocimiento de patrones. Capítulo 2. Técnicas de procesamiento digital de imágenes y reconocimiento de patrones. 2.1 Revisión sistema reconocimiento caracteres [9]: Un sistema de reconocimiento típicamente esta conformado por

Más detalles

Draw: objetos en 3D, diagramas de flujo y exportación

Draw: objetos en 3D, diagramas de flujo y exportación 1 de 15 30/11/2010 22:11 Draw: objetos en 3D, diagramas de flujo y exportación Draw es una herramienta de dibujo gráfico vectorial, aunque puede hacer algunas operaciones sobre graficos rasterizados. Ofrece

Más detalles

CAPÍTULO 1 Instrumentación Virtual

CAPÍTULO 1 Instrumentación Virtual CAPÍTULO 1 Instrumentación Virtual 1.1 Qué es Instrumentación Virtual? En las últimas décadas se han incrementado de manera considerable las aplicaciones que corren a través de redes debido al surgimiento

Más detalles

TEMA 4. Unidades Funcionales del Computador

TEMA 4. Unidades Funcionales del Computador TEMA 4 Unidades Funcionales del Computador Álvarez, S., Bravo, S., Departamento de Informática y automática Universidad de Salamanca Introducción El elemento físico, electrónico o hardware de un sistema

Más detalles

Estructuras de Control - Diagrama de Flujo

Estructuras de Control - Diagrama de Flujo RESOLUCIÓN DE PROBLEMAS Y ALGORITMOS Ingeniería en Computación Ingeniería en Informática UNIVERSIDAD NACIONAL DE SAN LUIS DEPARTAMENTO DE INFORMÁTICA AÑO 2015 Índice 1. Programación estructurada 2 1.1.

Más detalles

Proceso de desarrollo del software modelo en cascada

Proceso de desarrollo del software modelo en cascada Proceso de desarrollo del software modelo en cascada Análisis: Necesidades del usuario especificaciones Diseño: Descomposición en elementos que puedan desarrollarse por separado especificaciones de cada

Más detalles

DISEÑO DE FUNCIONES (TRATAMIENTOS)

DISEÑO DE FUNCIONES (TRATAMIENTOS) DISEÑO DE FUNCIONES (TRATAMIENTOS) Diseño Estructurado. Estrategias para Derivar el Diagrama de Estructura. Diseño de Módulos Programables. 1. DISEÑO ESTRUCTURADO El Diseño es el proceso por el cual se

Más detalles

CAPÍTULO 7 7. CONCLUSIONES

CAPÍTULO 7 7. CONCLUSIONES CAPÍTULO 7 7. CONCLUSIONES 7.1. INTRODUCCIÓN 7.2. CONCLUSIONES PARTICULARES 7.3. CONCLUSIONES GENERALES 7.4. APORTACIONES DEL TRABAJO DE TESIS 7.5. PROPUESTA DE TRABAJOS FUTUROS 197 CAPÍTULO 7 7. Conclusiones

Más detalles

Aproximación local. Plano tangente. Derivadas parciales.

Aproximación local. Plano tangente. Derivadas parciales. Univ. de Alcalá de Henares Ingeniería de Telecomunicación Cálculo. Segundo parcial. Curso 004-005 Aproximación local. Plano tangente. Derivadas parciales. 1. Plano tangente 1.1. El problema de la aproximación

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

Curso Excel Básico - Intermedio

Curso Excel Básico - Intermedio Curso Excel Básico - Intermedio Clase 4 Relator: Miguel Rivera Adonis Introducción Base de Datos: Definición de Base de Datos Ordenar datos Formulario Filtros Trabajar con Sub-Totales Validación de Datos

Más detalles

El ABC de Big Data: Analytics, Bandwidth and Content

El ABC de Big Data: Analytics, Bandwidth and Content Documento técnico El ABC de Big Data: Analytics, Bandwidth and Content Richard Treadway e Ingo Fuchs, NetApp, Noviembre de 2011 WP-7147 RESUMEN EJECUTIVO Las empresas entran en una nueva era en la que

Más detalles

Operaciones Morfológicas en Imágenes Binarias

Operaciones Morfológicas en Imágenes Binarias Operaciones Morfológicas en Imágenes Binarias Introducción La morfología matemática es una herramienta muy utilizada en el procesamiento de i- mágenes. Las operaciones morfológicas pueden simplificar los

Más detalles

Orientación acerca de los requisitos de documentación de la Norma ISO 9001:2000

Orientación acerca de los requisitos de documentación de la Norma ISO 9001:2000 Orientación acerca de los requisitos de documentación de la Norma ISO 9001:2000 Documento: ISO/TC 176/SC 2/N 525R Marzo 2001 ISO Traducción aprobada el 2001-05-31 Prólogo de la versión en español Este

Más detalles

Capítulo 9. Archivos de sintaxis

Capítulo 9. Archivos de sintaxis Capítulo 9 Archivos de sintaxis El SPSS permite generar y editar archivos de texto con sintaxis SPSS, es decir, archivos de texto con instrucciones de programación en un lenguaje propio del SPSS. Esta

Más detalles

by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true

by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true I. FUNDAMENTOS 3. Representación de la información Introducción a la Informática Curso de Acceso a la Universidad

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

BASE DE DATOS UNIVERSIDAD DE LOS ANDES FACULTAD DE MEDICINA T.S.U. EN ESTADISTICA DE SALUD CATEDRA DE COMPUTACIÓN II. Comenzar presentación

BASE DE DATOS UNIVERSIDAD DE LOS ANDES FACULTAD DE MEDICINA T.S.U. EN ESTADISTICA DE SALUD CATEDRA DE COMPUTACIÓN II. Comenzar presentación UNIVERSIDAD DE LOS ANDES FACULTAD DE MEDICINA T.S.U. EN ESTADISTICA DE SALUD CATEDRA DE COMPUTACIÓN II BASE DE DATOS Comenzar presentación Base de datos Una base de datos (BD) o banco de datos es un conjunto

Más detalles

Casuística 4.1 INTRODUCCIÓN

Casuística 4.1 INTRODUCCIÓN 4.1 INTRODUCCIÓN La primera impresión que produce el método cuando se exponen sus resultados es de un cierto asombro para todo aquél que conozca el estado actual de desarrollo del cálculo del movimiento

Más detalles

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere. UNIVERSIDAD DE CARABOBO FACULTAD DE CIENCIA Y TECNOLOGÍA DIRECCION DE EXTENSION COORDINACION DE PASANTIAS Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere. Pasante:

Más detalles

Transformación de binario a decimal. Transformación de decimal a binario. ELECTRÓNICA DIGITAL

Transformación de binario a decimal. Transformación de decimal a binario. ELECTRÓNICA DIGITAL ELECTRÓNICA DIGITAL La electrónica es la rama de la ciencia que se ocupa del estudio de los circuitos y de sus componentes, que permiten modificar la corriente eléctrica amplificándola, atenuándola, rectificándola

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

e-commerce, es hacer comercio utilizando la red. Es el acto de comprar y vender en y por medio de la red.

e-commerce, es hacer comercio utilizando la red. Es el acto de comprar y vender en y por medio de la red. Comercio electrónico. (e-commerce) Las empresas que ya están utilizando la red para hacer comercio ven como están cambiando las relaciones de la empresa con sus clientes, sus empleados, sus colaboradores

Más detalles

Figura 4.1 Clasificación de los lenguajes de bases de datos

Figura 4.1 Clasificación de los lenguajes de bases de datos 1 Colección de Tesis Digitales Universidad de las Américas Puebla Romero Martínez, Modesto Este capítulo describen los distintos lenguajes para bases de datos, la forma en que se puede escribir un lenguaje

Más detalles

EJERCICIOS DE PROGRAMACIÓN RELACIÓN VII (EJERCICIOS DE REPASO)

EJERCICIOS DE PROGRAMACIÓN RELACIÓN VII (EJERCICIOS DE REPASO) EJERCICIOS DE PROGRAMACIÓN RELACIÓN VII (EJERCICIOS DE REPASO) Luis José Sánchez 1. Realiza un programa que sume los 100 números siguientes a un número entero y positivo introducido por teclado. Se debe

Más detalles

Unidad III. Software para la administración de proyectos.

Unidad III. Software para la administración de proyectos. Unidad III Software para la administración de proyectos. 3.1 Herramientas de software para administrar proyectos. El software de administración de proyectos es un concepto que describe varios tipos de

Más detalles

Conclusiones. Particionado Consciente de los Datos

Conclusiones. Particionado Consciente de los Datos Capítulo 6 Conclusiones Una de las principales conclusiones que se extraen de esta tesis es que para que un algoritmo de ordenación sea el más rápido para cualquier conjunto de datos a ordenar, debe ser

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