#include <ulmblas/level3.h> #include <ulmblas/level2.h> // // BLAS Level 3 // //-- GEMM ---------------------------------------------------------------------- void dgemm_mv(int m, int n, int k, double alpha, const double *A, int incRowA, int incColA, const double *B, int incRowB, int incColB, double beta, double *C, int incRowC, int incColC) { int j; for (j=0; j<n; ++j) { dgemv(m, k, alpha, A, incRowA, incColA, &B[j*incColB], incRowB, beta, &C[j*incColC], incRowC); } } void dgemm_jil(int m, int n, int k, double alpha, const double *A, int incRowA, int incColA, const double *B, int incRowB, int incColB, double beta, double *C, int incRowC, int incColC) { int i, j, l; for (j=0; j<n; ++j) { for (i=0; i<m; ++i) { if (beta!=0) { C[i*incRowC+j*incColC] *= beta; } else { C[i*incRowC+j*incColC] = 0; } for (l=0; l<k; ++l) { C[i*incRowC+j*incColC] += alpha*A[i*incRowA+l*incColA] *B[l*incRowB+j*incColB]; } } } } void dgemm_jli(int m, int n, int k, double alpha, const double *A, int incRowA, int incColA, const double *B, int incRowB, int incColB, double beta, double *C, int incRowC, int incColC) { int i, j, l; for (j=0; j<n; ++j) { for (l=0; l<k; ++l) { for (i=0; i<m; ++i) { if (l==0) { if (beta!=0) { C[i*incRowC+j*incColC] *= beta; } else { C[i*incRowC+j*incColC] = 0; } } C[i*incRowC+j*incColC] += alpha*A[i*incRowA+l*incColA] *B[l*incRowB+j*incColB]; } } } } |