Monthly Archives: March 2010

Compilación Paralela

He empezado a aprender como hacer compilación paralela para obtener más rendimiento en el clúster. Para ello me he metido con OpenMPI que es un proyecto abierto derivado de la estructura LAM/MPI mantenido por la comunidad.

El primer paso es obtener el software de esta dirección y compilarlo:

$ tar jxvf openmpi-1.4.1.tar.bz2
$ ./configure --prefix=/usr/local/openmpi
# make all install

Una vez compilado, debemos actualizar el enlazador dinámico para que nuestro software enlace correctamente con las librerías dinámicas de OpenMPI

# ldconfig /usr/local/openmpi/lib

Con esto, le decimos al programa ld que busque en /usr/local/openmpi/lib las librerias que haces falta en tiempo de ejecución de nuestro programa.

A continuación, es obligatorio que todos los nodos del clúster tengan acceso a los ejecutables tanto de nuestro programa como de OpenMPI, por lo que vamos ha crear un par de comparticiones por NFS.

/usr/local/openmpi   192.168.0.0/24(ro,root_squash)
/home/openmpi   192.168.0.0/24(rw,root_squash)

Donde /home/openmpi es nuestro usuario de cluster, en su directorio $HOME estará el programa a ejecutar. Y la otra compartición contiene los ejecutables del compilador.

Vamos a lanzar el programa clásico HelloWorld en paralelo, para ello utilizamos el siguiente código.

/* helloworld.c */
/* http://www.semicomplete.com/presentations/mpi/#slide_2 */
#include <stdio.h>
/* Esto es para añadir las funciones de OpenMPI */
#include "mpi.h"

int main(int argc, char **argv) {
int rank;
char host[150];
int namelen;

/* Inicializar MPI. Maneja la línea de comando especifica de mpich */
MPI_Init(&argc, &argv);

/* Devuelve el rango. Mi número de rango (de la instancia del programa) queda almacenado en la variable rank */
MPI_Comm_rank(MPI_COMM_WORLD, &rank);

/* Vemos en qué maquina me ejecutando y lo guardamos en host */
MPI_Get_processor_name(host,&namelen);

printf("Hello world (Rank: %d / Host: %s)\n", rank, host);
fflush(stdout);

/* Fin: Cerramos las conexiones con los demás nodos y liberamos la memora que el programa ha reservado,... */
MPI_Finalize();
return 0;

Lo compilamos

$ PATH=$PATH:/usr/local/openmpi/bin
$ mpicc helloworld.c -o helloworld

El PATH podemos añadirlo a nuestro ~/.bashrc para que esté siempre disponible. Ejecutamos.

$ mpirun -np 5 --hostfile=hosts helloworld

Donde

  1. -np Es el número de procesos que vamos a lanzar.
  2. –hostfile Es el fichero que almacena los nombres de los hosts, cada nodo del cluster.

La salida debe ser algo como esto

Hello world (Rank: 0 / Host: master)
Hello world (Rank: 2 / Host: master)
Hello world (Rank: 4 / Host: master)
Hello world (Rank: 1 / Host: cluster01)
Hello world (Rank: 3 / Host: cluster01)

Vemos que ha lanzado tres procesos en master y dos en cluster01.

De momento esto es lo poco que sé, pero sigo avanzando, el asunto de tener que resolver matrices de gran tamaño voy a necesitar escribir código para lanzar paralelizado.

La Medida de Twitter

Ayer estaba charlando con mi amigo Migue, comentando como el mundo de la informática iba y las últimas noticias y tal cuando comentamos el efecto Twitter en otras redes sociales como Tuenti o Facebook. El fenómeno del microblogging ha calado tan hondo que estas dos últimas ha modificado su páginas principales de usuario para que se adapten al formato de Twitter. O sea, 140 caracteres y actualización continua del flujo de información. Hasta aquí todo bien, pero es que han cogido también 140 caracteres, por qué?

Se podía haber elegido cualquier otra cantidad de caracteres para los mensajes de estado, pero han cogido la misma que Twitter, entonces qué? pues que Twitter ha creado un estandard de mensajes de 140 caracteres y los demás lo copian. Así, Migue y yo bautizamos a 140 caracteres La medida de Twitter (MT).

Qué pasará ahora? pues que se darán casos en las escuelas donde los profesores encarguen a los alumnos redacciones de 3 o 4 MT, que el alfabeto castellano tiene 0.187 MT, los anuncios por palabra se podrán estandarizar al número de letras para tarificarlos por MT, etc.

Este post son 8 MT.

No estoy muerto, estoy muy liado

Estoy muy liado últimamente pero no quería pasar esta oportunidad de contaros de que tras casi tres años de becario y luego uno donde me hicieron contratos de 6, 3 y 3 meses, por fin hoy, me han hecho un contrato indefinido.

Con los tiempo que corren, un contrato de este tipo es como que te toque una lotería y por eso que estoy que no me lo creo.

Muchos años de esfuerzo y sacrificio, muchas fiestas que me he perdido por estar con el ordenador, muchiiiiiisimas horas aquí sentado, ahora dan su fruto. Nadie hubiera apostado con 7 u 8 años cuando en mi casa compraron el Amstrad CPC 128k que acabaría dedicando mi vida a saber más de ordenadores. Usaba GNU/Linux antes que naciera Ubuntu, eso es más o menos, que te gustara la Fórmula 1 antes de Fernando Alonso. Aprendí C sin Google. Juas, que viejo soy!!

Ahora nuevos proyectos llaman a mi puerta, proyectos que van de la mano de Fortran y LAM/MPI para clustering de cálculo de estructuras. Os mantendré informados.