Source: http://docplayer.es/1656657-E-t-s-i-informatica-universidad-de-malaga.html
Timestamp: 2017-09-26 00:47:44+00:00

Document:
E.T.S.I. INFORMÁTICA UNIVERSIDAD DE MÁLAGA - PDF
E.T.S.I. INFORMÁTICA UNIVERSIDAD DE MÁLAGA
Download "E.T.S.I. INFORMÁTICA UNIVERSIDAD DE MÁLAGA"
Ramón Aguirre Gil
1 E.T.S.I. INFORMÁTICA UNIVERSIDAD DE MÁLAGA Un Lenguaje de Coordinación para la Resolución de Problemas Basados en Descomposición de Dominios Tesis Doctoral Presentada por: D. Enrique Soler Castillo Dirigida por: Dr. José María Troya Linero Catedrático de Universidad del Área de Lenguajes y Sistemas Informáticos. Dr. Juan Ignacio Ramos Sobrados Catedrático de Universidad del Área de Ciencias de la Computación e Inteligencia Artificial. Málaga, septiembre de 2001
3 D. José María Troya Linero, Catedrático de Universidad del Área de Lenguajes y Sistemas Informáticos de la E.T.S. Ingeniería Informática y D. Juan Ignacio Ramos Sobrados, Catedrático de Universidad del Área de Ciencias de la Computación e Inteligencia Artificial de la E.T.S. Ingenieros Industriales de la Universidad de Málaga Certifican Que D. Enrique Soler Castillo, Licenciado en Informática, ha realizado en el Departamento de Lenguajes y Ciencias de la Computación de la Universidad de Málaga, bajo nuestra dirección, el trabajo de investigación correspondiente a su Tesis Doctoral titulada Un Lenguaje de Coordinación para la Resolución de Problemas Basados en Descomposición de Dominios. Revisado el presente trabajo, estimamos que puede ser presentado al tribunal que ha de juzgarlo, y autorizamos la presentación de esta Tesis Doctoral en la Universidad de Málaga. Málaga, 4 de mayo de Fdo. José María Troya Linero Catedrático de Universidad del Área de Lenguajes y Sistemas Informáticos. Fdo. Juan Ignacio Ramos Sobrados Catedrático de Universidad del Área de Ciencias de la Computación e Inteligencia Artificial.
5 Agradecimientos En primer lugar quisiera mostrar mi agradecimiento a los directores de este trabajo. A José María Troya por el tiempo que me ha dedicado y por la confianza que ha depositado en mí desde el momento que ingresé en el departamento como miembro del proyecto PACOTE. A Juan Ignacio Ramos quiero agradecerle el haberme guiado en la parte numérica y su paciencia al explicarme con igual entusiasmo desde conceptos matemáticos simples hasta las partes más complejas de los fenómenos físicos que hemos tratado. También quiero mostrar mi gratitud a Manuel Díaz, por sus valiosas ideas y sugerencias en la definición de los objetivos y a Bartolomé Rubio por su incondicional apoyo en la definición del lenguaje desarrollado y en la redacción de los artículos que hemos publicado. Por otro lado, también quiero agradecer el desinteresado apoyo mostrado por otros miembros del departamento como son Francisco Villatoro y Carmen María García en los momentos en los que necesité de sus conocimientos y experiencia. Finalmente quiero dedicar este trabajo a mi familia, tanto a mis padres, como a mi mujer María José y a mi hijo Enrique por el tiempo que he dejado de estar con ellos durante la realización de este trabajo. v
7 Índice AGRADECIMIENTOS... V ÍNDICE...VII PRÓLOGO...1 CAPÍTULO 1. INTRODUCCIÓN MÉTODOS DE DESCOMPOSICIÓN DE DOMINIOS FORTRAN 90 Y HPF INTEGRACIÓN DEL PARALELISMO DE DATOS Y TAREAS Orca HPF/MPI KeLP-HPF HPF Adaptor MODELOS Y LENGUAJES DE COORDINACIÓN Paradigma de la Coordinación Integración del Paralelismo de Datos y Tareas Mediante Coordinación PROGRAMACIÓN PARALELA ESTRUCTURADA. PATRONES O ESQUELETOS NUESTRA APROXIMACIÓN, BCL ESTRUCTURA DE LA MEMORIA CAPÍTULO 2. BCL. UN LENGUAJE DE COORDINACIÓN BASADO EN FRONTERAS ESQUEMA DE UN PROGRAMA BCL EL NÚCLEO BÁSICO DE BCL El Proceso Coordinador Procesos Trabajadores Un ejemplo simple ASPECTOS ADICIONALES DEL LENGUAJE Tipos de datos para la manipulación de regiones Manipulación de regiones y dominios Mejoras en la definición de fronteras Creación automática de dominios y fronteras Funciones de frontera...60 vii
8 2.3.6 Reutilización de rutinas en Fortran EJEMPLO DE PROGRAMACIÓN Proceso Coordinador Procesos Trabajadores CONCLUSIONES CAPÍTULO 3. INTEGRACIÓN DEL PARALELISMO DE DATOS Y TAREAS US ANDO BCL INTEGRACIÓN CON BCL EL EJEMPLO DE JACOBI CON PARALELISMO DE DATOS Y TAREAS TRANSFORMADA RÁPIDA DE FOURIER EN DOS DIMENSIONES Implementación con BCL TRANSFORMADA DE FOURIER PARA UN PROBLEMA DE DIFUSIÓN Implementación con BCL Resolución con replicación de etapas Replicación de la transformada inversa CONCLUSIONES CAPÍTULO 4. USO DE PATRONES PARA LA INTEGRACIÓN DEL PARALELISMO DE DATOS Y TAREAS PATRONES Y PLANTILLAS El Patrón MULTIBLOCK El Patrón PIPE Plantillas de Implementación para las Tareas Computacionales Plantillas Multiblock Plantillas Pipeline EJEMPLOS El Patrón MULTIBLOCK para el Ejemplo de Jacobi El Patrón PIPE para la Transformada Rápida de Fourier La aplicación NPB-FT CONCLUSIONES CAPÍTULO 5. IMPLEMENTACIÓN BCL Integración del paralelismo de datos y tareas Traductor DIP Patrones Plantillas de implementación CONCLUSIONES viii
9 CAPÍTULO 6. RESULTADOS BANCO DE PRUEBAS SENCILLO MÉTODO DE JACOBI FFT EN DOS DIMENSIONES TRANSFORMADA DE FOURIER PARA UN PROBLEMA DE DIFUSIÓN UNA APLICACIÓN REAL DE DESCOMPOSICIÓN DE DOMINIOS CON BCL Resolución mediante Newton-Raphson Descomposición de dominios sin superposición Descomposición de dominios con superposición Presentación de resultados Estudio de eficiencia con BCL CONCLUSIONES CAPÍTULO 7. CONCLUSIONES Y TRABAJO FUTURO REFERENCIAS ANEXO. CODIFICACIÓN DE UN PROBLEMA DE REACCIÓN-DIFUSIÓN ix
11 Prólogo La cada vez mayor disponibilidad de ordenadores paralelos de altas prestaciones, así como de redes de estaciones de trabajo, está provocando un gran esfuerzo de investigación tanto en el desarrollo de métodos numéricos para resolver ecuaciones en derivadas parciales (Partial Differential Equations o PDEs) como en el desarrollo de lenguajes paralelos que saquen rendimiento a este tipo de ordenadores y que permitan abstraer al programador de unas arquitecturas hardware cada vez más complejas. Los métodos de descomposición de dominios son métodos generales y flexibles para resolver sistemas de ecuaciones lineales y no lineales que surgen de la discretización de PDEs. Elegir un lenguaje de programación adecuado para obtener una solución eficiente de este tipo de problemas es complicado, sobre todo si se pretende obtener una solución transportable y eficiente, capaz de sacar partido a las arquitecturas paralelas, en las cuales el programador tiene que coordinar distintos niveles de paralelismo y de localidad de los datos. Los lenguajes que permiten el paralelismo de tareas son más adecuados para programar la comunicación y sincronización entre los procesos que resuelven cada uno de los subdominios en que se divide el problema global. Por otro lado, el paralelismo de datos es más apropiado para la resolución de cada uno de los subdominios, ya que se pueden obtener soluciones eficientes sin (relativamente) un gran esfuerzo de programación. El propósito de esta tesis es presentar un lenguaje de coordinación transportable y eficiente para la resolución de problemas numéricos estructurados por bloques. Los aspectos relativos a la comunicación y sincronización entre los distintos subdominios que forman el dominio global de la aplicación se separan de la codificación del método numérico, incrementándose así la reusabilidad de ambas partes, la de coordinación y la computacional. Puesto que la causa más importante de comunicación entre los
12 subdominios son las fronteras entre estos, se ha denominado a este lenguaje BCL (Border-based Coordination Language). Este lenguaje también permite la integración del paralelismo de datos y tareas, de modo que en la parte de coordinación se describen, junto con los distintos dominios, las distribuciones de estos dominios entre los distintos procesadores pertenecientes a cada tarea que los va a resolver. Estas tareas son codificadas con un lenguaje que permite el paralelismo de datos, HPF (High Performance Fortran), de forma que se incrementa notablemente la eficiencia y la escalabilidad de la solución. Aunque BCL está diseñado para la solución de problemas de descomposición de dominios y estructurados por bloques, otros problemas científicos que se pueden beneficiar de la integración del paralelismo de datos y tareas y cuyo patrón de comunicación está basado en el intercambio de matrices también se pueden plantear con BCL. Sin embargo, este tipo de problemas puede ser expresado mejor mediante el uso de patrones o esqueletos. Por esta razón, se han desarrollado una serie de construcciones de alto nivel que permiten la definición de forma declarativa de un conjunto de tareas HPF que trabajan de forma coordinada. Además, se ofrece la posibilidad de utilizar plantillas de implementación para facilitar la programación de la parte de computación de la aplicación. A este conjunto de construcciones se le ha dado el nombre de DIP (Domain Interaction Patterns) para diferenciarlo del resto de BCL. La eficiencia y expresividad del lenguaje se demuestra mediante la codificación de diversas aplicaciones científicas como la resolución de la ecuación de Laplace en dos dimensiones, la transformada rápida de Fourier en dos y tres dimensiones y la resolución de ecuaciones de reacción-difusión en dominios bidimensionales irregulares. Mención especial hay que dedicar a esta última ya que, utilizando BCL, se han hecho gran cantidad de pruebas para obtener el comportamiento de distintos métodos de descomposición de dominios con un sistema de dos ecuaciones no lineales de reaccióndifusión. Se han utilizado dominios irregulares con esquinas reentrantes y se ha enfocado el problema desde dos puntos de vista distintos, el de la exactitud de los resultados y el de la eficiencia de la solución.
13 3 Capítulo 1. Introducción Se podría llegar a pensar que a medida que los ordenadores se hagan más potentes, conseguirán, algún día, ser lo suficientemente rápidos como para satisfacer la creciente demanda de potencia de cálculo. Sin embargo, la historia nos revela que cuando una tecnología satisface las necesidades de aplicaciones conocidas, surgen otras aplicaciones (o las mismas con mayor número de puntos y matrices más grandes) como consecuencia de esa tecnología, demandando nuevos avances [Foster 95]. Así, por ejemplo, un informe preparado por el gobierno británico a finales de los años cuarenta concluyó que las necesidades de Gran Bretaña serían cubiertas con dos o tres ordenadores. Los autores de este informe sólo pensaban en el desarrollo de tablas de balística. Igualmente, las perspectivas iniciales de la compañía Cray Research Inc. predecían un mercado de unos diez superordenadores. En estas predicciones solamente se tuvo en cuenta la demanda de computación de un limitado número de disciplinas. Tradicionalmente, la demanda a más alto nivel de recursos computacionales ha sido motivada por simulaciones numéricas de sistemas complejos, como por ejemplo, predicciones meteorológicas, modelado global del clima, dispositivos mecánicos, aeronáutica, procesos industriales, reacciones químicas, etc. Actualmente, en cambio, el factor más importante que dirige el desarrollo de ordenadores cada vez más rápidos viene determinado por las nuevas aplicaciones comerciales, las cuales requieren ordenadores capaces de manejar gran cantidad de datos de manera sofisticada. Sin embargo, las aplicaciones científicas tradicionales siguen siendo importantes consumidores de la tecnología de computación paralela. A medida que los resultados de las investigaciones teóricas llevan a problemas no lineales y a medida que la experimentación resulta más costosa o incluso impracticable, las necesidades de estudios mediante simulación computacional se hacen más importantes, aumentando así la necesidad de cálculo.
14 4 Introducción. Tal demanda de cálculo sólo puede ser satisfecha mediante los ordenadores paralelos y distribuidos. Éstos se pueden definir como un conjunto de procesadores capaces de trabajar cooperativamente para resolver un problema computacional. Esta definición es lo suficientemente amplia como para abarcar desde los grandes superordenadores que disponen de cientos o incluso miles de procesadores hasta las redes de estaciones de trabajo y sistemas empotrados. Pero al mismo tiempo que estos sistemas paralelos y distribuidos constituyen un buen soporte para este tipo de aplicaciones, presentan nuevos retos para la tecnología del software. Casi de forma general, se puede decir que los grandes avances tecnológicos en el campo del desarrollo de soportes informáticos físicos se ven de algún modo frenados a la hora de poder utilizarse de una manera inmediata y satisfactoria debido, en gran parte, al no tan notable avance paralelo en el campo del desarrollo del soporte informático lógico. Aunque siempre ha sido un punto fundamental el disponer de una tecnología software adecuada, esta necesidad se transforma en exigencia si se desea aprovechar la potencia de los nuevos equipos informáticos para dar soporte a las grandes y complejas aplicaciones actuales. Algunas de las razones que explican las dificultades del desarrollo del software paralelo son las siguientes: El pensamiento humano consciente nos parece ser secuencial (aunque algunos aspectos de la percepción se desarrollan de forma paralela) con lo cual, hay alguna tendencia a considerar el software como algo secuencial. Los fabricantes de ordenadores paralelos han dirigido su mercado hacia la computación de alto rendimiento científica y numérica en lugar del mercado comercial, mucho mayor y más efectivo. El mercado de la computación de alto rendimiento ha sido siempre pequeño y ha tendido hacia aplicaciones militares. Esto hace que los ordenadores paralelos sean caros puesto que se venden pocos. El tiempo de ejecución de un programa secuencial varía en no más de un factor de una constante cuando se migra de un sistema uniprocesador a otro. Esto no es así en computación paralela, en donde los tiempos de ejecución pueden cambiar en un orden de magnitud cuando se cambia de arquitectura. La naturaleza no
15 Introducción 5 local de un programa paralelo requiere la interacción con la estructura de comunicación, y el coste de cada comunicación depende en gran medida de cómo estén dispuestos tanto el programa como la interconexión. La portabilidad es, por tanto, un factor mucho más serio que en programación secuencial. El hecho de que la programación paralela sea complicada y la gran cantidad de programas secuenciales disponibles hacen que en ocasiones se prefiera un programa secuencial a tener que desarrollar uno paralelo. Los esfuerzos que se han hecho en desarrollar lenguajes paralelos se han dirigido tanto desde arriba, es decir, desde la elegancia de la abstracción teórica, como desde abajo, sacando partido directamente a la tecnología. Los modelos muy abstractos ocultan incluso la presencia de paralelismo a nivel software. Tales modelos hacen que la programación sea fácil y transportable pero la eficiencia es, generalmente, difícil de conseguir. En el otro extremo, los modelos de bajo nivel hacen que todos los detalles de la programación paralela se tengan que hacer explícitamente, de forma que la programación se hace muy complicada y muy poco transportable, pero, generalmente, más eficiente. Sin embargo, el mayor progreso obtenido hasta ahora y los resultados más esperanzadores se basan en dirigir el desarrollo desde el medio, atacando el problema desde el nivel del modelo que sirve como interfaz entre los aspectos del software y el hardware. Una clasificación muy interesante y detallada de modelos de paralelismo atendiendo a su nivel de abstracción se puede encontrar en [Skillicorn y Talia 98]. Otra clasificación similar es la que se puede encontrar en [Pelagatti 98]. De esta forma, en el nivel más alto de abstracción se tienen los modelos de paralelismo implícitos en los que el programador no tiene que preocuparse del paralelismo, utilizando un lenguaje secuencial (que puede ser tanto imperativo como declarativo). La clave de estos modelos es que no se requiere ningún esfuerzo por parte del programador para desarrollar o manejar el paralelismo. El compilador y su soporte de tiempo de ejecución se han desarrollado para detectar el paralelismo de manera transparente. Una de las ventajas de estos modelos es que los códigos antiguos pueden ser paralelizados sin grandes esfuerzos por parte del programador. En estos sistemas, la detección del
16 6 Introducción. paralelismo se basa en el descubrimiento de las dependencias entre las sentencias del programa. El problema de estos modelos surge a la hora de descubrir cuándo dos sentencias se refieren a la misma dirección de memoria y, por tanto, deben ser ejecutadas secuencialmente. Desafortunadamente, no es factible resolver este problema directamente, ni siquiera para expresiones lineales de índices de arrays, ya que encontrar estas dependencias es un problema NP-completo. Lo que hacen los compiladores es intentar detectar qué iteraciones de bucles son independientes, mediante la realización de varias comprobaciones con las expresiones de los índices. Otras aproximaciones intentan hacer reorganizaciones del código. Sin embargo, no existe ninguna evidencia de que se pueda obtener un buen programa paralelo partiendo de un programa secuencial que resuelva el mismo problema. Esto es debido a que un buen algoritmo paralelo, para un problema dado, puede ser completamente distinto del obtenido de cualquier transformación de incluso el mejor programa secuencial. Esta es la razón por la cual, por el momento, el programador debe tener en cuenta, de algún modo, el paralelismo incluso usando un modelo implícito, lo cual nos acerca a los modelos explícitos. Dentro de los modelos de paralelismo explícitos se encuentran aquellos completamente abstractos, en los cuales el programador desarrolla un algoritmo paralelo de acuerdo a un modelo de computación muy abstracto, dejando muchos aspectos del paralelismo al sistema. Los lenguajes de paralelismo de datos entrarían dentro de estos modelos. De esta forma, para la paralelización de código secuencial, se han desarrollado diversos dialectos de Fortran (Vienna Fortran [Zima y otros 92], Fortran 90 [Adams y otros 92] y HPF [Koelbel y otros 94]) que proporcionan construcciones que permiten al programador expresar el paralelismo explícitamente. Los modelos explícitos parcialmente abstractos son aquellos en los que el programador se puede abstraer de detalles de la arquitectura, pero ha de especificar tanto la comunicación y sincronización entre procesos como la tarea a desarrollar por cada uno de ellos. Típicamente, las instrucciones no paralelas son tomadas de algún
17 Introducción 7 lenguaje secuencial. Algunos ejemplos dignos de resaltar son Fortran M [Foster y Chandy 92], basado en el paso de mensajes, Linda [Gelernter 85], que se comentará más adelante, y CC++ [Chandy y Kesselman 93] que extiende C++ con un espacio de direcciones compartido. Otro enfoque que ha tenido una gran aceptación es el del desarrollo de bibliotecas que facilitan primitivas de interacción que pueden ser llamadas por lenguajes secuenciales. Este el caso, entre otros, de PVM [Geist y otros 94] y MPI [MPIF 95] que permiten desarrollar aplicaciones eficientes, incluso para la paralelización de códigos complejos preexistentes [Díaz, Llopis, Pastrana, Rus y Soler 96]. Por último, habría que mencionar los modelos explícitos dependientes de la máquina, en los cuales el programador tiene el control total sobre la asignación de procesos a procesadores y el flujo de control. Típicamente, estos modelos proporcionan el paralelismo mediante una biblioteca específica para la máquina, utilizable desde C o Fortran, como puede ser el MPP System para Cray T3D. Sin embargo, existen ejemplos dependientes de la máquina que no se basan en bibliotecas sino que son lenguajes paralelos como puede ser Occam [INMOS 94] para los sistemas basados en Transputers [May y otros 86]. Una clasificación distinta es la que tradicionalmente se ha hecho de los lenguajes según el tipo de problemas a los que están orientados. Este enfoque, que se viene utilizando desde los primeros lenguajes secuenciales (como Fortran para cálculo científico y COBOL para programas de gestión), se puede realizar también para los lenguajes paralelos que no son de propósito general, sino que están orientados hacia una clase específica de problemas [Pelagatti 98]. Esta especialización permite que se pueda simplificar el modelo de paralelismo, limitándolo a unas cuantas estructuras y facilitando así la tarea del programador. En nuestra aproximación nos hemos planteado como objetivo la definición de un lenguaje de coordinación que ayude a desarrollar programas paralelos para codificar aplicaciones científicas de forma sencilla, transportable y eficiente. Nos hemos centrado especialmente en aquellas en las que la comunicación se limita a intercambio de (sub)matrices como son los problemas de descomposición de dominios. El aprendizaje de este lenguaje no debe ser un gran problema para el programador, sino que debe
18 8 Introducción. abstraer los aspectos de comunicación y sincronización de forma amigable, de modo que la paralelización no le distraiga de la codificación de los métodos numéricos empleados para resolver el problema. A continuación, se describen los métodos de descomposición de dominios a cuya resolución paralela va destinada la mayor parte de este trabajo. Como es bien sabido, el lenguaje más utilizado para la implementación de la solución de este tipo de problemas ha sido principalmente Fortran. Es por ello, que se le ha dedicado un apartado a los lenguajes que han surgido de la evolución de Fortran hacia el paralelismo, Fortran 90 y HPF, y que sirven de lenguaje base para nuestra aproximación. Ésta se basa en sacar provecho de la integración del paralelismo de datos y tareas (apartado 1.3) mediante los lenguajes de coordinación y la programación paralela estructurada (apartados 1.4 y 1.5, respectivamente). En el apartado 1.6, introducimos brevemente el lenguaje desarrollado y lo comparamos con el trabajo relacionado. Para concluir la introducción, se presenta el esquema del resto de la memoria. 1.1 Métodos de Descomposición de Dominios. La mayoría de los problemas encontrados en física e ingeniería se caracterizan por tener dominios irregulares, interacciones entre sistemas distintos, fenómenos físicos diferentes, distintas fases, etc. Para obtener una solución precisa de estos problemas se deben tener en cuenta distintos aspectos: La geometría de cada dominio. La física de los distintos fenómenos que tienen que ser modelados. Los métodos numéricos a emplear para resolver cada dominio de forma que, por ejemplo, gradientes pronunciados, capas internas o en la frontera sean resueltos de manera apropiada. Las condiciones a imponer en las fronteras entre los dominios.
19 Introducción 9 Si se quiere sacar partido a los ordenadores paralelos y su enorme potencial para la resolución numérica de problemas físicos y de ingeniería, se debe tener en cuenta la arquitectura de estos, lo que puede conllevar importantes cambios en la solución implementada. Los métodos de descomposición de dominios son métodos generales y flexibles para la resolución de ecuaciones algebraicas lineales y no lineales que surgen de la discretización de ecuaciones en derivadas parciales y que utilizan propiedades de estas ecuaciones para obtener soluciones eficientes [Smith y otros 96]. Actualmente se está realizando un gran esfuerzo de investigación en estos métodos aunque su origen proviene del siglo XIX [Schwarz 90]. Hay que tener en cuenta que el término descomposición de dominios tiene significados distintos para los especialistas en la disciplina de las PDEs: En computación paralela, generalmente significa el proceso de distribuir los datos de un modelo computacional entre los procesadores de un ordenador de memoria distribuida. En este contexto, descomposición de dominios se refiere a las técnicas para descomponer una estructura de datos y que puede ser independiente de los métodos numéricos. En análisis asintótico, significa la separación del dominio físico en regiones que pueden ser modeladas mediante ecuaciones o fenómenos físicos diferentes, con las interfaces entre las regiones manejadas por diversas condiciones (por ejemplo, continuidad de las funciones). En este contexto, descomposición de dominios se refiere a la determinación de qué ecuaciones resolver. En los métodos de precondicionador, descomposición de dominios se refiere al proceso de subdividir la solución de un gran sistema de ecuaciones lineales en problemas más pequeños, cuyas soluciones pueden ser utilizadas para producir un precondicionador para el sistema de ecuaciones que resulta de discretizar la PDE en el dominio completo. En este contexto, descomposición de dominios se refiere sólo al método de resolución para el sistema de ecuaciones algebraicas que surgen de la discretización.
20 10 Introducción. Independientemente de esta distinción, los métodos de descomposición de dominios pueden clasificarse en aquellos que utilizan superposición de dominios (también denominados métodos de Schwarz) y aquellos que utilizan dominios sin superposición (métodos de Schur). Los problemas que se tratan en esta tesis pertenecen a la primera y segunda categoría antes mencionadas (computación paralela y análisis asintótico) y se han considerado principalmente problemas con superposición de dominios. En [Ramos y Soler 01] se realiza un estudio de distintos métodos para la resolución de un sistema de dos ecuaciones no lineales de reacción difusión en dos dimensiones. Para este problema se emplean dos tipos de dominios, por un lado, dominios regulares y, por el otro, dominios irregulares que se pueden descomponer en bloques regulares. Se estudian métodos con superposición y sin ella, aplicando, además, distintas condiciones en la frontera entre los dominios para cada uno de los métodos (condiciones de Dirichlet, Neumann, Robin y combinaciones de ellas). El resultado de aplicar estos métodos, así como la resolución del mismo problema mediante otros métodos sin descomposición de dominios y la comparación entre ellos se encuentra en [Ramos, Soler y Troya 98]. El desarrollo del software paralelo para tales aplicaciones es una tarea difícil debido a la complejidad de la solución aplicada a cada dominio junto con el método de descomposición empleado, especialmente cuando el producto resultante tiene que ser transportable y eficiente y, por tanto, capaz de aprovechar las ventajas de una gran diversidad de arquitecturas paralelas. En [Drashansky, Joshi y Rice, 95] se presenta SciAgents, una herramienta diseñada para la resolución de problemas mediante descomposición de dominios. Con esta aproximación, el programador construye su aplicación mediante el enlace de las soluciones de diversas PDE en distintos dominios mediante agentes. Éstos vienen a ser distintos procesos (uno para cada subdominio y uno para cada interfaz entre éstos) que se pueden definir y coordinar mediante una interfaz gráfica. Cada dominio se puede resolver mediante un paquete estándar (PELLPACK [Houstis y otros 89]) pensado para la resolución de PDE elípticas en paralelo. SciAgents no es un lenguaje de programación sino una herramienta gráfica. El programador tendrá que escribir el código para resolver cada dominio y la interfaz entre éstos mediante un lenguaje de programación.
21 Introducción 11 El lenguaje más utilizado en programación científica es sin duda Fortran. Éste ha sido modificado recientemente para adaptarlo a las nuevas metodologías de programación y a los nuevos ordenadores paralelos, surgiendo así dos nuevos estándares, Fortran 90 [Adams y otros 92][Metcalf y Reid 90] y HPF [Koelbel y otros 94] cuyas características generales se comentan en el apartado siguiente. 1.2 Fortran 90 y HPF. En muchos aspectos, Fortran 90 es una modernización (con compatibilidad hacia atrás) del gran estándar de programación científica Fortran 77 [ANSI 78]. Sus dos mayores aportaciones con respecto a su predecesor son el manejo de arrays y los tipos abstractos de datos. El objetivo de su definición fue el de modernizar Fortran de manera que pueda continuar su larga historia de lenguaje de programación científico y de ingeniería. Un objetivo secundario fue el de proporcionar características de los lenguajes modernos para permitir que los programadores abandonen el uso de formas obsoletas y no deseables de Fortran 77. Aunque proporciona nuevas estructuras, no se ignoraron los requisitos de los códigos heredados. No hubiese tenido tanta aceptación si los miles de códigos ya escritos en Fortran 77 hubiesen tenido que ser modificados para adaptarlos al nuevo estándar. Por tanto, Fortran 90 incluye todas las características de Fortran 77, permitiendo, por un lado, la reutilización del software ya escrito y, por otro, la aplicación de la programación estructurada y de los tipos abstractos de datos para la realización de software nuevo. Además de todas las características de Fortran 77, se le han añadido extensiones significativas, algunas de las cuales (como la sintaxis de manejo de arrays) facilitan al compilador determinar las operaciones que se pueden realizar concurrentemente. Una lista detallada y comentada de todas las nuevas características de Fortran 90 se puede encontrar en [Press y otros 96]. Incluso antes de que se aprobara formalmente el estándar de Fortran 90, ya se escuchaban voces que pedían nuevas extensiones. En particular, aquellas que permitieran desarrollar aplicaciones transportables y eficientes en la nueva generación de ordenadores paralelos. Tomando como base a Fortran 90, principalmente por su sintaxis de arrays, y utilizando conceptos de dialectos como Vienna Fortran [Chapman y

References: Resolución 
 Resolución 
 Resolución 
 Resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución