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.