深度学习中GEMM的前世今生

BLAS简介

BLAS全称是Basic Linear Algebra Subprograms是规定了一套低级的执行常见线性代数操作的规范。其实现经常针对特殊的机器进行优化,比较著名的·BLAS库有ACML, ATLAS, MKL, OpenBLAS。许多常见的数值软件均采用兼容BLAS规范的实现库来进行线性代数计算,比如Matlab, Numpy, Mathematica`。

其中,Level 1 BLAS主要提供向量操作


Level 2 BLAS提供矩阵向量操作(gemv)
gemv

Level 3 BLAS则提供广义矩阵乘积操作(gemm)
gemm

GEMM在深度学习中是十分重要的,全连接层以及卷积层基本上都是通过GEMM来实现的,而网络中大约90%的运算都是在这两层中。而一个良好的GEMM的实现可以充分利用系统的多级存储结构程序执行的局部性来充分加速运算。

gemm接口解析

gemm的函数接口如下图所示,darknet中也采用了类似的接口设计。

sgemm

其中,A,B,C分别是MxK, KxN, MxN的矩阵,TRANSA, TRANSB, TRANSC表示是否使用对应矩阵的转置,ALPHA, BETA为对应的系数。而LDA, LDB, LDC表示对应矩阵的leading dimension,即第一维度的大小。根据我的理解(结合darknet的源码),是因为在内存中是连续存放的,而这个leading dimension的量是用来定义元素的位置的,即add(A[i, j])=A+i*lda+j。其中sgemm中的s表示是单精度的运算,类似的,还有dgemm

BLAS sgemm()的实现

*           Form  C := alpha*A**T*B**T + beta*C
*
              DO 200 J = 1,N
                  DO 190 I = 1,M
                      TEMP = ZERO
                      DO 180 L = 1,K
                          TEMP = TEMP + A(L,I)*B(J,L)
  180                 CONTINUE
                      IF (BETA.EQ.ZERO) THEN
                          C(I,J) = ALPHA*TEMP
                      ELSE
                          C(I,J) = ALPHA*TEMP + BETA*C(I,J)
                      END IF
  190             CONTINUE
  200         CONTINUE

上述代码是Fortran语言,三篇有关于BLAS的论文也都是用的Fortran语言写的,在官网上也提供C的接口,但是是直接调用的Fortran编写的程序。

参考文献

  1. Basic Linear Algebra Subprograms-WikiPeia
  2. Dongarra J J, Croz J D, Hammarling S, et al. A set of level 3 basic linear algebra subprograms[J]. Acm Transactions on Mathematical Software, 1990, 16(1):1-17.
  3. Why gemm is at the heart of deep learning
  4. sgemm 官方文档
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数理逻辑、数学理论 代数 数论 组合数学 数学分析 微积分 几何学 拓扑学 数理逻辑、数学理论 alt.math....
    光剑书架上的书阅读 5,454评论 1 89
  • 在上一篇中我们介绍了一个非常实用的工具 mpipool,下面我们将简要地介绍并行分布式线性代数运算工具 ScaLA...
    自可乐阅读 6,168评论 2 4
  • 正则表达式引擎 分类: DFA: Deterministic Finite Automaton,确定型有穷自动机 ...
    流年扶苏阅读 772评论 0 0
  • Supplier: Floor Station Add: 7/5-7 braeside drive,braesid...
    JosephCheung阅读 238评论 0 0
  • 今天是父亲节,下午我去画画。我画的主题是一件西装,老师用一张白纸折成一件衣服,然后用自己喜欢的彩纸剪成长长...
    吴广泽阅读 102评论 0 0