Desarrollo de un código oportunista y su aplicación a la
mecánica de fluidos
Enrique Gallego Abad ([email protected])
Escuela Técnica Superior de Ingenieros Aeronáuticos
Universidad Politécnica de Madrid
Tutor: Javier Jiménez Sendín
Introducción
Hoy en día, la herramienta básica de trabajo en la mayoría de las disciplinas de la ciencia son los
ordenadores. No es distinta la Mecánica de Fluidos, en la que se da el caso, además, de que no han
sido resueltas las ecuaciones que la gobiernan (salvo para casos muy particulares). La razón
principal es que no existen recursos que permitan hacerlo en un tiempo razonable.
No obstante, existen diversos problemas fluidodinámicos resolubles con la capacidad
computacional actual que no han sido resueltos � salvo por instituciones con supercomputadores �
y que podrían ser resueltos con los recursos computacionales de los que se disponen (sin llegar a
usar supercomputadores) si se lograse una forma de aprovechar dichos recursos eficientemente.
Existen en el mundo diversas tendencias cuyo objetivo final, al igual que en esta investigación, es
poder aprovechar los recursos disponibles de la forma más eficiente posible. Esto podría permitir
resolver grandes problemas numéricos sin necesidad de superordenadores, solamente conectando
simples PC’s u otros recursos de los que se dispongan. Numerosos grupos de investigación pueden
beneficiarse de estas técnicas de aprovechamiento de recursos para desarrollar proyectos que
necesiten de gran capacidad computacional, sin necesidad de realizar fuertes inversiones en
superordenadores.
El Código Oportunista desarrollado está orientado a realizar esta tarea: aprovechamiento eficiente
de los recursos computacionales.
La simulación numérica en la Mecánica de Fluidos
Los principios físicos fundamentales que rigen la mecánica del movimiento de un fluido se pueden
expresar mediante un sistema de ecuaciones diferenciales en derivadas parciales. Se ha dedicado
mucho esfuerzo a la búsqueda de una solución analítica de esas ecuaciones, pero debido a que este
sistema de ecuaciones es no lineal, solo ha sido posible encontrar soluciones analíticas para casos
sencillos.
La Mecánica de Fluidos Computacional se encarga de aproximar estas ecuaciones mediante
relaciones más sencillas de carácter algebraico, que puedan resolverse numéricamente empleando
operaciones elementales: suma, resta, multiplicación y división. Esta técnica, muy empleada en
otras ramas del conocimiento, se denomina discretización.
Debido a la forma en que se realizará esta aproximación, la solución resultará ser un conjunto de
valores correspondientes a las magnitudes físicas del flujo localizadas en un número discreto de
puntos del campo fluido. El volumen de datos que se requiere manejar de forma repetitiva para
hallar una solución numérica de un problema de mecánica de fluidos es generalmente tan alto, que
el desarrollo de la Mecánica de Fluidos Computacional en las tres últimas décadas ha seguido al de
los computadores digitales. Incluso hoy en día, la mayoría de los problemas de interés industrial no
pueden ser abordados satisfactoriamente.
La Mecánica de Fluidos Computacional en la actualidad
Notas históricas
Una de las primeras aportaciones a la Mecánica de Fluidos desde un enfoque computacional es la
debida al trabajo de Kopal (1947), que compiló tablas masivas de datos referentes a un flujo
supersónico alrededor de conos afilados, resolviendo numéricamente las ecuaciones que rigen el
2
problema. Los cálculos fueron realizados en un ordenador digital primitivo del Instituto
Tecnológico de Massachusetts. Sin embargo, la primera generación de soluciones numéricas
aplicando mecánica de fluidos computacional data de los años 50 y principios de los 60, ante la
necesidad de calcular flujos hipersónicos alrededor de vehículos de reentrada. Dichos flujos están
caracterizados por fenómenos físicos muy complicados, como son las reacciones químicas, que
combinados con las ecuaciones de la mecánica de fluidos hacen imposible obtener soluciones
analíticas incluso para las geometrías más sencillas.
La segunda generación de soluciones de la Mecánica de Fluidos Computacional, que hoy en día
sigue siendo representativa de la disciplina, proviene de la resolución de problemas de mecánica de
fluidos que son complejos por sí solos, sin necesidad de añadir ecuaciones adicionales. La única
posibilidad para resolver estos problemas es el uso de computadoras.
Algunos ejemplos de estos problemas son flujos con zonas subsónicas y supersónicas o flujos
viscosos en los que se requiere resolver las ecuaciones de Navier-Stokes para obtener soluciones
satisfactorias. Éste es el caso de la turbulencia. Esta segunda generación de soluciones surgió en los
años 70, al amparo del enorme crecimiento que experimentaron las prestaciones de los ordenadores.
La situación actual
El papel de la Mecánica de Fluidos Computacional en las ciencias y en la ingeniería se ha hecho tan
importante hoy en día que se puede considerar una tercera rama de la Mecánica de Fluidos, junto
con las ramas teórica y experimental, complementando y alimentándose de ambas. La Mecánica de
Fluidos Computacional cubre un amplio espectro de problemas, que se extiende desde la generación
de métodos de diseño en ingeniería hasta el cálculo detallado de soluciones de las ecuaciones de
Navier-Stokes, complementando los resultados experimentales. En un extremo, existen paquetes de
diseño para sistemas de tuberías que requieren tiempos de cálculo del orden de segundos en un
ordenador personal. En el otro, existen códigos que emplean cientos de horas de cálculo en los
superordenadores más grandes.
Los modelos teóricos que proporcionan soluciones analíticas en forma cerrada suelen obtenerse tras
simplificar las ecuaciones de Navier-Stokes, después de eliminar los términos menos importantes en
cada caso particular. De esta forma, las soluciones teóricas identifican los parámetros
fundamentales que rigen cada problema, y proporcionan información de la influencia de la
3
variación de dichos parámetros sobre el fenómeno físico que representan. Sin embargo, el campo de
aplicación de estos modelos teóricos está restringido a problemas muy sencillos, de escaso interés
práctico. La Mecánica de Fluidos Computacional permite extender el estudio detallado a problemas
más complejos y de mayor interés práctico.
Sin embargo, el aspecto más importante de la aplicación de la Mecánica de Fluidos Computacional
a la industria ha sido su impacto sobre los ensayos en túnel y en banco, debido a la rápida reducción
del coste de computación promovida por el gran incremento de las prestaciones de los ordenadores.
Hoy en día resulta más barato calcular numéricamente las propiedades de una aeronave que
medirlas en un túnel aerodinámico. De hecho, en la industria aeronáutica el diseño preliminar se
basa principalmente en cálculos realizados por ordenador, empleándose los ensayos en túnel para
afinar detalles en las fases finales de diseño. Esto era impensable hace años, cuando la totalidad de
la información empleada en el diseño provenía de ensayos en túnel.
Las ecuaciones de la dinámica de fluidos adimensionalizadas dependen de un gran número de
parámetros adimensionales, como son el número de Reynolds, el número de Strouhal, el número de
Prandtl, el número de Mach, etc... Los ensayos en túnel aprovechan aquellos casos en los que el
flujo depende de un número reducido de parámetros (uno o dos), realizándose ensayos en
geometrías semejantes a escala, seleccionando adecuadamente las propiedades del fluido para que
conserven los parámetros adimensionales de que depende el flujo. De esta manera, en base a la
semejanza dimensional, los resultados obtenidos en el ensayo serán aplicables al caso real que se
quiere estudiar una vez escalados convenientemente. El problema de estos ensayos experimentales
es que la mayoría de los flujos requieren varios parámetros adimensionales para su descripción, por
lo que resulta imposible preparar experimentos que verifiquen los principios de la semejanza
dimensional en estos casos. En particular, esto es lo que ocurre con los flujos a altos números de
Reynolds.
Otro inconveniente adicional de los ensayos consiste en la dificultad para realizar medidas
experimentales, bien porque el instrumento de medida perturba el campo fluido, porque no tenga la
precisión adecuada, porque el punto en el que se quiera medir sea inaccesible o por la dificultad de
medir una determinada variable del flujo con la tecnología actual. En principio todas estas
dificultades no existen en los experimentos numéricos.
4
Es muy importante señalar que en el ordenador se pueden llevar a cabo experimentos irrealizables
en el laboratorio. Por ejemplo, baste pensar en la dificultad técnica de imponer una condición de
contorno adiabática en un ensayo en laboratorio, frente a simular esa misma condición en un
ordenador. Incluso se pueden implementar condiciones de contorno exóticas, aplicar filtros o
representar las contribuciones de los distintos términos en las ecuaciones, a fin de identificar los
mecanismos físicos que gobiernan un determinado problema. Este último punto es sin duda el valor
más importante de la Mecánica de Fluidos Computacional en el campo de la investigación
fundamental.
Además, mientras que las simulaciones numéricas permiten obtener soluciones detalladas del
campo fluido, en los experimentos estas soluciones son difíciles de obtener, calculándose
parámetros globales del flujo como por ejemplo los coeficientes de sustentación, resistencia,
convección, etc...
Las razones anteriores, que justifican la incorporación de la Mecánica de Fluidos Computacional
como una nueva rama de la Mecánica de Fluidos, están condicionadas a la capacidad de resolver de
forma precisa las ecuaciones de Navier-Stokes, lo que es prácticamente imposible con los recursos
computacionales disponibles en la actualidad para la mayor parte de los flujos de interés industrial.
Fuentes de error de la simulación numérica
Las fuentes de error de la simulación numérica son tres, a parte del error de redondeo del
procesador.
�� Las ecuaciones diferenciales que se resuelven suelen tener aproximaciones o
idealizaciones, ante la dificultad inherente de la resolución numérica directa de las
ecuaciones de Navier-Stokes. Este aspecto es crítico en la resolución de flujos
turbulentos.
�� La discretización del problema produce errores de truncación.
�� En general, la resolución de las ecuaciones discretizadas se lleva a cabo mediante
métodos iterativos, que no proporcionan la solución exacta.
5
En principio, cuando las ecuaciones que gobiernan el flujo se conocen con exactitud, se pueden
alcanzar soluciones numéricas con el grado de precisión que se desee. Sin embargo, para un gran
número de problemas o bien no se conocen las ecuaciones o bien su resolución no es posible en el
presente. Este es el caso de algunos problemas relacionados con la combustión, los fluidos
multifásicos o la turbulencia. Incluso en el caso de que se conozcan las ecuaciones y puedan
resolverse con exactitud, es lícito pensar en algún modelo para disminuir el coste de la solución.
Para validar estos modelos es indispensable disponer de información experimental, aunque hoy en
día también se emplean métodos numéricos de alta precisión para esta tarea.
Los errores de discretización se pueden reducir empleando técnicas de interpolación más precisas,
lo que implica aumentar el tiempo de cálculo, o empleando discretizaciones más finas, lo que
aumenta el volumen de datos a procesar.
En la resolución de las ecuaciones discretizadas se suele llegar a un compromiso: los métodos
directos proporcionan soluciones exactas a estas ecuaciones, pero resultan muy costosos en tiempo
de cálculo. Los métodos iterativos son más rápidos, pero producen errores al detener el proceso de
iteración antes de que la solución converja a la solución exacta.
Por último, es importante tener en cuenta que para que la solución de una simulación de mecánica
de fluidos computacional sea correcta no es suficiente con que lo parezca. No hay que dejarse llevar
por las llamativas visualizaciones que proporcionan las simulaciones por ordenador. Cuanto más
crítico sea uno mismo con sus resultados menos críticos serán los demás.
Código Oportunista
La gran cantidad de datos que se generan en la resolución de problemas de flujos turbulentos a altos
números de Reynolds mediante simulación directa hace necesaria una potencia computacional
enorme para su postproceso. Esta tarea en sí es bastante sistemática, y dividida en partes podría ser
realizada por cualquier PC del Departamento. Partiendo de esta idea se inició un estudio de técnicas
de aprovechamiento de recursos.
6
En un principio se optó por realizar un estudio sobre la idoneidad de implementar Tecnología Grid
en colaboración con otros grupos de Mecánica de Fluidos. La conclusión fue que dicha tecnología,
en la fase de desarrollo en que se encuentra, no suponía una solución adecuada. Llegado a este
punto se decidió crear un código escrito en Fortran 77 bajo un sistema operativo tipo UNIX (en
particular Linux) que permitiese lanzar y monitorizar cualquier código paralelizable. De esta forma
surge el Código Oportunista destinado a mejorar el aprovechamiento de los recursos
computacionales de que dispone el área de Mecánica de Fluidos Computacional del Departamento
de Motopropulsión y Termofluidodinámica de la Escuela Técnica Superior de Ingenieros
Aeronáuticos.
Antecedentes del tema tratado
��Tecnología grid
La idea de desarrollar un código de este tipo, como ya se ha mencionado, surgió a partir de un
estudio previo sobre la idoneidad de implantar Tecnología Grid en el Departamento para:
�� disminuir los tiempos de proceso de los programas de resolución y postproceso de
problemas fluidodinámicos turbulentos.
�� tener la capacidad computacional necesaria para correr programas imposibles de correr
individualmente en cualquiera de los equipos actuales.
El resultado negativo de este estudio llevó a considerar otras alternativas de aprovechamiento de
recursos, decidiéndose por el código que aquí se presenta.
Se puede decir de forma básica que un ‘Grid’ es un conjunto de recursos computacionales
repartidos por todo el mundo y que son compartidos por una comunidad de usuarios bajo unas
reglas determinadas.
El concepto de ‘Grid’ surge de las siguientes consideraciones:
- gran cantidad de recursos de CPU no se usan durante largo tiempo.
- los PC’s actuales ofrecen altas prestaciones a bajo coste.
7
- cada ordenador conectado a Internet puede tener acceso al resto de ordenadores
conectados a la red.
- los proyectos científicos actuales necesitan de gran capacidad computacional para el
procesado de datos.
De este modo, interconectando una gran cantidad de ordenadores (potencialmente todos los del
mundo) y usando un software especial de gestión de recursos, denominado ‘middleware’, se puede
configurar un ‘Grid’ que genera un poderoso entorno computacional al que puede suscribirse
cualquier institución para correr sus programas más complejos.
��Seti@home
“Search for Extraterrestial Intelligence”, más conocido como SETI es una investigación científica
que trata de determinar si existe vida fuera de la Tierra.
Uno de los métodos utilizados en esta investigación es el de captar las señales de radio artificiales
procedentes de las estrellas a través de un telescopio situado en Arecibo (Puerto Rico). El gran
problema de este método es la generación de una enorme cantidad de datos imposible de procesar
con los recursos de la UC Berkeley. El proyecto SETI tampoco puede afrontar la adquisición de los
recursos computacionales necesarios, por lo que surge la idea del SETI@HOME que permite
participar a cualquier persona que posea un ordenador conectado a internet en el tratamiento de
datos.
La idea básica del SETI@HOME es tomar prestados los ordenadores de todas las personas que
deseen participar en el proyecto y enviarles cargas de trabajo cuando los propietarios no los estén
usando. Para ello es necesario que en cada ordenador colaborador esté instalado el programa de
SETI@HOME, el cual permite la recepción de datos vía internet, el proceso de tales datos y el
envío de los resultados vía internet al servidor de SETI.
8
Desarrollo y aplicación del Código Oportunista
El programa desarrollado es capaz de correr códigos paralelizables (denominados programas
esclavos) en los distintos ordenadores que tiene el Departamento (incluidos clusters y PCs) que
trabajen bajo sistema operativo tipo UNIX, como ya se ha mencionado.
Esta investigación se ha centrado en el desarrollo y aplicación de un código que permita realizar el
postproceso de los datos obtenidos de la resolución del flujo turbulento a altos números de
Reynolds entre dos placas planas mediante simulación numérica directa. En este problema se desea
conocer la cantidad y las propiedades de los torbellinos que se generan en el flujo a distintos
números de Reynolds� (Re�=950 y Re�=1880 han sido los empleados durante el desarrollo del
Código Oportunista). Al aumentar el número de Reynolds, aumenta el rango de escalas de
torbellinos presentes en el flujo turbulento, y con ello la cantidad de información.
El fin principal no es el de conseguir mejorar los tiempos de ejecución del programa esclavo, sino el
de poder ejecutar este programa en aquellas ocasiones en las que fuese imposible de correr con
cualquiera de los recursos del Departamento de forma individual, debido a la gran cantidad de datos
a manejar.
Lo primero que se va a hacer es presentar los dos programas de los que se va a estar hablando a lo
largo este texto:
��VORXY. Esta es la denominación del programa de postproceso de datos obtenidos en la
resolución del flujo turbulento entre dos placas planas a alto número de Reynolds. Éste es el
programa que ha servido de aplicación a la investigación desarrollada.
��MAESTRO. Así se denomina al programa de distribución y monitorización de tareas a los
distintos nodos de la red informática. Éste es el programa desarrollado en la investigación
que se ha realizado (Código Oportunista).
A continuación se va a explicar el funcionamiento básico del programa VORXY de postproceso de
datos, así como las modificaciones necesarias para que este programa pueda ser ejecutado bajo las � El número de Reynolds del que se habla Re� está basado en coordenadas de pared, no es el del flujo medio, cuyo valor estaría entorno a 25000 para el caso de Re�=950.
9
órdenes del programa MAESTRO. Además se explicará la estructura del programa MAESTRO y se
darán los resultados obtenidos durante la investigación.
VORXY. El postproceso de datos
El objetivo del programa es obtener en variables físicas los valores, en un instante de tiempo
determinado, de:
��Componentes de la velocidad.
��Componentes de la vorticidad.
��Derivadas de la velocidad respecto a las distintas direcciones.
��Otras variables empleadas en la identificación de torbellinos.
Se dispone de 24 archivos de datos (192 MB cada uno) correspondientes a la resolución del
problema a un Re�=950, y de 81 archivos de la resolución a Re�=1880 (1.6 GB cada uno). Cada
archivo contiene los datos del flujo turbulento del canal en un instante de tiempo determinado, es
decir, tras la consecución de varios pasos temporales.
La discretización espacial empleada en la simulación es mixta:
��Fourier. Se emplean desarrollos en serie de Fourier en las direcciones paralelas a la pared.
��Chebyshev. En la dirección normal a la pared se usan desarrollos en serie de Chebyshev.
Este hecho va a determinar la forma de actuar en el postproceso de datos. En efecto, en el código de
VORXY, escrito en forma serial, se encuentran dos bucles, uno que opera en planos paralelos a la
pared (denominado proceso K) y otro que lo hace en planos perpendiculares a la pared (denominado
proceso J). Es importante resaltar la dependencia entre ambos procesos, ya que es necesaria la
finalización del proceso K para que pueda iniciarse el proceso J.
10
Figura 1. Esquema del problema fluidodinámico resuelto.
Para ambos procesos se actúa de una forma similar: se va realizando el postproceso por bloques de
planos, en un número tal que la máquina sea capaz de hacerlo de forma eficiente. Estos números
(uno del proceso K y otro del proceso J) son parámetros a introducir inicialmente.
El resultado de la ejecución del programa VORXY sobre uno de los archivos de datos es un
conjunto de archivos que contienen las variables del flujo turbulento en el plano físico en un
instante de tiempo determinado.
Paralelización del código de VORXY
Para poder aplicar el programa MAESTRO al programa VORXY es necesario paralelizar el código
de este último de una forma adecuada.
Debido a estructura del código de VORXY, la paralelización es muy sencilla de realizar, basta
eliminar el “do” de los bucles y que la variable del bucle venga dada por una orden del programa
MAESTRO. Con esto se consigue que en lugar de un bucle de “n” pasos se tengan “n” subtareas.
Durante la explicación del código del programa MAESTRO se profundizará más en este hecho.
MAESTRO. Distribución y monitorización de tareas.
El programa MAESTRO se encarga de:
1. Conocer el estado de los nodos de la red.
2. Distribuir las subtareas por los nodos.
3. Realizar un seguimiento de las subtareas y actuar en consecuencia.
11
Para poder realizar dichas misiones es necesario conocer:
1. Direcciones IP de los nodos de la red.
2. Número de subtareas a realizar.
Además de los aspectos referentes exclusivamente a la escritura del código del programa
MAESTRO, es necesario que los recursos computacionales utilizados cumplan con ciertos
requisitos de homogeneidad. MAESTRO es un programa escrito en lenguaje Fortran 77 y
compilado con el g77 de Linux. El código tiene llamadas al sistema operativo necesarias para
realizar la distribución y monitorización de las subtareas, así como para controlar el estado de los
nodos de la red. Por todo esto, el programa necesita:
��Sistema operativo tipo UNIX (comunicación entre nodos mediante “rsh”)
��NFS
��NIS
Tras la explicación del programa MAESTRO se realiza una descripción más detallada de los
recursos computacionales utilizados en el desarrollo del código.
Código del programa MAESTRO � Código Oportunista �.
Se va a realizar una explicación del código del programa MAESTRO, de esta forma se logrará
entender el funcionamiento del mismo.
Existe un fichero “definición” en el cual, además de las variables propias del código Fortran, se
definen las direcciones IP de los nodos que el programa MAESTRO va a tener disponibles para
lanzar subtareas y el número de subtareas de los procesos K y J anteriormente mencionados.
Conviene aclarar aquí la denominación de tarea y subtarea:
��Tarea: cada uno de los archivos de datos es una tarea a realizar por MAESTRO (24 para
Re�=950 y 81 para Re�=1880).
��Subtarea: cada bloque de planos que se emplean en los procesos K y J. Su número se
fija a priori.
12
El código del programa MAESTRO se divide en dos grandes bloques, un primer bloque
correspondiente al lanzamiento y monitorización de tareas del proceso K y otro correspondiente al
proceso J. Esto se ha hecho así porque el número de subtareas de uno y otro proceso no tiene que
ser idéntico (normalmente es distinto), lo que da lugar a un dimensionamiento distinto de los
procesos. Salvo por esto, ambos bloques son similares en cuanto a su estructura, por lo que se
pasará a describir sólo uno de ellos. Se recuerda además que para cada tarea es necesario que
terminen todas las subtareas del proceso K para que puedan iniciarse las subtareas del proceso J.
En cada bloque del código se tienen los siguientes conjuntos de órdenes:
1. Bucle de tareas (engloba al resto de conjuntos).
2. Lanzamiento de subtareas a los nodos disponibles.
3. Control de subtareas (Monitorización).
4. Control del estado de los nodos.
5. Borrado de archivos temporales y preparación para la siguiente tarea.
En la Figura 2 se ha representado un esquema de bloques del código del programa MAESTRO en
el que se pueden apreciar los conjuntos de órdenes citados, que se explicarán más adelante.
El programa se ha corrido en el cluster Vulcano que se describirá más adelante; este cluster posee 4
nodos, cada uno de los cuales dispone de una partición de disco duro de 5 GB destinada al
almacenamiento de datos:
1. vulcano /home
2. vn01 /home01
3. vn02 /home02
4. vn03 /home03
Para el desarrollo del Código Oportunista (o programa MAESTRO) se ha usado únicamente el
cluster Vulcano. Ahora bien, en un futuro el código se ejecutará aprovechando todos los recursos
computacionales del Departamento que interesen.
13
TAREA 1
TAREA 2
TAREA 3
TAREA 4
��INICIALIZACIÓN DE VARIABLES
INICIO DEL BUCLE DE TAREAS
��CONTROL DE ESTADO DE NODOS
��LANZAMIENTO DE SUBTAREAS
��MONITORIZACIÓN DE SUBTAREAS
��CONTROL DE ESTADO DE NODOS
��LANZAMIENTO DE SUBTAREAS
��MONITORIZACIÓN DE SUBTAREAS
��BORRADO DE ARCHIVOS TEMPORALES ��PREPARACIÓN PARA SIGUIENTE TAREA
FIN DEL BUCLE DE TAREAS
��PARÁMETROS DEL CÓDIGO ��DEFINICIÓN DE VARIABLES
Figura 2. Esquema de los procesos realizados por el programa MAESTRO.
14
Durante la ejecución del programa, el cluster estaba libre de otras cargas de trabajo. Aunque esta no
es la idea, MAESTRO está pensado para aprovechar los pocos recursos libres que queden en un
cluster, sirve para comprobar el funcionamiento y los tiempos de ejecución de las tareas corridas
bajo las órdenes del programa MAESTRO.
Conjuntos de órdenes del código oportunista � programa maestro �
��Bucle de tareas. Está ideado para que realice el postproceso de todos los archivos que
se tengan para un mismo Re�. Los archivos, debido a su gran tamaño se guardan en un
ordenador de gran capacidad de memoria, no en los nodos en los que se va a correr el
programa. Por esto, la primera operación del bucle es “coger” la tarea (archivo) de dicho
ordenador a través de un rcp y copiarla en /home01.
rcp='rcp enrique@tinglao:'//DIRIN//arch tarea=' /home01/enrique/campos1880/' call system(rcp//tarea,status)
El bucle de tareas engloba al resto de conjuntos de instrucciones que se describen a
continuación.
��Control de estado de los nodos. Mediante llamadas al sistema operativo Linux, usando
las órdenes adecuadas, y empleando rsh para las comunicaciones entre nodos, se
determina:
1. %CPU: porcentaje total de CPU usada por cada nodo.
2. %mem: porcentaje total de la memoria usada de cada nodo.
3. Swap: identifica si con la carga dada al nodo se produce o no “swapeo”
do i=1,nnod rsh='rsh -n '//nodo(i) ps=' ps -A eo pcpu,pmem > '//RUTAOUT//carga(i)
call system(rsh//ps,status) if (status.ne.0) then est(i)=-1 endif enddo
15
Según los valores de las variables mencionadas y con unos criterios de estado
establecidos previamente se clasifican los nodos en: Libres, Ocupados o Caídos.
��Lanzamiento de subtareas. Se lanzan subtareas a aquellos nodos que hayan sido
clasificados como libres (tras lanzar una tarea a un nodo se vuelve a evaluar su estado).
La comunicación entre nodos se realiza mediante rsh.
do i=1,nnod if
(est(i).eq.0.AND.jpn(i).lt.2.AND.k.le.znjob) then write(ich,'(i2)') i write(kch,'(i3)') k write(controlch,'(i2)') control 100 if (zenv(k).eq.0) then jpn(i)=j pn(i)+1 rsh='nohup rsh '//nodo(i)//' time '
tarea=RUTA//'VORXY<hre.dat '//ich//kch//controlch//' &'
zenvn(k)=i call system(rsh//tarea,status)
��Monitorización de subtareas. Una de las partes más importantes del código es el
seguimiento de las subtareas hasta su finalización. En este conjunto de órdenes se busca
conocer para cada subtarea:
1. si ha sido lanzada
2. a qué nodo ha sido lanzada
3. cuánto tiempo lleva en ejecución
4. si ha finalizado
5. si ha sido “matada” externamente
16
A través de la pid (número propio de cada proceso que se ejecuta en un nodo) se puede
hacer un seguimiento de la subtarea que se está ejecutando. Mediante llamadas al
sistema se puede conocer información sobre cualquier proceso que esté corriendo.
Ciertas preguntas como si una subtarea ya ha sido lanzada y a qué nodo se responden
durante la fase de lanzamiento de subtareas, pues ahí se lleva una contabilización sobre
estos asuntos.
��Borrado de archivos temporales y preparación para siguiente tarea. Es la última
operación antes de terminar el bucle. En ella se borran los archivos temporales
generados durante ambos procesos (K y J), así como el archivo de datos que se grabó
inicialmente en /home01. Por último se procede a cambiar un archivo auxiliar de datos
que permite saber cuál es el nombre del archivo de la siguiente tarea a realizar.
El resumen del funcionamiento del programa MAESTRO, una vez determinados los nodos y el
número de subtareas para cada proceso, es:
1. Inicio de tarea P.
2. Lectura y grabación en /home01 del fichero TareaP.
3. Inicio del proceso K.
3.1. Lanzamiento y monitorización de subtareas.
3.2. Creación de ficheros temporales de datos en /home02 (a usar durante el proceso J).
4. Fin del proceso K.
5. Inicio del proceso J.
5.1. Lanzamiento y monitorización de subtareas.
5.2. Creación de ficheros de postproceso en /home03.
6. Borrado de archivos temporales.
7. Actualización de archivos auxiliares de información.
8. Fin de tarea P.
Repitiéndose el proceso hasta que se completen todas las tareas a realizar.
Para terminar con la descripción del programa MAESTRO cabe decir que el programa reside en
sólo uno de los nodos, y las comunicaciones con el resto se realizan a través de rsh.
17
Los recursos computacionales utilizados: Vulcano
Esta máquina pertenece al Laboratorio de Mecánica de Fluidos Computacional del Departamento de
Motopropulsión y Termofluidodinámica de la Escuela Técnica Superior de Ingenieros
Aeronáuticos.
En el presente apartado se describirán el hardware y software empleado por Vulcano y las
principales etapas del proceso de instalación y configuración de la máquina, insistiendo en la
finalidad que se busca de cara a la programación paralela con cada una de estas etapas. Es
importante destacar estos aspectos para dar a entender la proximidad del diseñador a una
arquitectura de esta clase, así como la gran flexibilidad de estos sistemas.
Se debe hacer ver aquí que durante el desarrollo de esta investigación no se busca usar Vulcano
como un cluster en sí, sino como 4 nodos independientes comunicados a través de una red Fast
Ethernet. El uso de Vulcano permitirá además, posteriormente, comparar los tiempos de ejecución
del programa VORXY corrido en paralelo y corrido como esclavo del programa MAESTRO.
Hardware
El sistema Vulcano consta de 4 nodos, uno utilizado como servidor y el resto como clientes, cada
uno de los cuales se caracteriza por:
��Procesadores Intel Pentium III Duales 500 MHz con 512 KB de memoria caché.
��384 MB de memoria RAM.
��9 GB de Disco Duro.
��2 Tarjetas de red para las redes de comunicación internas. El nodo servidor dispone de una
tarjeta de red adicional para las comunicaciones del cluster con el exterior.
��Unidad de CD-ROM 32x SCSI.
��Unidades de diskettes de 1.44 MB.
Además de los 4 nodos, el sistema consta de:
��1 red Fast Ethernet de ancho de banda 100 Mbits/s.
18
��1 red Scali de ancho de banda 640 Mbits/s.
��1 switch de comunicaciones para la red Fast Ethernet.
��1 Monitor, teclado y ratón para el nodo utilizado como servidor.
Software
Se ha instalado como sistema operativo Linux RedHat 6.1. Se pueden distinguir dos perfiles de
instalación, uno para el servidor y otro para los nodos. El disco duro o memoria secundaria se
divide, según cada uno de los dos perfiles, en distintas particiones que pueden ser consideradas
como pequeños discos duros dentro del principal, pero que no son estancos entre sí. Estas
particiones permiten mayor velocidad en la búsqueda de los datos. También proporcionan seguridad
en caso de que se dañe una parte del disco duro, pues sólo se verán afectadas aquellas particiones en
las que residan los sectores dañados.
La partición de arranque contiene la información necesaria para arrancar el sistema desde el disco
duro. La partición de swap es una porción del disco duro que permite una ampliación virtual de
memoria RAM cuando la necesidad de esta se ve desbordada por las necesidades de la aplicación
que se ejecuta. La contraprestación que ofrece esta partición es que resulta de acceso mucho más
lento que la memoria RAM, de manera que en la programación se intentará dimensionar el número
de variables de forma que no sea preciso acceder a dicho área de memoria, en favor de la velocidad
de la ejecución. La partición extendida es el tipo usual de particiones, en la que residen datos e
instrucciones generales. No tiene un cometido tan particular como las particiones de arranque y
swap. Será aquí donde se almacene el software y los datos de la computación.
Las particiones /home en el servidor y /home0X en los nodos son las particiones reservadas para
almacenar resultados de los cálculos realizados en la máquina. Estas particiones son exportadas de
cada nodo al servidor y del servidor a todos los nodos mediante el sistema NFS (Network File
System), que será explicado a continuación. El resto de particiones del tipo extendida están
reservadas para almacenar datos del software instalado (sistema operativo, red Scali,...).
Redes internas: Fast Ethernet y Scali
Las redes Fast Ethernet y Scali comunican los nodos y el servidor entre sí. Scali lo hace a mayor
velocidad que Fast Ethernet. Por tanto, Scali será utilizada para las comunicaciones en los cálculos
y la red Fast Ethernet para la comunicación de datos relativos a la configuración de la red, acceso a
19
los nodos, NFS y NIS. La red Scali posee topología de anillo, que consigue disminuir la longitud
del cable de comunicación. Disponiendo de cuatro procesadores, como es el caso del sistema
Vulcano dispuestos de forma alineada, el procesador 1 está unido con el 3, el 3 con el 4, el 4 con el
2 y finalmente el anillo se cierra cuando el 2 se une con el 1.
Network File Sistem (NFS)
Para entender la utilidad de esta manera de comunicar los datos residentes en distintos discos duros
entre sí, es necesario previamente hablar sobre la estructura de almacenamiento de datos del sistema
operativo Linux.
El almacenamiento de datos en dicho sistema operativo se establece a través de una estructura
arbórea, pudiendo dividir la memoria física del disco duro en uno o más árboles, cada uno de ellos
llamado partición. Estas particiones, como ya se comentó, se crean para guardar cierta
independencia entre sí, pero se puede acceder desde cualquiera de ellas a las restantes particiones
del mismo disco duro. En la Figura 3 se muestra un ejemplo con dos discos duros, A y B, cada uno
de ellos dividido en tres particiones. En una disposición así cada disco duro es opaco para el resto,
de manera que no se puede acceder a su contenido a menos que el usuario establezca una
comunicación remota, de forma explícita.
20
Figura 3. Estructura arbórea de los discos duros A y B. E l disco duro A
consta de tres particiones: PA1, PA2 y PA3. El disco duro B consta de otras
tres particiones: PB1, PB2 y PB3.
Un sistema de exportación de archivos de sistema, como es el NFS, permite que particiones
residentes en otros discos duros reciban el mismo tratamiento que las existentes en el disco duro
local de trabajo. Se consigue, que vía este método, se establezca a través de la red que comunica
cada nodo el tráfico de información necesario de manera que a efectos de uso las particiones
residentes en otros discos duros estén consideradas por el disco duro local como propias. Se dice
entonces que dicha partición se ha exportado desde un disco duro a otro. En la Figura 4 se
representa la exportación de la partición PA3 desde el disco duro A al B. El disco duro B entiende
la partición PA3 como propia, aunque físicamente se encuentre externamente a él.
En la instalación de la máquina Vulcano el sistema NFS se ha utilizado para crear una estructura de
datos única que no distinga entre las particiones de datos residentes en un disco duro o en otro. Esta
consideración es muy importante para el trabajo de análisis de los datos resultantes de una
computación. También se exporta mediante NFS desde el servidor a los nodos el software de la red
Scali, que reside en el disco duro del servidor.
Un paso más en la configuración del sistema NFS es la utilización de Autofs. Para que las
particiones exportadas puedan ser accesibles desde cualquier nodo es necesario que exista un tráfico
continuo de información a través de la red que compruebe en cada momento la existencia de dichas
particiones exportadas desde los sitios en que se puede disponer de ellas. Para evitar este tráfico de
información se utiliza Autofs, que permite configurar el NFS de manera que las particiones se
exportan sólo cuando se recurre a ellas, en otro caso no están presentes y la exportación se rompe
transcurrido un tiempo después de haberla utilizado por última vez, hasta que se vuelva a solicitar
su uso.
21
Figura 4. Exportación de particiones por NFS.
Configuración de NIS (Network Information System)
El sistema NIS permite tener una única base de datos en una red interna. En dicha base de datos se
almacenan los datos necesarios de todos los elementos que configuran la red como pueden ser:
claves de acceso, direcciones de acceso de los nodos, etc. El sistema NIS proporciona dichos datos
desde un nodo al resto. Se ha elegido al servidor como nodo donde residen los datos. Esta
aplicación es útil de cara al mantenimiento del sistema, ya que cuando se produce alguna
modificación en el sistema, como la adición o eliminación de algún nodo, es necesario modificar
únicamente una base de datos, la residente en el servidor, que inmediatamente es exportada al resto
de los nodos.
Resultados
Aunque el código no está todavía en una fase madura de desarrollo ha producido unos resultados
muy satisfactorios. La consecución de los objetivos buscados
��robustez y estabilidad de funcionamiento del código.
22
��portabilidad (solo necesita sistema operativo tipo UNIX)
��aprovechamiento efectivo de recursos (posibilidad de correr en los recursos actuales
problemas que no se podían)
suponen una demostración del éxito alcanzado.
Se pueden observar en la tabla comparativa, que se presenta a continuación, los tiempos de
ejecución de una tarea a Re�=950 (archivos de 192 MB) y de una tarea a Re�=1880 (archivos de 1.6
GB) de:
��el programa VORXY serial en uno de los nodos del cluster Vulcano
��el programa VORXY paralelo corrido en Vulcano
��el uso del programa MAESTRO para correr VORXY en Vulcano.
POSTPROCESO DE UN FLUJO TURBULENTO A Re�=950
VORXY-serie VORXY-paralelo MAESTRO-VORXY
56 minutos 15 minutos 19 minutos
Nota: los tiempos presentados corresponden a la media de los tiempos de las tareas corridas.
POSTPROCESO DE UN FLUJO TURBULENTO A Re�=1880
VORXY-serie VORXY-paralelo MAESTRO-VORXY
imposible 2 horas 45 minutos 3 horas 8 minutos
Nota: los tiempos presentados corresponden a la media de los tiempos de las tareas corridas.
Si nos fijamos en la tabla de tiempos para Re�=950, se observa que, como era de esperar, el tiempo
de ejecución para el primer caso es alrededor de cuatro veces mayor que los tiempos de los otros
dos casos en los que se efectúan operaciones en paralelo en los 4 nodos de Vulcano.
23
Más interesante es la comparación entre VORXY paralelo y MAESTRO-VORXY. En estos dos
casos se están usando los 4 nodos de Vulcano, y se comprueba que el tiempo de VORXY paralelo
es algo menor que en MAESTRO-VORXY. Este hecho (previsto) se debe al seguimiento de
subtareas que realiza el programa MAESTRO, que conlleva pérdidas de tiempo por comunicación
entre los nodos.
De esto no se debe concluir que sea mejor correr VORXY-paralelo pues el objetivo principal del
programa MAESTRO no es mejorar los tiempos de ejecución de las tareas, sino poder correr tareas
tan grandes que sean imposibles de realizar de forma VORXY-serie o VORXY-paralelo en
Vulcano.
Esto es lo que pasa a Re�=1880, las tareas (archivos de 1.6 GB) junto a los archivos temporales y
los archivos finales del postproceso que se generan hacen imposible correr VORXY-serie en uno de
los nodos de Vulcano (5 GB para almacenamiento). Al aumentar el Re� en posteriores simulaciones
numéricas, se obtendrán archivos de datos tan grandes (nótese el aumento del archivo de datos al
pasar de Re�=950 a Re�=1880) que VORXY-paralelo será imposible de correr en Vulcano. Es en
estos casos cuando el programa MAESTRO adquiere un papel protagonista.
Los resultados de dicho trabajo han sido presentados en el congreso “Large-Scale Sharing of
Turbulence Data” organizado por la E.T.S.I.A en Junio de 2003
(ftp://torroja.dmt.upm.es/madrid03/delalamo.pdf)
24
Bibliografía
[1] REYNOLDS, O. An experimental investigation of the circumstances which determine whether
the motion of water shall be direct or sinuous, and the law of resistence in parallel chanels. 1883,
Phil. Trans. Royal soc. london 174, 935-982.
[2] HAGEN, G. Über den Einfluss det Temperatur auf die Bewegung des Wassers in Röhren. 1854,
Math. Abh Akad. Wiss. Berlin 17-98.
[3] DARCY, H. Recherches expérimentales relatives au mouvement de 1´eau dans les tuyaux.1857,
Mallet-Banchelier, Paris.
[4] KOLMOGOROV, A.N. The local structure of turbulence in incompressible viscous fluids alt
very large Reynolds numbers. 1941, Dokl. Akad. Nauk. SSSR, 30, 301-305. Reprinted in 1991,
Proc. R. Soc. London. A 434, 9-13.
[5] JIMENEZ, J. Turbulence and vortex dynamics, 2000. Apuntes Polytechnique Touluse, 9-11, 82-
110.
[6] GERMANO, M. Turbulence: the filtering approach, 1992, Journal of Fluids Mechanics, 238,
325-336.
[7] BARDINA, J. FERZIGER, J.H.&ROGALLO, R.S. Effect or rotation on isotropic turbulence:
computation and modelling. 1985, Journal of fluids mechanics, 154, 321-336.
[8] KIM, J., MOIN, P., MOSER, R. Turbulence statistics in fully developed channel flow at low
Reynolds number . 1987, Journal of Fluids Mechanics, 177, 133-166.
[9] ROQUE, C., JIMENEZ, J. Fourier / Chebyshev Methods for the incompressible Navier-Stokes
equations in infinite domains. 1995, Journal of computational physics, bf 121, 261-270.
[10] LAX, P.D., WENDROFF, B. 1960, Comm. Pure Appl. Math. 13, 217-237.
25
[11] MACCORMACK, R.W 1969, AIAA Pap. No. 69-354.
[12] SANJIVA, K.L Compact finite difference schemes with spectral-Like resolution. 1960,
Journal of computational physics, 103, 16-42.
[13] CANUTO, C., HUSSAINI, M.Y., QUARTERONI, A., ZANG, T.A. Spectral methods in fluid
dynamics. 1988, Springer-Verlag 31-60, 65-70, 129-133.
[14] FLETCHER, C.A.J. Computational techniques for fluid dynamics. 1991, Springer-Verlag vol
1, 216-373.
[15] TEMAM, R. Navier-Stokes equations. Theory and numerical analisis. 1977, Nort-Holland.
[16] KIM, J., MOIN, P. Application of a fractional step method to incompressible Navier- Stokes
equations. 1985, Journal of computational physics, 59, 308.
[17] LEE, H., MOIN, P. An improvement of fractional step methods for the incompressible Navier-
Stokes equations. 1991, Journal of computational physics 92, 369-379.
[18] JAMESON, A., SCHMIDT, H., TURKEL, E., Numerical solutions of the Euler equations by
finite volume methods using Runge- Kutta time stepping schemes. 1981, AIAA Pap. No. 81-1259.
[19] LABERT, J.D. Numerical methods for ordinary differential systems.1991, Wiley.
[20] DEL ALAMO, J.C. The large-scale organization of turbulent channels. 2001, Ph. D. Thesis,U.
Politécnica de Madrid.
[21] JIMENEZ, J., PINELLI, A. The autonomous cycle of near wall turbulence. 1990. Journal of
fluids Mechanics, 389, 335-359.
[22] JIMENEZ, J., FLORES, O., GARCIA- VILLALBA, M. The large scale organizations of
autonomous turbulent wall regions. 2002, CTR Ann. Res. Briefs.
26
[23] RICHARDSON, L.F. Atmosferic diffusion shown on a distance nitance nieghbour graph.
1926, Proc. Royal Soc. London, A 110, 709-737.
[24] CHOI, H., MOIN, P. On the space-time characteristics of wall-pressure fluctuations. 1990,
Physics Fluids 2, 1450-1460
[25] http: // www.ccsc.caltech.edu / resource / mixing /index.html
[26] PINELLI, A. El estándar de message passing: MPI. Apuntes del los cursos de doctorado de la
E.T.S.I.A.
[27] WARREN, M., GERMANN, P., LOMHDAHL, P., SALMON, J. Avalon: An alpha/linux
cluster archives 10 gflops for 150k dollars.
[28] SCALI. Scali system Guide, 1999.
[29] SCALI. Scali users Guide, 1999.
[30] STALLINGS, W. organización y arquitectura de computadores. Prentice_Hall, 1996.
[31] I. FOSTER, C. KESSELMAN, J. NICK, S. TUECKE: The Physiology of the Grid: An Open
Grid Services Architecture for Distributed Systems Integration. Open Grid Service Infrastructure
WG, Global Grid Forum, June 22, 2002. (extended version of Grid Services for Distributed System
Integration)
[32] I. FOSTER, C. KESSELMAN, S. TUECKE. The Anatomy of the Grid: Enabling Scalable
Virtual Organizations. International J. Supercomputer Applications, 15(3), 2001.
[33] A. CHERVENAK, I. FOSTER, C. KESSELMAN, C. SALISBURY, S. TUECKE: The Data
Grid: Towards an Architecture for the Distributed Management and Analysis of Large Scientific
Datasets. . Journal of Network and Computer Applications, 23:187-200, 2001 (based on conference
publication from Proceedings of NetStore Conference 1999).
27
[34] I. FOSTER, C. KESSELMAN: The Globus Project: A Status Report. Proc. IPPS/SPDP '98
Heterogeneous Computing Workshop, pp. 4-18, 1998.
[35] I. FOSTER, C. KESSELMAN, C. LEE, R. LINDELL, K. NAHRSTEDT, A. ROY. A
Distributed Resource Management Architecture that Supports Advance Reservations and Co-
Allocation. Intl Workshop on Quality of Service, 1999.
[36] GLOBUS PROJECT: www.globus.org
[37] GRIDFORUM: www.gridforum.org
[38] SETI@HOME: www.setialhome.ssl.berkeley.edu
[39] LINUX: www.linux.org
[40] LINUX: www.redhat.com
28
Top Related