miércoles, 4 de abril de 2012

Pypar

Instalarlo es sencillo necesitamos algunos paquetes

# Python paquetes
python2.5
python-dev
python-numpy
python-numpy-dev
python-imaging (PIL)


# MPI
lam4c2
lam4-dev
lam-runtime

#Descargar
http://code.google.com/p/pypar/downloads/list




Para verificar que todo se instalo correctamente tecleamos

mpirun -np 2 testpypar.py

Empezar

Importamos la librería en python:


Ahora nosotros podemos escribir algunas funciones propias de esa libreria por ejemplo
>>pypar.size()
Con eso podemos obtener el numero de procesos en paralelo, cuando usamos pypar en la linea de comandos esto debe de ser 1:


Los procesadores estan numerados desde el 0 hasta pypar.size() - 1, entonces con el comando pypar.rank(), podemos obtener el numero de procesador actual que esta corriendo:


Y para obtener el nombre del procesador del nodo actual se usa:
>>pypar.get_processor_name()
Y vemos que obtenemos el nombre de mi computadora:



Primer programa


import pypar # The Python-MPI interface
numproc = pypar.size()
myid = pypar.rank()
node = pypar.get_processor_name()
print "I am proc %d of %d on node %s" %(myid, numproc, node)
if numproc < 2:
print "Demo must run on at least 2 processors to continue"
pypar.abort()
if myid == 0:
msg = "MSGP0"
print 'Processor 0 sending message "%s" to processor %d' %(msg, 1)
pypar.send(msg, 1)
msg, status = pypar.receive(numproc-1, return_status=True)
print 'Processor 0 received message "%s" from processor %d' %(msg, numproc-1)
print 'Size of msg was %d bytes' %(status.bytes())
else:
source = myid-1
destination = (myid+1)%numproc
msg, status = pypar.receive(source, return_status=True)
print 'Processor %d received message "%s" from processor %d'\
%(myid, msg, source)
print 'Size of msg was %d bytes' %(status.bytes())
msg = msg + '->P' + str(myid) #Update message
print 'Processor %d sending msg "%s" to %d' %(myid, msg, destination)
pypar.send(msg, destination)
pypar.finalize()
view raw gistfile1.py hosted with ❤ by GitHub


La manera de correrlo es:

mpirun -np 4 demo.py

con esto le dices que se ejecutara en 4 procesadores y se mande una copia del programa a cada uno de ellos.


Este programa demo.py manda un mensaje de el procesador 0 y lo envía alrededor de un anillo

Cada procesador añadiendo un poco a ella hasta que llegue de vuelta en procesador 0.

Es escencial en los programas paralelos averiguar qué procesador esta ejecutando que cosa, esto se hace mediante la llamada:

myid pypar.rank = ()

El número total de procesadores se obtiene a partir

proc = pypar.size ()

Entonces uno puede tener diferentes códigos para diferentes procesadores de ramificación como en

si == 0 myid

Para enviar una estructura general de Python a un procesador de p, se escribe pypar.send (A, p) y para recibir algo de procesador de q, se escribe X = pypar.receive (q)

Esta es la base para la programación en paralelo usando Pypar, esperemos cuando este listo el cluster poder implementar esto en varios procesadores.


Referencias

Pypar

1 comentario:

  1. Muy bien. Son 8 de lab; corro los puntos extra para semanas que siguen.

    ResponderEliminar