viernes, 2 de marzo de 2012

Exprimiendo tu procesador multi Core en Linux

Cuando se programa un algoritmo, se pueden ir resolviendo sus partes en serie o en paralelo.

La opción de paralelizar, en efecto aumenta el rendimiento cuando hay una etapa que tiene un elevado período de espera, ya que las otras pueden seguir avanzando.

Entonces hablemos de procesamiento distribuido en paralelo e invocamos el nombre de esta magnifica herramienta (PPSS) http://code.google.com/p/ppss, uno de los colaboradores (louwrentius) en este proyecto nos cuenta su experiencia:

"He usado PPSS para convertir 400 GB de archivos WAV a MP3 con 4 computadoras. Un total de 14 núcleos a disposicion de PPSS para codificar los archivos usando Lame. Sin embargo, PPSS no se limita a convertir archivos WAV. Por el contrario, está escrito para ejecutar el comando que desee ejecutar. por ejemplo, comprimir un monton de archivos en Gzip en paralelo? No hay problema. Esta limitado por su imaginación."

PPSS permite ejecutarse en varios Hosts que a su vez trabajen en un mismo conjunto de archivos o tareas donde un servidor central se encargue de bloquear las tareas o archivos que ya se hayan o esten tratando o ejecutando en cualquiera de los otros hosts.

Esto significa que PPSS esta diseñado para hacer uso de los CPU´s disponibles en el equipo o los equipos, detecta la cantidad de CPU´s disponibles y comienza un thread por cada CPU encontrado, ideal para comprimir múltiples archivos, conversión de archivos, copias de archivos entre carpetas o equipos.

Ahora como instalarlo y un ejemplo:

wget http://ppss.googlecode.com/files/ppss-2.85.tgz

tar xvzf ppss-2.85.tgz -C /usr/local/bin

chown root:root /usr/local/bin/ppss && chmod a+rx /usr/local/bin/ppss

ls -l /usr/local/bin/ppss

Con esto ya podemos ejecutar en nuestra consola el comando ppss.

Ejecutamos el comando ppss y obtendremos:

|P|P|S|S| Distributed Parallel Processing Shell Script 2.85

usage: /usr/local/bin/ppss.sh [ -d  | -f  ]  [ -c ' "$ITEM"' ]
                 [ -C  ]  [ -j ] [ -l  ] [ -p <# jobs> ]
                 [ -D  ] [ -h ] [ --help ]

Examples:
                 /usr/local/bin/ppss.sh -d /dir/with/some/files -c 'gzip '
                 /usr/local/bin/ppss.sh -d /dir/with/some/files -c 'gzip "$ITEM"' -D 5
                 /usr/local/bin/ppss.sh -d /dir/with/some/files -c 'cp "$ITEM" /tmp' -p 2
 
 
 En donde la variable $ITEM esta establecida como variable de bucle en PPSS.
 
En un ejemplo practico y sencillo de esta herramienta, decodificaremos archivos mp3 de 320kBit a128kBit VBR:
 
 Primero sin multi proceso:
for i in *.mp3; do lame -V 4 -B 160 - "${i%.flac}.mp3"'; done 

Ahora que PPSS haga la magia:

ppss -d /ruta/320kBit/mp3_files -c 'lame $ITEM -V 4 -B 160 "${ITEM%.mp3}.bajomp3"'

y bueno luego cambiamos la extension .bajomp3 por la correcta asi: mmv "*.bajomp3" "/nueva/ruta/#1.mp3"

 Y de esta manera comprobaremos el verdadero poder de nuestros Cores.

Hasta la PROXYma. 

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Web Host