c=PyPBLAS.pvsyrk(alpha,a,beta,c[,uplo,trans])
La función "PyPBLAS.pvsyrk" implementa la siguiente operación entre matrices teniendo en cuenta que este tipo de matrices son simétricas:
PyPBLASpvsyrk informará de ello y no podrá finalizar la
operación.
Esta rutina se provee para matrices simétricas con elementos de tipo real o
complejo. Un detalle importante en esta rutina es la suposición que las
matrices de entrada son simétricas, de este modo se realizan los cálculos
con la parte superior (o inferior) a la diagonal. El resultado válido en la
matriz devuelta por la función será el situado en la posición que le
indiquemos a través del parámetro uplo.
Las características de cada uno de los parámetros son las siguientes:
Parametros de Entrada
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.
a:
trans='N': (Valor por defecto).No se realiza la transpuesta y la
operación que se lleva a cabo es :
trans='T': Se realiza la transpuesta y la operación que se lleva a
cabo es :
Parametros de Salida
A continuación mostramos un ejemplo en la utilización de esta rutina:
from PyACTS import *
import PyACTS.PyPBLAS as PyPBLAS
from RandomArray import *
from Numeric import *
#Dimension of Arrays
n,k=6,6
#Initiliaze the Grid
PyACTS.gridinit()
if PyACTS.iread==1:
print "Example of using PyPBLAS 3: PvSYRK"
print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
print "Block's size:",PyACTS.mb,"*",PyACTS.nb
a=ones([n,k])
print "a=",a
c=reshape(range(n*n),[n,n])
print "c=",c
alpha,beta=2.,3.
print "alpha=",alpha,";","beta=",beta
else:
alpha,a,beta,c=None,None,None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
alpha=Scal2PyACTS(alpha,ACTS_lib)
beta=Scal2PyACTS(beta,ACTS_lib)
a=Num2PyACTS(a,ACTS_lib)
c=Num2PyACTS(c,ACTS_lib)
#We call PBLAS routine
c= PyPBLAS.pvsyrk(alpha,a,beta,c)
c_num=PyACTS2Num(c)
if PyACTS.iread==1:
print "PvSYRK=",transpose(c_num)
PyACTS.gridexit()
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvsyrk.py Example of using PyPBLAS 3: PvSYRK N= 6 ;nprow x npcol: 2 x 2 Block's size: 2 * 2 a= [[1 1 1 1 1 1] [1 1 1 1 1 1] [1 1 1 1 1 1] [1 1 1 1 1 1] [1 1 1 1 1 1] [1 1 1 1 1 1]] c= [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23] [24 25 26 27 28 29] [30 31 32 33 34 35]] alpha= 2.0 ; beta= 3.0 PvSYRK= [[ 12. 6. 12. 18. 24. 30.] [ 15. 33. 13. 19. 25. 31.] [ 18. 36. 54. 20. 26. 32.] [ 21. 39. 57. 75. 27. 33.] [ 24. 42. 60. 78. 96. 34.] [ 27. 45. 63. 81. 99. 117.]]
a y c lo son y el resultado de la
operación descrita ha de genera una matriz simétrica. Como por defecto
uplo='U', el resultado es una matriz simétrica con los valores
correctos situados en y por encima de la diagonal.
Si ejecutaramos c,descc=PyPBLAS.pvsyrk(alpha,a,beta,c,uplo='L'),
podríamos comprobar que los valores correctos se obtienen en y por debajo de
la diagonal principal.
See Sobre este documento... para sugerencias en cambios.