Traddución por Jordi Cabot Sagrera
Linux ha empezado hace poco a tener un impacto importante dentro de la industria de la informática, pero ha sido una herramienta poderosa para los investigadores en informática durante muchos años. Aparte de los beneficios obvios de trabajar con un sistema operativo abierto eficiente, fiable y de libre distribución [1], la llegada de la computación clusterizada siguiendo el estilo Beowulf-- empezada por Donald Becker, Thomas Sterling, et al. [2] en el NASA's Goddard Space Flight Center-- extiende la utilidad del Linux al mundo de la computación paralela de alto rendimiento. Hoy en día, estos valiosos clusters basados en PCs están apareciendo en laboratorios de investigación federales, departamentos de I+D de empresas, universidades e incluso pequeñas facultades [3, 4]. Si un problema informático no puede solucionarse en un entorno de memoria distribuida flojamente acoplada, un cluster Beowulf -- o Pila de PCs (POP - Pile of PCs)-- puede ser la respuesta, a un precio que los fabricantes tradicionales de computadoras paralelas no pueden llegar.
![]() |
| Figura 1: El Stone SouperComputer en el Laboratorio Nacional de Oak Ridge. |
Nos involucramos en la computación clusterizada hace más de dos años, después de desarrollar una propuesta para la construcción de un cluster Beowulf para soportar una gran cantidad de proyectos de investigación. La propuesta fue rechazada, pero dado que habíamos empezado el desarrollo de una nueva aplicación de alta resolución para el diseño ecológico, decidimos construir un cluster hecho a base de PCs (principalmente Intel 486s) destinados a ser renovados. Empezamos interceptando, con facilidades federales, las máquinas sobrantes en Oak Ridge, y procesándolas en nodos útiles. En Septiembre del 1977, teníamos un sistema de computación paralela construido enteramente con hardware sin coste. Hoy en día tenemos un cluster de estilo Beowolf con 126 nodos heterogéneos en constante evolución, llamado el Stone SouperComputer (ver Figura 1), el cual se actualiza constantemente a medida que se dispone de nuevo hardware y que es usado para el desarrollo de algoritmos y para ejecutar aplicaciones paralelas. Para más información sobre el Stone SouperComputer, ver Hoffman y Hargrove [3] o visita nuestro World Wide Web (WWW) site en www.esd.ornl.gov/facilities/beowulf.
Nunca dos clusters Beowulf son iguales. De hecho, sus configuraciones hardware y software son tan flexibles y configurables que presentan un amplio abanico de posibilidades. En este tutorial, queremos proporcionar algunas guías y consideraciones para reducir este amplio campo de opciones. Aunque cada cluster es diferente y las configuraciones están dictadas por las necesidades de la aplicación, si que se pueden especificar algunos requerimientos mínimos.
Todos los componentes hardware escogidos necesitan el soporte de drivers o módulos en Linux. Generalmente esto no es un problema si el hardware tiene algunos meses. Muchas fuentes de información acerca del hardware soportado están disponibles en la WWW (ver Recursos más adelante). Particularmente interesante es la completa lista de drivers y la excelente documentación para una amplia variedad de tarjetas de red hecha por Donald Becker's. El soporte delas tarjetas de vídeo no es importante en los nodos, ya que normalmente no ejecutan un servidor X; no obstante, el nodo master puede gestionar el cluster. Un servidor X seria útil para esta máquina. Si un componente particular presenta un problema, preguntar en los grupos de noticias puede ayudar a encontrar información acerca del hardware soportado por Linux.
Tabla 1: archivo /etc/hosts para todos los nodos
| 10.0.0.1 node1
10.0.0.2 node2 10.0.0.3 node3 10.0.0.4 node4 . . . |
Tabla 2: archivo /etc/hosts.equiv para todos los nodos
| node1
node2 node3 node4 . . .< /CODE> |
Tabla 3: archivo /etc/sysconfig/network-scripts/ifcfg-eth0 para el nodo 2
| DEVICE=eth0
IPADDR=10.0.0.2 NETMASK=255.0.0.0 NETWORK=10.0.0.0 BROADCAST=10.255.255.255 ONBOOT=yes |
Además, es deseable tener un Domain Name Server (DNS) disponible, particularmente si el nombre de los nodos o sus direcciones pueden cambiar en la red privada. Los DNS se pueden ejecutar en el primer nodo para proporcionar la resolución de nombres y direcciones en la red privada .
El entorno de ejecución de Red Hat Linux require solo unos 100 MB de espacio de disco en cada nodo; no obstante, es útil incluir compiladores y otras utilidades en todos los nodos para posibilitar la compilación paralela. Con esto, nuestra configuración requiere 175 MB de espacio en disco para el sistema operativo. Mientras algunos clusters se configuran para usar como memoria virtual un archivo del sistema de archivos normal, es más eficiente usar un partición dedicada a la memoria virtual en el disco local. Se acepta normalmente que la cantidad de espacio razonable para la memoria virtual es el doble que el tamaño de la memoria, hasta los 64 MB. Para los nodos con más de 64 MB de memoria, el espacio para la memoria virtual tendría que ser igual a la cantidad de memoria. En la practica, uno puede desear reservar 128 de espacio para la memoria virtual si el tamaño de la memoria va de 64 a 128 MB. Como resultado, si un nodo previsor con 32MB de memoria tiene dos discos de 202 MB, uno podría cargar Linux en el disco principal (como una partición única) y usar el segundo disco para espacio de memoria virtual (64MB) y espacio local para la ejecución (138 MB).
Una vez todos los nodos están cargados y configurados, las aplicaciones paralelas pueden ser diseñadas y desarrollas para sacar provecho de este nuevo sistema.
Por supuesto, no todas las tareas informáticas se pueden adecuar al paralelismo. Muchas veces, se tienen que desarrollar nuevas estrategias para resolver problemas informáticos para poder sacar partido del paralelismo. De hecho, puede ser necesario dar un paso atrás en los códigos serie existentes para concebir una aproximación paralela. Muchos problemas científicos se pueden beneficiar de una descomposición del dominio: una división del espacio o del tiempo en partes relativamente independientes que pueden ser procesados en nodos separados del cluster. Por ejemplo, las tareas de procesamiento de imágenes se pueden dividir normalmente de forma que cada nodo trabaje en una sección de una misma imagen. Esta aproximación es particularmente útil si las secciones de la imagen se procesan independientemente (i.e., el proceso de una sección no requiere información acerca de otras secciones) o el radio de influencia de cada sección es predeterminado y constante.
Una técnica subestimada para saltar al mundo de la computación paralela casi sin coste de desarrollo es usar a ""poor man's parallelism," i.e., múltiples códigos series ejecutándose simultáneamente en múltiples nodos. Esta estrategia de multiplicación, al no tener comunicación entre procesos, es perfectamente escalable, y lleva a un aumento significativo del rendimiento con un pequeño esfuerzo adicional.
Uno de los errores más peligrosos -- ya se este paralelizando código existente o desarrollando nuevo código paralelo -- es convertir un problema computacional en un problema de comunicaciones. Esto puede suceder cuando el problema está demasiado dividido, con lo que el tiempo que se necesita para comunicar los datos entre los nodos y sincronizarlos sobrepasa el tiempo de computación actual de la CPU. En este caso, usar menos nodos puede resultar en un mejor tiempo de ejecución y una utilización más eficiente de los recursos. Este equilibro entre la carga de computación local en un nodo y las comunicaciones para coordinar esfuerzos entre los nodos tiene que ser optimizado para cada aplicación paralela.
Finalmente, la heterogeneidad de los clusters juega un papel importante en el desarrollo de los algoritmos paralelos. Un factor de dos o más entre las velocidades de las CPUs de los nodos es muy significativo cuando se ejecutan aplicaciones paralelas. Si el trabajo se distribuye uniformemente entre todas las CPUs de un cluster heterogéneo, las CPUs más rápidas tendrán que esperar las más lentas para completar su parte dentro de la tarea global. Los algoritmos diseñados correctamente pueden superar esta heterogeneidad sobre dividiendo la tarea de forma que se puedan asignar nuevas subtareas a los nodos que completen las anteriores subtareas asignadas. Por supuesto, esta aproximación tiene que equilibrarse con la sobrecarga de comunicaciones..
El procesamiento paralelo se puede organizar de muchas formas diferentes, pero la organización maestro/esclavo (master/slave) es la más fácil de entender y programar. En una organización maestro/esclavo, un nodo hace de maestro mientras los otros nodos actúan como esclavos. El nodo maestro normalmente es quién decide como dividir el trabajo y generalmente dirige el tráfico mientras los nodos esclavos procesan sus subtareas asignadas y avisan cuando acaban. Variantes de esta organización incluyen una aproximación master-less donde todos los nodos hacen las mismas tareas, o una aproximación jerárquica en la que múltiples capas trabajan juntas o avisan a un súper-maestro. La mejor aproximación viene determinada por el algoritmo o por las necesidades de la aplicación.
El código fuente también se puede organizar de diferentes maneras. En una organización maestro/esclavo, uno puede desarrollar un conjunto de código fuente para el maestro y otro conjunto para los esclavos. Esto era una práctica común en los primeros sistemas paralelos, pero hoy el método Single Program Multiple Data (SPMD) es el más popular y normalmente el más fácil de mantener. Con el SPMD, un solo conjunto de código fuente es desarrollo por lo que el mismo código binario se ejecuta en todos los nodos. El programa bifurca dependiendo de la funcionalidad deseada para el nodo; los maestros realizan un conjunto de operaciones mientras los esclavos realizan otro.
Hay muchas aproximaciones posibles para la organización y la distribución de los datos usados por los programas paralelos. Una posibilidad es servir los datos a todos los nodos vía un servidor NFS central. No obstante, si varios nodos intentar acceder a los datos simultáneamente, esta estrategia llevara a una contención de la red. Una alternativa es pasar partes de datos entre los nodos usando el paso de mensajes, pero esto también implica una gran carga en la red dependiendo del tamaño de los datos y la naturaleza del problema. Otra alternativa es distribuir los datos en los discos locales de todos los nodos antes de empezar la ejecución. Esta distribución manual de los datos en todos los nodos deja la red libre para el paso de mensajes en tiempo de ejecución. De la misma forma, los nodos pueden ensamblar las respuestas y guardar los resultados de forma central, o pueden guardarse localmente par ser recogidos posteriormente a la ejecución. Hemos observado que esta aproximación de "distribuir y recoger" es particularmente útil.
El movimiento "Beowulf" ha llevado la computación paralela a
un muy básico. Los programas paralelos desarrollados en los sistemas
Beowulf usando librerías estándares para el paso de mensajes, pueden
ejecutarse sin modificaciones en supercomputadores comerciales. De este
modo, los clusters Beowulf representan un punto de entrada y más
adelante un puente hacia incluso las más grandes supercomputadoras
en el mundo. Además, la disponibilidad de baratos y valiosos clusters
significa que los entornos de computación paralela pueden dedicarse
a tareas específicas, cosa que no puede hacerse con las grandes supercomputadoras comerciales que
son demasiado caras para ser dedicadas
a una sola aplicación, y no pueden ser optimizadas. Al mismo tiempo
que los entornos paralelos están más disponibles para los programadores,
la experiencia colectiva ganada promoverá aplicaciones paralelas
en todos los campos.
¿Quiere más artículos de
Crossroads acerca de Linux? Vaya al índice,
al siguiente o al anterior.
Last Modified:
Recursos
www.esd.ornl.gov/facilities/beowulf
www.beowulf.org
www.beowulf.org/consortium.html
www.extremelinux.org
www.redhat.com
www.sci.usq.edu.au/staff/jacek/beowulf/HOWTO/
www.cacr.calte
ch.edu/beowulf/tutorial/building.html
www.beowulf.org/linux/drivers/
alt.os.linux,
comp.os.linux.hardware,
comp.os.linux.misc,
comp.os.linux.networking,comp.os.linux.setup
www.myri.com
mitpress.mit.edu/book-home.tcl?isbn=026269218X
www.epm.ornl.gov/pvm
www.mcs.anl.gov/mpi
Referencias

Forrest M. Hoffman es un especialista
informático en la División de Ciencias Ambientales en el
Laboratorio Nacional de Oak Ridge en Oak Ridge, Tennessee, donde
desarrolla modelos ambientales paralelos (y serie) así como herramientas
para la visualización científica, gestión de grandes
cantidades de datos, administración de sistemas, y tecnologías
de Internet. En su tiempo libre, construye computadoras paralelas..

William W. Hargrove es miembro
de la facultad de investigación en la Universidad de Energía,
Medio Ambiente y Centro de Recursos de Tenesse, sirviendo con contrato
al Laboratorio Nacional de Información Geográfica y espacial
de Oak Ridge, y tiene experiencia en algoritmos informáticos, sistemas
de Información Geográfica, diseño ecológico
y simulación.
"The submitted manuscript
has been authored by a contractor of the U.S. Government under contract
No. DE-AC05-96OR22464. Accordingly, the U.S. Government retains a nonexclusive,
royalty-free license to publish or reproduce the published form of this
contribution, or allow others to do so, for U.S. Government purposes."
¿Quiere más artículos de Crossroads articles
acerca de la Arquitectura de Computadores? Vaya al
Location:www.acm.org/crossroads/xrds6-1/parallel.html