c= PyPBLAS.pvgemm(alpha,a,b,beta,c,[transa='N',transb='N'])
La función "PyPBLAS.pvgemm" implementa la siguiente operación entre matrices:
Donde
depende del valor del parámetro "trans":
trans='N': No se se realiza ninguna operación sobre la matriz.
trans='T': Se realiza la transpuesta de trans='C': Se realiza la transpuesta conjugada de
En el caso que las dimensiones de alguna de las entradas no sea correcta, la
rutina PyPBLASpvgemm informará de ello y no podrá finalizar la
operación.
Esta rutina se provee únicamente para matrices con elementos de tipo complejo. Las características de cada uno de los parámetros son las siguientes:
Parametros de Entrada
a:
uplo='N':No transpuesta, es decir, no se realiza operación.(valor
por defecto)
uplo='T':Transpuesta.
uplo='H': Transpuesta conjugada.
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
m,n,k=8,8,6
#Initiliaze the Grid
PyACTS.gridinit()
if PyACTS.iread==1:
print "Example of using PyPBLAS 3: PvGEMM"
print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
print "Block's size:",PyACTS.mb,"*",PyACTS.nb
a=reshape(range(m*k),[m,k])
print "a=",a
b=reshape(range(k*n),[k,n])
print "b=",b
c=reshape(range(m*n),[m,n])
print "c=",c
alpha=2.
beta=3.
print "alpha=",alpha,";","beta=",beta
else:
alpha,a,b,beta,c=None,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)
b=Num2PyACTS(b,ACTS_lib)
c=Num2PyACTS(c,ACTS_lib)
#We call PBLAS routine
a= PyPBLAS.pvgemm(alpha,a,b,beta,c)
a_num=PyACTS2Num(a)
if PyACTS.iread==1:
print "PvGEMM=",transpose(a_num)
PyACTS.gridexit()
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvgemm.py Example of using PyPBLAS 3: PvGEMM N= 8 ;nprow x npcol: 2 x 2 Block's size: 2 * 2 a= [[ 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] [36 37 38 39 40 41] [42 43 44 45 46 47]] b= [[ 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 36 37 38 39] [40 41 42 43 44 45 46 47]] 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 36 37 38 39] [40 41 42 43 44 45 46 47] [48 49 50 51 52 53 54 55] [56 57 58 59 60 61 62 63]] alpha= 2.0 ; beta= 3.0 PvGEMM= [[ 880. 2344. 3808. 5272. 6736. 8200. 9664. 11128.] [ 913. 2449. 3985. 5521. 7057. 8593. 10129. 11665.] [ 946. 2554. 4162. 5770. 7378. 8986. 10594. 12202.] [ 979. 2659. 4339. 6019. 7699. 9379. 11059. 12739.] [ 1012. 2764. 4516. 6268. 8020. 9772. 11524. 13276.] [ 1045. 2869. 4693. 6517. 8341. 10165. 11989. 13813.] [ 1078. 2974. 4870. 6766. 8662. 10558. 12454. 14350.] [ 1111. 3079. 5047. 7015. 8983. 10951. 12919. 14887.]]
Los paramentros transa, y transb indican la operación a realizar
sobre las matrices a y b, respectivamente tal y como se ha
detallado anteriormente.
Estos parámetros son opcionales, el valor por defector es "N", es decir,
no realiza ninguna operación sobre la matriz correspondiente. En el caso que,
por ejemplo quisieramos realizar el cálculo con la transpuesta de b la
forma de llamar a la rutina sería:
c=PyPBLAS.pvgemm(alpha,a,b,beta,c,transb='T')
See Sobre este documento... para sugerencias en cambios.