# 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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
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.
Muy bien. Son 8 de lab; corro los puntos extra para semanas que siguen.
ResponderEliminar