ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Programación paralela, distribuida, multiprogramación, concurrente

Anderson CuaspudResumen28 de Mayo de 2019

2.851 Palabras (12 Páginas)154 Visitas

Página 1 de 12

PROGRAMACIÓN PARALELA

La computación paralela se define como el uso de múltiples recursos computacionales con el fin de resolver un problema computacional, en comparación con la computación secuencial se distingue en que varias operaciones pueden ocurrir simultáneamente. La computación paralela presenta las siguientes características [1]:

  • El problema a resolver es divido en partes que serán resueltas simultáneamente.
  • Cada parte del problema es descompuesto en una serie de instrucciones.
  • Cada instrucción de cada parte es ejecutada en diferentes procesadores al mismo tiempo.
  • Se emplea un mecanismo global de control/coordinación.

En problemas con un alto coste computacional ha sido utilizada la programación paralela para su resolución, tradicionalmente el uso del paralelismo ha sido en problemas científicos ya que estos requieren de una mayor capacidad de procesamiento y memoria, siendo utilizada por científicos, personal especializado o informático [1].

Un lenguaje de programación paralelo debe proporcionar soporte para los tres aspectos básicos de la programación paralela: especificar la programación paralela: especificar la ejecución paralela, comunicarse entre varios subprocesos y expresar la sincronización entre los subprocesos. La mayoría de los lenguajes paralelos proporcionan este soporte a través de la extensión a un lenguaje secuencial existente; Esto tiene la ventaja de proporcionar extensiones paralelas dentro de un entorno de programación familiar [2].

Modelos de programación paralela

Un modelo de programación paralela permite al programador diseñar un algoritmo paralelo, y que este tenga una correspondencia entre los componentes físicos de la maquina paralela con los componentes lógicos de la aplicación. Normalmente estos modelos o paradigmas se enfocan en la explotación de un tipo particular de paralelismo y a la arquitectura del sistema paralelo [3].

Estos modelos se diferencian en la forma de comunicación y sincronización de los procesos, ya sea como memoria compartida o memoria distribuida. En el caso de memoria compartida, la forma en que se comunican los procesos es a través de un espacio común de direcciones de memoria y comúnmente se utiliza OpenMP. Por otro lado en el caso de memoria distribuida, el paso de mensajes entre procesos es a través del movimiento de los datos de un espacio de direcciones a otro, en este caso se usa MPI [3].

MPI (Message Passing Interface)

Es una interfaz que permite el diseño de aplicaciones paralelas basadas en paso de mensajes, proporciona funciones al programador para que este diseñe la aplicación sin que tome en cuenta el hardware sobre el que se va a ejecutar, ni la forma en que serán implementadas las funciones que utiliza [4]. MPI ha sido desarrollado por MPI Forum, que es un grupo conformado por investigadores, laboratorios y empresas.

[pic 1]

Ilustración 1 Ubicación de MPI en el proceso de programación de aplicaciones paralelas

Para la implementacion de MPI se necesita de una interfaz de programación independiente del lenguaje de programación, ademas de esto es necesario una colección de bindings o concreciones de esa interfaz para los lenguajes mas utilizados en la programacion paralela como C y Fortran.

[pic 2]

Ilustración 2 Estructura de un programa MPI

En la ilustración se muestra la estructura basica de un programa MPI, en la cual se puede observar el uso de las cuatro funciones principales: MPI_init() la cual permite inciar la aplicación paralela, MPI_Comm_size() que permite conocer el número de procesos que actualmente participan en la aplicación, MPI_Comm_rank() la cual permite que cada proceso conosca su direccion o identificador dentro de la colección de procesos que conformar la aplicación paralela, y por ultimo la funcion MPI_finalize() que permite finalizar la aplicación [4].

OpenMP

Es un modelo de programación paralelo para memoria compartida y multiprocesador de memoria compartida distribuida en multiples plataformas. Desarrollado por SGI y desarrollado en colaboración con otros proveedores de computadoras en paralelo, OpenMP se está convirtiendo rápidamente en el estándar para aplicaciones en paralelo. Permite añadir concurrencias a los programas que han sido desarrollados en C, C++ y Fortran.  OpenMP estta compuesto por directivas de compilador, rutinas de biblioteca y variables de entorno que influyen al comportamiento de los programas en tiempo de ejecucaion. Además OpenMP proporciona uan interfaz simple y flexible a los programadores para que desarrollen aplicaciones paralelas [2].

Tipos de paralelismo

  • Paralelismo a nivel de bit:  este tipo de paralelismo se aumenta el tamaño de la palabra del procesador (tamaño de la cadena de bits a procesar). Permitiendo reducir el número de instrucciones que tiene que ejecutar el procesador en variables cuyos tamaños sean mayores a la longitud de la cadena.
  • Paralelismo a nivel de instrucción: este tipo de paralelismo consite en que se cambia el orden de las instrucción de un programa con el fin de juntarlas en grupos para su posterior ejecucion de forma paralela sin que esto altere el resulado final del programa.
  • Paralelismo a nivel de datos: este tipo de paralelismo se caracteriza en que cada procesador se ejecuta la misma tarea sobre un subconjunto independiente de datos.

Aplicaciones de la programación paralela

  • Aplicaciones intensivas en cálculo: son aplicaciones que  demandan muchos ciclos de maquinas comunmente son utilizadas en areas en ciencias e ingenieria. Requieren de una alta velocidad y de procesamiento de punto flotantes. Algunos ejemplos de la aplicación en esta área son: dinámica de fluidos computacional, simulaciones elctromagnéticas, modelado ambiental, simulación de redes, etc [5].
  • Aplicaciones de almacenamiento masivo: este tipo de aplicaciones requieren de una gran capacidad computacional para almacenar y procesar grandes cantidades de información, algunos ejemplos son: análisis de data sísmica, procesamiento de imágenes, minería de datos, análisis estadístico de datos, etc [5].
  • Aplicaciones exigentes comunicacionalmente: este tipo de aplicaciones son nuevas y se las conoce también como servicios por demanda, son aplicaciones que requieren recusos computaciones conectador por redes con un ancho de banda considerable. Algunos ejemplos de este tipo de aplicaciones son: procesamiento de transacciones en línea, sistemas colaborativos, texto por demanda, video por demanda, simulación por demanda, etc [5].

Ventajas de la programación paralela

Algunas de las ventajas de la implementación de la programación paralela son que permiten resolver problemas que no se podrían realizar en una sola CPU, resolver problemas que no se pueden resolver en un tiempo razonable, permite ejecutar problemas de un orden y complejidad mayor, permite ejecutar código de manera más rápida, permite ejecutar en general más problemas, permite dividir una tarea en partes pequeñas independientes que se ejecutan al mismo tiempo con el fin de obtener resultados en un corto tiempo [1].  

Desventajas de la programación paralela

Al momento de utilizar la programación paralela se debe considerar las desventajas que presentan como que generan un mayor consumo de energía, presenta una mayor complejidad escribir programas paralelos, existe una dificultad al momento de sincronizar y comunicar las tareas de la aplicación paralela. Múltiples procesos están esperando a ser ejecutados y si no se logra una correcta sincronización puede producirse una corrupción de datos [1].

PROGRAMACIÓN DISTRIBUIDA

La programación distribuida se enfoca en el desarrollo de sistemas abiertos, escalables, tolerantes a fallos y transparentes. El concepto de programación distribuida nace de la necesidad de la comunicación, compartir recursos e información a través de la red. En un sistema distribuido es común que el código de la aplicación quede distribuido en diferentes programas que se estarán ejecutando independientemente [6].

[pic 3]

Ilustración 3 Comparación entre una aplicación no distribuida y una distribuida

Los procesos de un programa distribuido abstraen las entidades activas que realizan cálculos. Un proceso puede representar una computadora, un procesador dentro de una computadora o simplemente un subproceso específico de ejecución dentro de un procesador. Para cooperar en alguna tarea común, es posible que los procesos normalmente necesiten intercambiar mensajes usando alguna red de comunicación. Los enlaces resumen la red física y lógica que soporta la comunicación entre procesos [7].  

Un sistema distribuido tiene las siguientes características [6]:

  • Transparencia en escalabilidad: el sistema debe ser capaz de permitir tanto el incremento como la disminución de su tamaño.
  • Transparencia en la migración: los objetos que conforman el sistema deben estar en la capacidad de ser movidos sin que se presenten algún fallo a la aplicación.
  • Transparencia en la ubicación del sistema: no debe importar la localización de los recursos utilizados en el sistema, ya que todo se verá como una entidad.
  • Transparencia frente a fallos: el sistema debe ser capaz de evitar pérdidas en las tareas de los usuarios cuando se presenten fallos en el hardware o software, de esta forma se aumenta la disponibilidad del sistema.

Comunicación en sistemas distribuidos

  • Socket: es la abstracción de software que se usa para representar los "terminales" de una conexión entre dos máquinas. Para una conexión dada, hay un socket en cada máquina, y se puede imaginar un "cable" hipotético entre las dos máquinas, estando cada uno de los extremos del "cable" enchufados al socket. Proporciona los puntos extremos de la comunicación, los sockets se utilizan comúnmente durante la comunicación entre procesos que se ejecutan en distintas máquinas que a su vez estas están conectadas en la misma red. Los sockets están localizados en la capa de transporte del modelo OSI, y estos pueden ser orientados a la conexión (TCP) o no orientados a la conexión (UDP) [8].
  • Llamada de procedimiento remoto (RPC): permite que un programa cliente llame a un procedimiento de otro programa localizado en otra máquina que está en ejecución en un proceso servidor, de tal forma que el programador no tiene la necesidad de conocer cómo se da la comunicación entre los procesos. El RPC se enfoca en una llamada a un procedimiento remoto se parezca lo más posible a como si se lo hiciera en una maquina local, permitiendo una mayor transparencia al sistema distribuido [8]. RPC resuelve los problemas de identificación y acceso remoto. Sin embargo, cada acceso remoto a los datos se ve afectado por la comunicación con el servidor, lo que se convierte en un cuello de botella en el rendimiento y la disponibilidad [9].
  • Invocación de métodos remotos (RMI): el paquete de invocación de método remoto de Java es un esquema centrado en java para objetos distribuidos que ahora forma parte de la API de Java central. RMI ofrece algunos de los elementos críticos de un sistema de objetos distribuidos para java, además de algunas otras características que son posibles por el hecho de que RMI es un sistema solo de java. RMI tiene facilidades de comunicación de objetos que son análogas a las de CORBA, y su sistema de serializacion de objetos que proporciona una forma de transferir o solicitar una instancia de objeto por valor de un proceso remoto a otro [10].

En este modelo, un proceso invoca métodos de un objeto que reside en un ordenador remoto como en el caso del rpc, los argumentos y valores necesarios para solicitar el servicio se debe incluir en la llamada, y se devolverá el resultado cuando el método invocado haya finalizado [8].

Ventajas de la programación distribuida

  • Compartir recursos y datos.
  • Capacidad de crecimiento incremental
  • Mayor flexibilidad, permitiendo la actualización de componentes sin que afecte a alguna parte de la aplicación.
  • Alta disponibilidad
  • Soporte de aplicaciones
  • Carácter abierto y heterogéneo
  • Mayor poder de cómputo al estar formado por varias computadoras interconectadas.

Desventajas de la programación distribuida

  • Aumento de complejidad
  • Problemas con las redes de comunicación
  • Problemas de seguridad

MULTIPROGRAMACIÓN

La multiprogramación es una forma rudimentaria del procesamiento paralelo en el que [11]varios programas se ejecutan al mismo tiempo en un único procesador. Al solo contar con un procesador, no puede haber una verdadera ejecución simultánea de diferentes programas. En su lugar, el sistema operativo ejecuta parte de un programa, luego parte de otro, y así sucesivamente. Para el usuario parece que todos los programas se ejecutan al mismo tiempo [11] .

...

Descargar como (para miembros actualizados) txt (18 Kb) pdf (738 Kb) docx (539 Kb)
Leer 11 páginas más »
Disponible sólo en Clubensayos.com