详解矩阵乘优化方法

矩阵乘法在深度学习中应用十分广泛,记录一下常见的矩阵乘法

常规方法

行乘列后相加

时间复杂度(n^2)

卷积优化

假设使用橙色矩阵作为Filter,蓝色为input特征图

使用卷积后会得到后面的图

但是通过对卷积核和输入特征图进行重新排列,可以将卷积操作转换成矩阵乘法。卷积核被展开成行向量,输入特征图也被转换为矩阵

卷积操作可以通过滑动窗口完成,但也可以通过重新排列成矩阵乘法的形式来加速计算。

Tiling技术

由于GPU中的 Global Memory 慢而 Shared Memory 快,通过将数据从 Global Memory 加载到 Shared Memory 中可以减少访问延迟,从而加快计算。

原理

将矩阵分成多个k*k的小块,在分布计算中,先将所需的块从GlobalMemory中加载到SharedMemory然后计算。

减少内存访问次数:假设每个块的大小是  K \times K ,那么通过将整个数据块加载到 Shared Memory 并反复使用,可以将 Global Memory 的访问次数减少  K  倍。这种方式可以有效降低内存访问延迟,提高数据重用率。

下图展示在GPU上使用矩阵乘时,通常将矩阵划分成多个小块(Tiles),每个块由多个线程来处理。每个线程块中的线程会将对应的小块数据加载到 Shared Memory 中,以减少对 Global Memory 的访问。这样可以加速计算,特别是对于大矩阵的乘法。

GEMM通用矩阵乘

通过将内存的复用来优化矩阵乘

AI算法基础 [12]:GEMM优化 | 旭穹の陋室

通用矩阵乘(GEMM)优化算法 | 黎明灰烬 博客

实现技术

1. Loop 循环优化 (Loop tiling)

2. 多级缓存 (memory hierarchy)

看图可知:

A先按照列分块,后按行分块后输入到L2cache中

B先按行分块输入到L3cache中,后按列分块,以此取到L1cache中进行计算

计算结果输出到寄存器中保存。

  1. Macro-Kernel(宏内核): Macro-kernel 是指高级别的循环结构,负责管理多个 micro-kernel 的执行。在矩阵乘法中,它通常用于处理大规模的矩阵计算,例如管理整个矩阵乘法的批处理过程。
  2. Micro-Kernel(微内核): Micro-kernel 是指低级别的循环结构,负责执行实际的矩阵乘法操作。它通常用于管理单个矩阵块的计算,以实现更细粒度的并行化和优化。

 参考

一文理清GPU工作原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值