8.3.2 pvscal

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:

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 . Un ejemplo de la utilización de esta función sería el siguiente:

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()
El resultado que obtenemos sería el siguiente:
[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.]]
En este ejemplo vemos que el vector generado es un vector de n elementos ([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.