next up previous contents
Next: 2.3.5 Bibliotecas de paso Up: 2.3 Sistemas multiprocesador Previous: 2.3.3.4 La Ley de   Índice General

2.3.4 Estándares de programación en máquinas paralelas

Contando con una máquina paralela de cualquier arquitectura y un algoritmo adecuado a dicha arquitectura y al problema que deseamos resolver, se requiere una herramienta que nos permita desarrollar un programa para atacar el problema; es decir, una forma de expresar el algoritmo de manera que la máquina pueda ejecutarlo, haciendo uso de las capacidades de paralelismo del equipo.

No se puede esperar que una computadora tradicional ``adivine'' la tarea que se desea realizar; es necesario indicarlo explícitamente a la computadora por medio de un programa, expresado de una manera que puede variar desde el código de máquina hasta lenguajes de programación de alto nivel. En el caso de cómputo científico se prefieren lenguajes de medio o alto nivel, pues permiten una expresividad mayor así como enfocarse en el algoritmo y no en detalles relevantes al hardware u otros aspectos.

De manera similar, dado un programa escrito para una computadora secuencial, es imposible suponer que al ejecutarlo en una máquina paralela se aprovechen automáticamente sus capacidades. El algoritmo debe diseñarse y expresarse explícitamente para aprovechar la capacidad de paralelismo en el hardware con que contamos.

Se han diseñado lenguajes de programación especializados para arquitecturas paralelas. Sin embargo una desventaja de estos lenguajes es que son útiles únicamente en la arquitectura parelela para la que fueron creados, limitando su utilidad fuera de este ámbito. Como ejemplo se puede mencionar el lenguaje Occam, que está diseñado para programar computadoras del tipo Transputer.

Otro enfoque es el de ampliar lenguajes existentes a fin de adecuarlos a una arquitectura parelela. De esta forma se crean ``variantes'' del lenguaje original con modificaciones. En cada caso se cuenta con primitivas para hacer uso de paralelismo. Una posible desventaja es que este enfoque no tiene en cuenta la arquitectura de la máquina donde se está ejecutando el programa, lo cual puede redundar en implementaciones no óptimas. Por ejemplo, un lenguaje que cuente con paralelismo a nivel datos depende para su óptimo rendimiento de encontrarse en un equipo SMP (memoria compartida) o MPP con un bus de comunicaciones muy amplio. Quizá el lenguaje ampliado más conocido es el HPF (High Performance Fortran), aunque también en esta categoría se cuentan Dataparallel-C y Compositional C++.

Finalmente, el enfoque más socorrido es el de emplear un lenguaje existente (donde C y Fortran son los más utilizados) y recurrir a funciones proporcionadas por alguna biblioteca para cómputo paralelo. La popularidad de este enfoque se debe a que únicamente se requiere que el programador se familiarice con algunas funciones nuevas, sin dejar atrás su proficiencia con el lenguaje que se utiliza. Además, ya que las funciones de biblioteca son específicas para la arquitectura paralela que se está trabajando, en la mayoría de los casos se asegura que el rendimiento que se puede obtener de las funciones paralelas de la arquitectura será el máximo posible.

Este enfoque tiene algunas desventajas. Un lenguaje creado específicamente para una arquitectura paralela permite la expresión, de manera natural y como parte de su semántica, de algoritmos paralelos. Por otro lado, en un lenguaje tradicional, el uso de funciones de biblioteca para expresar el uso de las facilidades de paralelismo del sistema se realiza de manera adicional, y un tanto ``artificial'', lo cual puede dificultar la concepción y expresión de un algoritmo paralelo. Además, la ventaja de contar con funciones de biblioteca específicas para cada arquitectura puede también convertirse en una desventaja, pues si para cada arquitectura se tiene un juego de funciones diferente, rápidamente puede volverse complicado el dominar todas estas bibliotecas; esto dificulta la transportación del programa de una arquitectura a otra.


next up previous contents
Next: 2.3.5 Bibliotecas de paso Up: 2.3 Sistemas multiprocesador Previous: 2.3.3.4 La Ley de   Índice General
2002-05-15