Programación paralela, distribuida, multiprogramación, concurrente
Enviado por Anderson Cuaspud • 28 de Mayo de 2019 • Resumen • 2.851 Palabras (12 Páginas) • 125 Visitas
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].
...