mirror of
https://github.com/TREX-CoE/qmckl.git
synced 2024-11-19 12:32:40 +01:00
8.4 KiB
8.4 KiB
BLAS functions
Matrix operations
qmckl_dgemm
Matrix multiply l$C_{ij} = \beta C_{ij} + \alpha \sum_{k} A_{ik} \cdot B_{kj}$ using Fortran matmul
function.
TODO: Add description about the external library dependence.
qmckl_context | context | in | Global state |
bool | TransA | in | Number of rows of the input matrix |
bool | TransB | in | Number of rows of the input matrix |
int64_t | m | in | Number of rows of the input matrix |
int64_t | n | in | Number of columns of the input matrix |
int64_t | k | in | Number of columns of the input matrix |
double | alpha | in | Number of columns of the input matrix |
double | A[][lda] | in | Array containing the $m \times n$ matrix $A$ |
int64_t | lda | in | Leading dimension of array A |
double | B[][ldb] | in | Array containing the $n \times m$ matrix $B$ |
int64_t | ldb | in | Leading dimension of array B |
double | beta | in | Array containing the $n \times m$ matrix $B$ |
double | C[][ldc] | out | Array containing the $n \times m$ matrix $B$ |
int64_t | ldc | in | Leading dimension of array B |
Requirements
context
is notQMCKL_NULL_CONTEXT
m > 0
n > 0
k > 0
lda >= m
ldb >= n
ldc >= n
A
is allocated with at least $m \times k \times 8$ bytesB
is allocated with at least $k \times n \times 8$ bytesC
is allocated with at least $m \times n \times 8$ bytes
C header
qmckl_exit_code qmckl_dgemm (
const qmckl_context context,
const bool TransA,
const bool TransB,
const int64_t m,
const int64_t n,
const int64_t k,
const double alpha,
const double* A,
const int64_t lda,
const double* B,
const int64_t ldb,
const double beta,
double* const C,
const int64_t ldc );
Source
integer function qmckl_dgemm_f(context, TransA, TransB, m, n, k, alpha, A, LDA, B, LDB, beta, C, LDC) &
result(info)
use qmckl
implicit none
integer(qmckl_context) , intent(in) :: context
logical*8 , intent(in) :: TransA, TransN
integer*8 , intent(in) :: m, n, k
integer*8 , intent(in) :: lda
real*8 , intent(in) :: A(lda,*)
integer*8 , intent(in) :: ldb
real*8 , intent(in) :: B(ldb,*)
integer*8 , intent(in) :: ldc
real*8 , intent(out) :: C(ldc,*)
integer*8 :: i,j
info = QMCKL_SUCCESS
if (context == QMCKL_NULL_CONTEXT) then
info = QMCKL_INVALID_CONTEXT
return
endif
if (m <= 0_8) then
info = QMCKL_INVALID_ARG_4
return
endif
if (n <= 0_8) then
info = QMCKL_INVALID_ARG_5
return
endif
if (k <= 0_8) then
info = QMCKL_INVALID_ARG_6
return
endif
if (LDA < m) then
info = QMCKL_INVALID_ARG_9
return
endif
if (LDB < n) then
info = QMCKL_INVALID_ARG_10
return
endif
if (LDB < n) then
info = QMCKL_INVALID_ARG_13
return
endif
C = matmul(A,B)
end function qmckl_dgemm_f