You are on page 1of 5

PORTADA • LAM/MPI

Clusters de alto rendimiento con LAM/MPI


Wito
ld Kr
asow

FUGITIVO
ski, 1
23RF

La venerable insfraestructura LAM/MPI es una

plataforma estable y práctica para la creación de aplica-

ciones de alto rendimiento. POR KHURRAM SHIRAZ

entre los procesos (incluso entre procesos que un desarrollador especializado en


que se ejecutan en servidores físicos dis- programación paralela encuentre
tintos), por lo que un programa puede alguno.
operar de forma completamente paralela. Además de ofrecer los archivos y libre-
MPI se ha convertido en un estándar en rías necesarios para implementar las fun-
materia de programación paralela. ciones de la API de MPI, LAM/MPI pro-
LAM/MPI [1] es una implementación porciona también el entorno de ejecución
de código abierto del estándar MPI mante- LAM. Este entorno de ejecución consiste
nida por los estudiantes y el profesorado principalmente en un demonio a nivel de

H
oy en día, una gran cantidad de de la Universidad de Indiana. El sistema usuario que suministra muchos de los ser-
aplicaciones comerciales, espe- LAM/MPI existe desde hace 20 años y vicios requeridos por los programas MPI.
cialmente en las áreas de ingenie- está considerado como una herramienta Los principales componentes del
ría, minería de datos, investigación cientí- estable y madura. Según su sitio web, paquete LAM/MPI están bien integrados y
fico/médica o exploración petrolífera, se LAM/MPI se encuentra ahora en “modo diseñados como un framework de compo-
benefician de las bondades de la computa- mantenimiento”, llevándose la mayor nentes extensible con un pequeño número
ción paralelizada. En la mayoría de los parte de los nuevos desarrollos a la imple- de módulos. Estos módulos se pueden
casos, los programadores han de diseñar o mentación alternativa Open MPI de nueva seleccionar y configurar en tiempo de eje-
personalizar estas aplicaciones paralelas generación. cución. Al framework de componentes se
para poder aprovechar las ventajas de las De cualquier modo, LAM/MPI sigue le conoce por SSI (System Services Inter-
arquitecturas paralelas. MPI (Message-Pas- recibiendo parches críticos, además, la face).
sing Interface) consiste en un juego de amplia base de sistemas LAM/MPI por LAM/MPI aporta un alto rendimiento
funciones de API que pasan mensajes todo el mundo eleva la probabilidad de en distintas plataformas, que van desde
clusters mononúcleo estándar hasta gran-
Configurando C3 des máquinas SMP en redes de alta veloci-
Existen varias herramientas shell de ln -s /opt/c3-4/cpush
dad. Además del alto rendimiento, LAM/
código abierto distribuidas que propor- /usr/bin/cpush MPI incluye un número de funcionalida-
cionan funcionalidades de administra- El siguiente paso consiste en especificar
des de usabilidad que ayudan en el
ción de clusters, pero hemos decidido desarrollo de la aplicación MPI a gran
en el archivo /etc/c3.conf los nodos del
utilizar C3 [2], una herramienta de ges- escala.
clúster, como se muestra en el Listado 1
tión centralizada de clusters excelente,
(en cuyo ejemplo se presupone que
rápida y eficiente. La suite de C3 propor-
todos los nodos del clúster son capaces Listado 1: Ejemplo de
ciona una serie de herramientas para la
de resolver nombres de host mediante
gestión de los archivos y procesos del
sus archivos /etc/hosts). Y ya podemos
Archivo /etc.c3.conf
clúster.
probar la funcionalidad de las herra- 01 cluster local {
Se puede descargar el RPM de C3 desde
el sitio web del proyecto [3], que se ha mientas de C3. Por ejemplo, la herra- 02 alpha:alpha1 # Nombre
de instalar como root. El instalador mienta cexec ejecuta un comando en de host público y privado del
dejará el paquete en el directorio /opt/ cada nodo del clúster. El comando nodo maestro
c3-4 para la versión actual. Luego se
03 bravo[2-5] # Notación
añaden los siguientes enlaces simbóli- #/home/root> cexec df
compacta para especificar los
cos:
ln -s /opt/c3-4/cexec muestra el diseño del sistema de archi- nodos esclavos
/usr/bin/cexec vos de cada nodo cliente. 04 }

30 Número 56 WWW.LINUX- MAGAZINE.ES


LAM/MPI • PORTADA

En este artículo veremos cómo comen- lugar de SAN. Un sistema de archivos en si esta funcionalidad de seguridad mejo-
zar con la programación paralela en LAM/ clúster, como GFS, GPFS o Veritas puede rada no hiciese falta, se podría considerar
MPI. proporcionar mejoras adicionales sobre el la posibilidad de desactivarla. El cortafue-
rendimiento; de todos modos, nótese que gos iptables también viene habilitado por
El Clúster casi el 95 por ciento de las implementacio- defecto. Si el clúster se encuentra en una
El clúster usado aquí consiste en un centro nes de computación en clúster funcionan red en la que se confía completamente,
dotado de cinco blades de Intel. Cada bien con un simple NAS o SAN. también se puede desactivar. De lo contra-
blade dispone de dos procesadores, dos Cada sistema blade debería contar con al rio, se debería habilitar el cortafuegos, con
tarjetas Ethernet, una tarjeta FC y 8GB de menos dos interfaces Ethernet. Se habría un acceso por SSH habilitado, en el nodo
memoria. Hemos usado Red Hat Linux de considerar incluso la posibilidad de maestro solamente.
Enterprise Edition v4 como sistema opera- tener tarjetas Ethernet adicionales en los Si el clúster contiene un gran número de
tivo para este ejemplo de HPC (High-Perfor- nodos cliente o maestro y hacer enlaces nodos, convendrá disponer también de
mance Computing). Ethernet (bonding) entre las interfaces de algún tipo de herramienta de administra-
Para las implementaciones de bajo coste la red pública o la privada para mejorar el ción para la gestión centralizada del clús-
se puede usar almacenamiento SCSI o rendimiento y la disponibilidad. ter. Aquí se usará C3, un juego de herra-
almacenamiento basado en SAN (sólo para En nuestra red, el direccionamiento de mientas de código abierto para la gestión
el nodo maestro), y hacerlo disponible las comunicaciones dentro del clúster hace de clusters (ver el cuadro titulado “Instala-
para el resto de nodos cliente a través de uso de un espacio de direcciones privado ción de C3”).
NFS. Otra posibilidad sería usar NAS en no enrrutable (como por ejemplo
10.100.10.xx/24). Los nodos esclavos usan Creando un Usuario para
Listado 2: /etc/lam/lamhosts sólo un puerto Ethernet de 1GB con una LAM
dirección en la red privada. La dirección Antes de iniciar la ejecución de LAM, crea-
01 bravo1.cluster.com
del nodo maestro (eth0) se usa como remos un usuario no-root que será el pro-
02 bravo2.cluster.com cpu=2
puerta de enlace para los nodos esclavos. pietario de los demonios de LAM. En el
03 bravo3.cluster.com cpu=2 SELinux viene habilitado de forma pre- nodo maestro, ejecutamos:
04 bravo4.cluster.com determinada en los sistemas RHEL 4, pero
/home/root> useradd -d lamuser
Tabla 1: Comandos de LAM /home/root> passwd lamuser U
(e introducimos la contraseña
Comando Propósito Sintaxis
para lamuser)
lamnodes Muestra toda la información relativa a los nodos Para mostrar CPU, hostname
Usamos cpush para sincronizar la informa-
del universo LAM. Una vez finalizado lamboot, y otra información del todos los
hostnames se hace transparente para LAM. En los nodos del universo LAM: ción de seguridad relativa a lamuser entre
este punto, el comando lamnodes se puede #lamnodes -N el nodo maestro y todos los nodos cliente:
ejecutar con las opciones N o C.
lamhalt Mata todos los procesos MPI que haya ejecután #lamhalt /home/root> cpush /etc/passwd
dose y apaga el universo LAM entero. cpush /etc/shadow
lamclean Elimina todos los programas en ejecución del #lamclean
cpush /etc/group
universo LAM pero no apaga el universo
propiamente dicho. Este comando es útil cuando cpush /etc/gshadow
una tarea paralela se cuelga en el entorno de
ejecución de LAM. Además necesitaremos configurar el
lamgrow Se usa para añadir un nodo al universo LAM #lamgrow? ssi boot ssh bravo6. acceso SSH sin contraseña para la cuenta
en ejecución cluster.com lamuser.
lamshrink Elimina un nodo específico del universo LAM. #lamshrink n2 (elimina el nodo
Este comando no puede tomar un nombre de
host como argumento, sólo nombres de nodos
n2 del universo LAM) Instalación de LAM/MPI
LAM del tipo nxx. Conceptualmente, el uso de LAM/MPI
Mpiexec Funcionalmente equivalente a lamexec, pero #mpiexec <opciones> para la computación paralela es muy sen-
con la ventaja añadida de ejecutar programas comando1:comando2 cillo. Primero hemos de iniciar el entorno
en plataformas heterogéneas, programas MPMD de ejecución (o demonio) de LAM en
y programas MPI a través de scripts. todos los nodos maestro y cliente antes de
compilar o ejecutar cualquier código para-
Listado 3: Salida de lamboot lelo. Luego, ya se pueden compilar los
01 LAM 7.0.6/MPI 2 C++/ROMIO - Indiana University
programas MPI y ejecutarlos en el
entorno paralelo proporcionado por el
02
demonio de LAM. Al terminar, se pueden
03 n0<1234> ssi:boot:base:linear: booting n0 (bravo1.cluster.com)
parar todos los demonios de LAM en los
04 n0<1234> ssi:boot:base:linear: booting n1 (bravo2.cluster.com)
nodos que toman parte en la computa-
05 n0<1234> ssi:boot:base:linear: booting n2 (bravo3.cluster.com)
ción.
06 n0<1234> ssi:boot:base:linear: booting n3 (bravo4.cluster.com)
Comenzamos instalando LAM/MPI en
07 n0<1234> ssi:boot:base:linear: finished
todos los nodos del clúster. En el sitio web

WWW.LINUX- MAGAZINE.ES Número 56 31


PORTADA • LAM/MPI

cd /tmp/lam
cpush lam-7.10.14.rpm
cexec rpm -i U
lam-7.10.14.rpm

Después de instalar correc-


tamente LAM/MPI, se ha de
configurar la variable de
entorno PATH. En este caso,
el usuario propietario de los
demonios de LAM es lamu-
ser, y el intérprete predeter-
minado es bash, por lo que
Figura 1: Verificando clusters LAM/MPI con recon. editamos el archivo /home/ Figura 2: Verificando los nodos LAM/MPI con tping.
lamuser/.bashrc de modo
del proyecto se pueden encontrar paque- que la definición de la variable PATH con- Para transferir el archivo .bashrc o .cshrc
tes RMP para Red Hat, junto con el tenga la ruta a los binarios de LAM: modificado a todos los nodos cliente, usa-
código fuente [4]. También hay disponi- mos el comando cpush de C3.
bles paquetes Debian [5]. export PATH=/usr/local/lam/bin:U Ya está todo preparado para definir los
Antes de instalar LAM/MPI, hay que $PATH nodos del clúster LAM/MPI que participa-
asegurarse de disponer de compiladores rán en el clúster de computación paralela.
de C compatibles con MPI, así como de Si se está usando csh, se deberá añadir la La forma más sencilla de hacerlo es cre-
la librería libaio. La suite de herramien- siguiente línea al archivo /home/lamuser/ ando un archivo llamado lamhosts en
tas C3 descrita anteriormente supone .cshrc: /etc/lam dentro del nodo maestro, y usar
una ayuda conveniente para la instala- luego cpush para enviarlo a todos los
ción del RPM de LAM/MPI en todos los set path = (/usr/local/lam/bin U nodos cliente.
archivos del clúster. Por ejemplo, combi- $path) El archivo lamhosts debería contener
nando los comandos cpush, cexec y rpm los nombres (que se puedan resolver) de
se pueden instalar los binarios de LAM Nótese que esta parte podría diferir todos los nodos. En el Listado 2 se mues-
simultáneamente en todos los nodos del dependiendo de la versión de LAM/MPI y tra el archivo lamhosts de nuestro clúster
clúster. de la distribución de Linux. computacional de alto rendimiento.

Listado 4: cpi.c
01 —————————————————— 15 * el directorio de nivel 31
02 Ejemplo de programa MPI superior de la distribución de 32 /* Constante para la cantidad
”cpi.c” LAM/MPI. de valores de la estimación */
03 —————————————————— 16 * 33
04 17 * $HEADER$
34 #define NUM_ITERS 1000
18 *
05 /* 35
19 * $Id: cpi.c,v 1.4 2002/11/23
06 * Copyright (c) 2001-2002 The 36 /* Prototipo de la función que
04:06:58 jsquyres Exp $
Trustees of Indiana se usará más abajo. */
University. 20 *
37
07 * All rights reserved. 21 * Partes tomadas del ejemplo
38 static double f(double);
cpi.c de la distribución de
08 * Copyright (c) 1998-2001
MPICH. 39
University of Notre Dame.
22 * 40 int main(int argc, char
09 * All rights reserved.
23 * Programa de ejemplo que *argv[])
10 * Copyright (c) 1994-1998 The
calcula el valor de pi 41 {
Ohio State University.
integrando 42 int iter, rank, size, i;
11 * All rights reserved.
24 * f(x) = 4 / (1 + x^2) 43 double PI25DT =
12 * 25 * 3.141592653589793238462643;
13 * Este archivo es parte del 26 */ 44 double mypi, pi, h, sum, x;
paquete de software LAM/MPI.
27 45 double startwtime = 0.0,
Para obtener
28 #include <stdio.h> endwtime;
14 * información sobre la
licencia, consultar el archivo 29 #include <math.h> 46 int namelen;
LICENSE ubicado en 30 #include <mpi.h> 47 char

El valor de cpu en el archivo lamhosts

32 Número 56 WWW.LINUX- MAGAZINE.ES


LAM/MPI • PORTADA

es un entero que indica el número de La herramienta recon (se puede ver un trador suele arrancarlo antes de compilar
CPUs disponibles para ser usadas por ejemplo de salida de este comando en la nada.
LAM en un nodo en particular. En caso Figura 1) verifica que el clúster es arranca- Una de las reglas básicas de LAM/MPI es
de existir, se utiliza un valor de 1. Este ble. Aunque recon no arranca el entorno que se usan los mismos compiladores que
valor no tiene por qué representar el de ejecución de LAM y definitivamente no se usaban para compilar y enlazar progra-
número físico de CPUs, sino que puede garantiza el éxito de lamboot, se trata de mas MPI de usuario. De todas formas, este
ser un valor menor que, mayor que, o una buena herramienta con la que testear requisito es transparente para el adminis-
igual al número de CPUs físicas de la la configuración realizada. trador, ya que cada universo LAM propor-
máquina. Su uso es meramente una Otra herramienta importante de LAM es ciona compiladores de envoltura específi-
notación para la opción -C del comando tping, que verifica la funcionalidad de un cos para la comisión de las tareas de compi-
mpirun de LAM/MPI, lo que significa universo LAM enviando mensajes de ping lación.
“inicia un proceso por CPU como se entre los demonios LAM que forman el Algunos ejemplos de este tipo de compi-
especifica en el archivo de esquema de entorno LAM. ladores son mpicc, mpic*+/mpiCC y
arranque”. tping suele tomar dos argumentos: el mpif77, que compilan programas LAM/
conjunto de nodos al que se hará ping (en MPI escritos en C, C++ y FORTRAN en
Inicio del Entorno de notación N) y el número de veces que entornos LAM/MPI.
Ejecución debe hacerlo. Si no se especifica el Con los siguientes comandos es posible
Una vez completo el archivo lamhosts, número de veces que se hará ping, tping compilar programas MPI C y FORTRAN,
se puede usar el comando lamboot para continuará haciéndolo hasta que se le respectivamente:
iniciar el entorno de ejecución de LAM pare (normalmente pulsando Ctrl+C). El
en todos los nodos del clúster: comando de la Figura 2 hace ping una /home/lamuser> mpicc foo1.c -o U
sola vez a todos los nodos del universo foo1
/home/lamuser> lamboot -v U LAM. /home/lamuser> mpif77 -O U
/etc/lam/lamhosts test1.f -o test1
Computación Paralela con Nótese además que se pueden pasar cua-
La salida del comando anterior se mues- LAM/MPI lesquiera opciones adicionales del compila-
tra en el Listado 3. Una vez estén funcionando el universo dor/enlazador a través del compilador de
En caso de haber algún problema con LAM y todos los nodos, ya se puede envoltorio (como -g o -O); que pasarán pos-
lamboot, la opción -d proporciona empezar la aventura en computación teriormente al compilador de trasfondo.
ingentes cantidades de información de paralela. Aunque es posible compilar pro- Los compiladores de envoltorio tan sólo
depuración. gramas MPI sin arrancar LAM, el adminis- añaden las opciones específicas para

Listado 4: cpi.c (Continuación)


processor_name[MPI_MAX_PROCESS 62 sum = 0.0; %.16f\n”,
OR_NAME]; 63 79 iter, pi, fabs(pi -
48 64 /* Un método ligeramente mejor PI25DT));
49 /* Inicio normal de MPI */ que comienza por i y va hacia 80 endwtime = MPI_Wtime();
50 atrás */ 81 printf(“Tiempo límite =
51 MPI_Init(&argc, &argv); 65 %f\n”, endwtime - startwtime);
52 MPI_Comm_size(MPI_COMM_WORLD, 66 if (rank == 0) 82 fflush(stdout);
&size); 67 startwtime = MPI_Wtime(); 83 }
53 MPI_Comm_rank(MPI_COMM_WORLD, 68 84 }
&rank);
69 for (i = rank + 1; i <= iter; 85
54 i += size) {
MPI_Get_processor_name(process 86 /* Hecho */
70 x = h * ((double) i - 0.5);
or_name, &namelen); 87
71 sum += f(x);
55 88 MPI_Finalize();
72 }
56 printf(“Proceso %d de %d en 89 return 0;
%s\n”, rank, size, 73 mypi = h * sum;
90 }
processor_name); 74
91
57 75 MPI_Reduce(&mypi, &pi, 1,
92 static double
58 /* Aproximaciones del punto 1 MPI_DOUBLE, MPI_SUM, 0,
al 100 */ MPI_COMM_WORLD); 93 f(double a)
59 76 94 {
60 for (iter = 2; iter < 77 if (rank == 0) { 95 return (4.0 / (1.0 + a *
NUM_ITERS; ++iter) { 78 printf(“%d puntos: pi es a));
61 h = 1.0 / (double) iter; aproximadamente %.16f, error = 96 }

WWW.LINUX- MAGAZINE.ES Número 56 33


PORTADA • LAM/MPI

/home/lamuser> mpirun -C cpi


Mejora del Rendimiento
En un escenario de computación para- nodos maestro y clientes afectará tam- La opción C hace las veces, por tanto, de
lela, el objetivo principal suele consistir bién al rendimiento. De cualquier modo,
en reducir el tiempo de finalización de la dada la naturaleza de la ejecución para-
una notación conveniente para iniciar un
ejecución más que en reducir simple- lela, es importante que la fuente de datos conjunto de procesos a lo largo de un
mente el tiempo de CPU. Debido a la para la minería de datos (o los ejecuta- grupo de SMPs.
gran cantidad de factores presentes, no bles en implementaciones más simples) Por otro lado, el uso de la opción N en
cabe esperar una mejora lineal del rendi- esté disponible para todos los nodos de
miento sólo por añadir nodos. forma que se puedan realizar simultánea-
mpirun iniciará exactamente una copia
Uno de los factores más importantes es mente operaciones de lectura y de escri- del programa cpi en cada nodo del uni-
el paralelismo inherente presente en el tura sobre ella. verso LAM. Como consecuencia, el uso de
código (cómo de bien se divide el código En caso de estar usándose discos exter- la opción N en el comando mpirun indica
en partes para la ejecución paralela). nos basados en SAN junto con NFS, una
Desde el punto de vista de la infraestruc- correcta configuración de los parámetros
a LAM que debe despreciar la cuenta de
tura, hay muchos más factores que pue- de NFS puede ser beneficiosa en térmi- CPUs.
den contribuir a mejorar el rendimiento. nos de rendimiento. Si se están usando
En la mayoría de las implementaciones subsistemas de almacenamiento NAS y Comandos LAM
de clusters LAM/MPI, como los nodos protocolos NFS/CIFS para hacer disponi-
cliente se deben comunicar entre sí a tra- bles las fuentes compartidas de datos
El universo LAM es fácil de gestionar, aun-
vés de la arquitectura MPI, se debe con- para que todos los nodos puedan realizar que no dispone de ninguna infraestruc-
tar con una red dedicada rápida que los operaciones de lectura/escritura simultá- tura de gestión basada en GUI, por lo que
conecte (interfaces Ethernet gigabit con neamente, se recomienda usar una VLAN el administrador ha de basarse la mayor
bonding). separada e interfaces Ethernet en cada
Además es buena idea crear una VLAN nodo para la E/S de disco desde el subsis-
parte del tiempo en los comandos inclui-
separada para la comunicación privada tema NAS, de modo que se aísle el trá- dos con LAM. La Tabla 1 muestra los
de la red, de forma que ningún otro trá- fico del almacenamiento del tráfico de comandos para LAM más importantes.
fico suponga una degradación del rendi- MPI.
miento. Finalmente, los sistemas de archivos en Conclusión
Si la aplicación está realizando cualquier clúster (como GFS, GPFS y Veritas) tam-
tipo de minería de datos (que suele ser el bién pueden ayudar a acelerar la E/S de Son muchas las aplicaciones usadas en
caso de implementaciones comerciales disco en implementaciones LAM/MPI de ingeniería, simulación e investigación
de LAM/MPI), la E/S de disco de los mayor tamaño. científica, que requieren la potencia de la
computación paralela. Ese es el motivo
LAM/MPI cuando no hay ningún argu- especificar el número de procesos a ini- por el cual los desarrolladores continúan
mento de línea de comandos que ciar. usando LAM/MPI para crear aplicaciones
empiece por un guión (-). Por ejemplo, al Por ejemplo, podemos iniciar el clús- HPC.
ejecutar el comando mpicc sin argumen- ter LAM/MPI en todos los nodos A pesar de que la implementación de
tos, éste invoca al compilador de mediante lamboot y compilar entonces nueva generación Open MPI [6] incluye
segundo plano (que no es más que el programa C de ejemplo cpi.c (ver Lis- muchas nuevas funcionalidades, LAM/
GCC): tado 4), disponible para descarga en el MPI cuenta con una amplia base de usua-
sitio web de LAM/MPI. rios contentos con su fiabilidad, escalabili-
/home/lamuser> mpicc Para compilar el programa con el dad y rendimiento. ■
gcc: no input files compilador de envoltura mpicc, intro-
ducimos lo siguiente: RECURSOS
Los ejecutables resultantes (test1 y foo1
[1] Sitio web de LAM/MPI: http://www.
en los ejemplos anteriores) ya están lis- /home/lamuser> mpicc cpi.c -o U lam-mpi.org/
tos para ejecutarse en el entorno de eje- cpi [2] C3: http://www.csm.ornl.gov/torc/C3/
cución de LAM. [3] Descarga de C3: http://www.csm.
Se ha de copiar el ejecutable a todos Hemos hecho pruebas ejecutando el cpi ornl.gov/torc/C3/C3softwarepage.
shtml
los nodos cliente y asegurarse de que resultante con seis procesos paralelos
[4] Página de descarga de LAM/MPI:
lamuser tiene los permisos de ejecución en un clúster LAM/MPI de cinco nodos. http://www.lam-mpi.org/7.1/
adecuados. download.php
A partir de aquí ya se puede iniciar la /home/lamuser> mpirun -np 6 cpi [5] lam-runtime en Debian: http://
ejecución paralela. Es posible ejecutar packages.debian.org/lenny/
lam-runtime
todos los procesos de la aplicación para- Según el archivo lamhosts definido [6] Open MPI: http://www.open-mpi.org
lela en una sola máquina o en más de anteriormente, el comando inicia una [7] Guía del Usuario de LAM/MPI: http://
una (nodos maestro/cliente de un clús- copia de cpi en los nodos n0 y n3, www.lam-mpi.org/download/files/7.
ter LAM/MPI). De hecho, LAM/MPI per- mientras que dos copias se iniciarán en 1.4-user.pdf
mite además iniciar múltiples procesos n1 y n2. [8] Openshaw, Stan e Ian Turton. High
Performance Computing and the Art
en una sola máquina igualmente, inde- El uso de la opción C en el comando of Parallel Programming. ISBN:
pendientemente del número de CPUs mpirun iniciará una copia del programa 0415156920
que haya realmente en ella. cpi en cada una de las CPUs listadas en [9] Lafferty, Edward L., et al. Parallel
Como alternativa, se puede usar la el esquema de arranque (el archivo Computing: An Introduction. ISBN:
0815513291
opción -np del comando mpirun para lamhosts):

34 Número 56 WWW.LINUX- MAGAZINE.ES

You might also like