PDF Imprimir E-mail

MPI

Bienvenido a la Grid Morelense de Alto Rendimiento

En esta sección mostramos como hacer uso de programas con MPI. Primeramente refiérase a como tener acceso al Cluster.tux <Descargar PDF>

Para compilar y ejecutar programas con MPI use: mpicc -o <ejecutable> <fuente> donde ejecutable es el nombre del archivo de salida y fuente es el archivo a compilar o programa fuente con extesion .c.

#include <mpi.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
   char idstr[32];
   char buff[128];
   char hostname[60];
   int numprocs;
   int myid;
   int i;
   MPI_Status stat;
  MPI_Init(&argc,&argv);
   MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
   MPI_Comm_rank(MPI_COMM_WORLD,&myid);
   if(myid == 0)
   {
     gethostname(hostname, 50);
    printf("Tenemos %d procesadores, yo soy el proceso maestro:%d en maquina:%s\n", numprocs,myid,hostname);
     for(i=1;i<numprocs;i++)
     {
       sprintf(buff, "¡Holaaa %d! ", i);
      MPI_Send(buff, 128, MPI_CHAR, i, 0, MPI_COMM_WORLD);
     }
     for(i=1;i<numprocs;i++)

     {      
      MPI_Recv(buff, 128, MPI_CHAR, i, 0, MPI_COMM_WORLD, &stat);
       printf("%s\n", buff);
     }

  }
   else
  {
     gethostname(hostname, 50);
     MPI_Recv(buff, 128, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &stat);
     sprintf(idstr, "Procesador %d en maquina:%s ", myid,hostname);
     strcat(buff, idstr);
    strcat(buff, "reportandose");
    MPI_Send(buff, 128, MPI_CHAR, 0, 0, MPI_COMM_WORLD);
}


MPI_Finalize();
return 0;
}

Así para compilar un programa llamado holamundo.c seria.

[fjuarez@gridmorelos ~]$ mpicc -o holamundo holamundo.c

Si se requiere agregar funciones matemáticas agregue la librería con: mpicc -lm -o <ejecutable> <fuente>.

Ejecución de trabajos com MPI.  Utilice mpirun -np <#procesos> <ejecutable>, donde #procesos es el numero decimal de los procesos que quiere ejecutar a lo largo del Cluster y el ejecutable es el archivo de salida al compilarlo con mpicc.

[fjuarez@gridmorelos ~]$ mpirun -np 4 ./holamundo
Tenemos 4 procesadores, yo soy el proceso maestro :0 en maquina:gridmorelos.uaem.mx
¡Holaaa 1! Procesador 1 en maquina:gridmorelos.uaem.mx reportandose
¡Holaaa 2! Procesador 2 en maquina:gridmorelos.uaem.mx reportandose
¡Holaaa 3! Procesador 3 en maquina:gridmorelos.uaem.mx reportandose

Observe que no se esta usando los nodos del Cluster ya que la maquina gridmorelos.uaem.mx es el front-end o nodo maestro, para usar los nodos del Cluster se requiere crear un archivo de hosts, las características puede obtenerlas utilizando los comandos de Cluster de esta forma:

[fjuarez@gridmorelos ~]$ rocks list host
HOST MEMBERSHIP CPUS RACK RANK RUNACTION INSTALLACTION

gridmorelos: Frontend 2 0 0 os install
compute-0-0: Compute 2 0 0 os install
compute-0-1: Compute 2 0 1 os install

...

Aquí puede observar el nombre de los nodos y el numero de CPU's, ahora creamos un archivo llamado hostsnodes  de la siguiente manera

 compute-0-0 slots=2 max_slots=99
 compute-0-1 slots=2 max_slots=99
...

Donde slots indica el numero de CPU's que tiene un nodo en particular y max_slots el máximo numero de procesos que se podrían correr, esta ultimo parámetro se utiliza para simular un numero máximo de CPU's mayor al real y puede omitirse. Ahora ejecutamos el mismo programa anterior:

fjuarez@gridmorelos ~]$ mpirun -hostfile hostnodes -np 4 ./holamundo
Tenemos 4 procesadores, yo soy el proceso maestro:0 en maquina:compute-0-0.local
¡Holaaa 1! Procesador 1 en maquina:compute-0-0.local reportandose
¡Holaaa 2! Procesador 2 en maquina:compute-0-1.local reportandose
¡Holaaa 3! Procesador 3 en maquina:compute-0-1.local reportandose

Observe que usamos el parámetro -hostfile con el archivo hostnodes, ademas ahora observe que los procesos se están ejecutando en las maquinas compute-0-0 y compute-0-1 que son los nodos de procesamiento y ya no están usando la maquina gridmorelos.uaem.mx que es el front-end, si requiere hacer del front-end como un nodo de procesamiento incluyalo en el archivo hostnodes.

Si no quiere usar el archivo hostnodes, puede especificar la lista de nodos de procesamiento directamente en la linea de ejecución de la siguiente manera:  mpirun -host compute-0-0,compute-0-1 -np 4 ./holamundo y el resultado es el mismo.


 

 

 

Patrocinadores


CIICAp
Maestrías y Doctorados en: Tecnología Eléctrica, Tecnología Química, Tecnología de Materiales y Tecnología Mecánica.




 

 

Links Relacionados

Mapa de visitas de esta página

Springer
Revista Programación Matemática

Springer

Artículo Mini Grid Morelos
Artículo Mini Grid Morelos

Contador de visitas

mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterHoy100
mod_vvisit_counterAyer53
mod_vvisit_counterEsta semana100
mod_vvisit_counterÚltima semana318
mod_vvisit_counterEste més308
mod_vvisit_counterUltimo més1980
mod_vvisit_countertodos los dìas431907