trbs2d(a[,ictxt,scope,top,uplo,diag,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 (trbs2d o trbr2d). En este caso las matrices a enviar
son de tipo trapezoidal.
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 (ver rutina gebs2d,uplo: Debido a que las matrices son simétricas, con este caracter
indicamos en que lado de la diagonal principal vamos a realizar cálculos y
obtener los resultados:
uplo='U': (Valor por defecto).Se obtienen los resultados en la
diagonal principal y por encima de ella.
uplo='L': Se obtienen los resultados en la diagonal principal y por
debajo de ella.
diag: Indicará si la matriz es unitaria triangular o no.
diag='N': (Valor por defecto). La matrix no es unitaria triangular
diag='U': La matrix es unitaria triangular
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 trsd2d
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.trbs2d(a,top='F')
else:
a=zeros([size,1])
a=PyBLACS.trbr2d(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.