MEJORANDO LOS LENGUAJES
Para poder programar adecuadamente un algoritmo para una máquina
paralela, es necesario disponer de un lenguaje de programación que permita
explotar al máximo todas las posibilidades de la nueva arquitectura paralela. Esta
es la razón de que en los últimos años está habiendo una autentica proliferación
de nuevos lenguajes.
En 1998 McGraw y Axelrod identificaron 4 formas distintas para
la creación de estos nuevos lenguajes, se puede seguir una de las cuatro vías siguientes:
- Extender o Enriquecer un compilador existente para que traduzca programas secuenciales en programas paralelos.
- Extender o enriquecer un lenguaje existente con nuevas operaciones que permitan a los programadores expresar el paralelismo.
- Agregar una capa de lenguaje paralelo encima de un lenguaje secuencial existente.
- Definir totalmente un nuevo lenguaje paralelo así como su compilador.
En este apartado solo mencionares el punto 3 y 4.
Agregar una capa de lenguaje paralelo encima de un lenguaje secuencial existente.
Crear un nuevo lenguaje que solo se
utilizara para expresar la concurrencia y la necesaria sincronización, mientras
el resto de aplicaciones básicas de programación
permanecerían iguales. Es decir, sería
algo así como un pre-procesador para el manejo de la concurrencia.
La idea es la siguiente: la mayoría
del código que existe en la actualidad es correcto y sirve para resolver unos
problemas dados. Este código para ser ejecutado en varios multiprocesadores no
necesita cambiar en su gran mayoría, tan solo añadirle algunas características
de sincronización. De hecho, la mayoría de los errores en programación
concurrente aparecen en la sincronización o partición de los datos. Por lo
tanto, una posible solución es usar un pequeño lenguaje-compilador para
expresarla estructura paralela del programa, dejando que el resto del código se
exprese en un lenguaje convencional (Fortran o C, por ejemplo).
Situación actual: Algunos trabajos iniciales se han hecho ya
en esta área. Pero esta solución también tiene sus inconvenientes. Uno de los más
importantes se refiere a la depuración de programas, ya que debido a la
existencia de un pre-procesador es difícil detectar dónde está el fallo
cometido.
Definir totalmente un nuevo lenguaje paralelo así como su compilador.
Integrar el concepto de concurrencia y sincronización junto con las estructuras de programación tradicionales.
Se trata sin duda de la más radical de las cuatro vías
que se han comentado. Evidentemente, es la más cara y la que exige más labor de
desarrollo. Como contrapartida la mayoría de los problemas se pueden solucionar
mediante un diseño adecuado del sistema lenguaje/compilador.
Los avances realizados hasta la fecha se han orientado en el
área de los lenguajes funcionales, como FP o SISAL. Las principales características de diseño
de estos lenguajes son mejorar la claridad de la concurrencia, sin requerir que
el programador maneje la sincronización, así como permitir que no dependan de
la arquitectura objeto sobre la que se van a implementar.
Otra de las grandes ventajas aparece desde el punto de vista
de la depuración de programas. Por el contrario los mayores inconvenientes
descansan en la construcción del compilador. Este requiere técnicas muy
sofisticadas para realizar con eficacia las funciones que tiene encomendadas,
como particionar, mapear y sincronizar el programa. En la actualidad se está
teniendo problemas en el manejo dinámico de memoria, ya que las más simples
implementaciones requieren grandes cantidades de memoria.
REFERENCIAS:
- GarcÍa Carrasco, J. M.(1989): Modelos de arquitecturas, lenguajes y compiladores para procesamiento en paralelo.
- McGraw, J. R. and Axelrod, T.S. (1988): Exploiting multiprocessors: issues and options. IEEE Software, Vol. 5, (5).
No hay comentarios.:
Publicar un comentario