martes, 3 de marzo de 2015

Tercer y Cuarto enfoques para programar compiladores paralelos.

En 1988 McGraw y Axelrod identificaron cuatro formas distintas de desarrollar software (aplicaciones) para las computadoras paralelas:

  1. Extender o enriquecer un compilador existente para que traduzca programas secuenciales en programas paralelos.
  2. Extender o enriquecer un lenguaje existente con nuevas operaciones que permita a los usuarios expresar el paralelismo.
  3. Agregar una nueva capa de lenguaje paralelo encima de un lenguaje secuencial existente.
  4. Definir totalmente un nuevo lenguaje paralelo así como su compilador.


Tercer enfoque: AGREGAR UNA CAPA DE PROGRAMACIÓN PARALELA

Se puede pensar en la programación paralela como tener dos capas. La capa inferior contiene el núcleo (core) del cómputo, en donde un proceso manipula su parte de los datos para producir su parte del resultado. Un lenguaje de programación secuencial existente se adaptaría para expresar esta parte de la actividad. La capa superior controla la creación y sincronización de los procesos y la partición de los datos entre los procesos. Estas acciones podrían ser programadas usando un lenguaje paralelo (quizá un lenguaje de programación visual). El compilador sería responsable de traducir estas dos capas del programa paralelo en código listo para su ejecución sobre una computadora paralela.

Dos ejemplos de este enfoque son el ambiente CODE (Computationally Oriented Display Environment) y el ambiente HENCE (Heterogeneous Network Computing Environment). Estos sistemas permiten al usuario representar un programa paralelo como un grafo dirigido, donde los nodos representan procedimientos secuenciales y los arcos representan dependencias de datos entre los procedimientos.

Este enfoque requiere que el programador aprenda y use un nuevo sistema de programación paralelo, lo cual puede ser la razón por la que no ha captado mucha atención en la comunidad de programación paralela. Mientras que los prototipos de investigación están siendo distribuidos, no se conoce ningún sistema comercial basado en esta filosofía.


Cuarto enfoque: CREAR UN LENGUAJE PARALELO

El cuarto enfoque es darle al programador la habilidad de expresar explícitamente operaciones paralelas.

Una forma de soportar la programación paralela explícita es desarrollar un lenguaje paralelo desde cero. El lenguaje de programación OCCAM es un ejemplo famoso de este enfoque. Con una sintaxis sorprendentemente diferente de los lenguajes tradicionales imperativos, este lenguaje soporta tanto la ejecución de procesos en paralelo como secuenciales, así como la comunicación y la sincronización entre ellos.

Otra forma de soportar el paralelismo explícito es agregar construcciones paralelas a un lenguaje ya existente. Ejemplos de este enfoque son los lenguajes FORTRAN 90, HIGH PERFORMANCE FORTRAN y C*.

Anteriormente se mencionó la ironía de un programador codificando un algoritmo inherentemente paralelo en lenguaje de programación secuencial y un compilador trabajando para redescubrir el paralelismo. Un lenguaje que soporte el paralelismo explícito cambia la relación entre el programador y el compilador de adversarios a aliados.

Agregar construcciones paralelas a un lenguaje de programación existente o crear por completo un nuevo lenguaje de programación paralelo requiere el desarrollo de nuevos compiladores. Aún y cuando se adopte un lenguaje estándar, típicamente les lleva años a los vendedores desarrollar compiladores de alta calidad para sus sistemas paralelos.

Algunos lenguajes paralelos, tales como C*, no fueron adoptados como estándar. En esta situación muchos vendedores en competencia decidieron no proporcionar compiladores para el lenguaje en sus máquinas. Cuando esto pasa, la portabilidad de códigos se encuentra severamente en peligro.


Otra barrera para la adopción de nuevos lenguajes de programación es la resistencia del usuario. Cuando nuevas construcciones paralelas se agregan a un lenguaje de programación, los programadores deben aprender cómo usar estas nuevas construcciones. Muchos programadores están renuentes a tomar esta transición.

Más Ejemplos:


*Concurrent Pascal: diseñado por Brinch Hansen en 1975.
*Chapel: desarrollado en el 2010

*X10: basado en java y desarrollado en el 2004 por la IBM.
* NESL
*Cilk
*ZPL
*Linda
*Parlog


Referencias

-http://es.slideshare.net/neztooor7/presentacin-lenguajes-paralelos
-Elfego Gutierrez. "Programación Paralela y Distribuida".


No hay comentarios.:

Publicar un comentario