本文参考 Why GEMM is at the heart of deep learning
BLAS的全称是基础线性代数子程序库(Basic Linear Algebra Subprograms),提供了一些低层次的通用线性代数运算的实现函数,如向量的相加,数乘,点积和矩阵相乘等。BLAS的实现根绝硬件平台的不同而不同,常常利用了特定处理器的硬件特点进行加速计算(例如处理器上的向量寄存器和SIMD指令集),提供了C和Fortran语言支持。
不同的厂商根据自己硬件的特点,在BLAS的统一框架下,开发了自己的加速库,Intel的MKL,ATLAS和OpenBLAS。其中后面的三个均可以在Caffe中配置使用。
在BLAS中,实现了矩阵与矩阵相乘的函数gemm(GEMM: General Matrix to Matrix Multiplication)和矩阵和向量相乘的函数gemv,这两个数学运算的高效实现,关系到整个DL 框架的运算速度。
可以看到,在前向计算过程中,无论是CPU还是GPU,大量时间都花在了卷积层和全连接层上。
全连接层
对于全连接层的操作为输出神经元需要和输入相乘并求和得出输出,其过程如下图所示