7.7.2 trbs2d

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:

En el ejemplo que mostramos a continuación, realizaremos la misma funcionalidad que en el ejemplo del apartado trsd2d pero utilizando las rutinas de difusión y recolección.

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.