gesd2d(a[,ictxt,scope,top,llda])
Esta rutina inicia la difusión a traves del grupo de destinatarios. Todos los demás procesos
que pertenecen al grupo de destino deberán llamar a la rutina de recepción de la difusión
(gebr2d). Finalmente, todos los procesos pertenecientes al grupo destinatario
recibirán la matriz a. La difusión es localmente bloqueante, es decir , que no se
garantiza que el proceso vuelva de una llamada a broadcast hasta que todos los procesos hayan
llamado a las rutinas apropiadas (gebs2d o gebr2d).
Las características de cada uno de los parámetros de entrada y salida son:
Parametros de Entrada
a: Matriz en tipo de dato Numeric a ser enviada.
ictxt: Indicador del contexto, parametro opcional. En el caso de no indicarlo,
se utilizará el identificador de contexto por defecto.
scope: Indica el grupo de destino de la difusíon.
scope='A': (Valor por defecto). Correspondiente a All. Todos los procesos de la malla recibirán la matriz
scope='R': Se envían los datos a los procesos de la misma fila.
scope='C': Se envían los datos a los procesos de la misma columna.
top: Topología de la difusión:
top=' ': (Valor por defecto). Topología dependiente del sistema por defecto
top='I': Anillo incremental
top='D': Anillo decremental
top='H': Hipercubo (mínimo spanning tree)
top='S': Anillo split
top='F': Conectividad total
top='M': Nodos divididos en 'I' anillos incrementales, donde 'I' es un conjunto obtenido de la llamada a PyBLACS.set
top='T': Arbol de difusión con nbranches=I, donde 'I' es un conjunto obtenido de la llamada a PyBLACS.set
top='1': Arbol de difusión con nbranches=1
top='2': Arbol de difusión con nbranches=2
top='9': Arbol de difusión con nbranches=9
llda: Leading dimension de a.
Parametros de Salida (no tiene)
En el ejemplo que mostramos a continuación, realizaremos la misma funcionalidad que en el ejemplo del
apartado gesd2d
import PyACTS.PyBLACS as PyBLACS
from Numeric import *
iam,nprocs=PyBLACS.pinfo()
nprow,npcol=2,2
size=4
ictxt=PyBLACS.gridinit(nprow,npcol)
nprow,npcol,myrow,mycol=PyBLACS.gridinfo()
if myrow==0 and mycol==0:
a=reshape(range(size),[size,1])
print "[",myrow,",",mycol,"] brodcast a=",transpose(a)
PyBLACS.gebs2d(a,top='F')
else:
a=zeros([size,1])
a=PyBLACS.gebr2d(a,0,0,top='F')
print "[",myrow,",",mycol,"] receives a=",transpose(a)
PyBLACS.gridexit(ictxt)
PyBLACS.exit()
El resultado de la ejecución de este script es:
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPyblacsgebsr2d.py [ 0 , 0 ] brodcast a= [ [0 1 2 3]] [ 0 , 1 ] receives a= [ [ 0. 1. 2. 3.]] [ 1 , 0 ] receives a= [ [ 0. 1. 2. 3.]] [ 1 , 1 ] receives a= [ [ 0. 1. 2. 3.]]
See Sobre este documento... para sugerencias en cambios.