deb http://es.archive.ubuntu.com/ubuntu lucid main universe
e instalando los paquetes (mpich2 y mpich2-doc) a través de apt.
pool/universe/m/mpich2
Por ejemplo http://es.archive.ubuntu.com/ubuntu/pool/universe/m/mpich2/ instalándo con Gdebi posteriormente.
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
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.
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
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.
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.
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?
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
Sólo por curiosidad, ¿Qué utilidad real y concreta se le puede dar a eso?
@joel: Perdona que hayamos tardado tanto en responderte, pero llevamos unos días hasta arriba como habrás notado con la baja actividad del portal.
Te comento. MPI es un estándar y una implementación de una técnica de paso de mensajes para sincronizar procesos e intercambiar información en sistemas multiprocesador de memoria distribuida.
Imagínate que tienes en tu casa tres equipos distintos. Podrías paralelizar el cálculo del mismo en ellos de forma que aprovecharas las tres máquinas simultáneamente para resolver el mismo problema.
MPI te hace todo esto bastante transparente y tiene un nivel de abstracción bastante alto, no tanto como otras soluciones (CORBA que distribuye los objetos directamente), pero sí que mayor que la creación de sockets para este tipo de labores.
Si quieres pregunta más que este tema es muy interesante.
@joel: Para concretar más, MPI es el estándar, MPICH y MPICH2 son implementaciones del mismo (versión 1 y 2, respectivamente).
hola el problema es que cuando ejecuto mpdboot -n 2 -f mpd.host
me dice que mpdboot:command not found
si tengo instalado mpich2 y mpich-doc
y no se que hacer =/