date: 2022-08-22 14:34:18

tags:

cblas_dgemm参数详解

[dragon](mailto: wauqas@gmail.com) 22-8-15

代码

#include <cblas.h>
#include <stdio.h>

int main()
{
  int i = 0;
  double A[6] = {1.0, 10.0, 20.0, 30.0, 40.0, 50.0};
  double B[6] = {1.0, 10.0, 20.0, 30.0, 40.0, 60.0};
  double C[9] = {.5, .5, .5, .5, .5, .5, .5, .5, .5};
  cblas_dgemm(CblasColMajor, CblasNoTrans, CblasTrans, \
              3, 3, 2, 1, A, 3, B, 3, 0, C, 3);
  for (int j = 0; j < 3; j++)
  {
    for (i = 0; i < 3; i++)
      printf("%lf ", C[i*3+j]);
    printf("\n");
  }
  return 0;
}

解释

void cblas_dgemm(
    	OPENBLAS_CONST enum CBLAS_ORDER Order, //行列主序
        OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, //矩阵A转置
        OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, //矩阵B转置
        OPENBLAS_CONST blasint M, //op(A)的行数
        OPENBLAS_CONST blasint N, //op(B)的列数
        OPENBLAS_CONST blasint K, //op(A)的列数和op(B)的行数
        OPENBLAS_CONST double alpha, //A的缩放
        OPENBLAS_CONST double *A, //matrix A
        OPENBLAS_CONST blasint lda, //A的第一维度,跟主序有关
       	OPENBLAS_CONST double *B, //matrix B
        OPENBLAS_CONST blasint ldb, //B的第一维度
        OPENBLAS_CONST double beta, //C 的缩放
        double *C, //matrix C
        OPENBLAS_CONST blasint ldc //C的第一维度
);

最终结果为$C=alpha*op(A)op(B)+betaC$