Reconstrucción 3d a partir de proyecciones en entornos multihebrados

  1. ÁLVAREZ BERMEJO, JOSÉ ANTONIO
Dirigida por:
  1. Javier Roca Piera Director/a
  2. José Jesús Fernández Rodríguez Codirector/a

Universidad de defensa: Universidad de Almería

Fecha de defensa: 16 de diciembre de 2010

Tribunal:
  1. María Inmaculada García Fernández Presidente/a
  2. Leocadio González Casado Secretario/a
  3. Antonio Plaza Vocal
  4. José Ignacio Benavides Benítez Vocal
  5. Manuel Prieto Matías Vocal

Tipo: Tesis

Teseo: 306684 DIALNET

Resumen

La computación científica ha alcanzado en los últimos años, con la aparición de la plataforma multicore, una complejidad y una sofisticación sin precedentes, todo esto debido al aumento de capacidad computacional aparentemente ilimitada. Tanto la complejidad de los algoritmos como la amplia configuración de entornos hardware y la cada vez más creciente demanda de software modular, portable y tolerante a fallos han provocado el desarrollo de líneas de trabajo basadas en incluir abstracciones en los lenguajes de alto nivel (e incluso en capas de bajo nivel donde es más difícil pensar en abstracciones [1]), procurando que esto no suponga una penalización para el rendimiento [2]. Habitualmente, la aplicación que se llevará a una arquitectura paralela pertenece a un campo científico ajeno en gran parte al programador encargado de realizar el traslado de ese modelo computacional a una máquina paralela. La descomposición de datos y de computación que se lleve a cabo puede afectar de manera muy negativa al rendimiento de la aplicación si no se realiza de manera adecuada (un ejemplo particular de esto puede verse en [3] donde los autores mejoran el rendimiento de la aplicación reestructurando la forma en que se reparten los datos). Incluso el propio modelo computacional escogido e implementado puede no ser el acertado y además dar lugar a una aplicación poco eficiente, puede lastrar su posterior paralelización. Es común que sea un grupo científico el que explique con un algoritmo cómo ha de funcionar la aplicación (por ejemplo, a partir del modelo matemático expresado en LaTeX [4]). El traslado del algoritmo a un modelo computacional suele ser realizado, en muchas ocasiones, por el mismo grupo de trabajo (científicos no especialistas en computación), usando frecuentemente lenguajes poco apropiados [5]. Cada vez se constata con mayor profundidad la necesidad de construir equipos multidisciplinares en los cuales se trabaje de forma conjunta para trasladar el problema científico a la solución computacional aplicada a una determinada arquitectura. El modelo computacional creado, en este último caso, está en manos del programador y en cómo ha conseguido comprender los detalles del algoritmo y del fenómeno a simular. La creación de estructuras de datos [6] así como la disciplina en el desarrollo pueden ser factores determinantes en la utilidad de la aplicación. La aplicación posteriormente será portada a una arquitectura paralela (o a varias) teniendo que elaborar diferentes estrategias en función de la arquitectura en la que se realizará el despliegue de la aplicación. Y en la mayoría de los casos se hace preciso, incluso, la reescritura del primer modelo computacional para replantear su ejecución en una arquitectura paralela determinada. A la par que entramos en la era multicore y en la etapa de los petaflops, estamos experimentando un crecimiento sin precedentes en el uso de aceleradores computacionales, arquitecturas heterogéneas, unidades gráficas de procesamiento (GPU), las GPU de propósito general [3], aceleradores de operaciones con puntos flotantes (Clearspeed), arquitecturas especiales como la Cell, de IBM, entre otros muchos [7]. La programación para la mayoría de estas plataformas se realiza a bajo nivel (bare-metal programming) y precisa de mucho trabajo e investigación para conseguir desarrollos eficientes. A todo esto hay que sumar que las arquitecturas paralelas han experimentado un punto de inflexión relevante que ha hecho que la comunidad de desarrolladores se replantee los modelos de trabajo para poder incluir, ahora, de manera explícita el paralelismo y la concurrencia (y cómo hacerlos trabajar juntos) en las nuevas arquitecturas multicore. El propósito de las abstracciones que se emplean en este trabajo es el de reducir el esfuerzo para poder llevar una aplicación científica a cualquier plataforma con un coste mínimo sin perjudicar el rendimiento, comprobando en qué situaciones éste incluso se mejora.