70
EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Embed Size (px)

Citation preview

Page 1: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE

IMÁGENES

Page 2: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

1.INTRODUCCIÓN

2.ESTADO DE LA TÉCNICA

3.PROCESAMIENTO DISTRIBUIDO CON MPI

4.PROCESAMIETNO DISTRIBUIDO DE IMÁGENES GENÉRICO CON VTK

5.PROCESAMIENTO DISTRIBUIDO DE IMÁGENES GENÉRICO CON MATLAB

6.PROCESAMIENTO DISTRIBUIDO DE IMÁGENES GENÉRICO CON PARAVIEW

7.RENDERIZACIÓN DE UNA NEURONA

8.PROCESAMIENTO DISTRIBUIDO CON C++

9.CONCLUSIONES Y LÍNEAS DE MEJORA

Page 3: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CAPÍTULO 1: INTRODUCCIÓN

Page 4: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

OBJETIVOS QUE PERSIGUE EL PROYECTO

1. Dar una visión más en profundidad de lo que entendemos por procesamiento distribuido: el conocimiento y manejo de las implementaciones existentes a la hora de realizar este procesamiento distribuido, como pueden ser MPI y MatlabMPI

2. La aplicación de estas diversas técnicas de procesamiento distribuido al tratamiento y procesado de imágenes

3. Dar una introducción a las implementaciones existentes para desarrollar el procesamiento distribuido en otros lenguajes, como es el lenguaje C++: PVM y CORBA.

Page 5: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CAPÍTULO 2: ESTADO DE LA TÉCNICA

Page 6: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

¿QUÉ ES UN SISTEMA DISTRIBUIDO?

Un sistema distribuido es un conjunto de computadoras conectadas en red de forma que le da la sensación al usuario de ser una sola computadora. Los sistemas de procesamiento distribuidos brindan una buena relación precio-desempeño y pueden aumentar su tamaño de manera gradual al aumentar la carga de trabajo.

VENTAJAS DESVENTAJAS

ECONOMÍA COMPLEJIDAD DE

VELOCIDAD IMPLEMENTACIÓN

ALTA DISPONIBILIDAD

ESCALABILIDAD

SISTEMA DE FICHEROS DE RAÍZ ÚNICA

COMUNICACIÓN ENTRE PROCESOS

INTERCAMBIO DE DATOS UNIVERSAL

Page 7: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

LOS CLUSTERS

De forma genérica, podemos definir un cluster como un conjunto de máquinas unidas por una red de comunicación trabajando por un objetivo conjunto. Según el tipo puede ser dar alta disponibilidad, alto rendimiento etc...

Podemos resumir las características de un cluster en las siguientes:

1. Un cluster consta de 2 o más nodos. Los nodos necesitan estar conectados para llevar a cabo su misión.

2. Los nodos de un cluster están conectados entre sí por un canal de comunicación funcional.

3. Los clusters necesitan software especializado. Existen varios tipos de software que pueden conformar un cluster: software a nivel de aplicación y software a nivel de sistema.

4. Acoplamiento del software: entendemos por acoplamiento del software a la integración que tengan todos los elementos software que existan en cada nodo: acoplamiento fuerte, acoplamiento medio y acoplamiento débil.

Page 8: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Podemos catalogar los clusters según una serie de consideraciones:

1. Acoplamiento: fuerte, medio, débil

2. Control: centralizado o descentralizado

3. Homogeneidad: homogéneos o heterogéneos

4. Seguridad

Cluster a nivel de sistema y a nivel de aplicación

Page 9: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Según lo visto anteriormente, podemos catalogar los clusters en tres tipos diferentes:

• CLUSTERS DE ALTO RENDIMIENTO (HP): Los clusters de alto rendimiento han sido creados para compartir el recurso más valioso de un ordenador, es decir, el tiempo de proceso. La misión de este tipo de clusters es mejorar el rendimiento en la obtención de la solución de un problema.

• CLUSTERS DE ALTA DISPONIBILIDAD (HA): Los clusters de alta disponibilidad han sido diseñados para que proporcionen la máxima disponibilidad sobre los servicios que presenta el cluster. La mayoría de los problemas que tratan de resolver este tipo de clusters están ligados a la necesidad de dar servicio continuado de cualquier tipo a una serie de clientes de manera ininterrumpida.

• CLUSTERS DE ALTA CONFIABILIDAD (HR): Estos clusters tratan de aportar la máxima confiabilidad en un entorno en el cual se necesite saber que el sistema se va a comportar de una manera determinada.

Page 10: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CAPÍTULO 3: PROCESAMIENTO DISTRIBUIDO CON MPI

Page 11: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

MPI

MPI (Message Passing Interface) es un interfaz estandarizado para la implementación de aplicaciones paralelas basadas en paso de mensajes

OBJETIVOS DE MPI

1. Entorno de programación único para asegurar la portabilidad de las aplicaciones paralelas.

2. Definir el interfaz de programación sin especificar cómo debe ser la implementación del mismo.

3. Favorecer la extensión del estándar.

Page 12: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

LIMITACIONES DE MPI

1. No existe un mecanismo estandarizado de entrada/salida paralela.

2. MPI asume un número de procesos constante, que es establecido al arrancar la aplicación.

3. El modelo de comunicación estandarizado por MPI sólo tiene en cuenta el paso de mensajes.

4. Desarrollo de bindings para otros lenguajes: C++ y ADA.

5. Soporte para las aplicaciones de tiempo real.

6. No se define ningún aspecto relacionado con la interacción mediante GUIs con una aplicación paralela.

Page 13: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

ubicación de MPI en el proceso de programación de aplicaciones paralelas

Page 14: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

ESTRÚCTURA BÁSICA DE LOS PROGRAMAS MPI

# include "mpi.h"main (int argc, char **argv) { int nproc; /* Número de procesos */ int yo; /* Mi dirección: 0<=yo<= (nproc-1) */ MPI_Init (&argc, &argv); /* Inicio aplicación paralela */ MPI_Comm_size (MPI_COMM_WORLD, &nproc); MPI_Comm_rank (MPI_COMM_WORLD, &yo);

/* CUERPO DEL PROGRAMA */

MPI_Finalize ();}

para averiguar el número de procesos que toman parte en la aplicación en cuestión

para que cada proceso averigüe su dirección (identificador) dentro del conjunto de diferentes procesos que componen la aplicación

para dar por finalizada la aplicación

Page 15: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

COMUNICACIÓN A TRAVÉS DE MPI: COMUNICACIÓN PUNTO A PUNTO

1. BÁSICO (BASIC): dependiente de la implementación

2. CON BUFFER (BUFFERED): una copia del mensaje que se envía se guarda en el buffer

3. SÍNCRONO (SYNCHRONOUS): la operación se da por terminada cuando el mensaje es recibido en el destino

4. LISTO (READY): sólo se puede realizar si antes el receptor está preparado

MODELOS DE COMUNICACIÓN

1. Modelo de comunicación bloqueante (blocking)

2. Modelo de comunicación no bloqueante (non-blocking)

MODELOS DE ENVÍO EN MPI

Page 16: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

OPERACIONES COLECTIVAS CON MPI

1. BARRERAS DE SINCRONIZACIÓN: (MPI_Barrier ())

2. BROADCAST (DIFUSIÓN): (MPI_Broadcast ())

Page 17: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

3. GATHER (RECOLECCIÓN): (MPI_Gather ())

4. SCATTER (DISTRIBUCIÓN): (MPI_Scatter ())

6. COMUNICACIÓN CON TODOS LOS NODOS: (MPI_Alltoall ())

5. REDUCCIÓN

Page 18: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

MODULARIDAD

MPI permite definir grupos de procesos. Un grupo de procesos es una colección de procesos, y define un espacio de direcciones (desde 0 hasta el tamaño del grupo menos 1).

Un comunicador consiste en un grupo de procesos, y un contexto de comunicación.

Entre las funciones más comunes sobre comunicadores podemos encontrar las siguientes:

• MPI_Comm_size ()

• MPI_Comm_rank ()

• MPI_Comm_dup ()

• MPI_Comm_free ()

• MPI_Comm_split ()

Page 19: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CAPÍTULO 4: PROCESAMIENTO DISTRIBUIDO DE IMÁGENES

GENÉRICO CON VTK

Page 20: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

VTK

VTK (Visualization ToolKit) son un conjunto de librerías que se utilizan para la visualización y el procesamiento de imágenes y objetos gráficos 2D y 3D. Constan de código abierto y software orientado a objetos

ARQUITECTURA BÁSICA DE VTK

VTK consta de dos partes fundamentales:

• Un núcleo compilado (implementado en C++): Las estructuras de datos, los algoritmos y las funciones de sistema de tiempo crítico están implementadas en el núcleo de C++

• Una capa de interpretación generada automáticamente: Mientras el núcleo nos proporciona velocidad y eficiencia, la capa de interpretación nos ofrece flexibilidad y extensibilidad

Page 21: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

SUBSISTEMAS DE VTK

VTK está constituido por dos grandes subsistemas: Graphics Model y Visualization Model

GRAPHICS MODEL

• vtkActor, vtkActor2D, vtkVolume

• vtkLight

• vtkCamera

• vtkProperty, vtkProperty2D

• vtkMapper, vtkMapper2D

• vtkTransform

• vtkLookupTable, vtkColorTransferFunction

• vtkRenderer

• vtkRenderWindow

• vtkRenderWindowInteractor

El graphics model forma una capa abstracta por encima del lenguaje de los gráficos (por ejemplo, OpenGL) para asegurar la portabilidad entre las diferentes plataformas. Los conceptos de gráficos abstractos y capas independientes de los dispositivos crearon el modelo gráfico.

Los objetos principales que componen el Graphics Model son:

Page 22: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

VISUALIZATION MODEL:

El pipeline de procesamiento de datos de VTK transforma los datos de forma que puedan ser visualizados en los subsistemas gráficos descritos con anterioridad.

El modelo Visualization Model es el encargado de construir la representación geométrica que será renderizada por el pipeline gráfico. Los objetos principales que componen el Visualization Model son los siguientes:

vtkDataObject: Los “data objects” representan datos de varios tipos. La clase vtkDataObject puede interpretarse como un conjunto genérico de datos. A los datos que tienen una estructura formal se les llama “dataset” (de la clase vtkDataSet).

vtkProcessObject: Los “process objects”, también llamados filtros, operan en los data objects para generar nuevos data objects. Representan los algoritmos del sistema. Process y data objects se conectan para formar los pipelines de visualización.

Page 23: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Objetos dataset en VTK

Page 24: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

PROCESAMIENTO DE LAS IMÁGENES CON VTK

VTK tiene un extenso número de métodos para el procesamiento de imágenes y renderización de volúmenes. Los datos de imágenes 2D y 3D vienen dados por la clase vtkImageData. En un dataset de imagen los datos son ordenados en un vector regular alineado con los ejes. Mapas de bits y mapas de píxeles son ejemplos de datasets de imágenes 2D, y volúmenes (pilas de imágenes 2D) lo son de datasets de imágenes 3D.

Los process objects en un pipeline de imagen siempre tienen como entradas y salidas data objects de imagen. Debido a la naturaleza regular y simple de los datos, el pipeline de imagen tiene otros rasgos importantes. La renderización de volumen se usa para visualizar objetos 3D de la clase vtkImageData, y visores especiales de imágenes se usan para ver objetos 2D.

Los filtros detectan de forma automática el número disponible de procesos en el sistema y crean el mismo número de uniones durante la ejecución; igualmente separan automáticamente los datos en partes que fluyen a través del pipeline.

Page 25: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CREACIÓN DE UNA APLICACIÓN GRÁFICA CON VTK

Los pasos a seguir para crear una aplicación gráfica con VTK son:

1. Construcción de un pipeline de datos para procesar los datos: es decir, conectar fuentes (crear datos), filtros (procesar datos) y mappers (transformar datos en gráficos).

2. Creamos los objetos gráficos necesarios para poder interpretar estos datos. Los pasos para crear estos objetos gráficos son:

• Crear una ventana de renderización

• Crear un render

• Crear un interactor

• Crear uno o más actores

• Renderizar

Page 26: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

UTILIZACIÓN DE VTK CON MPI

VTK dispone de una serie de clases preparadas para su aplicación en el procesamiento en paralelo. Estas clases hacen uso de la librería MPI. Entre las más destacadas se encuentran las siguientes:

vtkMPIController vtkMPIEventLog

vtkMPICommunicator vtkMultiProcessController

vtkMPIGroup

El uso de comunicadores definidos por el usuario se realiza a través de vtkMPICommunicator y vtkMPIGroup. Las funciones que más se utilizan de esta clase son las siguientes:

Inicialize (int *argc, char ***argv) GetNumberOfProcesses () GetLocalProcessId () Finalize ()

Page 27: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Un ejemplo de la visualización lograda a través del empleo de VTK

Page 28: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CAPÍTULO 5: PROCESAMIENTO DISTRIBUIDO DE IMÁGENES

GENÉRICO CON MATLAB

Page 29: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

MATLAB es el lenguaje de programación predominante y más extendido para la implementación de cómputos numéricos, desarrollo e implementación de algoritmos, simulación, reducción de datos, comprobación y evaluación de sistemas.

MATLAB MPI es una implementación para MATLAB de MPI que permite que cualquier programa creado bajo MATLAB pueda ser ejecutado en múltiples procesadores. Consiste en un conjunto de instrucciones de MATLAB que implementan un subconjunto de MPI, permitiendo que cualquier programa de MATLAB pueda ser ejecutado en una computadora paralela.

MATLAB MPI

Page 30: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CARÁCTERÍSTICAS DE MATLAB MPI

• Implementación extremadamente compacta (aproximadamente 100 líneas de código).

• Implementación muy pura.

• La implementación funcionará en cualquier punto en donde MATLAB también funcione.

• MATLAB MPI puede igualar el ancho de banda de comunicación del lenguaje C basado en MPI en el envío de mensajes de gran tamaño.

REQUISITOS DEL SISTEMA

• Sistemas de memoria compartida: una única licencia de MATLAB

• Sistemas de memoria distribuida: una licencia de MATLAB por máquina

Page 31: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

PROGRAMA EJEMPLO DE INTERCAMBIO DE MENSAJES A TRAVÉS DE MATLABMPI

MPI_Init; % Inicia MPI. comm = MPI_COMM_WORLD; % Crea el comunicador comm_size = MPI_Comm_size(comm); % Nº procesadores my_rank = MPI_Comm_rank(comm); % Rango procesador source = 0; % Identifica la fuente dest = 1; % Identifica el destino tag = 1; % Etiqueta del mensaje if(comm_size == 2) % Check nº procesadores if (my_rank == source) % Si source data = 1:10; % Crea dato a enviar MPI_Send(dest,tag,comm,data); % Envía dato end if (my_rank == dest) % Si destino. data=MPI_Recv(source,tag,comm); % Recive dato end endMPI_Finalize; % Finaliza MatlabMPI.exit; % Sale de Matlab

Page 32: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

ANCHO DE BANDA Y RESULTADO DE LAS PRUEBAS REALIZADAS

Ancho de banda. Ancho de banda en función del tamaño del mensaje probado en el SGI ORIGIN 2000. MATLAB MPI iguala la implementación en lenguaje C en

mensajes de gran tamaño.

Page 33: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Ancho de banda en un cluster de LINUX.

velocidad de la memoria paralela

compartida

velocidad paralela

compartida/distribui

da

Page 34: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Productividad vs rendimiento. Las línea de código como función del máximo rendimiento alcanzado (medido en unidades de

pico de procesador) para diferentes implementaciones para la misma aplicación de filtrado de imagen

Page 35: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Futura arquitectura en forma de capas: diseño de unas herramientas paralelas de Matlab las cuales crearán una estructura de datos

distribuida y objetos dataflow construidos en la cima de MatlabMPI

Page 36: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CAPÍTULO 6: PROCESAMIENTO DISTRIBUIDO DE IMÁGENES GENÉRICO CON PARAVIEW

Page 37: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

PARAVIEW

ParaView es una aplicación que se utiliza para visualizar datos en 2D o 3D. Puede ser utilizada en un solo puesto de trabajo o también en un cluster de ordenadores, lo que permite a ParaView ejecutar grandes cadenas de datos mediante la utilización de procesamiento distribuido.

CARACTERÍSTICAS GENERALES DE PARAVIEW

1. Es una aplicación de visualización multiplataforma de libre distribución.

2. Soporta procesamiento distribuido para procesar grandes cantidades de datos.

3. Dispone de una flexible e intuitiva interfaz de usuario.

4. Desarrolla una extensible arquitectura basada en estándares abiertos.

Page 38: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

OBJETIVO DE PARAVIEW

El objetivo de ParaView es desarrollar una herramienta paralela escalable que realice procesamiento distribuido de memoria

FICHEROS SOPORTADOS POR PARAVIEW

ParaView Files, VTK Files

• Parallel VTK files

• Legacy VTK Files

• Parallel legacy VTK

• EnSight Files

•PLOT3D Files

•Stereo Lithography

• BYU Files

• POP Ocean Files

• Protein Data Bank Files

• Xmol Files

• XDMF Files

Page 39: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

TIPOS DE DATOS ADMITIDOS POR PARAVIEW

Page 40: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

COMANDOS DE PARAVIEW

Distinguiremos cuatro categorías:

General Paralelo

start-empty, -e use-rendering-group, -p disable-registry, -dr group-file, -gf play-demo, -pd use-tiled-display, -td batch, -b tile-dimensions-x, -tdx Stereo tile-dimensions-y, -tdy use-offscreen-rendering, -os render-module help

Client/Server Mesa

client, -c use-software-rendering, -r server, -v use-satellite-software, -s host

Page 41: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

PARAVIEW CON MPI

Para lanzar ParaView en paralelo con MPI hay que realizarlo de igual modo que cualquier otra aplicación MPI, es decir, en la línea de comandos habrá que poner algo como:

C:\temp\mpirun –np 4 –localroot C:\ParaView\bin\debug\ParaView

Una vez realizado lo anterior se abrirá la pantalla de ParaView (solo en el nodo raíz) y podremos realizar las operaciones que queramos interactuando con los menús.

Page 42: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CAPÍTULO 7: RENDERIZACIÓN DE UNA NEURONA

Page 43: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Denominamos Renderización al proceso mediante el cual una estructura poligonal (tridimensional) digital más o menos básica obtiene una definición mucho mayor con juegos de luces, texturas y acentuado y mejorado de los polígonos, simulando ambientes y estructuras físicas.

Algunos métodos de Render son:

• Wireframe: es un algoritmo de renderización del que resulta una imagen semitransparente.

• Sólido: es un algoritmo de renderización algo más complejo que el Wireframe.

• Sombreado Goraud: interpola los valores de iluminación en los vértices del polígono teniendo en cuenta la superficie curva mediante la malla.

• Sombreado Phong: se caracteriza por crear precisos brillos especulares. A cada píxel se le da un color basado en el modelo de iluminación aplicado al punto.

• Radiosidad: En este algoritmo calculamos las interacciones entre la luz y el color de los objetos más o menos próximos.

RENDERIZACIÓN

Page 44: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

PARALELISMO EN EL PROCESO DE RENDERIZACIÓN

Existen diferentes tipos de paralelismo aplicables al proceso de renderización; entre ellos destacan por su importancia:

1. El paralelismo Funcional: Consiste en dividir el proceso de renderización en una serie de etapas que pueden aplicarse de forma sucesiva a un conjunto de datos.

2. El paralelismo de Datos: En lugar de aplicarse una secuencia de operaciones consecutivas a un único flujo de datos, existe la posibilidad de dividir los datos en múltiples flujos y operar con ellos en unidades de procesamiento independientes.

3. El paralelismo Temporal: En este caso el paralelismo puede obtenerse de forma casi inmediata dividiendo el número de imágenes entre los procesadores disponibles, de modo que la unidad de trabajo sea una imagen completa.

4. Métodos híbridos: Es posible integrar varias formas de paralelismo en un mismo sistema.

Page 45: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CONCEPTOS ALGORÍTMICOS

La mayor parte de algoritmos paralelos introducen una serie de sobrecargas que no están presentes en sus equivalentes secuenciales. Las causas de dichas sobrecargas pueden ser las siguientes:

• Comunicación entre procesos

• Desvíos en el balanceo de la carga

• Computación redundante

• Mayor espacio de almacenamiento requerido, debido a estructuras de datos replicadas o auxiliares.

Page 46: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Partimos del código fuente AbrirPic.m. A través de este script lo que hacemos es abrir la imagen de una neurona segmentada en 76 rodajas (slices), con el nombre NUEVO1.PIC. A continuación reducimos las dimensiones de la imagen original (512 x 512 x 3), para reducir el tiempo computacional (128 x 128x 3).

RENDERIZACIÓN DE UNA NEURONA

A continuación dividimos la imagen abierta en tres subimágenes distintas para llevar a cabo la renderización por separado de cada una de las subimágenes.

Una vez realizada la segmentación seleccionamos el algoritmo de filtrado a utilizar (Average, Disk, Gaussian, Motion, Prewitt, Sobel, Unsharp).

Después realizamos la visualización conjunta de la imagen y subimágenes originales y de la imagen y subimágenes filtradas.

A continuación realizamos la reconstrucción 3D de la imagen filtrada y de las subimágenes.

Page 47: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES
Page 48: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

reconstrucción 3D de la imagen

Page 49: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CAPÍTULO 8: PROCESAMIENTO DISTRIBUIDO CON C++

Page 50: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

INTRODUCCIÓN A C++

El lenguaje C++ proviene del lenguaje C. El lenguaje C nació en los laboratorios Bell de AT&T en los años 70. Su eficiencia y claridad, y la posibilidad de realizar tanto acciones de bajo como de alto nivel han hecho de este lenguaje el principal tanto en el mundo del desarrollo de sistemas operativos como de aplicaciones tanto industriales como de ofimática.

Dentro de esta estandarización se incluye un conjunto de clases, algoritmos y plantillas que constituyen la librería estandar de C++.

Esta librería introduce facilidades para manejar las entradas y salidas del programa, para la gestión de listas, pilas, colas, vectores, para tareas de búsqueda y ordenación de elementos, para el manejo de operaciones matemáticas complejas, gestión de cadenas de caracteres, tipos de datos genéricos, etc. A este conjunto de algoritmos, contenedores y plantillas, se los denomina habitualmente por las siglas STL (Standard Template Library).

Page 51: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

ESTÁNDARES PARA LA PROGRAMACIÓN PARALELA EN C++

El lenguaje C++ no incluye ninguna primitiva para poder realizar la implementación de aplicaciones paralelas. No existe ninguna manera a través del lenguaje C++ para especificar que dos o más instrucciones deberían ser ejecutadas de forma paralela.

Para poder llevar a cabo la implementación de capacidades paralelas en C++, debemos recurrir a estándares externos que suplen esta función. Los tres estándares que vamos a estudiar van a ser:

• El estándar MPI

• El estándar PVM

• El estándar CORBA

Page 52: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

EL ESTÁNDAR MPI

MPI es la implementación estándar para llevar a cabo la comunicación basándose en el intercambio de mensajes.

MPI fue desarrollado para su ejecución tanto en máquinas paralelas como en clusters de estaciones de trabajo. Para trabajar con MPI utilizamos la implementación MPICH.

MPICH es una implementación de MPI libre y portable. MPICH proporciona al programador de C++ un conjunto de APIs y librerías que soportan programación paralela.

MPI es especialmente útil para la programación SPMD (Single Program Multiple Data) y MPMD (Multiple Program Multiple Data).

Page 53: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

EL ESTÁNDAR PVM

PVM significa “Parallel Virtual Machine”. Es un software que permite ejecutar aplicaciones paralelas distribuidas en redes de ordenadores heterogéneos.

PVM es un paquete de software que permite a una colección heterogénea de computadoras conectarse mutuamente a través de una red para ser utilizadas como una gran computadora paralela.

El objetivo de un sistema PVM es permitir que una colección de computadoras puedan ser utilizadas para la computación paralela.

PVM es, junto con MPI, uno de los paquetes de software más utilizados para implementar aplicaciones paralelas.

La librería PVM es especialmente útil para sistemas de varios procesadores que pueden ser conectados juntos para formal un procesador virtual paralelo.

Page 54: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

PVM soporta:

• Heterogeneidad en términos de máquinas, redes y aplicaciones

• Modelos de pase de mensajes explícitos

• Computación basada en procesos

• Soporte multiprocesador (MPP, SMP)

• Acceso al hardware: las aplicaciones bien pueden ignorar o aprovechar las diferencias entre el hardware

• Lista de host configurable dinámicamente: los procesadores pueden ser añadidos o eliminados y se pueden incluir procesadores mixtos

Page 55: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Un programa paralelo en PVM, generalmente, constará de un proceso maestro y varios procesos esclavos, realizando cada esclavo una parte del trabajo global.

Esquemas Maestro-Esclavo

Page 56: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

VENTAJAS Y DESVENTAJAS DEL USO DE PVM

Algunas de las ventajas que presenta la utilización de PVM son:

• Fiabilidad

• Reduce el "wall clock execution time"

• Fácil instalación y uso

• Extensión

• Flexibilidad

• Tolerancia a fallos

• Precio

• Heterogeneidad

• Disponibilidad

Las desventajas que presenta la utilización de PVM son, principalmente:

• El paralelismo fuertemente acoplado

• La abstracción de la máquina virtual, la independencia del hardware y la independencia de la codificación tienen un coste

Page 57: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

FUNCIONES DE PVM

1. Funciones de Control de Procesos.

2. Funciones de Información.

3. Funciones de Configuración de grupos.

4. Funciones de Empaquetamiento de datos y control de Buffers.

5. Funciones de Envío de Mensajes.

6. Funciones de Recepción de mensajes.

Page 58: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

EL ESTÁNDAR CORBA

En computación, Common Object Request Broker Architecture (CORBA) es un estándar que establece una plataforma de desarrollo de sistemas distribuidos facilitando la invocación de métodos remotos bajo un paradigma orientado a objetos.

CORBA utiliza un lenguaje de definición de interfaces (IDL) para especificar los interfaces con los servicios que los objetos ofrecerán.

CORBA puede especificar a partir de este IDL la interfaz a un lenguaje determinado, describiendo cómo los tipos de dato CORBA deben ser utilizados en las implementaciones del cliente y del servidor.

Implementaciones estándar existen para Ada, C, C++, Smalltalk, Java y Python. Hay también implementaciones para Perl y TCL.

Page 59: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CORBA se encarga habitualmente de los siguientes aspectos en los sistemas distribuidos:

• Registro de objetos

• Localización de objetos

• Activación de objetos

• Gestión de errores

• Multiplexación y desultiplexación de invocaciones

• Aplanado y desaplanado de datos

Page 60: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Los tipos de componentes de los que consta CORBA son, generalmente:

• Objects Services

• Common Facilities

• Domain Interfaces

• Application Interfaces

Page 61: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Descripción de la arquitectura CORBA

Page 62: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Descripción de interfaces y objetos

Page 63: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

Estructura servidor de CORBA

Estructura cliente de CORBA

Page 64: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CAPÍTULO 9: CONCLUSIONES Y LÍNEAS DE MEJORA

Page 65: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

CONCLUSIONES SOBRE MPI

Gracias a MPI conseguimos portabilidad, proveyendo una librería de paso de mensajes estándar independiente de la plataforma y de dominio público. La especificación de esta librería está en una forma independiente del lenguaje y proporciona funciones para ser usadas con C, C++ y Fortran. Abstrae los sistemas operativos y el hardware.

El usuario en MPI tiene que crear la máquina virtual decidiendo qué nodos del cluster usar para poner en funcionamiento sus aplicaciones cada vez que las arranca.

La implementación del cluster es sencilla, pero resulta conveniente que todos los nodos que lo forman sean similares en cuanto a potencia y prestaciones, para facilitar la función de paralelización de los programas.

Page 66: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

MPI CON VTK Y PARAVIEW

VTK (Visualization Toolkit) son un conjunto de librerías destinadas a la visualización y el procesado de imágenes. Incluyen código abierto y software orientado a objetos. Son muy amplias y complejas, pero aún así, están diseñadas para ser sencillas de usar con cualquier lenguaje de programación orientado a objetos, como son C++, Java, Tcl, etc.

Paraview es una aplicación que se utiliza para visualizar datos en dos o tres dimensiones. Esta aplicación puede ser utilizada en un solo puesto de trabajo o también en un cluster de ordenadores. Esto último permite a paraview ejecutar grandes cadenas de datos mediante la utilización de procesamiento distribuido.

Page 67: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

PROCESAMIENTO DISTRIBUIDO CON MATLAB

MatlabMPI es una implementación para Matlab de MPI (Message Passing Interface) que permite que cualquier programa creado bajo Matlab pueda ser ejecutado en múltiples procesadores. MatlabMPI consiste en un conjunto de instrucciones de Matlab que implementan un subconjunto de MPI, permitiendo que cualquier programa de Matlab pueda ser ejecutado en una computadora paralela. Además, MatlabMPI podrá ejecutarse en cualquier sistema de computadoras que soporten Matlab.

La simplicidad y funcionalidad de MATLAB MPI lo hace una elección muy aconsejable para programadores que quieran acelerar sus códigos MATLAB en computadoras paralelas. El trabajo para el futuro será el de crear objetos de mayor rango (como, por ejemplo, matrices distribuidas). El resultado será la construcción de una capa de comunicaciones dentro de MATLAB MPI, que permita a un usuario lograr un aceptable desarrollo paralelo sin un aumento de las líneas de código.

Page 68: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

PROCESAMIENTO DISTRIBUIDO CON C++

En este capítulo hemos visto una visión aproximada de tres de las implementaciones existentes para implementar el procesamiento distribuido en C++: MPI, PVM y CORBA.

La implementación con MPI está más desarrollada. Sin embargo, las otras dos implementaciones existentes, PVM y CORBA, no son tan conocidas y desarrolladas. Faltaría como conclusión el desarrollo más en profundidad de estas implementaciones, así como el desarrollo de diversos ejemplos.

Page 69: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

LÍNEAS DE MEJORA

1. Realización e implementación de un cluster basado en el sistema operativo Linux.

2. Utilización de otra implementación de MPI como puede ser LAM-MPI.

3. Profundizar más en la utilización de MPI con Matlab, en especial en lo que se refiere a la hora del envío de datos entre procesadores, en especial de realización e implementación de un cluster basado en el sistema operativo Linux.

1. Utilización de otra implementación de MPI como puede ser LAM-MPI.

1. Profundizar más en la utilización de MPI con Matlab, en especial en lo que se refiere a la hora del envío de datos entre procesadores, en especial de

Page 70: EL PROCESAMIENTO DISTRIBUIDO Y SU APLICACIÓN AL TRATAMIENTO DE IMÁGENES

FIN