• No se han encontrado resultados

La computaci´on distribuida permite resolver algunos de los problemas de la computaci´on tradicio- nal. No obstante, la aparici´on de aplicaciones con unos requisitos de procesamiento y una demanda de velocidad cada vez mayores no encaja adecuadamente con la computaci´on distribuida. De una forma a´un m´as dr´astica, las aplicaciones denominadas GCAs (Grand Challenge Applications) [GCA] repre- sentan problemas no resolubles en una cantidad de tiempo razonable ni en los computadores actuales ni en los sistemas distribuidos. Aplicaciones que permiten modelar grandes estructuras de ADN o predecir el tiempo atmosf´erico constituyen ejemplos de este ´ultimo tipo de aplicaciones. Finalmente, la experiencia demuestra que cualquiera que sea la velocidad de computaci´on de los procesadores actuales, siempre habr´a aplicaciones que requieran a´un mayor potencia computacional.

Una forma de incrementar esta velocidad es paralelizar las aplicaciones con el objetivo de optimizar el acceso a los recursos.

La computaci´on paralela no es una idea reciente. Ya Gill en 1958 escrib´ıa sobre programaci´on paralela [Gil58]. Holland en 1959 describ´ıa “un computador capaz de ejecutar un n´umero arbitrario de subprogramas simultan´eamente” [Hol59]. En 1963, Conway describe el dise˜no de un computador paralelo y su programaci´on [Con63]. Durante todo este tiempo, se ha realizado investigaci´on en esta ´area. En 1996 Flynn y Rudd escribieron en [FR96]: “la continua tendencia hacia sistemas de alto rendimiento ... nos conduce a la siguiente conclusi´on: el futuro es paralelo”.

El desarrollo de aplicaciones paralelas es una tarea compleja. En primer lugar, depende en gran medida de la disponibilidad de herramientas y entornos software adecuados. En segundo lugar, los desarrolladores de software paralelo deben enfrentarse a problemas que no aparecen en la programaci´on secuencial, tales como la comunicaci´on, la sincronizaci´on, el particionado y distribuci´on de los datos, el reparto de carga, la tolerancia a fallos, la heterogeneidad de la arquitectura, los interbloqueos o las condiciones de carrera, entre otros. Algunos de estos problemas ya aparecen en los sistemas distribuidos.

2.4. COMPUTACI ´ON PARALELA 17

Existen dos t´ecnicas principales de programaci´on paralela:

La primera t´ecnica se basa en elparalelismo impl´ıcito. En esta t´ecnica, el usuario no especifica y, por tanto, no puede controlar la planificaci´on del proceso y la distribuci´on de los datos. Esta t´ecnica es utilizada a nivel del lenguaje de programaci´on y de los compiladores.

La segunda t´ecnica se basa en elparalelismo expl´ıcito. En esta t´ecnica, el programador es res- ponsable de paralelizar las aplicaciones, realizando la descomposici´on de las tareas, asignando los recursos a las diferentes tareas e implementando la estructura de comunicaci´on.

El uso del paralelismo expl´ıcito suele proporcionar mejor rendimiento. Los principales modelos y t´ecnicas de programaci´on paralela son:

Compiladores paralelos: Esta t´ecnica tiene una funcionalidad muy limitada, ya que se restringen a aplicaciones que exhiben comportamientos regulares, tales como aplicaciones que realizan c´alculos en bucles. Se ha comprobado que esta t´ecnica es bastante ´util en el caso de aplicaciones que se ejecutan en multiprocesadores con memoria compartida o en procesadores vectoriales con memoria compartida, pero no en procesadores con memoria distribuida. El problema de este ´

ultimo tipo de sistemas es que tienen un tiempo de acceso a memoria no uniforme.

Lenguajes paralelos: Los lenguajes paralelos han tenido poco ´exito entre los programadores de las aplicaciones, debido a que los usuarios no suelen estar dispuestos a aprender un lenguaje nuevo exclusivamente para programaci´on paralela. Como alternativa, se suelen utilizar lenguajes de alto nivel tradicionales y bibliotecas, que permitan extender las caracter´ısticas de los primeros. Ejemplos de lenguajes paralelos lo constituyen SISAL [FCO90] y PCN [Fos91].

Paso de mensajes: Esta t´ecnica permite realizar programas paralelos eficientes para sistemas de memoria distribuida. El presente trabajo utiliza esta t´ecnica, por lo que se analiza m´as detalladamente en la siguiente secci´on.

VSM y DSM: VSM (Virtual Shared Memory) implementa un modelo de programaci´on de memo- ria compartida en un entorno de memoria distribuida. Linda [ACG86] constituye un ejemplo de este tipo de programaci´on. DSM (Distributed Shared Memory) [NL91] es la extensi´on del mode- lo de programaci´on de memoria compartida en sistemas que f´ısicamente no contienen memoria compartida. A diferencia de paso de mensajes, en un sistema DSM, un proceso que quiera obte- ner alg´un valor no necesita conocer su ubicaci´on; el sistema lo localiza de forma autom´atica. En la mayor´ıa de los sistemas DSM, los datos compartidos pueden ser replicados a fin de aumentar el paralelismo y la eficiencia de las aplicaciones.

Programaci´on paralela orientada a objetos: La orientaci´on a objetos proporciona un modelo de abstracci´on que facilita el dise˜no de las aplicaciones. Si en lugar de simples objetos se hace uso de objetos compartidos, es posible llevar a cabo una t´ecnica similar al modelo de datos compar- tido pero orientada a objetos. La principal dificultad de esta t´ecnica es que a´un la comunidad cient´ıfica no hace un uso extendido del paradigma de programaci´on orientado a objetos, utili- zando lenguajes tradicionales tales como C o Fortran. Algunos entornos orientados a objetos, tales como CC++ y Mentat, se han implementado para llevar a cabo una programaci´on paralela [WL96].