[Sistemas Multiprocesador] Instalación y configuración de MPICH2
Instalación de los paquetes necesarios
Instalación de mpich2 y mpich2-doc
- Usando el repositorio de ubuntu:
deb http://es.archive.ubuntu.com/ubuntu lucid main universe
e instalando los paquetes (mpich2 y mpich2-doc) a través de apt.
- O descargándose los paquete a través del cualquier repositorio dentro del subdirectorio:
pool/universe/m/mpich2
Por ejemplo http://es.archive.ubuntu.com/ubuntu/pool/universe/m/mpich2/ instalándo con Gdebi posteriormente.
Instalación de openssh-server
Para controlar los ordenadores dentro del cluster se recomienda instalar un servidor SSH para cada uno de ellos, por ejemplo OpenSSH.
$ apt-get install openshh-server
Configurar los nombres de las máquinas
Para ello editaremos el fichero /etc/hosts (superusuario) en cada una de las máquinas que comprenden el grupo, poniendo la etiqueta master al equipo maestro. Importante comentar la línea que indica que el servidor local es 127.0.1.1, así, por ejemplo.
127.0.0.1 localhost
# 127.0.1.1 ordenadorMaestro
192.168.1.147 ordenadorMaestro master
192.168.1.146 ordenadorEsclavo1
192.168.1.145 ordenadorEsclavo2
192.168.1.144 ordenadorEsclavo3
192.168.1.143 ordenadorEsclavo4
Siendo este fichero similar en todos los equipos que componen el anillo.
Crear el archivo de configuración de MPI y de ejecución
Para todas las máquinas crearemos el fichero .mpd.conf en la raiz del usuario que vaya a lanzar el proceso:
echo MPD_SECRETWORD=”contraseña_común” >> .mpd.conf
chmod 600 .mpd.conf
En la máquina que vaya a lanzar el proceso, en este caso el maestro (master) se creará un archivo que contendrá el nombre de las máquinas que van a par
ticipar en la ejecución del mismo:
touch mpd.hostsnano mpd.hosts
ordenadorMaestro master
ordenadorEsclavo1
ordenadorEsclavo2
ordenadorEsclavo3
ordenadorEsclavo4
Iniciar el servicio MPD
Para ello usaremos en lugar del comando mpd, el comando mpdboot levantando de esta manera el demonio en todas las máquinas indicadas en el fichero anterior siempre que N sea igual al numero de estas, si es menor las irá cogiendo en orden descendente (dentro del fichero).
mpdboot -n 2 [-f fichero_de_hosts)
Para evitar que se nos solicite la contraseña cada que vez que creemos el anillo de máquinas podemos autenticarnos previamente con ssh RSA de la siguiente manera:
$ ssh-keygen -t rsa
$ ssh-copy-id usuario@ordenadorEsclavo1
$ ssh-add
Así, no tendremos que indicar los credenciales cada vez.
Verificación y corrección de errores
Se recomienda usar el comando mdptrace con la opción -l para verificar que todos los ordenadores seleccionados se encuentran dentro del anillo de ejecución.
De surgirnos algún error o tratar de verificar los realizado podemos usar el comando mpdcheck.
Lanzar la aplicación
Antes de lanzar la aplicación hemos de compilarla, CC = mpicc, y siguiendo esta analogía actuaremos de igual forma que el compilador gcc.
Hemos de transferir la aplicación a cada una de las máquinas que van a intervenir en la aplicación, en cuyo caso y al usar el protocolo de SHH:
scp aplicacion_compilada ordenadorEsclavo1:./
Es importante entender que no se puede trabajar en un grupo cuyos procesadores no trabajan con la misma arquitectura, en tal caso podemos transferir el ejecutable o el fuente y compilarlo independemente en cada máquina, cuyo resultado es análogo ya que todas usarán la misma arquitectura.
Ahora estamos preparados para lanzar la aplicación compilada, así:
mpdexec -n 10 ./aplicación
Si el parámetro N es mayor que el número de máquinas que intervienen se usarán varios cores dentro de cada ordenador, es decir, si tenemos dos máquinas y usamos -n 4 estaremos indicando que queremos dos nucleos para cada ordenador que participa.
NOTA: mpdexec y mpdrun son el mismo programa, siendo el segundo una copia del primero.
¿Alguna duda?