28  subroutine mxm(a,n1,b,n2,c,n3)
 
   29    integer, 
intent(in) :: n1, n2, n3
 
   30    real(kind=
rp), 
intent(in) :: a(n1, n2)
 
   31    real(kind=
rp), 
intent(in) :: b(n2, n3)
 
   32    real(kind=
rp), 
intent(inout) :: c(n1, n3)
 
 
   43    integer, 
intent(in) :: n1, n2, n3
 
   44    real(kind=
sp), 
intent(in) :: a(n1, n2)
 
   45    real(kind=
sp), 
intent(in) :: b(n2, n3)
 
   46    real(kind=
sp), 
intent(inout) :: c(n1, n3)
 
   48    call sgemm(
'N',
'N',n1,n3,n2,1.0,a,n1,b,n2,0.0,c,n1)
 
 
   53    integer, 
intent(in) :: n1, n2, n3
 
   54    real(kind=
dp), 
intent(in) :: a(n1, n2)
 
   55    real(kind=
dp), 
intent(in) :: b(n2, n3)
 
   56    real(kind=
dp), 
intent(inout) :: c(n1, n3)
 
   58    call dgemm(
'N',
'N',n1,n3,n2,1d0,a,n1,b,n2,0d0,c,n1)
 
 
   63    integer, 
intent(in) :: n1, n2, n3
 
   64    real(kind=
qp), 
intent(in) :: a(n1, n2)
 
   65    real(kind=
qp), 
intent(in) :: b(n2, n3)
 
   66    real(kind=
qp), 
intent(inout) :: c(n1, n3)
 
 
   73    integer, 
intent(in) :: n1, n2, n3
 
   74    real(kind=
sp), 
intent(in) :: a(n1, n2)
 
   75    real(kind=
sp), 
intent(in) :: b(n2, n3)
 
   76    real(kind=
sp), 
intent(inout) :: c(n1, n3)
 
   78    type(libxsmm_smmfunction) :: xmm
 
   80    call libxsmm_dispatch(xmm, n1, n3, n2, &
 
   81         alpha=1.0, beta=0.0, prefetch=libxsmm_prefetch)
 
   82    if (libxsmm_available(xmm)) 
then 
   83       call libxsmm_smmcall_abc(xmm, a, b, c)
 
 
   90    integer, 
intent(in) :: n1, n2, n3
 
   91    real(kind=
dp), 
intent(in) :: a(n1, n2)
 
   92    real(kind=
dp), 
intent(in) :: b(n2, n3)
 
   93    real(kind=
dp), 
intent(inout) :: c(n1, n3)
 
   95    type(libxsmm_dmmfunction) :: xmm
 
   97    call libxsmm_dispatch(xmm, n1, n3, n2, &
 
   98         alpha=1d0, beta=0d0, prefetch=libxsmm_prefetch)
 
   99    if (libxsmm_available(xmm)) 
then 
  100       call libxsmm_dmmcall_abc(xmm, a, b, c)
 
 
  107    integer, 
intent(in) :: n1, n2, n3
 
  108    real(kind=
qp), 
intent(in) :: a(n1, n2)
 
  109    real(kind=
qp), 
intent(in) :: b(n2, n3)
 
  110    real(kind=
qp), 
intent(inout) :: c(n1, n3)
 
 
Wrapper for all matrix-matrix product implementations.
 
subroutine, private mxm_blas_sp(a, n1, b, n2, c, n3)
 
subroutine, private mxm_libxsmm_dp(a, n1, b, n2, c, n3)
 
subroutine, private mxm_blas_dp(a, n1, b, n2, c, n3)
 
subroutine, private mxm_libxsmm_sp(a, n1, b, n2, c, n3)
 
subroutine, private mxm_blas_qp(a, n1, b, n2, c, n3)
 
subroutine, public mxm(a, n1, b, n2, c, n3)
Compute matrix-matrix product  for contiguously packed matrices A,B, and C.
 
subroutine, private mxm_libxsmm_qp(a, n1, b, n2, c, n3)
 
integer, parameter, public qp
 
integer, parameter, public dp
 
integer, parameter, public sp
 
integer, parameter, public rp
Global precision used in computations.