x= PyPBLAS.pvscal(alpha,x)
La función "PyPBLAS.pvscal" distribuye (si es necesario) y multiplica un
vector PyACTS (x
) por un número escalar real (alpha
).
El resultado es la la variable x
cuyos datos (x.data
)
se encuentran multiplicados por el escalar correspondiente.
Los parametros de entrada y salida de esta función son los siguientes:
Parametros de Entrada
Parametros de Salida
Observamos tambien que
el escalar conviene ser tratado previamente a modo que todos los procesadores conozcan su valor.
Mediante la llamada a alpha=Scal2PyACTS(alpha,ACTS_lib)
estamos preparando la variable
alpha
para poder ser utilizada como escalar en las rutinas de las PBLAS.
La funcionalidad de los descriptores x.desc, ..
se describen en el
capítulo
from PyACTS import * import PyACTS.PyPBLAS as PyPBLAS from RandomArray import * from Numeric import * #Dimension of Arrays n=8 #Initiliaze the Grid PyACTS.gridinit() if PyACTS.iread==1: print "Example of using PyPBLAS: PvSCAL" print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol print "Block's size:",PyACTS.mb,"*",PyACTS.nb x=reshape(array(range(n)),[n,1]) print "x=",transpose(x) alpha=2 else: x,alpha=None,None #We convert Numeric Array to PyACTS.Scalapack Array ACTS_lib=1 # 1=Scalapack x=Num2PyACTS(x,ACTS_lib) alpha=Scal2PyACTS(alpha,ACTS_lib) #We call PBLAS routine x= PyPBLAS.pvscal(alpha,x) if PyACTS.ictxt<>-1: print "x[",PyACTS.myrow,",",PyACTS.mycol,"]=",x.data #We convert PyACTS.Scalapack Array to Numerical Python x_num=PyACTS2Num(x) if PyACTS.iread==1: print "Resultado Global:" print "x'=",transpose(x_num) PyACTS.gridexit()
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvscal.py Example of using PyPBLAS: PvSCAL N= 8 ;nprow x npcol: 2 x 2 Block's size: 2 * 2 x= [ [0 1 2 3 4 5 6 7]] x[ 0 , 0 ]= [ 0. 2. 8. 10.] x[ 1 , 0 ]= [ 4. 6. 12. 14.] x[ 0 , 1 ]= zeros((0,), 'f') x[ 1 , 1 ]= zeros((0,), 'f') Resultado Global: x'= [ [ 0. 2. 4. 6. 8. 10. 12. 14.]]
[0,1,...,n-1]
) donde n
en este caso vale 8. Podemos observar como
cada proceso contiene una parte del resultado de la operación de
multiplicación y al ejecutar x_num=PyACTS2Num(x)
se obtiene la totalidad
del vector en el proceso en el que se cumple PyScaLAPACK.iread=1
(realizando
la lectura-escritura en un único proceso).
See Sobre este documento... para sugerencias en cambios.