CIS1330TK03. CUDAlicious. Daniel David Cárdenas Velasco

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

Download "CIS1330TK03. CUDAlicious. Daniel David Cárdenas Velasco"

Transcripción

1 CIS1330TK03 CUDAlicious Daniel David Cárdenas Velasco PONTIFICIA UNIVERSIDAD JAVERIANA FACULTAD DE INGENIERÍA CARRERA DE INGENIERÍA DE SISTEMAS BOGOTÁ, D.C. 2013

2

3 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación CIS1230TK02 CUDAlicious Autor: Daniel David Cárdenas Velasco MEMORIA DEL TRABAJO DE GRADO REALIZADO PARA CUMPLIR UNO DE LOS REQUISITOS PARA OPTAR AL TÍTULO DE INGENIERO DE SISTEMAS Director Leonardo Flórez Valencia Jurados del Trabajo de Grado Página web del Trabajo de Grado PONTIFICIA UNIVERSIDAD JAVERIANA FACULTAD DE INGENIERÍA CARRERA DE INGENIERÍA DE SISTEMAS BOGOTÁ, D.C. Noviembre, 2013 PONTIFICIA UNIVERSIDAD JAVERIANA FACULTAD DE INGENIERÍA CARRERA DE INGENIERÍA DE SISTEMAS Página i

4 Ingeniería de Sistemas Takina - CIS1230TK02 Rector Magnífico Joaquín Emilio Sánchez García S.J. Decano Académico Facultad de Ingeniería Ingeniero Jorge Luis Sánchez Téllez Decano del Medio Universitario Facultad de Ingeniería Padre Sergio Bernal Restrepo S.J. Director de la Carrera de Ingeniería de Sistemas Ingeniero Germán Alberto Chavarro Flórez Director Departamento de Ingeniería de Sistemas Ingeniero Rafael Andrés González Rivera Página ii

5 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación ARTÍCULO 23 DE LA RESOLUCIÓN NO. 1 DE JUNIO DE 1946 La Universidad no se hace responsable de los conceptos emitidos por sus alumnos en sus proyectos de grado. Sólo velará porque no se publique nada contrario al dogma y la moral católica y porque no contengan ataques o polémicas puramente personales. Antes bien, que se vean en ellos el anhelo de buscar la verdad y la Justicia Página iii

6 Ingeniería de Sistemas Takina - CIS1230TK02 AGRADECIMIENTOS Página iv

7 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación CONTENIDO ARTÍCULO 23 DE LA RESOLUCIÓN NO. 1 DE JUNIO DE III INTRODUCCIÓN...1 I - DESCRIPCIÓN GENERAL DEL TRABAJO DE GRADO OPORTUNIDAD, PROBLEMÁTICA, ANTECEDENTES Descripción del contexto Pregunta de investigación Justificación Impacto Esperado DESCRIPCIÓN DEL PROYECTO Visión global Objetivo general Fases Metodológicas o conjunto de objetivos específicos... 4 II - MARCO TEÓRICO MARCO CONCEPTUAL Trabajos importantes en el área Descripción general de la plataforma CUDA Descripción general de la plataforma ITK Convolución III DESARROLLO DEL TRABAJO PRIMER PROTOTIPO SEGUNDO PROTOTIPO CARGA DE IMAGEN EN RAM COPIA DE IMAGEN A MEMORIA GPU TERCER PROTOTIPO...23 Página v

8 Ingeniería de Sistemas Takina - CIS1230TK02 4. CUARTO PROTOTIPO VERSIÓN FINAL CARGA DE IMAGEN FILTRADO DE LA IMAGEN... Error! Bookmark not defined. 5.3 ESCRITURA DE LA IMAGEN IV - RESULTADOS Y REFLEXIÓN SOBRE LOS MISMOS CUMPLIMIENTO DE OBJETIVOS Objetivo general Objetivos específicos PRUEBAS Implementación convolución CPU Entorno de pruebas Resultados de pruebas CONCLUSIONES DEL DESARROLLO Rendimiento Tamaño del problema Dimensionalidad del problema Manejo de datos V CONCLUSIONES, RECOMENDACIONES Y TRABAJOS FUTUROS CONCLUSIONES Se respondió la pregunta de investigación Existe un aporte a la solución de la problemática Se cumplieron los objetivos RECOMENDACIONES Para la carrera Para la universidad TRABAJOS FUTUROS...41 Página vi

9 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación 6.1. EJECUCIÓN MULTIGPU EJECUCIÓN EN DISPOSITIVOS MÓVILES... Error! Bookmark not defined PORT A OPENCL USO DE NVIDIA GRID... Error! Bookmark not defined. VI - REFERENCIAS Y BIBLIOGRAFÍA REFERENCIAS...43 VII - ANEXOS...46 ANEXO 1. GLOSARIO...46 GPU CPU ITK FPGA Procesador multinúcleo ANEXO 2. POST-MORTEM Metodología propuesta vs. Metodología realmente utilizada Actividades propuestas vs. Actividades realizadas Efectividad en la estimación de tiempos del proyecto Costo estimado vs. Costo real del proyecto Efectividad en la estimación y mitigación de los riesgos del proyecto Página vii

10 Ingeniería de Sistemas Takina - CIS1230TK02 Página viii

11 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación ABSTRACT In the filtering of n-dimensional images, conventional filtering tools are used in order to perform the task, as they re reliable and usually easy to use. However, as the n-dimensional images keep growing in both size and complexity, these tools perform slowly even in the newest hardware. This project proposes a new approach to the filtering process, using graphical process units instead of central processing units, and using specifically the Nvidia s CUDA platform in order to determine whether or not there are possibilities of increasing the performance of the filtering processes by using this kind of hardware. RESUMEN En el filtrado de imagenes n-dimensonales, se utilizan herramientas de filtrado convencionales ya que son confiables y generalmente fáciles de usar. Sin embargo, estas herramientas se han vuelto lentas a medida que las imágenes n-dimensionales han crecido en tamaño como en complejidad, incluso en el hardware mas nuevo. Este proyecto propone una nueva forma de atacar el proceso de filtrado, utilizando GPU s en vez de CPU s, y específicamente utilizando la plataforma CUDA de Nvidia; esto con el fin de determinar si hay o no posibilidades de incrementar el rendimiento de los procesos actuales de filtrado al utilizar este tipo de hardware. Página ix

12 Ingeniería de Sistemas Takina - CIS1230TK02 RESUMEN EJECUTIVO La problemática atacada por este proyecto consiste en disminuir el tiempo de filtrado de imágenes n-dimensionales, que son usualmente utilizadas en el ámbito de la visualización médica. El proceso de filtrado actual toma una cantidad de tiempo considerable en las herramientas existentes, esto es debido en gran parte a la forma en la que dichas herramientas fueron implementadas. Estos procesos de filtrado suelen estar implementados de manera serial, y ejecutados en el procesador principal del equipo. Sin embargo, han surgido tecnologías que pueden mejorar considerablemente el tiempo que toma este proceso. La solución propuesta consistía en implementar los procesos de filtrado típicos en la plataforma CUDA de Nvidia, en conjunto con otras plataformas, con el fin de mejorar notablemente los tiempos de filtrado. También se determinarían las consideraciones a tener en cuenta cuando se desarrolle una aplicación en dicha plataforma, ya que difiere de las plataformas tradicionales de programación. El proyecto dio como resultado un prototipo que integra CUDA con varias plataformas, y que valida la hipótesis sobre la mejora de rendimiento. También se muestran conclusiones específicas sobre el trabajo de la plataforma, sustentadas en pruebas. Página x

13 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación INTRODUCCIÓN Este proyecto se desarrolla en el contexto de la visualización científica, este proyecto busca mejorar el ya existente proceso de filtrado de imágenes n-dimensionales, integrando una serie de plataformas y tecnologías que difieren y podrían mejorar dicho proceso. En este documento serán presentados tanto la formulación del proyecto como el desarrollo y las conclusiones del mismo. La estructura básica del documento es la siguiente: Marco teórico: Explica brevemente todos los conceptos teóricos necesarios para comprender el trabajo de grado, contiene también entregables de ciertas actividades planteadas para el proyecto. Desarrollo del proyecto: Muestra paso a paso el proceso de desarrollo del prototipo propuesto, allí también se describen aspectos a tener en cuenta en el desarrollo de aplicaciones en la plataforma elegida. Pruebas y conclusiones: Indica qué objetivos fueron alcanzados y qué conclusiones pudieron obtenerse del desarrollo y pruebas del proyecto. Trabajos futuros y recomendaciones: Muestra los posibles trabajos derivados a partir del desarrollo de este trabajo de grado. Además brinda recomendaciones a la carrera y universidad. Página 1

14 Ingeniería de Sistemas Takina - CIS1230TK02 I - DESCRIPCIÓN GENERAL DEL TRABAJO DE GRADO 1. OPORTUNIDAD, PROBLEMÁTICA, ANTECEDENTES 1.1 DESCRIPCIÓN DEL CONTEXTO Los modelos 3D normalmente utilizados para visualización médica son formados a partir de imágenes médicas, que pueden ser de cualquier cantidad de dimensiones (imágenes médicas n-dimensionales). El proceso de creación de un modelo 3D médico a partir de imágenes médicas n-dimensionales implica en un comienzo un proceso de filtrado de las mismas, con el fin de centrarse en detalles significativos para esta creación; existen múltiples formas de filtrado, como también existen diferentes tipos de imágenes medicas. [8] En el contexto en el que se desarrolló el trabajo de grado existen aplicaciones para filtrar imágenes de varias dimensiones. El proceso de filtrado es de los procesos que más tiempo consume debido a la forma en la que la mayoría de estas aplicaciones abordan el tema del filtrado. 1.2 PREGUNTA DE INVESTIGACIÓN La pregunta a la que se buscaba dar solución era: Cómo se pueden aprovechar las caracteristicas de procesamiento del hardware de visualización de última generación para mejorar el rendimiento de los algoritmos de filtrado en imágenes n-dimensionales? Con el desarrollo de este trabajo de grado se pretendía determinar técnicas de programación en GPU que puedan llevar a desarrollar una aplicación que implemente algoritmos de filtrado en imágenes n-dimensionales con mejor rendimiento que las aplicaciones de filtrado existentes. 1.3 JUSTIFICACIÓN Página 2

15 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Los algoritmos tipicamente usados en el filtrado de imágenes medicas estan implementados de manera serial. Debido a el tamaño de las imágenes médicas, el proceso normal de filtrado de las mismas toma un tiempo considerable [2]. Estos algoritmos son teoricamente separables, asi que se podrian diseñar para ejecutarse de manera paralela. La arquitectura de las GPU s actuales tienen caracteristicas que brindan la oportunidad de mejorar el rendimiento de algoritmos implementados de manera paralela; la ejecución de un algoritmo paralelo en GPU a comparación del mismo algoritmo implementado en CPU puede llegar a ser de 10 a 300 veces más rápida [2]. Este proyecto aportará a la investigacion ya que se generará un modelo genérico paralelo de estos algoritmos de filtrado seriales; que luego serán implementados en GPU, dadas las ventajas y desventajas que esto supone. El prototipo generado, por otra parte, reducirá el tiempo de diagnostico, ya que el tiempo necesario para construir el modelo 3D se verá de igual forma reducido. Por último, la instauración de nuevas unidades de diagnósitico que tengan igual o mejor rendimiento que las actuales, tendra un costo inferior debido a el gran potencial computacional que brinda una GPU a comparación de un CPU del mismo precio. [8] 1.4 IMPACTO ESPERADO El impacto esperado era mostrar las ventajas que posee la utilización de tarjetas gráficas en el campo de la visualización científica de manera que no se solía hacer: no solo usar las tarjetas gráficas como herramienta de visualización sino también como herramienta de computación. Estas ventajas se evidencian en el prototipo desarrollado, y muestran la diferencia entre usar la manera tradicional de filtrado y la propuesta por CUDAlicious. Página 3

16 Ingeniería de Sistemas Takina - CIS1230TK02 2. DESCRIPCIÓN DEL PROYECTO 2.1 VISIÓN GLOBAL En este proyecto se desarrolló un modelo que permite filtrar imágenes n-dimensionales, utilizando el entorno de programación CUDA [7] de Nvidia. En el desarrollo del modelo también se utilizaron otras herramientas de visualización científica como OpenCV e ITK, siendo estas los puntos de entrada de dichas imágenes n-dimensionales. 2.2 OBJETIVO GENERAL Desarrollar un toolkit que implemente los algoritmos de convolucion (fuerza bruta y separable) de imágenes n-dimensionales, aprovechando los recursos computacionales de una GPU Nvidia. Este trabajo se debe realizar en un plazo máximo de un año. Ya que el tiempo de desarrollo del trabajo fue reducido de un año a seis meses, el alcance del mismo se vio modificado, dando paso al siguiente objetivo general. Desarrollar un prototipo que implemente los algoritmos de convolucion de imágenes n- dimensionales, aprovechando los recursos computacionales de una GPU Nvidia. 2.3 FASES METODOLÓGICAS O CONJUNTO DE OBJETIVOS ESPECÍFICOS 1. Investigación teórica y de herramientas 1. Caracterizar los algoritmos de filtrado para imágenes n-dimensionales existentes en la literatura 2. Caracterizar los requerimientos de los algoritmos para que se puedan implementar utilizando el lenguaje de programación CUDA de Nvidia 2. Diseño de algortitmos paralelos 1. Diseñar los algoritmos previamente caracterizados de manera paralela 3. Propuesta de solución 1. Diseñar un prototipo que implemente los algoritmos paralelos diseñados 4. Implementación de la solución Página 4

17 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación 1. Implementar el prototipo en lenguaje de programación CUDA, ejecutable en una GPU Nvidia. 5. Revisiones y correcciones 1. Validar los algoritmos diseñados con los del prototipo implementado 6. Análisis de resultados 7. Diseñar un caso de prueba de filtrado de imágenes médicas complejas (2D y 3D o 4D) II - MARCO TEÓRICO 1. MARCO CONCEPTUAL 1.1 TRABAJOS IMPORTANTES EN EL ÁREA En el área del filtrado de imágenes se han hecho importantes esfuerzos desde los años 80 [2] con distintas finalidades, como lo son el filtrado de imágenes a tiempo real, el filtrado de grandes cantidades de imágenes y el filtrado de imágenes de gran tamaño. Algunos de estos importantes esfuerzos son los siguientes: Filtrado de imágenes 2D a tiempo real, este proceso involucra procesar rápidamente imágenes capturadas, el resultado de este proceso de filtrado no necesariamente tiene que ser el más preciso. [2] Filtrado de imágenes médicas MRI (Magnetic resonance imaging) utilizando dispositivos FPGA de manera paralela. [6] Filtrado de imágenes 2D basados en GPU, se ha demostrado que las soluciones basadas en GPU llevan a un aumento en el desempeño a comparación de la implementación normal en CPU. [5] Filtrado de imágenes satelitales por medio de GPU (High-Pass Filter); estas imágenes presentan un desafío debido al gran tamaño que suelen tener, y ya que actualmente la adquisición de estas imágenes no es tán dificil como en épocas pasadas, la principal obstrucción en cuanto a estas investigaciones es el tiempo de procesamiento de las mismas. [4] Filtrado de imágenes 2D en dispositivos móviles: en estos dispositivos es necesario implementar eficientemente cualquier tipo de software debido a las limitadas capacidades computacionales de los mismos; en cuanto a el filtrado de imágenes, se han migrado librerias de programación propias de los PC s a estos dispositivos, y se ha logrado tener un buen rendimiento. [1] Página 5

18 Ingeniería de Sistemas Takina - CIS1230TK DESCRIPCIÓN GENERAL DE LA PLATAFORMA CUDA CUDA es una plataforma de programación paralela y al mismo tiempo un modelo de programación, que aprovecha las capacidades computacionales de las tarjetas de video (GPU s) de Nvidia. CUDA fue introducido en el 2006 [5]. CUDA es compatible con diversos lenguajes, como C++, Java, Python, entre otros, pero el ambiente que viene por defecto en el SDK es C MODELO DE PROGRAMACIÓN CUDA parte de la base que el paralelismo (tanto en GPU como en CPU) es algo que se está haciendo y que se ve venir como el futuro de la computación de alto desempeño. Teniendo lo anterior en cuenta, el modelo de programación de CUDA provee abstracciones que permiten al programador no tener en cuenta la cantidad de recursos que utilizará en una tarea que utilice paralelismo. Página 6

19 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Ilustración 1: Modelo de programación escalable De esta manera, es posible programar una tarea paralela una vez, y que para aumentar el rendimiento de la aplicación de esta tarea baste añadir más GPU s, o mas núcleos en los que sea posible ejecutar el código. En la ilustración 1 se aprecia un esquema de dicho modelo escalable. Página 7

20 Ingeniería de Sistemas Takina - CIS1230TK KERNELS El kernel es la forma en la que CUDA extiende el lenguaje C, permitiendo al programador definir funciones propias. La gran diferencia es que estas funciones cuando se ejecutan, son ejecutadas N veces por N CUDA threads CUDA THREADS Cada CUDA thread (de aquí en adelante solamente llamados hilos) que ejecuta un kernel definido contiene una variable única threadidx. Esta variable es un vector de tres componentes, así que los diferentes hilos pueden ser identificados usando índices de hilos de una, dos o tres dimensiones. Esto facilita el procesar elementos en un dominio como el de un vector, una matriz o un volumen [9]. Estos hilos vienen organizados por bloques, existe un límite en el número de hilos por bloque (actualmente 1024 hilos), sin importar la dimensión del mismo. Sin embargo, es posible lanzar varios bloques con hilos dentro de sí, aumentando así el número de hilos que efectivamente se ejecutan en una tarea. Los bloques también están organizados, esta vez entre una grilla de bloques. Esta grilla a su vez puede ser unidimensional, bidimensional o tridimensional. Cada bloque también se identifica dentro de su grilla, pero esta vez utilizando la variable blockidx. Dentro de cada kernel es posible obtener el tamaño del bloque con la variable blockdim. En la ilustración 2 se muestra un esquema explicando toda la organización de estos hilos. Página 8

21 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Ilustración 2: Organización CUDA threads ORGANIZACIÓN DE MEMORIA Cada hilo puede acceder a varios espacios de memoria durante su ejecución (Ilustración 3). Cada hilo tiene memoria local privada, cada bloque tiene memoria compartida visible por Página 9

22 Ingeniería de Sistemas Takina - CIS1230TK02 todos los hilos del bloque (durante el periodo de vida del mismo). Por último, todos los hilos tienen acceso a memoria global siempre. Ilustración 3: Diferentes espacios de memoria Página 10

23 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Aunque existen más espacios de memoria a los que los hilos pueden acceder, solamente se utilizan los aquí descritos para CUDAlicious COMPUTACIÓN HETEROGENEA En la sección anterior se describe los diferentes espacios de memoria accesibles por un hilo de CUDA, pero todos estos espacios son memoria físicamente ubicada dentro de la GPU. El modelo de programación de CUDA asume que todos los CUDA threads se ejecutan en un dispositivo físicamente separado, que opera como co-procesador al procesador anfitrión. De igual manera, se asume que tanto el anfitrión como el dispositivo CUDA mantienen espacios de memoria separados. De esta manera, la única forma de gestionar los espacios de memoria descritos en la sección Organización de memoria es a través de llamadas a CUDA runtime [9]. En la ilustración 4 se muestra el esquema de un ejemplo en el que el código del dispositivo anfitrión es serial y escrito en C, y el código del dispositivo está compuesto de varios kernels que se ejecutan en la GPU de manera paralela. Página 11

24 Ingeniería de Sistemas Takina - CIS1230TK02 Ilustración 4: Ejemplo computación heterogénea Página 12

25 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación INTERFACE DE PROGRAMACIÓN El lenguaje por defecto para programar en CUDA es CUDA C, este lenguaje consiste en extensiones hechas al lenguaje C para acomodarlo al modelo de programación previamente descrito. Cualquier código que utilice estas extensiones, se compila utilizando NVCC. NVCC soporta no solo código especifico para la GPU (kernels) sino también puede ser una mezcla de código del anfitrión y del dispositivo CUDA RUNTIME Esta implementada en la librería cudart, que se enlaza a cualquier aplicación CUDA de forma bien sea estática (uso de librería.lib) o dinámica (.dll). En general provee utilidades a la hora de ejecutar el código CUDA, entre ellas, las más importantes son: - Manejo de memoria local - Manejo de memoria compartida [9] - Chequeo de errores - Interoperabilidad con SLI [10] En CUDA runtime se encuentran muchas de las funciones más utilizadas en el proceso de comunicación con la GPU. La tabla 1 muestra algunas de estas funciones y una breve descripción de su utilidad. Nombre Función cudamalloc() Descripción Reserva memoria en el espacio de memoria del dispositivo. Página 13

26 Ingeniería de Sistemas Takina - CIS1230TK02 cudafree() Libera la memoria previamente reservada de memoria del dispositivo. cudamemcpy() Transfiere memoria entre anfitrión y dispositivo, de ida y vuelta. cudadevicesynchronize() cudapeekatlasterror() Es llamada para esperar todos los procesos asíncronos. Usualmente usada antes de comprobar errores. Devuelve el último error, se llama desde código de anfitrión. Tabla 1: Funciones CUDA En la tabla 1 se aprecia que CUDA C se maneja de manera similar a C, teniendo en cuenta las claras diferencias entre los dos lenguajes, pero en general mantiene incluso el mismo orden de parámetros dentro de las funciones. 1.3 DESCRIPCIÓN GENERAL DE LA PLATAFORMA ITK ITK significa Insight Segmentation and Registration Toolkit [11]. Es una plataforma para el desarrollo de aplicaciones de registro y segmentación de imágenes. Segmentación es el proceso de identificar y clasificar datos que se encuentran en una representación digitalmente muestreada. El registro es el proceso de alinear o desarrollar correspondencias entre estos datos. [11] ARQUITECTURA Página 14

27 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación ITK está organizado alrededor de una arquitectura de paso de datos. Esto quiere decir que los datos están representados por data objects, que a su vez son procesados por process objects (filtros). Estos dos (data objects y process objects) son conectados entre sí para formar pipelines [11], un ejemplo está en la ilustración 5. Data object Data object Process object Data object Process object Data object Ilustración 5: Ejemplo pipeline ITK RECURSOS UTILIZADOS Esta plataforma fue necesaria para el desarrollo de CUDAlicious por la capacidad de leer una gran cantidad de formatos de imágenes de varias dimensiones. Realmente no se utiliza ningún otro recurso de esta plataforma. Se utilizan las factorías definidas en la tabla 2, estas funciones manejan tipo de datos Image de ITK; Image de ITK es básicamente una grilla que contiene todos los datos de la imagen, con todas sus dimensiones [11]. Página 15

28 Ingeniería de Sistemas Takina - CIS1230TK02 ImageFileReader ImageFileWriter Lee los datos de la imagen de un solo archivo [16]. Escribe los datos de la imagen a un solo archivo [17]. Para leer de una serie de archivos se puede utilizar la factoría ImageSeriesReader, CUDAlicious actualmente solo lee datos de un solo archivo. 1.4 CONVOLUCIÓN MATEMÁTICAMENTE Es una operación matemática entre dos funciones (f y g), que produce una tercera función, que típicamente es vista como una versión modificada de una de las dos funciones iniciales. La convolución de f y g es escrita como f g, y está definida en la ilustración siguiente. Ilustración 6: Definición convolución IMPLEMENTACIONES ACTUALES Existen varias formas de implementar la convolución en tarjetas gráficas Nvidia actualmente, se analizaron las más relevantes actualmente. Todas estas implementaciones requieren una información básica de entrada: Tamaño del filtro Valores del filtro Página 16

29 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Tamaño de la imagen TRIVIAL En el contexto de procesamiento de imágenes, un filtro por convolución es el producto escalar de los valores del filtro (kernel) con los puntos de la imagen dentro de una ventana que rodea cada uno de los puntos de salida [12]. Ilustración 7: Descripción general de la convolución En la ilustración 7 se explica este proceso, que consta de los siguientes pasos por cada uno de los puntos de la imagen de salida: 1. Multiplicar cada uno de los valores del filtro por los valores de la imagen de entrada (dentro de la ventana / tamaño delimitado por el filtro) 2. Sumar estos valores 3. En la imagen de salida asignar el valor de la suma al punto de la imagen de salida correspondiente Página 17

30 Ingeniería de Sistemas Takina - CIS1230TK02 Este método de convolución es el trivial, y aunque también es altamente paralelizable, su complejidad algorítmica depende en gran manera de los tamaños tanto de la imagen como del kernel FFT Es posible también resolver la convolución utilizando la transformada rápida de Fourier (FFT), utilizando la definición expuesta en la ilustración 8, en donde representa multiplicación punto a punto. Ilustración 8: Convolución resuelta usando FFT, tomada de [13] Varios trabajos alrededor de la convolución en GPU se han enfocado en utilizar este teorema, dejando claras sus ventajas y desventajas, que se enumeran a continuación [13]. Ventajas Toma el mismo tiempo para todos los filtros No hay restricciones de hardware con respecto al tamaño del filtro Sirve con todos los filtros de frecuencia Desventajas FFT toma bastante tiempo Maneja bien solamente imágenes con dimensiones potencias de SEPARABLE Página 18

31 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Generalmente, la convolución trivial en dos dimensiones requiere n*m multiplicaciones para cada pixel de salida, donde n y m son el ancho y el alto del filtro. Los filtros separables son un tipo especial de filtro que puede ser expresado como la composición de dos filtros unidimensionales, uno aplicado a las filas de la imagen y el otro aplicado a las columnas, de esta manera solo se requieren n+m multiplicaciones por cada pixel de salida [13]. Ilustración 9: Filtro de detección de bordes de Sobel De esta manera, el filtro de dos dimensiones mostrado en la ilustración 9 se puede aplicar de la misma manera aplicando los dos otros filtros unidimensionales uno después del otro. III DESARROLLO DEL TRABAJO El desarrollo de CUDAlicious fue orientado a prototipos incrementales [Sección 2.3], a continuación se describe la secuencia de dichos prototipos, sus entregables y resultados. En la descripción de cada prototipo se hace especial énfasis en el objetivo específico del mismo, explicando también los problemas, conclusiones y la importancia de dicho prototipo. En la sección de la versión final [Sección III,5] se explica la integración final de todos los prototipos, y se centra en mostrar un resumen general del funcionamiento de CUDAlicious. 1. PRIMER PROTOTIPO El primer prototipo se planteó como una prueba critica para la integración total del modelo: ya se había desarrollado código en CUDA (archivos.cu), pero era necesario revisar en un prototipo dos factores importantes: Página 19

32 Ingeniería de Sistemas Takina - CIS1230TK02 1. Integración de código CUDA con código C++ 2. Proceso de compilación y de enlace para crear un ejecutable La integración de CUDA con código C++ era necesaria debido a la concepción inicial del modelo, en donde se integraría varias librerías (OpenCV, ITK). De esta manera, los algoritmos programados en CUDA se utilizan como un componente más del modelo, mas no son el centro del mismo. Como entregable de este prototipo se definió un tutorial de compilación y enlace de archivos.cu con archivos.cpp para crear un ejecutable. Este tutorial es la base para la integración con el framework de CREATIS, ya que evidencia la manera en la cual se debe configurar CMAKE para integrar CUDAlicious con el mismo. 2. SEGUNDO PROTOTIPO En el segundo prototipo se decidió cargar imágenes 2D, utilizando OpenCV para su posterior filtrado. 2.1 CARGA DE IMAGEN EN RAM Como primer paso, el archivo de imagen se debía cargar en memoria principal. Los archivos soportados por OpenCV se encuentran aquí [14]. La carga de la imagen se realizó en formato RGBA, esto genera un AoS de uchar4 que contiene los tres canales de color más el canal de transparencia de la imagen. Se decidió utilizar RGBA en vez de RGB para asegurar la mayor compatibilidad posible con imágenes 2D existentes. Un esquema del AoS generado por OpenCV se puede apreciar en la ilustración 10. Página 20

33 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Ilustración 10: Array of Structures de la imagen 2D, foto sacada de [15] 2.2 COPIA DE IMAGEN A MEMORIA GPU La imagen luego debe ser copiada a la memoria de la GPU para ejecutar el filtrado. En este prototipo no se tuvo en cuenta imágenes que excedieran el tamaño de la memoria de la GPU. Como se explica en [9], Nvidia recomienda utilizar SoA en vez de AoS para procesar colecciones de datos que tengan varias propiedades (estructuras, clases, etc), ya que esto conlleva un aumento de rendimiento importante. Por ello, luego de copiar la imagen RGBA a memoria de GPU se realiza un paso intermedio que es la separación de canales. Esta separación se lleva a cabo utilizando los recursos computacionales de la GPU, un esquema de cómo queda la memoria organizada en un SoA se muestra en la ilustración 11; la imagen original RGBA es borrada luego de la separación de canales. Página 21

34 Ingeniería de Sistemas Takina - CIS1230TK02 Ilustración 11: Structure of Arrays de la imagen 2D, foto sacada de [15] El diagrama 1 representa el proceso, diferenciando claramente que se ejecuta en la CPU y que en la GPU. Diagrama 1: Carga de imagen con OpenCV y separación de canales en GPU Página 22

35 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación 3. TERCER PROTOTIPO En este prototipo se diseñó el proceso de filtrado para imágenes en dos dimensiones, que utiliza el algoritmo [Sección , Marco Conceptual], siendo este proporcionado por Nvidia junto al SDK 5.5 de CUDA. Debido al algoritmo usado, se requiere varios pasos para llegar a una imagen completamente filtrada, adicional a esto también es necesario disponer de un espacio extra que actúe como buffer para realizar el filtrado. El tamaño de dicho buffer no debería ser mayor al de la imagen original. Ilustración 12: Proceso convolución separable En la ilustración 12 se muestra el proceso seguido para la convolución separable. En el caso de imágenes cargadas con OpenCV, este proceso se realiza para cada uno de los diferentes Página 23

36 Ingeniería de Sistemas Takina - CIS1230TK02 canales de colores. Sin embargo, solo se utiliza un buffer, que se comparte entre todos los canales, ya que la secuencia de filtrado de los canales es serial. Desde este prototipo, se decidió seguir utilizando siempre solo un buffer por dimensión, sin importar la cantidad de dimensiones que posea la imagen; Si se siguiera filtrando una vez más la imagen de la ilustración 12 bastaría con volver a utilizar el mismo buffer que ya se tenía en el primer paso, y si se requiriera volver a filtrar una vez mas el buffer sería el arreglo original de la dimensión. El diagrama 2 representa el proceso ahora involucrando el filtrado por cada uno de los canales. Diagrama 2: Convolución separable en cada uno de los canales en GPU Página 24

37 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación 4. CUARTO PROTOTIPO En el cuarto prototipo se integró finalmente ITK para la lectura y escritura de imágenes de más de 2 dimensiones, se utilizan las factorías descritas en [16][17]. Las imágenes leídas vienen en dos archivos: uno tiene la extensión.mhd y define todos los metadatos de la imagen, el otro tiene la extensión.raw y tiene todos los datos de la imagen como tal. Imagen 2D Imagen 3D OpenCV ITK Filtrado Ilustración 13: Modelo de carga de imágenes 5. VERSIÓN FINAL El último prototipo comprende toda la funcionalidad de los prototipos anteriores, y añade la posibilidad de filtrar imágenes de 3 y 4 dimensiones. El proceso de filtrado completo de una imagen n-dimensional en la versión final es el siguiente: Página 25

38 Ingeniería de Sistemas Takina - CIS1230TK CARGA DE IMAGEN La carga inicial de la imagen en memoria principal del sistema se realiza de dos formas diferentes IMÁGENES 2D Para cargar imágenes en 2D se hace uso de la biblioteca de OpenCV; esto se realiza en dos pasos: 1. Cargar la imagen a memoria principal 2. Copiar la imagen a memoria de GPU OpenCV se utiliza en el primer paso, y crea una imagen de tipo RGBA en memoria principal. En el paso de copiar la imagen a memoria de GPU se realiza un paso extra que consiste en separar cada uno de los canales recibidos inicialmente (RGBA) en memoria de GPU. Esto siguiendo los lineamientos de programación en CUDA, en donde se recomienda tener una estructura de arreglos (SoA[9]) a comparación de un arreglo de estructuras (AoS). Este paso extra se programó en CUDA de manera paralela, asegurando desde el principio que se utiliza todos los recursos computacionales incluso en algo trivial como lo es la separación de canales IMÁGENES ITK Para cargar imágenes que no solo sean 2D se hace uso de ITK, específicamente se hace uso de las clases itkimagefilereader y posteriormente itkimagefilewriter. De igual manera que en la carga de imágenes 2D, la carga de imágenes usando ITK se divide en dos pasos: 1. Cargar la imagen a memoria principal 2. Copiar la imagen a memoria de GPU Página 26

39 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Una diferencia importante con respecto a la anterior forma de cargar imágenes es que no se requiere aquel paso extra de división de canales, ya que al cargar la imagen a memoria principal se está haciendo por defecto la carga de cada canal en un arreglo diferente. En el diagrama 3 se ve este proceso, más simple a comparación de la carga con OpenCV. Diagrama 3: Convolución de imágenes 3D en GPU DEFINIR EL KERNEL El primer paso del filtrado es la definición del kernel que se aplicará. Esta definición viene en dos partes: 1. Radio del kernel 2. Valores del kernel Las dos partes de la definición se estipulan directamente en el código. Página 27

40 Ingeniería de Sistemas Takina - CIS1230TK02 El radio del kernel se refiere al tamaño del mismo en cada dimensión. Por defecto el radio se define como un único numero ya que el tamaño del kernel es en mismo en todas las dimensiones. Con respecto a los valores del kernel, estos son los que indican que tipo de filtrado se aplicará. Existen varios tipos de filtrados aplicables, algunos de estos están descritos en [Marco Conceptual, 1.4.2] EJECUTAR EL FILTRADO Luego de tener tanto kernel como imagen cargadas en la memoria de la GPU, es posible ejecutar el algoritmo de filtrado. Como ya se ha dicho, el filtrado se aplicará mediante una convolución. El algoritmo de convolución utilizado es el descrito en [Marco Conceptual, ], que implementa una gran cantidad de optimizaciones a comparación de la convolución trivial [Marco Conceptual, ]. Al momento de iniciar la ejecución del algoritmo, es necesario calcular la dimensión y cantidad de bloques el mismo que se van a lanzar. En la ilustración 14 se aprecia la vista general de los hilos de ejecución, y en la sección [Marco Conceptual, ] se explica cómo se ejecuta un algoritmo paralelo en CUDA. Página 28

41 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Ilustración 14: Vista general de ejecución paralela en CUDA La dimensión y cantidad de los bloques de ejecución debería ser optima (que genere la mayor ocupación [18]) para aprovechar lo mejor posible los recursos computacionales de la GPU. 5.2 ESCRITURA DE LA IMAGEN Luego de que todas las divisiones de la imagen han sido filtradas, se siguen los siguientes pasos para producir un archivo de imagen de nuevo: 1. Unión de los diferentes canales (Ej. RGBA) 2. Copiar imagen a memoria principal 3. Generación del archivo (OpenCV o ITK) Página 29

42 Ingeniería de Sistemas Takina - CIS1230TK02 La unión de los canales aplica únicamente a las imágenes que tuvieron que ser desagregadas para ejecutar el filtro. Esta unión de canales, de igual manera que la separación de los mismos, se realiza utilizando todos los recursos computacionales de la GPU. IV - RESULTADOS Y REFLEXIÓN SOBRE LOS MISMOS 1. CUMPLIMIENTO DE OBJETIVOS 1.1. OBJETIVO GENERAL El objetivo general del desarrollo fue el siguiente: Desarrollar un prototipo que implemente los algoritmos de convolucion de imágenes n- dimensionales, aprovechando los recursos computacionales de una GPU Nvidia. El objetivo fue cumplido, se desarrolló un prototipo y se diseñó un modelo de integración con CUDA y otras plataformas (ITK, OpenCV) en las que se evidencia que es posible implementar el filtrado de imágenes n-dimensionales. Los resultados con respecto al rendimiento del filtrado a comparación de aplicaciones de filtrado convencionales se encuentra en la sección [Resultados y reflexión sobre los mismos, 3.] OBJETIVOS ESPECÍFICOS La siguiente tabla muestra el cumplimiento de los objetivos específicos planteados en la planeación del proyecto. Página 30

43 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Objetivos Estado Comentarios Caracterizar los algoritmos de filtrado para imágenes n- dimensionales existentes en la literatura Caracterizar los requerimientos de los algoritmos para que se puedan implementar utilizando el lenguaje de programación CUDA de Nvidia Cumplido Se generó un documento que describe las principales formas de implementar convoluciones Cumplido Se generó un documento que describe la arquitectura de CUDA. Diseñar los algoritmos previamente caracterizados de manera paralela Diseñar un prototipo que implemente los algoritmos paralelos diseñados Cumplido Se eligió la convolución de filtros separables y se diseñó un modelo que permite filtrar imágenes usando ITK/OpenCV y filtrarlas en CUDA. Cumplido Cinco prototipos incrementales fueron implementados para validar el diseño propuesto. Implementar un prototipo en lenguaje de programación CUDA, con base en el diseño anterior, ejecutable en una GPU Nvidia. Cumplido Se implementaron cinco prototipos incrementales. Página 31

44 Ingeniería de Sistemas Takina - CIS1230TK02 Validar los algoritmos diseñados con los del prototipo implementado Cumplido Los prototipos implementados permitieron validar los algoritmos diseñados. Diseñar un caso de prueba de filtrado de imágenes médicas complejas Cumplido Se diseñaron casos de prueba en dos dimensiones que comprobaron la diferencia de rendimiento entre CUDA y las implementaciones convencionales. Tabla 2: Resultado objetivos específicos 2. PRUEBAS Para comparar el prototipo diseñado e implementado, se compararon los tiempos de filtrado de una solución tradicional implementada serialmente en CPU. Con el fin de configurar un escenario de pruebas comparable entre las dos soluciones, se decidió implementar el algoritmo de convolución en CPU como una extensión del prototipo final. Esto asegura que se estén midiendo tiempos exclusivamente de el proceso de convolución; se podría haber comparado contra la implementación de filtrado de ITK, pero esto habría implicado un menor control del entorno de pruebas, y un tiempo mayor en la ejecución de las mismas. Página 32

45 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación 1.1. IMPLEMENTACIÓN CONVOLUCIÓN CPU Se decidió implementar dos algoritmos de convolución serial en CPU: 1. Convolución trivial 2. Convolución separable Estos dos algoritmos implementados permitieron ver más claramente la diferencia de complejidad algorítmica (en tiempo de ejecución) entre la convolución trivial y separable. Los dos fueron implementados de manera serial en C++. Aunque se implementaron estos dos algoritmos, solo se ejecutaron sobre datos de imágenes de dos dimensiones, ya que la representación de datos era la más simple y que menos tiempo consumía en cuanto a desarrollo. El énfasis de CUDAlicious es en el prototipo CUDA y no en la implementación de las pruebas, por ello se decidió no gastar demasiado tiempo en la implementación en CPU ENTORNO DE PRUEBAS Con el fin de tener resultados comparables entre sí, los datos de prueba se limitaron a imágenes en dos dimensiones, a pesar de que el prototipo implementado utilizando CUDA soporte otras dimensionalidades. El filtro aplicado fue el de difuminado Gaussiano, en versión separable y no separable, con un tamaño fijo de 3x3 pixeles. Los tamaños de las imágenes de prueba están descritos en la tabla 3, todas las unidades de tamaño están en pixeles. Página 33

46 Ingeniería de Sistemas Takina - CIS1230TK02 Nombre imagen Ancho Alto Tamaño total W8.png W82.png W83.png W84.png Tabla 3: Descripción datos de prueba Las pruebas se ejecutaron todas en el equipo de desarrollo principal (laptop Sager NP8130), ya que el equipo se encuentra modificado con respecto a la versión original (debido a una actualización del procesador del mismo) se describen las especificaciones técnicas de CPU y GPU en la tabla 4. Tipo Modelo Frecuencia/núcleo Cantidad Memoria núcleos CPU Intel 2720QM 2200Mhz / 3300Mhz 4 / MB GPU Nvidia GTX 460m 675Mhz MB Tabla 4: Descripción equipo de prueba El procesador del equipo de prueba cuenta con la tecnología HyperThreading [19], debido a esto, aunque sólo cuenta con cuatro núcleos reales el sistema operativo reconoce ocho. Por otra parte, el mismo procesador también tiene la tecnología TurboBoost [20], que incrementa Página 34

47 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación la frecuencia de reloj del mismo dependiendo de la carga bajo la que se encuentre; la frecuencia base para este modelo específico es 2200Mhz, y la mayor frecuencia posible bajo carga de cada núcleo es 3300Mhz. La GPU utilizada es de la generación fermi [21] de Nvidia, por tanto la frecuencia de la misma se mantiene estable (675Mhz) mientras se encuentre bajo carga RESULTADOS DE PRUEBAS La ejecución de los archivos de pruebas en el entorno arrojó los datos descritos por la gráfica Filtrado de imágenes 2D T i e m p o ( s g ) CUDA Sep CUDA Non-sep CPU Sep CPU Non-sep 0 W8.png W82.png W83.png W84.png Nombre imagen Gráfica 1: Resultados prueba Los tiempos graficados son el promedio de tres ejecuciones consecutivas de cada prueba, con el fin de disminuir la incertidumbre con respecto a la frecuencia de la CPU. Página 35

48 Ingeniería de Sistemas Takina - CIS1230TK02 Utilizando la herramienta Nvidia Visual Profiler [26], se puede hacer un mejor análisis sobre el rendimiento de CUDAlicious. En la gráfica 2 se aprecia el resultado que dá la herramienta cuando se ejecuta la versión separable en 2D. Nvidia Visual Profiler solo tiene en cuenta las funciones que se ejecutan en la tarjeta gráfica, por tanto no se verá reflejado allí nada que se ejecute en el procesador. Gráfica 2: Resultados Nvidia Visual Profiler CUDA Sep Con respecto a la utilización de los recursos computacionales de la GPU, en las gráficas 3 y 4 se aprecia la utilización de los núcleos de la GPU en la prueba separable y no separable respectivamente. En los únicos casos en los que la actividad de los multiprocesadores de la GPU aparece en n/a es en las operaciones de copia entre la CPU y la GPU. El resto de operaciones fluctúan entre 91.6% y 100% de utilización. Página 36

49 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Gráfica 3: Utilización de GPU CUDA Sep Gráfica 4: Utilización de GPU CUDA Non-Sep 3. CONCLUSIONES DEL DESARROLLO Se infirieron varias conclusiones de las pruebas ejecutadas, y otras de todo el proceso de desarrollo del prototipo, todas se listan a continuación. Página 37

50 Ingeniería de Sistemas Takina - CIS1230TK RENDIMIENTO Desde el planteamiento de la oportunidad de CUDAlicious [Sección Descripción General, 1] se planteó la hipótesis de que la GPU brinda un mayor rendimiento en comparación a la CPU en cuanto a tareas paralelizables. Los resultados de las pruebas (gráfica 1) corroboran esta hipótesis, siendo la implementación en GPU hasta 8.9 veces más rápida en filtrar la misma imagen a comparación de la CPU en la versión no separable del filtrado. Igualmente, se evidenció que la GPU fue hasta 4.5 veces más rápida que la CPU en la versión separable TAMAÑO DEL PROBLEMA No se pudo realizar pruebas con imágenes más grandes debido a varios factores: 1. La forma de almacenamiento en GPU de las imágenes: En este momento cada valor de cada pixel de la imagen se está almacenando como un float, gastando 4bytes por cada valor. Si se hubiera implementado usando unsigned char, las imágenes filtrables podrían ser de mayor tamaño. 2. La cantidad de memoria disponible en GPU La memoria disponible en GPU es sensiblemente inferior a la disponible por el sistema (CPU), esto hace que las imágenes filtrables no puedan ser muy grandes. Con respecto a la primera limitante, el prototipo se implementó usando este tipo de datos debido a que no se tenía información con respecto a los formatos de las imágenes n- dimensionales en un principio, y se optó por elegir un tipo de dato que no supusiera limitantes de precisión y/o tamaño de los valores de las imágenes. Es por esto que en trabajos futuros [Sección Conclusiones, Recomendaciones y Trabajos Futuros], y en la primera propuesta del trabajo de grado, se propone dividir las imágenes de entrada y procesarlas a medida que se va ocupando totalmente la memoria disponible de gráficos. Página 38

51 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación 3.3. DIMENSIONALIDAD DEL PROBLEMA El prototipo actual es capaz de filtrar imágenes 2D, 3D y hasta 4D. Se descubrió durante el desarrollo del mismo que es difícil filtrar imágenes de mayor dimensionalidad. Esto es debido a la forma en la que se ejecutan los kernels en CUDA; como ya se explicó en [Sección Marco Teórico, ] la forma de ejecutar los kernels es definiendo la dimensión de bloques y de hilos del problema. Esto no solo sirve para determinar que tan ocupada se encuentra la GPU en el momento de el procesamiento, sino que también por medio del uso de los índices internos de cada hilo/bloque se especifica que parte del problema procesará cada núcleo. CUDA actualmente provee una forma sencilla de implementar procesamiento sobre matrices de 2 y 3 dimensiones, debido a estos índices, pero para problemas de mayores dimensiones, la implementación de cualquier algoritmo aplicado sobre estos datos es mucho más complicado, ya que no existe una forma estándar de unir unidades de procesamiento con partes del problema MANEJO DE DATOS Inicialmente se pensó en que el tiempo necesario para copiar los datos de memoria principal (RAM) a memoria de GPU iba a ser una gran desventaja de utilizar CUDA. En las pruebas se evidenció que este paso de datos, al menos en el tamaño de los datos que actualmente se probaron, no es un elemento crítico a la hora de definir el problema. Esto puede ser debido al gran ancho de banda que goza la interface PCI-Express, que es la interface utilizada actualmente en la mayoría de tarjetas gráficas actuales. Página 39

52 Ingeniería de Sistemas Takina - CIS1230TK02 V CONCLUSIONES, RECOMENDACIONES Y TRABAJOS FUTUROS 4. CONCLUSIONES 4.1. SE RESPONDIÓ LA PREGUNTA DE INVESTIGACIÓN Fue posible implementar un prototipo que usa las características del hardware de visualización de última generación, mejorando el rendimiento de las implementaciones existentes EXISTE UN APORTE A LA SOLUCIÓN DE LA PROBLEMÁTICA Haciendo uso de la plataforma CUDA, y de las técnicas de programación descritas en el proceso de desarrollo, es posible mejorar considerablemente el rendimiento de los algoritmos de filtrado de imágenes médicas. Hay que tener en cuenta las conclusiones descritas al momento de desarrollar una nueva aplicación, pero haciendo un uso correcto de estas herramientas es posible ayudar a la problemática SE CUMPLIERON LOS OBJETIVOS Todos los objetivos (general y específicos) se cumplieron, como se describe en la tabla RECOMENDACIONES 5.1. PARA LA CARRERA Se recomienda la investigación de nuevas herramientas para mejorar procesos actuales en el campo de la visualización científica, ya que aunque muchos de los problemas en el área tienen investigaciones e implementaciones efectivas, es posible mejorarlos con el uso de nuevas tecnologías. Esto aplica no solo al área de investigación en el que se enmarca este trabajo de grado, en casi todas las áreas en la que la ingeniería de sistemas tiene posibilidad de actuar, se pueden mejorar procesos, formas de implementación y en general la manera de atacar el problema. Los ingenieros de sistemas tienen una posibilidad, por no decir la obligación, de mejorar el mun- Página 40

53 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación do en el que viven, y el uso de nuevas tecnologías y herramientas tecnológicas es una forma de hacerlo PARA LA UNIVERSIDAD Incentivar la investigación es clave para el desarrollo del conocimiento, la recomendación es brindar un ambiente propicio para esta; la universidad cuenta con los recursos monetarios para promover la investigación en todas las carreras, y en muchos casos se cuenta también con los recursos tecnológicos que la propician, pero también es necesario generar la conciencia de la investigación y la multidisciplinareidad en los estudiantes. 6. TRABAJOS FUTUROS Como trabajo futuro quedan muchas opciones a partir de este trabajo DIVIDIR DATOS DE ENTRADA En la propuesta de trabajo de grado [8] el dividir los datos de entrada en el procesamiento se consideraba como parte esencial del mismo, pero por el cambio de tiempo de desarrollo, esto no quedó dentro del alcance. Básicamente en lo que consiste esto es a medida que la GPU tiene memoria disponible, se van pasando secciones de la imagen que se encuentran en memoria principal y se filtran; luego de ser filtradas, estas secciones se unirían y formarían una imagen resultante única EJECUCIÓN MULTIGPU Página 41

54 Ingeniería de Sistemas Takina - CIS1230TK02 CUDAlicious fue desarrollado y ejecutado en dos sistemas que solo poseen una GPU, pero una de las características más importantes de CUDA es la posibilidad del desarrollo multi- GPU. Este desarrollo se hace por varias razones: 1. Mejorar la velocidad de filtrado 2. Aumentar la capacidad en memoria de GPU para trabajar 3. Disminuir costos La mejora de velocidad es evidente, al tener más recursos computacionales con los cuales filtrar la imagen. Tener dos o más GPU s incrementa la memoria en la que se puede ejecutar el filtrado. Finalmente, ya que solo se necesita otro slot PCI Express disponible para poder añadir una nueva GPU, los costos de mejorar el rendimiento son menores a comparación de montar de nuevo todo un sistema de cómputo con GPU independiente PORT A OPENCL CUDAlicious fue desarrollado en CUDA debido a la facilidad de programación, cantidad de recursos bibliográficos disponibles, cantidad de librerías previamente desarrolladas y en general, por el gran apoyo de Nvidia a los desarrolladores. Sin embargo, CUDAlicious solo es ejecutable en máquinas que posean GPU Nvidia con capacidad de ejecutar CUDA. Esto representa una gran limitante, y sería interesante el poder ejecutar CUDAlicious en cualquier sistema que posea una GPU dedicada o integrada. Para llevar esto a cabo, se podría hacer una adaptación de lenguaje CUDA a lenguaje OpenCL. OpenCL corre bajo cualquier GPU que sea compatible [22], y debido a la reciente incorporación de capacidad de ejecución de OpenCL a las tarjetas gráficas integradas Intel [23] y AMD [24], además del avance en este campo para procesadores móviles [25], el aumento de ambientes en los cuales se podría filtrar imágenes eficientemente se incrementaría sustancialmente. Página 42

55 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Muchos conceptos sobre la convolución implementada en CUDAlicious pueden no ser compatibles directamente con OpenCL, pero existen trabajos [REF][REF] en los que se ha implementado exitosamente procesos de convolución. VI - REFERENCIAS Y BIBLIOGRAFÍA 1. REFERENCIAS [1] Pontificia Universidad Javeriana, Documentos institucionales Misión, [ONLINE]. DISPONIBLE EN: [2] Nan Zhang; Yun-shan Chen; Jian-li Wang;, "Image parallel processing based on GPU," Advanced Computer Control (ICACC), nd International Conference on, vol.3, no., pp , March 2010, [ONLINE]. DISPONIBLE EN: 614 [3] Nvidia Tegra. [ONLINE]. DISPONIBLE EN: [4] Apple A5X SoC. [ONLINE]. DISPONIBLE EN: [5] Nvidia CUDA. [ONLINE]. DISPONIBLE EN: [6] Extreme Programming. [ONLINE]. DISPONIBLE EN: [7] SDK Nvidia CUDA. [ONLINE]. DISPONIBLE EN: https://developer.nvidia.com/gpucomputing-sdk [8] Propuesta de trabajo de grado Daniel Cárdenas. Pontificia Universidad Javeriana 2012 [9] CUDA C Programming Guide, [ONLINE]. DISPONIBLE EN: [10] NVIDIA SLI Best Practices, [ONLINE]. DISPONIBLE EN: https://developer.nvidia.com/slibest-practices [11] Jean-Loïc Rose. ITK architecture. CREATIS-LRMN. [ONLINE]. DISPONIBLE EN : lyon.fr/software/public/creatools/crea_thirdparty_libraries/documentation/doc01/itk- Architecture.ppt [12] Image convolution with CUDA [ONLINE]. DISPONIBLE EN : Beta/x86_64_website/projects/convolutionSeparable/doc/convolutionSeparable.pdf [13] FFT and Convolution Performance in Image Filtering on GPU ISSN : Página 43

56 Ingeniería de Sistemas Takina - CIS1230TK02 [14] Reading and writing Images and Video, OpenCV, [ONLINE]. DISPONIBLE EN: ml?highlight=imread#imread [15] Kittens, [ONLINE]. DISPONIBLE EN : [16] ITK imagefilereader, [ONLINE]. DISPONIBLE EN : [17] ITK imagefilewriter, [ONLINE]. DISPONIBLE EN : [18] CUDA Occupancy Calculator, [ONLINE]. DISPONIBLE EN :http://developer.download.nvidia.com/compute/cuda/cuda_occupancy_calculat or.xls [19] Intel HyperThreading Technology, [ONLINE]. DISPONIBLE EN : [20] Intel TurboBoost Technology, [ONLINE]. DISPONIBLE EN : [21] CUDA Fermi Architecture, [ONLINE]. DISPONIBLE EN : [22] Open CL, [ONLINE]. Disponible en : https://www.khronos.org/opencl/ [23] Intel Graphics. [ONLINE]. Disponible en : [24] AMD Graphics. [ONLINE]. Disponible en : [25] MALI T600 Developer guide. [ONLINE]. Disponible en : [26] Nvidia Visual Profiler. [ONLINE]. Disponible en : https://developer.nvidia.com/nvidiavisual-profiler Página 44

57 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación Página 45

58 Ingeniería de Sistemas Takina - CIS1230TK02 VII - ANEXOS ANEXO 1. GLOSARIO GPU Graphics processing unit. Coprocesador dedicado al procesamiento gráficos. CPU (Central Processing Unit): Unidad central de procesamiento ITK Plataforma de código abierto que provee herramientas para el análisis de imágenes. FPGA (Field-programmable gate array): Dispositivo semiconductor que contiene bloques de lógica cuya interconexión y funcionalidad puede ser configurada. PROCESADOR MULTINÚCLEO Aquel que combina dos o más procesadores independientes en un solo circuito integrado. RGBA Formato de imagen definido por los canales Red, Green, Blue, Alpha. ANEXO 2. POST-MORTEM 1. METODOLOGÍA PROPUESTA VS. METODOLOGÍA REALMENTE UTILIZADA. La metodología utilizada fue la misma que la propuesta, todo se centraba en el desarrollo basado en prototipos incrementales. Debido al cambio en el tiempo de desarrollo, los entre- Página 46

59 Pontificia Universidad Javeriana Memoria de Trabajo de Grado Modalidad investigación gables y las actividades propuestas cambiaron, pero esto no afectó de manera importante al proyecto. 2. ACTIVIDADES PROPUESTAS VS. ACTIVIDADES REALIZADAS. Las actividades propuestas anteriormente se encuentran en la siguiente ilustración: Las actividades realizadas durante el desarrollo del trabajo de grado, junto con sus entregables fue la siguiente: Nombre Duración Descripción Entregables Página 47

Modelo de aplicaciones CUDA

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

Más detalles

Introducción. Por último se presentarán las conclusiones y recomendaciones pertinentes.

Introducción. Por último se presentarán las conclusiones y recomendaciones pertinentes. Introducción En el presente documento se explicarán las consideraciones realizadas para implementar la convolución bidimensional en la arquitectura CUDA. En general se discutirá la metodología seguida

Más detalles

La Arquitectura de las Máquinas Virtuales.

La Arquitectura de las Máquinas Virtuales. La Arquitectura de las Máquinas Virtuales. La virtualización se ha convertido en una importante herramienta en el diseño de sistemas de computación, las máquinas virtuales (VMs) son usadas en varias subdiciplinas,

Más detalles

Arquitecturas GPU v. 2013

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

Más detalles

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

Seminario II: Introducción a la Computación GPU Seminario II: Introducción a la Computación GPU CONTENIDO Introducción Evolución CPUs-Evolución GPUs Evolución sistemas HPC Tecnologías GPGPU Problemática: Programación paralela en clústers heterogéneos

Más detalles

Ingeniería de Software con UML Unified Modeling Language Lenguaje Unificado de Modelado

Ingeniería de Software con UML Unified Modeling Language Lenguaje Unificado de Modelado Ingeniería de Software con UML Unified Modeling Language Lenguaje Unificado de Modelado 1. Introducción Unified Modeling Languaje Fuente: Booch- Jacobson-Rumbauch y diversos sitios Internet, entre otros:

Más detalles

High Performance Computing and Architectures Group

High Performance Computing and Architectures Group HPCA Group 1 High Performance Computing and Architectures Group http://www.hpca.uji.es Universidad Jaime I de Castellón ANACAP, noviembre de 2008 HPCA Group 2 Generalidades Creado en 1991, al mismo tiempo

Más detalles

Electrónica Digital II

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

Más detalles

EL ENTORNO: VISION - E LABORATORY

EL ENTORNO: VISION - E LABORATORY EL ENTORNO: VISION - E LABORATORY JAVIER MOLINA* Y ALBERTO YÚFERA*, ** * Departamento de Tecnología Electrónica, Universidad de Sevilla, Av. Reina Mercedes s/n, Sevilla 41012, España. tf: 95 4556472, fax:

Más detalles

Informática y Programación Escuela de Ingenierías Industriales y Civiles Grado en Ingeniería en Ingeniería Química Curso 2010/2011

Informática y Programación Escuela de Ingenierías Industriales y Civiles Grado en Ingeniería en Ingeniería Química Curso 2010/2011 Módulo 1. Fundamentos de Computadores Informática y Programación Escuela de Ingenierías Industriales y Civiles Grado en Ingeniería en Ingeniería Química Curso 2010/2011 1 CONTENIDO Tema 1. Introducción

Más detalles

El entorno Vision - E Laboratory

El entorno Vision - E Laboratory Prácticas de laboratorio El entorno Vision - E Laboratory Una imagen vale más que mil palabras Proverbio chino. 1. Introducción 2. El entorno Vision-E 2.1 Panel de Imágenes 2.2 Área de Menús y Edición

Más detalles

Tema: Detección de billetes con OpenCV en Android.

Tema: Detección de billetes con OpenCV en Android. TRABAJO FINAL PARA APROBACION DEL CURSO DE POSTGRADO: INTRODUCCION AL PROCESAMIENTO DIGITAL DE IMAGENES. UN ENFOQUE TEORICO - PRACTICO UTILIZANDO OPEN CV. FACULTAD DE INGENIERÍA. 2013. Autor: Vera, José

Más detalles

Curso de Android con Java

Curso de Android con Java Todos los Derechos Reservados Global Mentoring Experiencia y Conocimiento para tu Vida 1 Este es un tiempo único para el mundo de los celulares, en particular de los Smartphones. Este tipo de dispositivos

Más detalles

Carrera: SCD-1027 SATCA 1 2-3-5

Carrera: SCD-1027 SATCA 1 2-3-5 1.- DATOS DE LA ASIGNATURA Nombre de la asignatura: Carrera: Tópicos Avanzados de Programación Ingeniería en Sistemas Computacionales Clave de la asignatura: SATCA 1 SCD-1027 2-3-5 2.- PRESENTACIÓN Caracterización

Más detalles

CUDA Overview and Programming model

CUDA Overview and Programming model Departamento de Ciencias de la computación Universidad de Chile Modelado en 3D y sus Aplicaciones en Realidad Virtual CC68W CUDA Overview and Programming model Student: Juan Silva Professor: Dr. Wolfram

Más detalles

Carrera: SCC-1014 SATCA 1 2-2-4

Carrera: SCC-1014 SATCA 1 2-2-4 1.- DATOS DE LA ASIGNATURA Nombre de la asignatura: Lenguajes de Interfaz Carrera: Ingeniería en Sistemas Computacionales Clave de la asignatura: SATCA 1 SCC-1014 2-2-4 2.- PRESENTACIÓN Caracterización

Más detalles

GPGPU Avanzado. Sistemas Complejos en Máquinas Paralelas. Esteban E. Mocskos (emocskos@dc.uba.ar) 5/6/2012

GPGPU Avanzado. Sistemas Complejos en Máquinas Paralelas. Esteban E. Mocskos (emocskos@dc.uba.ar) 5/6/2012 Sistemas Complejos en Máquinas Paralelas GPGPU Avanzado Esteban E. Mocskos (emocskos@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA CONICET 5/6/2012 E. Mocskos (UBA CONICET) GPGPU Avanzado 5/6/2012

Más detalles

Rational Unified Process (RUP)

Rational Unified Process (RUP) Rational Unified Process (RUP) Este documento presenta un resumen de Rational Unified Process (RUP). Se describe la historia de la metodología, características principales y estructura del proceso. RUP

Más detalles

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

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU Computación de Propósito General en Unidades de Procesamiento Gráfico () E. Dufrechou, P. Ezzatti M. Pedemonte Práctico Programación con CUDA Práctica 0: Ejecución del ejemplo visto en teórico (suma de

Más detalles

Ejemplos de optimización para Kepler. 1. Balanceo dinámico de la carga. Contenidos de la charla [18 diapositivas]

Ejemplos de optimización para Kepler. 1. Balanceo dinámico de la carga. Contenidos de la charla [18 diapositivas] Ejemplos de optimización para Kepler Manuel Ujaldón Nvidia CUDA Fellow Dpto. Arquitectura de Computadores Universidad de Málaga Contenidos de la charla [18 diapositivas] 1. Balanceo dinámico de la carga.

Más detalles

TEMA 1: INTRODUCCIÓN

TEMA 1: INTRODUCCIÓN 1 DISEÑO Y DESARROLLO DE COMPILADORES TEMA 1: INTRODUCCIÓN Qué es un Compilador? Un compilador no es más que un traductor, es decir, un programa que nos permite pasar información de un lenguaje a otro.

Más detalles

Sistemas de Información II. Introducción al Proceso Unificado de Desarrollo de Software. Autor: Ing. Silverio Bonilla 1

Sistemas de Información II. Introducción al Proceso Unificado de Desarrollo de Software. Autor: Ing. Silverio Bonilla 1 Introducción al Proceso Unificado de Desarrollo de Software Autor: Ing. Silverio Bonilla 1 James Rumbaugh et al. Concepto de Método Una metodología de ingeniería del software es un proceso para producir

Más detalles

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

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

Más detalles

Simulador de Protocolos de Red a tráves de WEB

Simulador de Protocolos de Red a tráves de WEB Simulador de Protocolos de Red a tráves de WEB Propuesta de Estudio 20071608 Director Ing. Francisco Antonio Polanco Montelongo Resumen Introducción Actualmente, el desarrollo tecnológico a alcanzado niveles

Más detalles

Enseñanza de programación multihilo y controladores de dispositivo en entornos Windows para alumnos de electrónica

Enseñanza de programación multihilo y controladores de dispositivo en entornos Windows para alumnos de electrónica Enseñanza de programación multihilo y controladores de dispositivo en entornos Windows para alumnos de electrónica A. Da Silva, V. Hernández y J.F. Martínez Departamento de Ingeniería y Arquitecturas Telemáticas.

Más detalles

SCM - 0435 3-2-8. Participantes

SCM - 0435 3-2-8. Participantes 1.- DATOS DE LA ASIGNATURA Nombre de la asignatura: Carrera: Clave de la asignatura: Horas teoría-horas práctica-créditos Tópicos selectos de programación Licenciatura en informática SCM - 0435 3-2-8 2.-

Más detalles

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

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

Más detalles

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

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

Más detalles

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

Computación de Propósito General en Unidades de Procesamiento Gráfico GPGPU Computación de Propósito General en Unidades de Procesamiento Gráfico () E. Dufrechou, P. Ezzatti, M. Pedemontey J.P. Silva Clases 4 Programación Contenido Modelo de programación Introducción Programación

Más detalles

Facultad de Ingeniería ISSN: 0121-1129 revista.ingenieria@uptc.edu.co. Universidad Pedagógica y Tecnológica de Colombia. Colombia

Facultad de Ingeniería ISSN: 0121-1129 revista.ingenieria@uptc.edu.co. Universidad Pedagógica y Tecnológica de Colombia. Colombia Facultad de Ingeniería ISSN: 0121-1129 revista.ingenieria@uptc.edu.co Universidad Pedagógica y Tecnológica de Colombia Colombia Amézquita-Mesa, Diego Germán; Amézquita-Becerra, Germán; Galindo-Parra, Omaira

Más detalles

Etapas del desarrollo

Etapas del desarrollo Capítulo 4 Etapas del desarrollo Este capítulo documenta la aplicación del modelo presentado anteriormente, para el caso de la detección y clasificación de eventos sísmicos sobre señales digitales. El

Más detalles

7. CONCLUSIONES Y RECOMENDACIONES

7. CONCLUSIONES Y RECOMENDACIONES CAPITULO VII 7. CONCLUSIONES Y RECOMENDACIONES 7.1 VERIFICACION DE LA HIPOTESIS Una vez terminada la investigación, se establece que la hipótesis planteada para el desarrollo de la Tesis "Metodología para

Más detalles

Interfaces y Manejadores de Dispositivos

Interfaces y Manejadores de Dispositivos Informática Electrónica Unidad 6 Interfaces y Manejadores de Dispositivos Modalidad y Materiales Dos clases expositivas a cargo del docente responsable (jlsimon@fceia.unr.edu.ar) Una práctica cargo de

Más detalles

CURSOS DE VERANO 2014

CURSOS DE VERANO 2014 CURSOS DE VERANO 2014 CLOUD COMPUTING: LA INFORMÁTICA COMO SERVICIO EN INTERNET LA PLATAFORMA GOOGLE CLOUD PLATFORM. GOOGLE APP ENGINE Pedro A. Castillo Valdivieso Universidad de Granada http://bit.ly/unia2014

Más detalles

Unidad 1: Conceptos generales de Sistemas Operativos.

Unidad 1: Conceptos generales de Sistemas Operativos. Unidad 1: Conceptos generales de Sistemas Operativos. Tema 3: Estructura del sistema operativo. 3.1 Componentes del sistema. 3.2 Servicios del sistema operativo. 3.3 Llamadas al sistema. 3.4 Programas

Más detalles

Sistema Operativo MAC. Francisco Jesús Delgado Almirón fjdelg@correo.ugr.es Diseño de Sistemas Operativos 5º Ingeniería Informática

Sistema Operativo MAC. Francisco Jesús Delgado Almirón fjdelg@correo.ugr.es Diseño de Sistemas Operativos 5º Ingeniería Informática Sistema Operativo MAC Francisco Jesús Delgado Almirón fjdelg@correo.ugr.es Diseño de Sistemas Operativos 5º Ingeniería Informática Introducción Mac OS (Macintosh Operating Systems) es un sistema operativo

Más detalles

CARRERA TITULO DEL TRABAJO CURSO

CARRERA TITULO DEL TRABAJO CURSO CARRERA Ingeniería Informática TITULO DEL TRABAJO TOGAF CURSO Tópicos de Ingeniería del Software CÉSAR ESTRADA CONDORI MAYRA GOMEZ QUEVEDO LUIS MUǸOS ESCAPA ALAN A. ROJAS MARROQUIN SEMESTRE IX 2010 Los

Más detalles

Ingeniería de Software I

Ingeniería de Software I Ingeniería de Software I Agenda Objetivo. Unidades de aprendizaje. Formas de evaluación. Bibliografía. 2 Datos del profesor Correo electrónico: egonzalez@upemor.edu.mx Asesorías Jueves de 11:00 a 13:00

Más detalles

Escogiendo un sistema host

Escogiendo un sistema host 2002 Emerson Process Management. Todos los derechos reservados. Vea este y otros cursos en línea en www.plantwebuniversity.com. Fieldbus 402 Escogiendo un sistema host Generalidades Experiencia del proveedor

Más detalles

1. INTRODUCCIÓN Y OBJETIVOS

1. INTRODUCCIÓN Y OBJETIVOS 1. INTRODUCCIÓN Y OBJETIVOS Los teléfonos móviles son ya parte esencial en nuestra forma de vida y cada día son más los usuarios de estos terminales. Hasta ahora nos han acompañado a todas partes y nos

Más detalles

Tecnología de la Información y las Comunicaciones. Colegio Bosque Del Plata. UNIDAD 6 Hardware Procesador y Unidades de Almacenamiento.

Tecnología de la Información y las Comunicaciones. Colegio Bosque Del Plata. UNIDAD 6 Hardware Procesador y Unidades de Almacenamiento. Colegio Bosque Del Plata Tecnología de la Información y las Comunicaciones UNIDAD 6 Hardware Procesador y Unidades de Almacenamiento. E-mail: garcia.fernando.j@gmail.com Profesor: Fernando J. Garcia Ingeniero

Más detalles

A continuación se mencionan en orden cronológico, los sistemas de conexión entre la tarjeta gráfica y la placa base. ISA

A continuación se mencionan en orden cronológico, los sistemas de conexión entre la tarjeta gráfica y la placa base. ISA González Duarte Daniel Computación Gráfica Fecha de Entrega: 18.Feb.2008 Tarea 3: Buses Interfaces de tarjeta de video con la placa base: A continuación se mencionan en orden cronológico, los sistemas

Más detalles

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática Tema 1 Introducción. Arquitectura básica y Sistemas Operativos Fundamentos de Informática Índice Descripción de un ordenador Concepto básico de Sistema Operativo Codificación de la información 2 1 Descripción

Más detalles

Programación en LabVIEW para Ambientes Multinúcleo

Programación en LabVIEW para Ambientes Multinúcleo Programación en LabVIEW para Ambientes Multinúcleo Agenda Introducción al Multithreading en LabVIEW Técnicas de Programación en Paralelo Consideraciones de Tiempo Real Recursos Evolución de la Instrumentación

Más detalles

COMPUTADORES MULTINUCLEO. Stallings W. Computer Organization and Architecture 8ed

COMPUTADORES MULTINUCLEO. Stallings W. Computer Organization and Architecture 8ed COMPUTADORES MULTINUCLEO Stallings W. Computer Organization and Architecture 8ed Computador multinucleo Un computador multinúcleocombina dos o mas procesadores (llamados núcleos) en una única pieza de

Más detalles

CAPÍTULO 2 PROCESAMIENTO DIGITAL DE IMÁGENES

CAPÍTULO 2 PROCESAMIENTO DIGITAL DE IMÁGENES CAPÍTULO PROCESAMIENTO DIGITAL DE IMÁGENES En este capítulo se presentan de manera breve, una explicación de la visión, las imágenes digitales y como son capturadas por medios electrónicos, el campo encargado

Más detalles

PRÁCTICA 08. GUIDE. Calculadora. Montor Láscares Pedro Antonio Ortiz Rosas Mario

PRÁCTICA 08. GUIDE. Calculadora. Montor Láscares Pedro Antonio Ortiz Rosas Mario PRÁCTICA 08. GUIDE Calculadora Montor Láscares Pedro Antonio Ortiz Rosas Mario Contenido Capítulo 1... 2 Introducción... 2 Capítulo 2... 3 Marco Teórico... 3 2.2 Matlab... 3 2.3 Guide... 3 Capítulo 3...

Más detalles

CAPITULO VI: ADMINISTRACIÓN DEL PROYECTO. 6.1. Estructura Detallada del Trabajo (EDT)

CAPITULO VI: ADMINISTRACIÓN DEL PROYECTO. 6.1. Estructura Detallada del Trabajo (EDT) CAPITULO VI: ADMINISTRACIÓN DEL PROYECTO 6.1. Estructura Detallada del Trabajo (EDT) Un EDT es la agrupación orientada a entregables de los elementos del proyecto que organiza y define el total de los

Más detalles

Procesadores Gráficos: OpenCL para programadores de CUDA

Procesadores Gráficos: OpenCL para programadores de CUDA Procesadores Gráficos: para programadores de CUDA Curso 2011/12 David Miraut david.miraut@urjc.es Universidad Rey Juan Carlos April 24, 2013 Indice Estándar Modelo de de El lenguaje programa de Inicialización

Más detalles

Talleres CLCAR. CUDA para principiantes. Título. Mónica Liliana Hernández Ariza, SC3UIS-CRC NVIDIA Research Center monicalilianahernandez8@gmail.

Talleres CLCAR. CUDA para principiantes. Título. Mónica Liliana Hernández Ariza, SC3UIS-CRC NVIDIA Research Center monicalilianahernandez8@gmail. a CUDA para principiantes Mónica Liliana Hernández Ariza, SC3UIS-CRC NVIDIA Research Center monicalilianahernandez8@gmail.com Tener un primer encuentro práctico con la programación en CUDA para personas

Más detalles

Utilización de la programación paralela en procesadores gráficos para el cálculo científico.

Utilización de la programación paralela en procesadores gráficos para el cálculo científico. Utilización de la programación paralela en procesadores gráficos para el cálculo científico. EMNO 2013 Rolando E. Rodríguez Fernández Medicina Computacional, Instituto de Nefrología. y Facultad de Física,

Más detalles

CAPÍTULO I. INTRODUCCIÓN

CAPÍTULO I. INTRODUCCIÓN CAPÍTULO I. INTRODUCCIÓN 1.1 Estado del arte del monitoreo de redes de computadoras. La palabra monitoreo no tiene una definición exacta, pero en el contexto computacional ha adquirido un auge muy grande,

Más detalles

DISEÑO DE UN ALGORITMO PARALELO PARA CODIFICACIÓN DE VIDEO MPEG4, SOBRE UN CLUSTER DE COMPUTADORAS PERSONALES.

DISEÑO DE UN ALGORITMO PARALELO PARA CODIFICACIÓN DE VIDEO MPEG4, SOBRE UN CLUSTER DE COMPUTADORAS PERSONALES. DISEÑO DE UN ALGORITMO PARALELO PARA CODIFICACIÓN DE VIDEO MPEG4, SOBRE UN CLUSTER DE COMPUTADORAS PERSONALES. Autores: Abelardo Rodríguez L.*, Manuel Pérez M. **, Alberto González T. **, José Hernández

Más detalles

MODULO DE NI-VISION DE LABVIEW GUÍA DE INICIO JONATHAN EDUARDO CRUZ ORTIZ

MODULO DE NI-VISION DE LABVIEW GUÍA DE INICIO JONATHAN EDUARDO CRUZ ORTIZ MODULO DE NI-VISION DE LABVIEW GUÍA DE INICIO JONATHAN EDUARDO CRUZ ORTIZ UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS FACULTAD TECNOLÓGICA TECNOLOGÍA EN ELECTRÓNICA INGENIERÍA EN CONTROL Índice general

Más detalles

Administración de memoria: Funciones y operaciones

Administración de memoria: Funciones y operaciones Administración de memoria: Funciones y operaciones Facultad de Ingeniería, UNAM Instituto de Investigaciones Económicas, UNAM Índice Introducción 1 Introducción 2 3 4 5 El administrador de memoria Es otra

Más detalles

Resumen. 1. Introducción. 2. Objetivos

Resumen. 1. Introducción. 2. Objetivos Propuesta para la Asignatura Sistemas Industriales en las Titulaciones de Informática F.A. Pujol, F.J. Ferrández, J.L. Sánchez, J. M. García Chamizo Dept. de Tecnología Informática y Computación Universidad

Más detalles

COMPARACIÓN DEL RENDIMIENTO COMPUTACIONAL ENTRE DIFERENTES METODOLOGÍAS DE PROCESAMIENTO EN PARALELO PARA FEA VÍA ANSYS 14.5

COMPARACIÓN DEL RENDIMIENTO COMPUTACIONAL ENTRE DIFERENTES METODOLOGÍAS DE PROCESAMIENTO EN PARALELO PARA FEA VÍA ANSYS 14.5 Second International Conference on Advanced Mechatronics, Design, and Manufacturing Technology - AMDM 2014 1 COMPARACIÓN DEL RENDIMIENTO COMPUTACIONAL ENTRE DIFERENTES METODOLOGÍAS DE PROCESAMIENTO EN

Más detalles

Modelado de información de construccióncapítulo1:

Modelado de información de construccióncapítulo1: Capítulo 1 Modelado de información de construccióncapítulo1: Modelado de información de construcción (BIM) es un flujo de trabajo integrado creado en base a información coordinada y confiable acerca de

Más detalles

REGLAMENTO PARA LA OPCIÓN DE GRADO

REGLAMENTO PARA LA OPCIÓN DE GRADO Página 1 de 7 REGLAMENTO PARA LA OPCIÓN DE GRADO El Comité docente del Programa de economía atendiendo la necesidad de reglamentar el proceso administrativo para la ejecución de las opciones de grado como

Más detalles

NVIDIA GeForce Experience

NVIDIA GeForce Experience NVIDIA GeForce Experience DU-05620-001_v02 octubre 7, 2012 Guía del usuario ÍNDICE 1 NVIDIA GeForce Experience Guía del usuario... 1 Acerca de GeForce Experience... 1 Instalación y configuración de GeForce

Más detalles

Juan de Dios Murillo Morera e-mail: jmurillo@una.ac.cr Santiago Caamaño Polini e-mail: scaamano@costarricense.cr INTRODUCCIÓN

Juan de Dios Murillo Morera e-mail: jmurillo@una.ac.cr Santiago Caamaño Polini e-mail: scaamano@costarricense.cr INTRODUCCIÓN UNICIENCIA 24 pp. 83-89 2010 IMPLEMENTACIÓN DE UN SERVIDOR FTP UTILIZANDO EL MODELO CLIENTE/SERVIDOR MEDIANTE EL USO DE SOCKETS EN LENGUAJE C UNIX CON EL FIN DE MEJORAR LOS TIEMPOS DE RESPUESTA EN LA RED

Más detalles

Registro Proyectos 2012 PROTOCOLO DE INVESTIGACIÓN (CR-02/2012) 1. DESCRIPCIÓN DEL PROYECTO

Registro Proyectos 2012 PROTOCOLO DE INVESTIGACIÓN (CR-02/2012) 1. DESCRIPCIÓN DEL PROYECTO PROTOCOLO DE INVESTIGACIÓN (CR-02/2012) Instituto Tecnológico de Morelia Institución Título del proyecto Refactorización de Aplicaciones Web (ReWeb) 1. DESCRIPCIÓN DEL PROYECTO 1.1 Resumen Este proyecto

Más detalles

SOFTWARE PROJECT MANAGEMENT PLAN

SOFTWARE PROJECT MANAGEMENT PLAN SOFTWARE PROJECT MANAGEMENT PLAN HERRAMIENTA PARA LA ADMINISTRACIÓN DE REQUERIMIENTOS DE LOS PROYECTOS DE LAS ASIGNATURAS DE INGENIERÍA Y ARQUITECTURA DE SOFTWARE DE LA PONTIFICIA UNIVERSIDAD JAVERIANA.

Más detalles

Programación Orientada a Objetos Profr. Pedro Pablo Mayorga

Programación Orientada a Objetos Profr. Pedro Pablo Mayorga Actividad 2 Unidad 1 Ciclo de vida del software y Diseño Orientado a Objetos Ciclo de Vida del Software Un modelo de ciclo de vida define el estado de las fases a través de las cuales se mueve un proyecto

Más detalles

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

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

Más detalles

VISIÓN GENERAL HERRAMIENTAS COMERCIALES

VISIÓN GENERAL HERRAMIENTAS COMERCIALES VISIÓN GENERAL El servidor de MS SQL se ha convertido en un estándar en muchas partes de la América corporativa. Puede manejar volúmenes de datos grandes y se integra bien con otros productos de Microsoft.

Más detalles

Reproductor Multimedia Streaming v0.1

Reproductor Multimedia Streaming v0.1 Reproductor Multimedia Streaming v0.1 Joaquín Gutiérrez Gil Universidad Pablo de Olavide Ingeniería Técnica en Informática de Gestión Asignatura Proyecto Introducción El presente documento trata sobre

Más detalles

GPU IMPLEMENTATIONS OF SCHEDULING HEURISTICS FOR HETEROGENEOUS COMPUTING ENVIRONMENTS

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

Más detalles

DISEÑO FLASH DE RECURSOS MULTIMEDIA PARA LA ENSEÑANZA

DISEÑO FLASH DE RECURSOS MULTIMEDIA PARA LA ENSEÑANZA Edición 2005 Guía del alumn@ DISEÑO FLASH DE RECURSOS MULTIMEDIA PARA LA ENSEÑANZA MATERIALES PARA LA FORMACIÓN A DISTANCIA DEL PROFESORADO Autor: Fernando Posada Prieto Guía del alumn@ Contenidos 1. Objetivos

Más detalles

CONFERENCIA REALIDAD AUMENTADA. Ingeniero CARLOS ENRIQUE ORTIZ RANGEL carlos.ortiz@tecnomovilidad.com

CONFERENCIA REALIDAD AUMENTADA. Ingeniero CARLOS ENRIQUE ORTIZ RANGEL carlos.ortiz@tecnomovilidad.com CONFERENCIA REALIDAD AUMENTADA Ingeniero CARLOS ENRIQUE ORTIZ RANGEL carlos.ortiz@tecnomovilidad.com Bogotá, Septiembre 2012 OBJETIVO GENERAL El objetivo es presentar un recorrido actualizado por las diferentes

Más detalles

Computación Científica en Paralelo

Computación Científica en Paralelo Computación Científica en Paralelo Luis Miguel de la Cruz luiggix@gmail.com www.dci.dgsca.unam.mx/lmcs Unidad de Investigación en Cómputo Aplicado DGSCA-UNAM. Posgrado en Ciencia e Ingeniería de la Computación

Más detalles

Supercómputo. Oscar Rafael García Regis Enrique Cruz Martínez

Supercómputo. Oscar Rafael García Regis Enrique Cruz Martínez Supercómputo Oscar Rafael García Regis Enrique Cruz Martínez 2003-I Oscar Rafael García Regis Laboratorio de Dinámica No Lineal Facultad de Ciencias, UNAM Enrique Cruz Martínez Dirección General de Servicios

Más detalles

LAB2. Jerarquía de Memoria. Laboratorio de Arquitectura e Ingeniería de Computadores. Valentin Puente. Revisión 1.1: 02-Marzo-2010

LAB2. Jerarquía de Memoria. Laboratorio de Arquitectura e Ingeniería de Computadores. Valentin Puente. Revisión 1.1: 02-Marzo-2010 Jerarquía de Memoria Laboratorio de Arquitectura e Ingeniería de Computadores Valentin Puente 10 Revisión 1.1: 02-Marzo-2010 1 INTRODUCCIÓN Y OBJETIVOS El objetivo fundamental de esta práctica es poner

Más detalles

UNIVERSIDAD DR. JOSE MATIAS DELGADO

UNIVERSIDAD DR. JOSE MATIAS DELGADO NOMBRE DE LA ASIGNATURA: PROGRAMACION DE COMPUTADORAS 1 a. Generalidades. Duración del Ciclo en Semanas: Número de Orden: 16 Código: PRC1 16 Ciclo Académico: Duración/Hora Clase: 50 III minutos Prerrequisito

Más detalles

Tema 2. Ingeniería del Software I feliu.trias@urjc.es

Tema 2. Ingeniería del Software I feliu.trias@urjc.es Tema 2 Ciclo de vida del software Ingeniería del Software I feliu.trias@urjc.es Índice Qué es el ciclo de vida del Software? El Estándar 12207 Modelos de proceso Qué es el Ciclo de Vida del SW? Definición

Más detalles

Polivirtual: modelo de producción para recursos

Polivirtual: modelo de producción para recursos Experiencias de bachillerato a distancia Polivirtual: modelo de producción para recursos didácticos digitales de apoyo al bachillerato a distancia Polivirtual: a production model for digital teaching resources

Más detalles

Brindar al alumno un marco teórico y práctico para el desarrollo de software bajo estándares de calidad.

Brindar al alumno un marco teórico y práctico para el desarrollo de software bajo estándares de calidad. Universidad Católica San Pablo Facultad de Ingeniería y Computación Programa Profesional de Ciencia de la Computación SILABO CS290T. Ingeniería de Software I (Obligatorio) 2012-2 1. DATOS GENERALES 1.1

Más detalles

Programación orientada a

Programación orientada a Programación orientada a objetos con Java Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es Objetivos Presentar los conceptos de la programación

Más detalles

O3 Requerimientos de Software y Hardware

O3 Requerimientos de Software y Hardware IdeaSoft Uruguay S.R.L. Phone: +598 (2) 710 4372 21 de Setiembre 2570 Fax: +598 (2) 710 4965 Montevideo http://www.ideasoft.com.uy Uruguay O3 Requerimientos de Software y Hardware Uso de memoria, espacio

Más detalles

Palabras Clave: Vídeo en FPGA, Procesamiento en Tiempo Real RESUMEN

Palabras Clave: Vídeo en FPGA, Procesamiento en Tiempo Real RESUMEN Procesamiento de Vídeo en Tiempo Real Utilizando FPGA J. G. Velásquez-Aguilar, A. Zamudio-Lara Centro de Investigación en Ingeniería y Ciencias Aplicadas, Universidad Autónoma del Estado de Morelos, Cuernavaca,

Más detalles

Fundamentos de Computación e Informática Algoritmos Profesor : Fernando Espinoza S.

Fundamentos de Computación e Informática Algoritmos Profesor : Fernando Espinoza S. Fundamentos de Computación e Informática Algoritmos Profesor : Fernando Espinoza S. Objetivos Principales del Curso Comprender los sistemas computacionales modernos. Desarrollar la lógica de programación

Más detalles

Programación Orientada a Objetos: Clases versus Prototipos 1

Programación Orientada a Objetos: Clases versus Prototipos 1 Programación Orientada a Objetos: Clases versus Prototipos 1 Pedro Cuesta Morales (pcuesta@uvigo.es) Departamento de Lenguajes y Sistemas Informáticos Universidad de Vigo Resumen: En este artículo se introducen

Más detalles

Bloque IV. Prácticas de programación en CUDA. David Miraut Marcos García Ricardo Suárez

Bloque IV. Prácticas de programación en CUDA. David Miraut Marcos García Ricardo Suárez Bloque IV Prácticas de programación en CUDA David Miraut Marcos García Ricardo Suárez Control de flujo Situaciones no tratadas Claves con tamaños diferentes. Cada Wrap debería acceder a claves del mismo

Más detalles

BIG DATA. Jorge Mercado. Software Quality Engineer

BIG DATA. Jorge Mercado. Software Quality Engineer BIG DATA Jorge Mercado Software Quality Engineer Agenda Big Data - Introducción Big Data - Estructura Big Data - Soluciones Conclusiones Q&A Big Data - Introducción Que es Big Data? Big data es el termino

Más detalles

"Módulo OOWS para StarUML" INTRODUCCIÓN

Módulo OOWS para StarUML INTRODUCCIÓN UNA HERRAMIENTA PARA DIAGRAMAS OOWS: "Módulo OOWS para StarUML" Richard Medina Z. Universidad de Concepción, Chile INTRODUCCIÓN Una herramienta CASE (Computer Aided Software Engineering,

Más detalles

Ingeniería de Software

Ingeniería de Software Ingeniería de Software Agustín J. González ElO329: Diseño y Programación Orientados a Objeto Adaptado de: http://www.dsic.upv.es/~uml http://inst.eecs.berkeley.edu/~cs169/ entre otras fuentes. Definiciones

Más detalles

Guía de Usuario Programador USB

Guía de Usuario Programador USB Guía de Usuario Programador USB Tecnología Digital del Bajío Av. Vicente Guerrero 1003, Int. A Irapuato, Gto. Mex. C.P. 36690 Teléfono: (462) 145 35 22 www.tecdigitaldelbajio.com i Guía de Usuario, Programador

Más detalles

CICLO SUPERIOR DESARROLLO DE APLICACIONES MULTIPLATAFORMA

CICLO SUPERIOR DESARROLLO DE APLICACIONES MULTIPLATAFORMA CICLO SUPERIOR DESARROLLO DE APLICACIONES MULTIPLATAFORMA PROGRAMACIÓN DIDACTICA ANUAL Parte específica del módulo: 0485. Programación Departamento de Familia Profesional de Informática Curso: 2014-15

Más detalles

IVista: es la interfaz con la que el Presentador se comunica con la vista.

IVista: es la interfaz con la que el Presentador se comunica con la vista. Capítulo 3 MODELO DE DISEÑO 3.1 Arquitectura Modelo-Vista-Presentador La arquitectura Modelo-Vista-Presentador (MVP) [11] separa el modelo, la presentación y las acciones basadas en la interacción con

Más detalles

Arquitectura Von Neumann

Arquitectura Von Neumann Arquitectura Von Neumann Arquitectura Von Neumann Establecida en 1945 por Von Neumann Modelo básico de arquitectura utilizado en la mayoría de los computadores Su idea es la de conectar permanentemente

Más detalles

Comparación de Dos Sistemas Distribuidos: Amoeba y Sprite

Comparación de Dos Sistemas Distribuidos: Amoeba y Sprite Comparación de Dos Sistemas Distribuidos: Amoeba y Sprite Hillary Caituiro Monge Departamento de Ingeniería Eléctrica y Computadoras hillarycm@hotmail.com Resumen En este ensayo se comparan Dos Sistemas

Más detalles

Proceso Unificado de Rational PROCESO UNIFICADO DE RATIONAL (RUP) El proceso de desarrollo de software tiene cuatro roles importantes:

Proceso Unificado de Rational PROCESO UNIFICADO DE RATIONAL (RUP) El proceso de desarrollo de software tiene cuatro roles importantes: PROCESO UNIFICADO DE RATIONAL (RUP) El proceso de desarrollo de software tiene cuatro roles importantes: 1. Proporcionar una guía de actividades para el trabajo en equipo. (Guía detallada para el desarrollo

Más detalles

CAPÍTULO 1 INTRODUCCIÓN, HIPÓTESIS Y OBJETIVOS

CAPÍTULO 1 INTRODUCCIÓN, HIPÓTESIS Y OBJETIVOS CAPÍTULO 1 INTRODUCCIÓN, HIPÓTESIS Y OBJETIVOS 1 INTRODUCCIÓN 1.1 Justificación Esta investigación está motivada por el interés en lograr una mejor comprensión del papel que desempeña la creatividad dentro

Más detalles

FUNDAMENTOS, ESTRUCTURA Y PROGRAMACIÓN DE LOS PROCESADORES DIGITALES DE SEÑAL. FAMILIA TMS320C3X DE TEXAS INSTRUMENTS.

FUNDAMENTOS, ESTRUCTURA Y PROGRAMACIÓN DE LOS PROCESADORES DIGITALES DE SEÑAL. FAMILIA TMS320C3X DE TEXAS INSTRUMENTS. FUNDAMENTOS, ESTRUCTURA Y PROGRAMACIÓN DE LOS PROCESADORES DIGITALES DE SEÑAL. FAMILIA TMS320C3X DE TEXAS INSTRUMENTS. Sergio Gallardo, Javier Lillo, Sergio Toral, Federico Barrero Universidad de Sevilla.

Más detalles

1.- DATOS DE LA ASIGNATURA Nombre de la asignatura : Infraestructura Computacional. Carrera : Clave de la asignatura : AVD-1217 SATCA 1 2-3-5

1.- DATOS DE LA ASIGNATURA Nombre de la asignatura : Infraestructura Computacional. Carrera : Clave de la asignatura : AVD-1217 SATCA 1 2-3-5 1.- DATOS DE LA ASIGNATURA Nombre de la asignatura : Infraestructura Computacional Carrera : Clave de la asignatura : AVD-1217 SATCA 1 2-3-5 Ingeniería en Animación Digital y Efectos Visuales 2.- PRESENTACIÓN

Más detalles

Evolución histórica 60 -. Metodologías

Evolución histórica 60 -. Metodologías TEMA 1 INTRODUCCIÓN Historia Evolución de las técnicas de programación Qué es orientado a objetos? Factores cruciales que miden la calidad del software Externos Internos La familia Orientada a objetos

Más detalles

Apéndice A Herramientas utilizadas

Apéndice A Herramientas utilizadas Apéndice A Herramientas utilizadas A.1 Java Media Framework El Java Media Framework (JMF) es una interfaz para el desarrollo de aplicaciones (API) e incorpora el manejo de audio y video en el lenguaje

Más detalles

LABORATORIO 3. CONFIGURACIÓN DE SISTEMAS MANEJADORES DE BASE DE DATOS - POSTGRE SQL

LABORATORIO 3. CONFIGURACIÓN DE SISTEMAS MANEJADORES DE BASE DE DATOS - POSTGRE SQL LABORATORIO 3. CONFIGURACIÓN DE SISTEMAS MANEJADORES DE BASE DE DATOS - POSTGRE SQL GUÍA DE LABORATORIO Nº 3 Actividad de Proyecto No. 2: CONFIGURAR SISTEMAS MANEJADORES DE BASE DE DATOS. CONFIGURACIÓN

Más detalles

PERFIL DEL INGENIERO DE SISTEMAS FUSM

PERFIL DEL INGENIERO DE SISTEMAS FUSM PERFIL DEL INGENIERO DE SISTEMAS FUSM PERFIL DEL INGENIERO DE SISTEMAS DE LA FUSM El perfil del Ingeniero de Sistemas presencial de la Fundación Universitaria San Martín, Bogotá, está en capacidad de modelar

Más detalles